diff --git a/.dockerignore b/.dockerignore index 5c69ffc54..386c86a71 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,6 @@ node_modules -/dist/* -!/dist/dashboard +/dist logs +c2d_storage .env.local .env \ No newline at end of file diff --git a/.env.example b/.env.example index 264e0dfdc..16e6c68c7 100644 --- a/.env.example +++ b/.env.example @@ -20,17 +20,25 @@ export FEE_AMOUNT= export ADDRESS_FILE= export NODE_ENV= export AUTHORIZED_DECRYPTERS= +export AUTHORIZED_DECRYPTERS_LIST= export OPERATOR_SERVICE_URL= +export POLICY_SERVER_URL export INTERFACES= export ALLOWED_VALIDATORS= +export ALLOWED_VALIDATORS_LIST= +export AUTHORIZED_PUBLISHERS= +export AUTHORIZED_PUBLISHERS_LIST= export INDEXER_INTERVAL= export ALLOWED_ADMINS= -export DASHBOARD=true +export ALLOWED_ADMINS_LIST= +export CONTROL_PANEL=true export RATE_DENY_LIST= -export MAX_REQ_PER_SECOND= +export MAX_REQ_PER_MINUTE= export MAX_CHECKSUM_LENGTH= export LOG_LEVEL= export HTTP_API_PORT= +export VALIDATE_UNSIGNED_DDO= +export JWT_SECRET= ## p2p @@ -55,4 +63,9 @@ export P2P_ENABLE_AUTONAT= export P2P_ENABLE_CIRCUIT_RELAY_SERVER= export P2P_ENABLE_CIRCUIT_RELAY_CLIENT= export P2P_BOOTSTRAP_NODES= -export P2P_FILTER_ANNOUNCED_ADDRESSES= \ No newline at end of file +export P2P_FILTER_ANNOUNCED_ADDRESSES= + +## compute +export DOCKER_COMPUTE_ENVIRONMENTS= + + diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d980860e6..bd625b872 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @alexcos20 \ No newline at end of file +- @alexcos20 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 72e8444fc..a681e7277 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 'v20.16.0' + node-version: 'v20.19.0' - name: Cache node_modules uses: actions/cache@v3 env: @@ -42,7 +42,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - node: ['18.20.4', 'v20.16.0', 'v22.5.1'] + node: ['18.20.4', 'v20.19.0', 'v22.5.1'] steps: - uses: actions/checkout@v4 @@ -66,7 +66,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 'v20.16.0' + node-version: 'v20.19.0' - name: Cache node_modules uses: actions/cache@v3 env: @@ -100,7 +100,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 'v20.16.0' + node-version: 'v20.19.0' - name: Cache node_modules uses: actions/cache@v3 env: @@ -126,36 +126,27 @@ jobs: - name: Run Barge working-directory: ${{ github.workspace }}/barge run: | - bash -x start_ocean.sh --no-aquarius --no-provider --no-dashboard --with-c2d --with-typesense 2>&1 > start_ocean.log & + bash -x start_ocean.sh --no-node --with-typesense 2>&1 > start_ocean.log & - run: npm ci - run: npm run build - run: docker image ls - name: Delete default runner images run: | - docker image rm node:20 - docker image rm node:20-alpine - docker image rm node:18 - docker image rm node:18-alpine - docker image rm debian:10 - docker image rm debian:11 - docker image rm ubuntu:22.04 - docker image rm ubuntu:20.04 - docker image rm moby/buildkit:latest rm -rf /usr/share/swift/ - - name: Wait for contracts deployment and C2D cluster to be ready + - name: Wait for contracts deployment working-directory: ${{ github.workspace }}/barge run: | for i in $(seq 1 250); do - sleep 10 - [ -f "$HOME/.ocean/ocean-contracts/artifacts/ready" -a -f "$HOME/.ocean/ocean-c2d/ready" ] && break + sleep 5 + [ -f "$HOME/.ocean/ocean-contracts/artifacts/ready" ] && break done - name: docker logs - run: docker logs ocean-ocean-contracts-1 && docker logs ocean-kindcluster-1 && docker logs ocean-computetodata-1 && docker logs ocean-typesense-1 + run: docker logs ocean-ocean-contracts-1 && docker logs ocean-typesense-1 if: ${{ failure() }} - name: integration tests run: npm run test:integration:cover env: - OPERATOR_SERVICE_URL: '["http://172.15.0.13:31000"]' + # OPERATOR_SERVICE_URL: '["http://172.15.0.13:31000"]' PRIVATE_KEY: ${{ secrets.NODE1_PRIVATE_KEY }} NODE1_PRIVATE_KEY: ${{ secrets.NODE1_PRIVATE_KEY }} NODE2_PRIVATE_KEY: ${{ secrets.NODE2_PRIVATE_KEY }} @@ -170,7 +161,7 @@ jobs: ASSET_PURGATORY_URL: 'https://raw.githubusercontent.com/oceanprotocol/list-purgatory/main/list-assets.json' ACCOUNT_PURGATORY_URL: 'https://raw.githubusercontent.com/oceanprotocol/list-purgatory/main/list-accounts.json' - name: docker logs - run: docker logs ocean-ocean-contracts-1 && docker logs ocean-kindcluster-1 && docker logs ocean-computetodata-1 && docker logs ocean-typesense-1 + run: docker logs ocean-ocean-contracts-1 && docker logs ocean-typesense-1 if: ${{ failure() }} - uses: actions/upload-artifact@v4 with: @@ -187,7 +178,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 'v20.16.0' + node-version: 'v20.19.0' - name: Cache node_modules uses: actions/cache@v3 @@ -206,7 +197,6 @@ jobs: with: repository: 'oceanprotocol/barge' path: 'barge' - - name: Login to Docker Hub if: ${{ env.DOCKERHUB_PASSWORD && env.DOCKERHUB_USERNAME }} run: | @@ -219,22 +209,12 @@ jobs: - name: Run Barge working-directory: ${{ github.workspace }}/barge run: | - bash -x start_ocean.sh --no-aquarius --no-provider --no-dashboard --with-c2d --with-typesense 2>&1 > start_ocean.log & - + bash -x start_ocean.sh --no-node --with-typesense 2>&1 > start_ocean.log & - run: npm ci - run: npm run build - run: docker image ls - name: Delete default runner images run: | - docker image rm node:20 - docker image rm node:20-alpine - docker image rm node:18 - docker image rm node:18-alpine - docker image rm debian:10 - docker image rm debian:11 - docker image rm ubuntu:22.04 - docker image rm ubuntu:20.04 - docker image rm moby/buildkit:latest rm -rf /usr/share/swift/ - name: Wait for contracts deployment and C2D cluster to be ready @@ -242,11 +222,11 @@ jobs: run: | for i in $(seq 1 250); do sleep 10 - [ -f "$HOME/.ocean/ocean-contracts/artifacts/ready" -a -f "$HOME/.ocean/ocean-c2d/ready" ] && break + [ -f "$HOME/.ocean/ocean-contracts/artifacts/ready" ] && break done - name: docker logs - run: docker logs ocean-ocean-contracts-1 && docker logs ocean-kindcluster-1 && docker logs ocean-computetodata-1 && docker logs ocean-typesense-1 + run: docker logs ocean-contracts-1 && docker logs ocean-typesense-1 if: ${{ failure() }} - name: Checkout Ocean Node @@ -261,7 +241,7 @@ jobs: run: | npm ci npm run build - npm run start & + npm run start > ocean-node.log 2>&1 & env: PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }} IPFS_GATEWAY: http://172.15.0.16:8080/ @@ -278,6 +258,9 @@ jobs: P2P_ENABLE_AUTONAT: 'false' ALLOWED_ADMINS: '["0xe2DD09d719Da89e5a3D0F2549c7E24566e947260"]' DB_TYPE: 'elasticsearch' + MAX_REQ_PER_MINUTE: 320 + MAX_CONNECTIONS_PER_MINUTE: 320 + DOCKER_COMPUTE_ENVIRONMENTS: '[{"socketPath":"/var/run/docker.sock","resources":[{"id":"disk","total":10}],"storageExpiry":604800,"maxJobDuration":3600,"fees":{"8996":[{"prices":[{"id":"cpu","price":1}]}]},"free":{"maxJobDuration":60,"maxJobs":3,"resources":[{"id":"cpu","max":1},{"id":"ram","max":1},{"id":"disk","max":1}]}}]' - name: Check Ocean Node is running run: | for i in $(seq 1 90); do @@ -294,7 +277,6 @@ jobs: with: repository: 'oceanprotocol/ocean-cli' path: 'ocean-cli' - ref: 'main' - name: Setup Ocean CLI working-directory: ${{ github.workspace }}/ocean-cli run: | @@ -303,3 +285,39 @@ jobs: - name: Run system tests working-directory: ${{ github.workspace }}/ocean-cli run: npm run test:system + env: + AVOID_LOOP_RUN: true + - name: Show Ocean Node logs on failure + if: failure() + working-directory: ${{ github.workspace }}/ocean-node + run: | + echo "=== Ocean Node Logs ===" + if [ -f ocean-node.log ]; then + cat ocean-node.log + else + echo "No ocean-node.log file found" + fi + echo "=== Docker Logs ===" + docker logs ocean-contracts-1 || echo "No ocean-contracts-1 container" + docker logs ocean-typesense-1 || echo "No ocean-typesense-1 container" + echo "=== System Processes ===" + ps aux | grep -E "(node|ocean)" || echo "No node/ocean processes found" + + control_panel_build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 'v20.19.0' + - name: Cache node_modules + uses: actions/cache@v3 + env: + cache-name: cache-node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-control-panel-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: ${{ runner.os }}-control-panel-${{ env.cache-name }}- + - run: npm ci + - name: Build control panel + run: npm run build:controlpanel diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 0fb699baf..4fa276866 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -14,13 +14,14 @@ on: jobs: build: runs-on: ubuntu-latest + if: ${{ github.actor != 'dependabot[bot]' }} strategy: fail-fast: false matrix: platform: - linux/amd64 - - linux/arm64 - - linux/arm/v7 + # - linux/arm64 + # - linux/arm/v7 steps: - name: Prepare run: | @@ -38,11 +39,11 @@ jobs: uses: docker/setup-buildx-action@v3 with: platforms: ${{ matrix.platform }} - #- name: Login to Docker Hub - # uses: docker/login-action@v1 - # with: - # username: ${{ secrets.DOCKERHUB_USERNAME }} - # password: ${{ secrets.DOCKER_PUSH_TOKEN }} + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKER_PUSH_TOKEN }} - name: Set Docker metadata id: ocean_node_meta @@ -81,3 +82,45 @@ jobs: path: /tmp/digests/* if-no-files-found: error retention-days: 1 + + merge: + runs-on: ubuntu-latest + if: ${{ github.actor != 'dependabot[bot]' }} + needs: + - build + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Set Docker metadata + id: ocean_node_meta + uses: docker/metadata-action@v5 + with: + images: | + ocnenterprise/ocean-node + # generate Docker tags based on the following events/attributes + tags: | + type=ref,event=branch + type=semver,pattern={{version}} + type=ref,event=pr + # type=semver,pattern={{major}}.{{minor}} + # type=semver,pattern={{major}} + # type=sha + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKER_PUSH_TOKEN }} + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf 'ocnenterprise/ocean-node@sha256:%s ' *) + - name: Inspect image + run: | + docker buildx imagetools inspect ocnenterprise/ocean-node:${{ steps.ocean_node_meta.outputs.version }} diff --git a/.gitignore b/.gitignore index a14357002..203f0ecd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ -# Dahsboard -dashboard/.env +# Control panel +controlpanel/.env + +# Docker compose +**/docker-compose.yml # Logs logs @@ -94,7 +97,7 @@ out .nuxt /dist/* -!/dist/dashboard +!/dist/controlpanel # Gatsby files .cache/ @@ -155,3 +158,4 @@ html-report.html # databases *.sqlite databases/* +c2d_storage/* diff --git a/.nvmrc b/.nvmrc index b427e2ae2..3bf34c276 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.16.0 \ No newline at end of file +v20.19.0 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 123905f44..3013c787e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,99 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v0.2.3](https://github.com/oceanprotocol/ocean-node/compare/v0.2.1...v0.2.3) + +- Update node script - C2D [`#896`](https://github.com/oceanprotocol/ocean-node/pull/896) +- fix docker-compose [`#895`](https://github.com/oceanprotocol/ocean-node/pull/895) +- re-indexing old DDOs [`#867`](https://github.com/oceanprotocol/ocean-node/pull/867) +- Upgrade tsx dep to v4.x [`#893`](https://github.com/oceanprotocol/ocean-node/pull/893) +- C2D Docker [`#705`](https://github.com/oceanprotocol/ocean-node/pull/705) +- Updating codeowners [`#887`](https://github.com/oceanprotocol/ocean-node/pull/887) +- fix issue with empty nft fields [`#886`](https://github.com/oceanprotocol/ocean-node/pull/886) +- add allowed admins access list [`#841`](https://github.com/oceanprotocol/ocean-node/pull/841) +- Update error message for invalid peer connection [`#874`](https://github.com/oceanprotocol/ocean-node/pull/874) +- add AUTHORIZED_DECRYPTERS_LIST [`#836`](https://github.com/oceanprotocol/ocean-node/pull/836) +- fix status code if policy server not available [`#869`](https://github.com/oceanprotocol/ocean-node/pull/869) +- Fix DDO: Stats and Prices for exchanges/dispensers [`#774`](https://github.com/oceanprotocol/ocean-node/pull/774) +- move p2p getters as handlers [`#862`](https://github.com/oceanprotocol/ocean-node/pull/862) +- always check remote peerId [`#864`](https://github.com/oceanprotocol/ocean-node/pull/864) +- Test if dashboard changes are already committed [`#842`](https://github.com/oceanprotocol/ocean-node/pull/842) +- add AUTHORIZED_PUBLISHERS_*** env variables [`#826`](https://github.com/oceanprotocol/ocean-node/pull/826) +- Issue 814 credentials types [`#823`](https://github.com/oceanprotocol/ocean-node/pull/823) +- remove echo command [`#839`](https://github.com/oceanprotocol/ocean-node/pull/839) +- Issue 808 - new accesslist credentials type [`#819`](https://github.com/oceanprotocol/ocean-node/pull/819) +- add ALLOWED_VALIDATORS_LIST [`#829`](https://github.com/oceanprotocol/ocean-node/pull/829) +- update build files and hash [`#821`](https://github.com/oceanprotocol/ocean-node/pull/821) +- add * as match all rule for address types [`#837`](https://github.com/oceanprotocol/ocean-node/pull/837) +- fix: return correct message on policy server call [`#834`](https://github.com/oceanprotocol/ocean-node/pull/834) +- add policyServerPassthrough routes [`#832`](https://github.com/oceanprotocol/ocean-node/pull/832) +- Bump fast-xml-parser from 4.3.6 to 4.5.0 in /dashboard [`#711`](https://github.com/oceanprotocol/ocean-node/pull/711) +- Bump secp256k1 from 5.0.0 to 5.0.1 in /dashboard [`#725`](https://github.com/oceanprotocol/ocean-node/pull/725) +- Bump elliptic from 6.5.5 to 6.6.0 in /dashboard [`#746`](https://github.com/oceanprotocol/ocean-node/pull/746) +- Bump cross-spawn and aegir (UPDATE: delete deps) [`#757`](https://github.com/oceanprotocol/ocean-node/pull/757) +- fix corner case issue, cannot start indexing on ganache without ADDRESS_FILE [`#775`](https://github.com/oceanprotocol/ocean-node/pull/775) +- add findPeer & dht refactor [`#793`](https://github.com/oceanprotocol/ocean-node/pull/793) +- add support for identifyPush protocol [`#794`](https://github.com/oceanprotocol/ocean-node/pull/794) +- no need to store everything in peerStore [`#795`](https://github.com/oceanprotocol/ocean-node/pull/795) +- add multiAddrs for directCommand [`#796`](https://github.com/oceanprotocol/ocean-node/pull/796) +- Refactor connections rate, rate per minute instead of second [`#785`](https://github.com/oceanprotocol/ocean-node/pull/785) +- add missing check for ddo DB on republish ddos [`#789`](https://github.com/oceanprotocol/ocean-node/pull/789) +- recalculate code hash if needed [`#790`](https://github.com/oceanprotocol/ocean-node/pull/790) +- fix usage of getBoolEnvValue [`#784`](https://github.com/oceanprotocol/ocean-node/pull/784) +- refactor handlers interfaces [`37cbfa5`](https://github.com/oceanprotocol/ocean-node/commit/37cbfa5076d6b665d9ba524156a8f48a656fe93f) +- mv unit test to integration (need contracts deployment) [`7236ac5`](https://github.com/oceanprotocol/ocean-node/commit/7236ac5a603b2ef9c66ccf68a8a6d52acdb96855) +- refactor, move getAdmins fn to auth [`5ba8bd5`](https://github.com/oceanprotocol/ocean-node/commit/5ba8bd528286a5c18acda572a1ce6170672415e6) + +#### [v0.2.1](https://github.com/oceanprotocol/ocean-node/compare/v0.2.0...v0.2.1) + +> 5 December 2024 + +- have bootstrap config var [`#782`](https://github.com/oceanprotocol/ocean-node/pull/782) +- Removing unused express dependency from dashboard [`#761`](https://github.com/oceanprotocol/ocean-node/pull/761) +- check if rpcs and indexer_networks are aligned, log [`#750`](https://github.com/oceanprotocol/ocean-node/pull/750) +- remove node 16 image references [`#759`](https://github.com/oceanprotocol/ocean-node/pull/759) +- try debug and fix randomly logs failing test [`#752`](https://github.com/oceanprotocol/ocean-node/pull/752) +- fix dashboard hash out of sync [`#744`](https://github.com/oceanprotocol/ocean-node/pull/744) +- improve reindex command, optional block, also check if thread is running [`#747`](https://github.com/oceanprotocol/ocean-node/pull/747) +- Add cleaner logging when idexing and getting/updating block info from db [`#743`](https://github.com/oceanprotocol/ocean-node/pull/743) +- Add INDEXER_NETWORKS env var within CI job. [`#734`](https://github.com/oceanprotocol/ocean-node/pull/734) +- fix system tests. Running old version of node? [`#733`](https://github.com/oceanprotocol/ocean-node/pull/733) +- rm console.logs [`#731`](https://github.com/oceanprotocol/ocean-node/pull/731) +- fix wrong block for log [`#727`](https://github.com/oceanprotocol/ocean-node/pull/727) +- nonce db sql lite [`#723`](https://github.com/oceanprotocol/ocean-node/pull/723) +- Bump version axios 1.6.0 -> 1.7.4. [`#716`](https://github.com/oceanprotocol/ocean-node/pull/716) +- Bump version express 4.18.2 -> 4.21.0. [`#717`](https://github.com/oceanprotocol/ocean-node/pull/717) +- Feature/ add Elasticsearch database alternative for typesense [`#599`](https://github.com/oceanprotocol/ocean-node/pull/599) +- Database tests 2db [`#707`](https://github.com/oceanprotocol/ocean-node/pull/707) +- add credentials at service level, on schemas [`#710`](https://github.com/oceanprotocol/ocean-node/pull/710) +- Bump micromatch from 4.0.5 to 4.0.8 in /dashboard [`#649`](https://github.com/oceanprotocol/ocean-node/pull/649) +- Bump undici from 5.27.0 to 5.28.4 [`#610`](https://github.com/oceanprotocol/ocean-node/pull/610) +- testing changes [`#718`](https://github.com/oceanprotocol/ocean-node/pull/718) +- Policy Server [`#694`](https://github.com/oceanprotocol/ocean-node/pull/694) +- fix missing/invalid db_url log message, put warn at startup [`#654`](https://github.com/oceanprotocol/ocean-node/pull/654) +- move c2d engines under OceanNode class [`#702`](https://github.com/oceanprotocol/ocean-node/pull/702) +- improve error message, transfer fees and tweak node response [`#701`](https://github.com/oceanprotocol/ocean-node/pull/701) +- fix default filtered p2p ip list (non routable ips that should not be announced) [`#699`](https://github.com/oceanprotocol/ocean-node/pull/699) +- chore: add datatokenaddress in order table [`#700`](https://github.com/oceanprotocol/ocean-node/pull/700) +- fixing tests [`#703`](https://github.com/oceanprotocol/ocean-node/pull/703) +- Updating deprecated actions [`#681`](https://github.com/oceanprotocol/ocean-node/pull/681) +- add access control to service level [`#698`](https://github.com/oceanprotocol/ocean-node/pull/698) +- customize boostrap params [`#696`](https://github.com/oceanprotocol/ocean-node/pull/696) +- Issue 668 oasis decryption [`#679`](https://github.com/oceanprotocol/ocean-node/pull/679) +- Add max ram memory in node start cmd [`#697`](https://github.com/oceanprotocol/ocean-node/pull/697) +- Feature/add elasticdb search [`#695`](https://github.com/oceanprotocol/ocean-node/pull/695) +- fix: search and nonce [`#688`](https://github.com/oceanprotocol/ocean-node/pull/688) +- Issue 501 - C2D getJobStatus - did vs documentId vs agreementId [`#502`](https://github.com/oceanprotocol/ocean-node/pull/502) +- Feature/add elasticdb tvl [`#677`](https://github.com/oceanprotocol/ocean-node/pull/677) +- Renaming dashboard as Control Panel [`#674`](https://github.com/oceanprotocol/ocean-node/pull/674) +- add new schema + tests [`a648cb3`](https://github.com/oceanprotocol/ocean-node/commit/a648cb38df2dea537ca28e67ae4bf1113c9b287d) +- normalize responses [`584b6c0`](https://github.com/oceanprotocol/ocean-node/commit/584b6c09c67fb66fee7d0d01cca51693ea2a3723) +- first draft [`b3afc02`](https://github.com/oceanprotocol/ocean-node/commit/b3afc02219233af4026c43b886bf97c0a2edb323) + #### [v0.2.0](https://github.com/oceanprotocol/ocean-node/compare/v0.1.0...v0.2.0) +> 9 September 2024 + - Downgrade indexer errors [`#675`](https://github.com/oceanprotocol/ocean-node/pull/675) - Update system requirements: change iOS to macOS [`#673`](https://github.com/oceanprotocol/ocean-node/pull/673) - Fix crash on connection reset - P2P streams [`#659`](https://github.com/oceanprotocol/ocean-node/pull/659) diff --git a/Dockerfile b/Dockerfile index 85400da14..67a1fdbb7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ COPY .nvmrc /usr/src/app/ RUN rm /bin/sh && ln -s /bin/bash /bin/sh ENV NVM_DIR /usr/local/nvm RUN mkdir $NVM_DIR -ENV NODE_VERSION=v20.16.0 +ENV NODE_VERSION=v20.19.0 # Install nvm with node and npm RUN curl https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash \ && source $NVM_DIR/nvm.sh \ @@ -27,8 +27,8 @@ COPY . /usr/src/app WORKDIR /usr/src/app/ COPY --from=builder /usr/src/app/node_modules/ /usr/src/app/node_modules/ RUN npm run build -# Remove the dashboard folder to reduce the image size and avoid shipping development files -RUN rm -rf dashboard +# Remove the controlpanel folder to reduce the image size and avoid shipping development files +RUN rm -rf controlpanel ENV P2P_ipV4BindTcpPort=9000 EXPOSE 9000 ENV P2P_ipV4BindWsPort=9001 @@ -40,4 +40,4 @@ EXPOSE 9003 ENV HTTP_API_PORT=8000 EXPOSE 8000 ENV NODE_ENV='production' -CMD ["npm","run","start"] \ No newline at end of file +CMD ["npm","run","start"] diff --git a/README.md b/README.md index 0861e3650..705261d69 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,14 @@ export PRIVATE_KEY="0x_your_private_key_here" The `PRIVATE_KEY` is the only mandatory environmental variable, you must include the `0x` at the front of your private key. Additional configurations can be set as needed. For all available configurations, refer to the [Environment Variables](docs/env.md) documentation. +2.1. If the config is a JSON file, run: + +``` +export CONFIG_PATH='' +``` + +Config file should be absolute path. + 3. Quick start the Ocean Node with PM2 ```bash @@ -137,5 +145,18 @@ Your node is now running, the control panel will be available at `http://localho - [Testing Guide](docs/testing.md) - [Network Configuration](docs/networking.md) - [Logging & accessing logs](docs/networking.md) -- [Control Panel: Local development](dashboard/README.md) +- [Control Panel: Local development](controlpanel/README.md) - [Docker Deployment Guide](docs/dockerDeployment.md) +- [C2D GPU Guide](docs/GPU.md) + +## Control Panel + +The control panel is available at `http://localhost:8000/controlpanel/` when your node is running. The built files are included in the distribution, so you **don't need to rebuild it** unless you make changes to the control panel code. + +To rebuild after changes: + +```bash +npm run build:controlpanel +``` + +For more details, see the [Control Panel Development Guide](controlpanel/README.md). diff --git a/config.json b/config.json new file mode 100644 index 000000000..69693d5d4 --- /dev/null +++ b/config.json @@ -0,0 +1,147 @@ +{ + "authorizedDecrypters": [], + "authorizedDecryptersList": [], + "allowedValidators": [], + "allowedValidatorsList": [], + "authorizedPublishers": [], + "authorizedPublishersList": [], + "keys": {}, + "hasIndexer": true, + "hasHttp": true, + "hasP2P": true, + "p2pConfig": { + "bootstrapTimeout": 20000, + "bootstrapTagName": "bootstrap", + "bootstrapTagValue": 50, + "bootstrapTTL": 0, + "enableIPV4": true, + "enableIPV6": true, + "ipV4BindAddress": "0.0.0.0", + "ipV4BindTcpPort": 9000, + "ipV4BindWsPort": 9001, + "ipV6BindAddress": "::", + "ipV6BindTcpPort": 9002, + "ipV6BindWsPort": 9003, + "announceAddresses": [], + "pubsubPeerDiscoveryInterval": 10000, + "dhtMaxInboundStreams": 500, + "dhtMaxOutboundStreams": 500, + "dhtFilter": null, + "mDNSInterval": 20000, + "connectionsMaxParallelDials": 15, + "connectionsDialTimeout": 30000, + "upnp": true, + "autoNat": true, + "enableCircuitRelayServer": false, + "enableCircuitRelayClient": false, + "circuitRelays": 0, + "announcePrivateIp": false, + "filterAnnouncedAddresses": [ + "127.0.0.0/8", + "10.0.0.0/8", + "172.16.0.0/12", + "192.168.0.0/16", + "100.64.0.0/10", + "169.254.0.0/16", + "192.0.0.0/24", + "192.0.2.0/24", + "198.51.100.0/24", + "203.0.113.0/24", + "224.0.0.0/4", + "240.0.0.0/4" + ], + "minConnections": 1, + "maxConnections": 300, + "autoDialPeerRetryThreshold": 7200000, + "autoDialConcurrency": 5, + "maxPeerAddrsToDial": 5, + "autoDialInterval": 5000, + "enableNetworkStats": false + }, + "hasControlPanel": true, + "httpPort": 8001, + "dbConfig": { + "url": "http://localhost:8108/?apiKey=xyz", + "username": "", + "password": "", + "dbType": "typesense" + }, + "supportedNetworks": { + "8996": { + "rpc": "http://127.0.0.1:8545", + "chainId": 8996, + "network": "development", + "chunkSize": 100 + } + }, + "feeStrategy": {}, + "c2dClusters": [], + "ipfsGateway": "https://ipfs.io/", + "arweaveGateway": "https://arweave.net/", + "accountPurgatoryUrl": null, + "assetPurgatoryUrl": null, + "allowedAdmins": [], + "allowedAdminsList": [], + "rateLimit": 30, + "maxConnections": 30, + "denyList": { + "peers": [], + "ips": [] + }, + "unsafeURLs": [], + "isBootstrap": false, + "claimDurationTimeout": 3600, + "validateUnsignedDDO": true, + "jwtSecret": "ocean-node-secret", + "dockerComputeEnvironments": [ + { + "socketPath": "/var/run/docker.sock", + "resources": [ + { + "id": "disk", + "total": 1 + } + ], + "storageExpiry": 604800, + "maxJobDuration": 3600, + "access": { + "addresses": [], + "accessLists": [] + }, + "fees": { + "8996": [ + { + "prices": [ + { + "id": "cpu", + "price": 1 + } + ] + } + ] + }, + "free": { + "maxJobDuration": 3600, + "maxJobs": 3, + "access": { + "addresses": [], + "accessLists": [] + }, + "resources": [ + { + "id": "cpu", + "max": 1 + }, + { + "id": "ram", + "max": 1 + }, + { + "id": "disk", + "max": 1 + } + ] + } + } + ] +} diff --git a/dashboard/.DS_Store b/controlpanel/.DS_Store similarity index 100% rename from dashboard/.DS_Store rename to controlpanel/.DS_Store diff --git a/dashboard/README.md b/controlpanel/README.md similarity index 81% rename from dashboard/README.md rename to controlpanel/README.md index 7491d63b0..488800d72 100644 --- a/dashboard/README.md +++ b/controlpanel/README.md @@ -1,6 +1,6 @@ # Control Panel -The static dashbaord files are included in ocean nodes so the control panel doesn't have to be rebuilt every time the node is built. If there are changes to the control panel it will be built by default with the Ocean Node. There is a [script](scripts/dashboardChanges.js) running to check for changes in this directory. +The static controlpanel files are included in ocean nodes so the control panel doesn't have to be rebuilt every time the node is built. If there are changes to the control panel it should be rebuilt with `npm run build:controlpanel`. When you start your node the control panel will be made available at: `http://localhost:8000/controlpanel/` diff --git a/dashboard/additional.d.ts b/controlpanel/additional.d.ts similarity index 100% rename from dashboard/additional.d.ts rename to controlpanel/additional.d.ts diff --git a/dashboard/next-env.d.ts b/controlpanel/next-env.d.ts similarity index 100% rename from dashboard/next-env.d.ts rename to controlpanel/next-env.d.ts diff --git a/dashboard/next.config.js b/controlpanel/next.config.js similarity index 86% rename from dashboard/next.config.js rename to controlpanel/next.config.js index 95e3eee38..7e12e384f 100644 --- a/dashboard/next.config.js +++ b/controlpanel/next.config.js @@ -7,7 +7,7 @@ const nextConfig = { unoptimized: true }, output: 'export', - distDir: '../dist/dashboard' + distDir: '../dist/controlpanel' } module.exports = nextConfig diff --git a/dashboard/package-lock.json b/controlpanel/package-lock.json similarity index 96% rename from dashboard/package-lock.json rename to controlpanel/package-lock.json index 8696673c6..47dfea579 100644 --- a/dashboard/package-lock.json +++ b/controlpanel/package-lock.json @@ -1,11 +1,11 @@ { - "name": "ocean-node-dashboard", + "name": "ocean-node-control-panel", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "ocean-node-dashboard", + "name": "ocean-node-control-panel", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { @@ -18,7 +18,6 @@ "classnames": "^2.5.0", "dayjs": "^1.11.10", "ethers": "^6.10.0", - "express": "^4.18.2", "micromodal": "^0.4.10", "next": "^13.5.6", "react": "^18", @@ -70,11 +69,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -468,17 +469,19 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -507,102 +510,28 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "license": "MIT", "peer": true, "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "license": "MIT", "peer": true, + "dependencies": { + "@babel/types": "^7.27.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -2192,9 +2121,10 @@ "peer": true }, "node_modules/@babel/runtime": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", - "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2203,14 +2133,15 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -2247,13 +2178,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -3793,25 +3724,6 @@ "@parcel/watcher-win32-x64": "2.4.1" } }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", - "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-darwin-arm64": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", @@ -3831,139 +3743,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", - "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", - "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", - "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", - "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", - "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", - "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", - "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-wasm": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz", @@ -3989,63 +3768,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", - "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", - "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", - "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher/node_modules/node-addon-api": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", @@ -5978,6 +5700,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "peer": true, "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -6136,11 +5859,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, "node_modules/array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -6548,42 +6266,6 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -6722,14 +6404,6 @@ "node": ">=10.16.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -7358,48 +7032,16 @@ "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/cookie-es": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.0.0.tgz", "integrity": "sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==" }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, "node_modules/core-js-compat": { "version": "3.36.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", @@ -7453,9 +7095,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -7668,6 +7310,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -7704,6 +7348,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -7810,7 +7456,8 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "peer": true }, "node_modules/electron-to-chromium": { "version": "1.4.711", @@ -7819,9 +7466,10 @@ "peer": true }, "node_modules/elliptic": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", - "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -7852,6 +7500,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "peer": true, "engines": { "node": ">= 0.8" } @@ -8116,7 +7765,8 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "peer": true }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -8655,6 +8305,8 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -8873,60 +8525,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/extension-port-stream": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-2.1.1.tgz", @@ -8998,9 +8596,9 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fast-xml-parser": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", - "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", "funding": [ { "type": "github", @@ -9068,36 +8666,6 @@ "node": ">=0.10.0" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", @@ -9175,18 +8743,12 @@ "is-callable": "^1.1.3" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -9655,6 +9217,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "peer": true, "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -9715,17 +9279,6 @@ "@babel/runtime": "^7.23.2" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/idb-keyval": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", @@ -9760,9 +9313,10 @@ } }, "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "license": "MIT", "peer": true, "dependencies": { "queue": "6.0.2" @@ -9833,14 +9387,6 @@ "loose-envify": "^1.0.0" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/iron-webcrypto": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.1.0.tgz", @@ -11119,25 +10665,12 @@ "@babel/runtime": "^7.12.5" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", "peer": true }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, "node_modules/merge-options": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", @@ -11163,14 +10696,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/metro": { "version": "0.80.7", "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.7.tgz", @@ -11690,6 +11215,8 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "peer": true, "bin": { "mime": "cli.js" }, @@ -11701,6 +11228,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true, "engines": { "node": ">= 0.6" } @@ -11709,6 +11237,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -11925,15 +11454,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11951,6 +11481,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "peer": true, "engines": { "node": ">= 0.6" } @@ -12184,6 +11715,7 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12318,6 +11850,8 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "peer": true, "dependencies": { "ee-first": "1.1.1" }, @@ -12491,6 +12025,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "peer": true, "engines": { "node": ">= 0.8" } @@ -12524,11 +12059,6 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -12862,18 +12392,6 @@ "react-is": "^16.13.1" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/proxy-compare": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-2.5.1.tgz", @@ -12935,20 +12453,6 @@ "qrcode-terminal": "bin/qrcode-terminal.js" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/query-string": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", @@ -13009,24 +12513,12 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -13897,11 +13389,6 @@ "node": ">=10" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -13911,17 +13398,17 @@ } }, "node_modules/secp256k1": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", - "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", "hasInstallScript": true, "dependencies": { - "elliptic": "^6.5.4", + "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, "node_modules/secp256k1/node_modules/node-addon-api": { @@ -13944,9 +13431,11 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "peer": true, "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -13970,6 +13459,8 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -13977,12 +13468,16 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "peer": true }, "node_modules/serialize-error": { "version": "2.1.0", @@ -13994,19 +13489,31 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "peer": true, "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -14045,7 +13552,9 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC", + "peer": true }, "node_modules/sha.js": { "version": "2.4.11", @@ -14108,6 +13617,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -14325,6 +13835,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -14719,14 +14231,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "peer": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -14742,6 +14246,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "peer": true, "engines": { "node": ">=0.6" } @@ -14813,18 +14319,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", @@ -15053,6 +14547,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "peer": true, "engines": { "node": ">= 0.8" } @@ -15279,6 +14774,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "peer": true, "engines": { "node": ">= 0.4.0" } @@ -15319,6 +14815,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "peer": true, "engines": { "node": ">= 0.8" } diff --git a/dashboard/package.json b/controlpanel/package.json similarity index 94% rename from dashboard/package.json rename to controlpanel/package.json index 3e158da0c..f43a28af1 100644 --- a/dashboard/package.json +++ b/controlpanel/package.json @@ -1,5 +1,5 @@ { - "name": "ocean-node-dashboard", + "name": "ocean-node-control-panel", "author": "Ocean Protocol Foundation", "license": "Apache-2.0", "version": "0.1.0", @@ -20,7 +20,6 @@ "classnames": "^2.5.0", "dayjs": "^1.11.10", "ethers": "^6.10.0", - "express": "^4.18.2", "micromodal": "^0.4.10", "next": "^13.5.6", "react": "^18", @@ -43,4 +42,4 @@ "prettier": "^3.1.1", "typescript": "^5" } -} +} \ No newline at end of file diff --git a/dashboard/src/.DS_Store b/controlpanel/src/.DS_Store similarity index 100% rename from dashboard/src/.DS_Store rename to controlpanel/src/.DS_Store diff --git a/dashboard/src/assets/chevron.svg b/controlpanel/src/assets/chevron.svg similarity index 100% rename from dashboard/src/assets/chevron.svg rename to controlpanel/src/assets/chevron.svg diff --git a/dashboard/src/assets/copy.svg b/controlpanel/src/assets/copy.svg similarity index 100% rename from dashboard/src/assets/copy.svg rename to controlpanel/src/assets/copy.svg diff --git a/dashboard/src/assets/download.svg b/controlpanel/src/assets/download.svg similarity index 100% rename from dashboard/src/assets/download.svg rename to controlpanel/src/assets/download.svg diff --git a/dashboard/src/assets/error.svg b/controlpanel/src/assets/error.svg similarity index 100% rename from dashboard/src/assets/error.svg rename to controlpanel/src/assets/error.svg diff --git a/dashboard/src/assets/logo-nodes.svg b/controlpanel/src/assets/logo-nodes.svg similarity index 100% rename from dashboard/src/assets/logo-nodes.svg rename to controlpanel/src/assets/logo-nodes.svg diff --git a/dashboard/src/assets/logo.svg b/controlpanel/src/assets/logo.svg similarity index 100% rename from dashboard/src/assets/logo.svg rename to controlpanel/src/assets/logo.svg diff --git a/dashboard/src/assets/no-error.svg b/controlpanel/src/assets/no-error.svg similarity index 100% rename from dashboard/src/assets/no-error.svg rename to controlpanel/src/assets/no-error.svg diff --git a/dashboard/src/assets/search-icon.svg b/controlpanel/src/assets/search-icon.svg similarity index 100% rename from dashboard/src/assets/search-icon.svg rename to controlpanel/src/assets/search-icon.svg diff --git a/dashboard/src/components/Admin/DownloadLogs.tsx b/controlpanel/src/components/Admin/DownloadLogs.tsx similarity index 100% rename from dashboard/src/components/Admin/DownloadLogs.tsx rename to controlpanel/src/components/Admin/DownloadLogs.tsx diff --git a/dashboard/src/components/Admin/ReindexChain.tsx b/controlpanel/src/components/Admin/ReindexChain.tsx similarity index 100% rename from dashboard/src/components/Admin/ReindexChain.tsx rename to controlpanel/src/components/Admin/ReindexChain.tsx diff --git a/dashboard/src/components/Admin/ReindexTransaction.tsx b/controlpanel/src/components/Admin/ReindexTransaction.tsx similarity index 100% rename from dashboard/src/components/Admin/ReindexTransaction.tsx rename to controlpanel/src/components/Admin/ReindexTransaction.tsx diff --git a/dashboard/src/components/Admin/StopNode.tsx b/controlpanel/src/components/Admin/StopNode.tsx similarity index 90% rename from dashboard/src/components/Admin/StopNode.tsx rename to controlpanel/src/components/Admin/StopNode.tsx index 8b7040269..c50fad7e2 100644 --- a/dashboard/src/components/Admin/StopNode.tsx +++ b/controlpanel/src/components/Admin/StopNode.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react' +import { useState } from 'react' import styles from './index.module.css' import { useAdminContext } from '@context/AdminProvider' import Button from '@mui/material/Button' @@ -25,7 +25,7 @@ export default function StopNode() { }) }) } - alert('The node has been stopped. The dashboard will no longer be displayed.') + alert('The node has been stopped. The control panel will no longer be displayed.') window.location.reload() } catch (error) { console.error('error', error) diff --git a/dashboard/src/components/Admin/TransferFees.tsx b/controlpanel/src/components/Admin/TransferFees.tsx similarity index 100% rename from dashboard/src/components/Admin/TransferFees.tsx rename to controlpanel/src/components/Admin/TransferFees.tsx diff --git a/dashboard/src/components/Admin/index.module.css b/controlpanel/src/components/Admin/index.module.css similarity index 100% rename from dashboard/src/components/Admin/index.module.css rename to controlpanel/src/components/Admin/index.module.css diff --git a/dashboard/src/components/Admin/index.tsx b/controlpanel/src/components/Admin/index.tsx similarity index 91% rename from dashboard/src/components/Admin/index.tsx rename to controlpanel/src/components/Admin/index.tsx index 456c8e4b0..74b87a9c3 100644 --- a/dashboard/src/components/Admin/index.tsx +++ b/controlpanel/src/components/Admin/index.tsx @@ -1,7 +1,6 @@ -import React from 'react' import styles from './index.module.css' -import DownloadLogs from '../Admin/DownloadLogs' -import StopNode from '../Admin/StopNode' +import DownloadLogs from './DownloadLogs' +import StopNode from './StopNode' import { useAdminContext } from '@/context/AdminProvider' import { useAccount } from 'wagmi' import { ConnectButton } from '@rainbow-me/rainbowkit' diff --git a/dashboard/src/components/Dashboard/AdminAccounts.tsx b/controlpanel/src/components/ControlPanel/AdminAccounts.tsx similarity index 100% rename from dashboard/src/components/Dashboard/AdminAccounts.tsx rename to controlpanel/src/components/ControlPanel/AdminAccounts.tsx diff --git a/dashboard/src/components/Dashboard/Indexer.tsx b/controlpanel/src/components/ControlPanel/Indexer.tsx similarity index 100% rename from dashboard/src/components/Dashboard/Indexer.tsx rename to controlpanel/src/components/ControlPanel/Indexer.tsx diff --git a/dashboard/src/components/Dashboard/Menu.module.css b/controlpanel/src/components/ControlPanel/Menu.module.css similarity index 100% rename from dashboard/src/components/Dashboard/Menu.module.css rename to controlpanel/src/components/ControlPanel/Menu.module.css diff --git a/dashboard/src/components/Dashboard/Menu.tsx b/controlpanel/src/components/ControlPanel/Menu.tsx similarity index 100% rename from dashboard/src/components/Dashboard/Menu.tsx rename to controlpanel/src/components/ControlPanel/Menu.tsx diff --git a/dashboard/src/components/Dashboard/NodePlatform.tsx b/controlpanel/src/components/ControlPanel/NodePlatform.tsx similarity index 100% rename from dashboard/src/components/Dashboard/NodePlatform.tsx rename to controlpanel/src/components/ControlPanel/NodePlatform.tsx diff --git a/dashboard/src/components/Dashboard/SupportedNetworks.tsx b/controlpanel/src/components/ControlPanel/SupportedNetworks.tsx similarity index 100% rename from dashboard/src/components/Dashboard/SupportedNetworks.tsx rename to controlpanel/src/components/ControlPanel/SupportedNetworks.tsx diff --git a/dashboard/src/components/Dashboard/SupportedStorage.tsx b/controlpanel/src/components/ControlPanel/SupportedStorage.tsx similarity index 100% rename from dashboard/src/components/Dashboard/SupportedStorage.tsx rename to controlpanel/src/components/ControlPanel/SupportedStorage.tsx diff --git a/dashboard/src/components/Dashboard/index.module.css b/controlpanel/src/components/ControlPanel/index.module.css similarity index 100% rename from dashboard/src/components/Dashboard/index.module.css rename to controlpanel/src/components/ControlPanel/index.module.css diff --git a/dashboard/src/components/Dashboard/index.tsx b/controlpanel/src/components/ControlPanel/index.tsx similarity index 97% rename from dashboard/src/components/Dashboard/index.tsx rename to controlpanel/src/components/ControlPanel/index.tsx index 75714c6ef..1507ffb0b 100644 --- a/dashboard/src/components/Dashboard/index.tsx +++ b/controlpanel/src/components/ControlPanel/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import { useEffect, useState } from 'react' import styles from './index.module.css' import { useAdminContext } from '@/context/AdminProvider' import AdminActions from '../Admin' @@ -13,7 +13,7 @@ import AdminAccounts from './AdminAccounts' import NodePlatform from './NodePlatform' import { Box, Typography, Divider } from '@mui/material' -export default function Dashboard() { +export default function ControlPanel() { const [data, setData] = useState() const [isLoading, setLoading] = useState(true) const [ipAddress, setIpAddress] = useState('') diff --git a/dashboard/src/components/Copy/index.module.css b/controlpanel/src/components/Copy/index.module.css similarity index 100% rename from dashboard/src/components/Copy/index.module.css rename to controlpanel/src/components/Copy/index.module.css diff --git a/dashboard/src/components/Copy/index.tsx b/controlpanel/src/components/Copy/index.tsx similarity index 100% rename from dashboard/src/components/Copy/index.tsx rename to controlpanel/src/components/Copy/index.tsx diff --git a/dashboard/src/components/ErrorCheck/index.module.css b/controlpanel/src/components/ErrorCheck/index.module.css similarity index 100% rename from dashboard/src/components/ErrorCheck/index.module.css rename to controlpanel/src/components/ErrorCheck/index.module.css diff --git a/dashboard/src/components/ErrorCheck/index.tsx b/controlpanel/src/components/ErrorCheck/index.tsx similarity index 100% rename from dashboard/src/components/ErrorCheck/index.tsx rename to controlpanel/src/components/ErrorCheck/index.tsx diff --git a/dashboard/src/components/Footer/index.tsx b/controlpanel/src/components/Footer/index.tsx similarity index 100% rename from dashboard/src/components/Footer/index.tsx rename to controlpanel/src/components/Footer/index.tsx diff --git a/dashboard/src/components/Footer/style.module.css b/controlpanel/src/components/Footer/style.module.css similarity index 100% rename from dashboard/src/components/Footer/style.module.css rename to controlpanel/src/components/Footer/style.module.css diff --git a/dashboard/src/components/IndexQueue.tsx b/controlpanel/src/components/IndexQueue.tsx similarity index 97% rename from dashboard/src/components/IndexQueue.tsx rename to controlpanel/src/components/IndexQueue.tsx index 9152095bf..ce2f21beb 100644 --- a/dashboard/src/components/IndexQueue.tsx +++ b/controlpanel/src/components/IndexQueue.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react' +import { useState, useEffect } from 'react' import { Table, TableBody, @@ -7,7 +7,7 @@ import { TableHead, TableRow } from '@mui/material' -import styles from './Dashboard/index.module.css' +import styles from './ControlPanel/index.module.css' import { useAdminContext } from '@/context/AdminProvider' import Alert from '@mui/material/Alert' diff --git a/dashboard/src/components/JobStatusPanel/index.tsx b/controlpanel/src/components/JobStatusPanel/index.tsx similarity index 100% rename from dashboard/src/components/JobStatusPanel/index.tsx rename to controlpanel/src/components/JobStatusPanel/index.tsx diff --git a/dashboard/src/components/Navigation/index.tsx b/controlpanel/src/components/Navigation/index.tsx similarity index 100% rename from dashboard/src/components/Navigation/index.tsx rename to controlpanel/src/components/Navigation/index.tsx diff --git a/dashboard/src/components/Navigation/style.module.css b/controlpanel/src/components/Navigation/style.module.css similarity index 100% rename from dashboard/src/components/Navigation/style.module.css rename to controlpanel/src/components/Navigation/style.module.css diff --git a/dashboard/src/components/NodeDetails/index.module.css b/controlpanel/src/components/NodeDetails/index.module.css similarity index 100% rename from dashboard/src/components/NodeDetails/index.module.css rename to controlpanel/src/components/NodeDetails/index.module.css diff --git a/dashboard/src/components/NodeDetails/index.tsx b/controlpanel/src/components/NodeDetails/index.tsx similarity index 100% rename from dashboard/src/components/NodeDetails/index.tsx rename to controlpanel/src/components/NodeDetails/index.tsx diff --git a/dashboard/src/components/NodePeers/index.tsx b/controlpanel/src/components/NodePeers/index.tsx similarity index 100% rename from dashboard/src/components/NodePeers/index.tsx rename to controlpanel/src/components/NodePeers/index.tsx diff --git a/dashboard/src/components/NodePeers/style.module.css b/controlpanel/src/components/NodePeers/style.module.css similarity index 100% rename from dashboard/src/components/NodePeers/style.module.css rename to controlpanel/src/components/NodePeers/style.module.css diff --git a/dashboard/src/components/Spinner/index.tsx b/controlpanel/src/components/Spinner/index.tsx similarity index 100% rename from dashboard/src/components/Spinner/index.tsx rename to controlpanel/src/components/Spinner/index.tsx diff --git a/dashboard/src/components/Spinner/style.module.css b/controlpanel/src/components/Spinner/style.module.css similarity index 100% rename from dashboard/src/components/Spinner/style.module.css rename to controlpanel/src/components/Spinner/style.module.css diff --git a/dashboard/src/components/Table/_styles.ts b/controlpanel/src/components/Table/_styles.ts similarity index 100% rename from dashboard/src/components/Table/_styles.ts rename to controlpanel/src/components/Table/_styles.ts diff --git a/dashboard/src/components/Table/data.ts b/controlpanel/src/components/Table/data.ts similarity index 100% rename from dashboard/src/components/Table/data.ts rename to controlpanel/src/components/Table/data.ts diff --git a/dashboard/src/components/Table/index.module.css b/controlpanel/src/components/Table/index.module.css similarity index 100% rename from dashboard/src/components/Table/index.module.css rename to controlpanel/src/components/Table/index.module.css diff --git a/dashboard/src/components/Table/index.tsx b/controlpanel/src/components/Table/index.tsx similarity index 94% rename from dashboard/src/components/Table/index.tsx rename to controlpanel/src/components/Table/index.tsx index 6b22f5528..d8d5a50e5 100644 --- a/dashboard/src/components/Table/index.tsx +++ b/controlpanel/src/components/Table/index.tsx @@ -1,4 +1,3 @@ -import React from 'react' import Image from 'next/image' import DataTable, { TableColumn } from 'react-data-table-component' @@ -39,7 +38,7 @@ export default function Table() { return (
-

Ocean Nodes Dashboard

+

Ocean Node Control Panel

- Ocean nodes - + Ocean Node Control Panel + @@ -18,7 +18,7 @@ export default function Home() {
- + {/* */}
diff --git a/dashboard/src/shared/types/JobTypes.ts b/controlpanel/src/shared/types/JobTypes.ts similarity index 100% rename from dashboard/src/shared/types/JobTypes.ts rename to controlpanel/src/shared/types/JobTypes.ts diff --git a/dashboard/src/shared/types/RowDataType.ts b/controlpanel/src/shared/types/RowDataType.ts similarity index 100% rename from dashboard/src/shared/types/RowDataType.ts rename to controlpanel/src/shared/types/RowDataType.ts diff --git a/dashboard/src/shared/types/dataTypes.ts b/controlpanel/src/shared/types/dataTypes.ts similarity index 100% rename from dashboard/src/shared/types/dataTypes.ts rename to controlpanel/src/shared/types/dataTypes.ts diff --git a/dashboard/src/shared/utils/chains.ts b/controlpanel/src/shared/utils/chains.ts similarity index 100% rename from dashboard/src/shared/utils/chains.ts rename to controlpanel/src/shared/utils/chains.ts diff --git a/dashboard/src/shared/utils/jobs.ts b/controlpanel/src/shared/utils/jobs.ts similarity index 100% rename from dashboard/src/shared/utils/jobs.ts rename to controlpanel/src/shared/utils/jobs.ts diff --git a/dashboard/src/styles/Home.module.css b/controlpanel/src/styles/Home.module.css similarity index 100% rename from dashboard/src/styles/Home.module.css rename to controlpanel/src/styles/Home.module.css diff --git a/dashboard/src/styles/globals.css b/controlpanel/src/styles/globals.css similarity index 100% rename from dashboard/src/styles/globals.css rename to controlpanel/src/styles/globals.css diff --git a/dashboard/tsconfig.json b/controlpanel/tsconfig.json similarity index 100% rename from dashboard/tsconfig.json rename to controlpanel/tsconfig.json diff --git a/dist/dashboard/404.html b/dist/controlpanel/404.html similarity index 93% rename from dist/dashboard/404.html rename to dist/controlpanel/404.html index 83df82bf5..eec1f17b7 100644 --- a/dist/dashboard/404.html +++ b/dist/controlpanel/404.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/dist/dashboard/_next/static/chunks/1194.680c7fabd6caf412.js b/dist/controlpanel/_next/static/chunks/1194.680c7fabd6caf412.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1194.680c7fabd6caf412.js rename to dist/controlpanel/_next/static/chunks/1194.680c7fabd6caf412.js diff --git a/dist/dashboard/_next/static/chunks/135.67fab15ebc7d852e.js b/dist/controlpanel/_next/static/chunks/135.67fab15ebc7d852e.js similarity index 100% rename from dist/dashboard/_next/static/chunks/135.67fab15ebc7d852e.js rename to dist/controlpanel/_next/static/chunks/135.67fab15ebc7d852e.js diff --git a/dist/dashboard/_next/static/chunks/1391.a012fc4679900c0c.js b/dist/controlpanel/_next/static/chunks/1391.a012fc4679900c0c.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1391.a012fc4679900c0c.js rename to dist/controlpanel/_next/static/chunks/1391.a012fc4679900c0c.js diff --git a/dist/dashboard/_next/static/chunks/1424.c15d7e6321ca35d6.js b/dist/controlpanel/_next/static/chunks/1424.c15d7e6321ca35d6.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1424.c15d7e6321ca35d6.js rename to dist/controlpanel/_next/static/chunks/1424.c15d7e6321ca35d6.js diff --git a/dist/dashboard/_next/static/chunks/1608.ec04f07937386922.js b/dist/controlpanel/_next/static/chunks/1608.ec04f07937386922.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1608.ec04f07937386922.js rename to dist/controlpanel/_next/static/chunks/1608.ec04f07937386922.js diff --git a/dist/dashboard/_next/static/chunks/1711.ae2b84d9f5645069.js b/dist/controlpanel/_next/static/chunks/1711.ae2b84d9f5645069.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1711.ae2b84d9f5645069.js rename to dist/controlpanel/_next/static/chunks/1711.ae2b84d9f5645069.js diff --git a/dist/dashboard/_next/static/chunks/1727.af62bd633f21ee69.js b/dist/controlpanel/_next/static/chunks/1727.af62bd633f21ee69.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1727.af62bd633f21ee69.js rename to dist/controlpanel/_next/static/chunks/1727.af62bd633f21ee69.js diff --git a/dist/dashboard/_next/static/chunks/1748.f63b451fd93f590b.js b/dist/controlpanel/_next/static/chunks/1748.f63b451fd93f590b.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1748.f63b451fd93f590b.js rename to dist/controlpanel/_next/static/chunks/1748.f63b451fd93f590b.js diff --git a/dist/dashboard/_next/static/chunks/1950.c8039f3dc9bb92f5.js b/dist/controlpanel/_next/static/chunks/1950.c8039f3dc9bb92f5.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1950.c8039f3dc9bb92f5.js rename to dist/controlpanel/_next/static/chunks/1950.c8039f3dc9bb92f5.js diff --git a/dist/dashboard/_next/static/chunks/1961.e8c3dc6172d4bfaa.js b/dist/controlpanel/_next/static/chunks/1961.e8c3dc6172d4bfaa.js similarity index 100% rename from dist/dashboard/_next/static/chunks/1961.e8c3dc6172d4bfaa.js rename to dist/controlpanel/_next/static/chunks/1961.e8c3dc6172d4bfaa.js diff --git a/dist/dashboard/_next/static/chunks/2499.512d762af08bf6a6.js b/dist/controlpanel/_next/static/chunks/2499.512d762af08bf6a6.js similarity index 100% rename from dist/dashboard/_next/static/chunks/2499.512d762af08bf6a6.js rename to dist/controlpanel/_next/static/chunks/2499.512d762af08bf6a6.js diff --git a/dist/dashboard/_next/static/chunks/2604.250be1a3b8354750.js b/dist/controlpanel/_next/static/chunks/2604.250be1a3b8354750.js similarity index 100% rename from dist/dashboard/_next/static/chunks/2604.250be1a3b8354750.js rename to dist/controlpanel/_next/static/chunks/2604.250be1a3b8354750.js diff --git a/dist/dashboard/_next/static/chunks/2746.0a838d09eabc5b43.js b/dist/controlpanel/_next/static/chunks/2746.0a838d09eabc5b43.js similarity index 100% rename from dist/dashboard/_next/static/chunks/2746.0a838d09eabc5b43.js rename to dist/controlpanel/_next/static/chunks/2746.0a838d09eabc5b43.js diff --git a/dist/dashboard/_next/static/chunks/2840.7001450c4c1f4ea0.js b/dist/controlpanel/_next/static/chunks/2840.7001450c4c1f4ea0.js similarity index 100% rename from dist/dashboard/_next/static/chunks/2840.7001450c4c1f4ea0.js rename to dist/controlpanel/_next/static/chunks/2840.7001450c4c1f4ea0.js diff --git a/dist/dashboard/_next/static/chunks/2896.5ee6626961037489.js b/dist/controlpanel/_next/static/chunks/2896.5ee6626961037489.js similarity index 100% rename from dist/dashboard/_next/static/chunks/2896.5ee6626961037489.js rename to dist/controlpanel/_next/static/chunks/2896.5ee6626961037489.js diff --git a/dist/dashboard/_next/static/chunks/2898.f370a64b5af02f0b.js b/dist/controlpanel/_next/static/chunks/2898.f370a64b5af02f0b.js similarity index 100% rename from dist/dashboard/_next/static/chunks/2898.f370a64b5af02f0b.js rename to dist/controlpanel/_next/static/chunks/2898.f370a64b5af02f0b.js diff --git a/dist/dashboard/_next/static/chunks/3138.03458a939e06d647.js b/dist/controlpanel/_next/static/chunks/3138.03458a939e06d647.js similarity index 100% rename from dist/dashboard/_next/static/chunks/3138.03458a939e06d647.js rename to dist/controlpanel/_next/static/chunks/3138.03458a939e06d647.js diff --git a/dist/dashboard/_next/static/chunks/3200.07a96119d145f2e1.js b/dist/controlpanel/_next/static/chunks/3200.07a96119d145f2e1.js similarity index 100% rename from dist/dashboard/_next/static/chunks/3200.07a96119d145f2e1.js rename to dist/controlpanel/_next/static/chunks/3200.07a96119d145f2e1.js diff --git a/dist/dashboard/_next/static/chunks/3525.53072abba3ca74b8.js b/dist/controlpanel/_next/static/chunks/3525.53072abba3ca74b8.js similarity index 100% rename from dist/dashboard/_next/static/chunks/3525.53072abba3ca74b8.js rename to dist/controlpanel/_next/static/chunks/3525.53072abba3ca74b8.js diff --git a/dist/dashboard/_next/static/chunks/3688.d161b107f65da93d.js b/dist/controlpanel/_next/static/chunks/3688.d161b107f65da93d.js similarity index 100% rename from dist/dashboard/_next/static/chunks/3688.d161b107f65da93d.js rename to dist/controlpanel/_next/static/chunks/3688.d161b107f65da93d.js diff --git a/dist/dashboard/_next/static/chunks/3760.527e299df66f1ddf.js b/dist/controlpanel/_next/static/chunks/3760.527e299df66f1ddf.js similarity index 100% rename from dist/dashboard/_next/static/chunks/3760.527e299df66f1ddf.js rename to dist/controlpanel/_next/static/chunks/3760.527e299df66f1ddf.js diff --git a/dist/dashboard/_next/static/chunks/422.665eb3093c049d41.js b/dist/controlpanel/_next/static/chunks/422.665eb3093c049d41.js similarity index 100% rename from dist/dashboard/_next/static/chunks/422.665eb3093c049d41.js rename to dist/controlpanel/_next/static/chunks/422.665eb3093c049d41.js diff --git a/dist/dashboard/_next/static/chunks/4253.6be69df622e36e45.js b/dist/controlpanel/_next/static/chunks/4253.6be69df622e36e45.js similarity index 100% rename from dist/dashboard/_next/static/chunks/4253.6be69df622e36e45.js rename to dist/controlpanel/_next/static/chunks/4253.6be69df622e36e45.js diff --git a/dist/dashboard/_next/static/chunks/4419.c4f2007bfe36ec14.js b/dist/controlpanel/_next/static/chunks/4419.c4f2007bfe36ec14.js similarity index 100% rename from dist/dashboard/_next/static/chunks/4419.c4f2007bfe36ec14.js rename to dist/controlpanel/_next/static/chunks/4419.c4f2007bfe36ec14.js diff --git a/dist/dashboard/_next/static/chunks/4507.929b32e591e50f8b.js b/dist/controlpanel/_next/static/chunks/4507.929b32e591e50f8b.js similarity index 100% rename from dist/dashboard/_next/static/chunks/4507.929b32e591e50f8b.js rename to dist/controlpanel/_next/static/chunks/4507.929b32e591e50f8b.js diff --git a/dist/dashboard/_next/static/chunks/4583.205bbdd6677d7c00.js b/dist/controlpanel/_next/static/chunks/4583.205bbdd6677d7c00.js similarity index 100% rename from dist/dashboard/_next/static/chunks/4583.205bbdd6677d7c00.js rename to dist/controlpanel/_next/static/chunks/4583.205bbdd6677d7c00.js diff --git a/dist/dashboard/_next/static/chunks/499.6095a9b4c3d3fa0b.js b/dist/controlpanel/_next/static/chunks/499.6095a9b4c3d3fa0b.js similarity index 100% rename from dist/dashboard/_next/static/chunks/499.6095a9b4c3d3fa0b.js rename to dist/controlpanel/_next/static/chunks/499.6095a9b4c3d3fa0b.js diff --git a/dist/dashboard/_next/static/chunks/5119.33e08a0525159056.js b/dist/controlpanel/_next/static/chunks/5119.33e08a0525159056.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5119.33e08a0525159056.js rename to dist/controlpanel/_next/static/chunks/5119.33e08a0525159056.js diff --git a/dist/dashboard/_next/static/chunks/5488.ea86c6ce443ba3bd.js b/dist/controlpanel/_next/static/chunks/5488.ea86c6ce443ba3bd.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5488.ea86c6ce443ba3bd.js rename to dist/controlpanel/_next/static/chunks/5488.ea86c6ce443ba3bd.js diff --git a/dist/dashboard/_next/static/chunks/5515.4b5c8b150669b6f5.js b/dist/controlpanel/_next/static/chunks/5515.4b5c8b150669b6f5.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5515.4b5c8b150669b6f5.js rename to dist/controlpanel/_next/static/chunks/5515.4b5c8b150669b6f5.js diff --git a/dist/dashboard/_next/static/chunks/5679-bec633b225238aa1.js b/dist/controlpanel/_next/static/chunks/5679-bec633b225238aa1.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5679-bec633b225238aa1.js rename to dist/controlpanel/_next/static/chunks/5679-bec633b225238aa1.js diff --git a/dist/dashboard/_next/static/chunks/5710.5bdbdbf21f1c3db3.js b/dist/controlpanel/_next/static/chunks/5710.5bdbdbf21f1c3db3.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5710.5bdbdbf21f1c3db3.js rename to dist/controlpanel/_next/static/chunks/5710.5bdbdbf21f1c3db3.js diff --git a/dist/dashboard/_next/static/chunks/5806.7abe5840ceba140e.js b/dist/controlpanel/_next/static/chunks/5806.7abe5840ceba140e.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5806.7abe5840ceba140e.js rename to dist/controlpanel/_next/static/chunks/5806.7abe5840ceba140e.js diff --git a/dist/dashboard/_next/static/chunks/5811.2ad46e0bdf042ab8.js b/dist/controlpanel/_next/static/chunks/5811.2ad46e0bdf042ab8.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5811.2ad46e0bdf042ab8.js rename to dist/controlpanel/_next/static/chunks/5811.2ad46e0bdf042ab8.js diff --git a/dist/dashboard/_next/static/chunks/5850.b782d289eb0cb77f.js b/dist/controlpanel/_next/static/chunks/5850.b782d289eb0cb77f.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5850.b782d289eb0cb77f.js rename to dist/controlpanel/_next/static/chunks/5850.b782d289eb0cb77f.js diff --git a/dist/dashboard/_next/static/chunks/5883.e4477e9126daa625.js b/dist/controlpanel/_next/static/chunks/5883.e4477e9126daa625.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5883.e4477e9126daa625.js rename to dist/controlpanel/_next/static/chunks/5883.e4477e9126daa625.js diff --git a/dist/dashboard/_next/static/chunks/5939.0a433dc6f963fc41.js b/dist/controlpanel/_next/static/chunks/5939.0a433dc6f963fc41.js similarity index 100% rename from dist/dashboard/_next/static/chunks/5939.0a433dc6f963fc41.js rename to dist/controlpanel/_next/static/chunks/5939.0a433dc6f963fc41.js diff --git a/dist/dashboard/_next/static/chunks/6210.e879386a01d249b4.js b/dist/controlpanel/_next/static/chunks/6210.e879386a01d249b4.js similarity index 100% rename from dist/dashboard/_next/static/chunks/6210.e879386a01d249b4.js rename to dist/controlpanel/_next/static/chunks/6210.e879386a01d249b4.js diff --git a/dist/dashboard/_next/static/chunks/6237.f7b1d24c812922e4.js b/dist/controlpanel/_next/static/chunks/6237.f7b1d24c812922e4.js similarity index 100% rename from dist/dashboard/_next/static/chunks/6237.f7b1d24c812922e4.js rename to dist/controlpanel/_next/static/chunks/6237.f7b1d24c812922e4.js diff --git a/dist/dashboard/_next/static/chunks/6253.dcdff54f0dceda1f.js b/dist/controlpanel/_next/static/chunks/6253.dcdff54f0dceda1f.js similarity index 100% rename from dist/dashboard/_next/static/chunks/6253.dcdff54f0dceda1f.js rename to dist/controlpanel/_next/static/chunks/6253.dcdff54f0dceda1f.js diff --git a/dist/dashboard/_next/static/chunks/6328.ea13afa99496d818.js b/dist/controlpanel/_next/static/chunks/6328.ea13afa99496d818.js similarity index 100% rename from dist/dashboard/_next/static/chunks/6328.ea13afa99496d818.js rename to dist/controlpanel/_next/static/chunks/6328.ea13afa99496d818.js diff --git a/dist/dashboard/_next/static/chunks/6551.432f96462db0d036.js b/dist/controlpanel/_next/static/chunks/6551.432f96462db0d036.js similarity index 100% rename from dist/dashboard/_next/static/chunks/6551.432f96462db0d036.js rename to dist/controlpanel/_next/static/chunks/6551.432f96462db0d036.js diff --git a/dist/dashboard/_next/static/chunks/6626.1c904d6d48510b00.js b/dist/controlpanel/_next/static/chunks/6626.1c904d6d48510b00.js similarity index 100% rename from dist/dashboard/_next/static/chunks/6626.1c904d6d48510b00.js rename to dist/controlpanel/_next/static/chunks/6626.1c904d6d48510b00.js diff --git a/dist/dashboard/_next/static/chunks/6878.5657c32e06476a2e.js b/dist/controlpanel/_next/static/chunks/6878.5657c32e06476a2e.js similarity index 100% rename from dist/dashboard/_next/static/chunks/6878.5657c32e06476a2e.js rename to dist/controlpanel/_next/static/chunks/6878.5657c32e06476a2e.js diff --git a/dist/dashboard/_next/static/chunks/704.484bcd9e0a7f5626.js b/dist/controlpanel/_next/static/chunks/704.484bcd9e0a7f5626.js similarity index 100% rename from dist/dashboard/_next/static/chunks/704.484bcd9e0a7f5626.js rename to dist/controlpanel/_next/static/chunks/704.484bcd9e0a7f5626.js diff --git a/dist/dashboard/_next/static/chunks/7682.b0a3567fac8e0052.js b/dist/controlpanel/_next/static/chunks/7682.b0a3567fac8e0052.js similarity index 100% rename from dist/dashboard/_next/static/chunks/7682.b0a3567fac8e0052.js rename to dist/controlpanel/_next/static/chunks/7682.b0a3567fac8e0052.js diff --git a/dist/dashboard/_next/static/chunks/794.f18da82915d63734.js b/dist/controlpanel/_next/static/chunks/794.f18da82915d63734.js similarity index 100% rename from dist/dashboard/_next/static/chunks/794.f18da82915d63734.js rename to dist/controlpanel/_next/static/chunks/794.f18da82915d63734.js diff --git a/dist/dashboard/_next/static/chunks/8137.d6c500ddcf42e542.js b/dist/controlpanel/_next/static/chunks/8137.d6c500ddcf42e542.js similarity index 100% rename from dist/dashboard/_next/static/chunks/8137.d6c500ddcf42e542.js rename to dist/controlpanel/_next/static/chunks/8137.d6c500ddcf42e542.js diff --git a/dist/dashboard/_next/static/chunks/8366.656bbd943f76fa86.js b/dist/controlpanel/_next/static/chunks/8366.656bbd943f76fa86.js similarity index 100% rename from dist/dashboard/_next/static/chunks/8366.656bbd943f76fa86.js rename to dist/controlpanel/_next/static/chunks/8366.656bbd943f76fa86.js diff --git a/dist/dashboard/_next/static/chunks/8881.8c985300b37d631a.js b/dist/controlpanel/_next/static/chunks/8881.8c985300b37d631a.js similarity index 100% rename from dist/dashboard/_next/static/chunks/8881.8c985300b37d631a.js rename to dist/controlpanel/_next/static/chunks/8881.8c985300b37d631a.js diff --git a/dist/dashboard/_next/static/chunks/8906.7becb64cf75ab6af.js b/dist/controlpanel/_next/static/chunks/8906.7becb64cf75ab6af.js similarity index 100% rename from dist/dashboard/_next/static/chunks/8906.7becb64cf75ab6af.js rename to dist/controlpanel/_next/static/chunks/8906.7becb64cf75ab6af.js diff --git a/dist/dashboard/_next/static/chunks/8989.5d8eeb3ff417836a.js b/dist/controlpanel/_next/static/chunks/8989.5d8eeb3ff417836a.js similarity index 100% rename from dist/dashboard/_next/static/chunks/8989.5d8eeb3ff417836a.js rename to dist/controlpanel/_next/static/chunks/8989.5d8eeb3ff417836a.js diff --git a/dist/dashboard/_next/static/chunks/9212.79924379b5549586.js b/dist/controlpanel/_next/static/chunks/9212.79924379b5549586.js similarity index 100% rename from dist/dashboard/_next/static/chunks/9212.79924379b5549586.js rename to dist/controlpanel/_next/static/chunks/9212.79924379b5549586.js diff --git a/dist/dashboard/_next/static/chunks/9223.882cd6b61a640a13.js b/dist/controlpanel/_next/static/chunks/9223.882cd6b61a640a13.js similarity index 100% rename from dist/dashboard/_next/static/chunks/9223.882cd6b61a640a13.js rename to dist/controlpanel/_next/static/chunks/9223.882cd6b61a640a13.js diff --git a/dist/dashboard/_next/static/chunks/934.405a73de74b58e27.js b/dist/controlpanel/_next/static/chunks/934.405a73de74b58e27.js similarity index 100% rename from dist/dashboard/_next/static/chunks/934.405a73de74b58e27.js rename to dist/controlpanel/_next/static/chunks/934.405a73de74b58e27.js diff --git a/dist/dashboard/_next/static/chunks/9343.a7f54a99eddb02df.js b/dist/controlpanel/_next/static/chunks/9343.a7f54a99eddb02df.js similarity index 100% rename from dist/dashboard/_next/static/chunks/9343.a7f54a99eddb02df.js rename to dist/controlpanel/_next/static/chunks/9343.a7f54a99eddb02df.js diff --git a/dist/dashboard/_next/static/chunks/9600.5accbcbb008d261e.js b/dist/controlpanel/_next/static/chunks/9600.5accbcbb008d261e.js similarity index 100% rename from dist/dashboard/_next/static/chunks/9600.5accbcbb008d261e.js rename to dist/controlpanel/_next/static/chunks/9600.5accbcbb008d261e.js diff --git a/dist/dashboard/_next/static/chunks/9941.44044767831d9eb0.js b/dist/controlpanel/_next/static/chunks/9941.44044767831d9eb0.js similarity index 100% rename from dist/dashboard/_next/static/chunks/9941.44044767831d9eb0.js rename to dist/controlpanel/_next/static/chunks/9941.44044767831d9eb0.js diff --git a/dist/dashboard/_next/static/chunks/framework-ca706bf673a13738.js b/dist/controlpanel/_next/static/chunks/framework-ca706bf673a13738.js similarity index 100% rename from dist/dashboard/_next/static/chunks/framework-ca706bf673a13738.js rename to dist/controlpanel/_next/static/chunks/framework-ca706bf673a13738.js diff --git a/dist/dashboard/_next/static/chunks/main-66d85fc6f7952338.js b/dist/controlpanel/_next/static/chunks/main-66d85fc6f7952338.js similarity index 100% rename from dist/dashboard/_next/static/chunks/main-66d85fc6f7952338.js rename to dist/controlpanel/_next/static/chunks/main-66d85fc6f7952338.js diff --git a/dist/dashboard/_next/static/chunks/pages/_app-8a605b014f26ab32.js b/dist/controlpanel/_next/static/chunks/pages/_app-d357969f021822f1.js similarity index 90% rename from dist/dashboard/_next/static/chunks/pages/_app-8a605b014f26ab32.js rename to dist/controlpanel/_next/static/chunks/pages/_app-d357969f021822f1.js index 3cd53e612..50fd30975 100644 --- a/dist/dashboard/_next/static/chunks/pages/_app-8a605b014f26ab32.js +++ b/dist/controlpanel/_next/static/chunks/pages/_app-d357969f021822f1.js @@ -1,4 +1,4 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2888],{65987:function(e){"use strict";var t={single_source_shortest_paths:function(e,n,o){var i,s,l,c,u,d,p,f={},m={};m[n]=0;var b=t.PriorityQueue.make();for(b.push(n,0);!b.empty();)for(l in s=(i=b.pop()).value,c=i.cost,u=e[s]||{})u.hasOwnProperty(l)&&(d=c+u[l],p=m[l],(void 0===m[l]||p>d)&&(m[l]=d,b.push(l,d),f[l]=s));if(void 0!==o&&void 0===m[o])throw Error(["Could not find a path from ",n," to ",o,"."].join(""));return f},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],o=t;o;)n.push(o),e[o],o=e[o];return n.reverse(),n},find_path:function(e,n,o){var i=t.single_source_shortest_paths(e,n,o);return t.extract_shortest_path_from_predecessor_list(i,o)},PriorityQueue:{make:function(e){var n,o=t.PriorityQueue,i={};for(n in e=e||{},o)o.hasOwnProperty(n)&&(i[n]=o[n]);return i.queue=[],i.sorter=e.sorter||o.default_sorter,i},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){this.queue.push({value:e,cost:t}),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};e.exports=t},62378:function(e){"use strict";e.exports=function(e){for(var t=[],n=e.length,o=0;o=55296&&i<=56319&&n>o+1){var s=e.charCodeAt(o+1);s>=56320&&s<=57343&&(i=(i-55296)*1024+s-56320+65536,o+=1)}if(i<128){t.push(i);continue}if(i<2048){t.push(i>>6|192),t.push(63&i|128);continue}if(i<55296||i>=57344&&i<65536){t.push(i>>12|224),t.push(i>>6&63|128),t.push(63&i|128);continue}if(i>=65536&&i<=1114111){t.push(i>>18|240),t.push(i>>12&63|128),t.push(i>>6&63|128),t.push(63&i|128);continue}t.push(239,191,189)}return new Uint8Array(t).buffer}},26729:function(e){"use strict";var t=Object.prototype.hasOwnProperty,n="~";function Events(){}function EE(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function addListener(e,t,o,i,s){if("function"!=typeof o)throw TypeError("The listener must be a function");var l=new EE(o,i||e,s),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],l]:e._events[c].push(l):(e._events[c]=l,e._eventsCount++),e}function clearEvent(e,t){0==--e._eventsCount?e._events=new Events:delete e._events[t]}function EventEmitter(){this._events=new Events,this._eventsCount=0}Object.create&&(Events.prototype=Object.create(null),new Events().__proto__||(n=!1)),EventEmitter.prototype.eventNames=function(){var e,o,i=[];if(0===this._eventsCount)return i;for(o in e=this._events)t.call(e,o)&&i.push(n?o.slice(1):o);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},EventEmitter.prototype.listeners=function(e){var t=n?n+e:e,o=this._events[t];if(!o)return[];if(o.fn)return[o.fn];for(var i=0,s=o.length,l=Array(s);ie.trim());for(let n=0;n>4]+t[15&e[o]];return n}if("object"==typeof e&&"function"==typeof e.toJSON)return stringify(e.toJSON());switch(typeof e){case"boolean":case"symbol":case"number":return e.toString();case"bigint":return BigInt(e).toString();case"string":return JSON.stringify(e);case"object":{let t=Object.keys(e);return t.sort(),"{ "+t.map(t=>`${stringify(t)}: ${stringify(e[t])}`).join(", ")+" }"}}return"[ COULD NOT SERIALIZE ]"}function errors_assert(e,t,n,o){if(!e)throw function(e,t,n){let o,i=e;{let o=[];if(n){if("message"in n||"code"in n||"name"in n)throw Error(`value will overwrite populated values: ${stringify(n)}`);for(let e in n){if("shortMessage"===e)continue;let t=n[e];o.push(e+"="+stringify(t))}}o.push(`code=${t}`),o.push("version=6.11.1"),o.length&&(e+=" ("+o.join(", ")+")")}switch(t){case"INVALID_ARGUMENT":o=TypeError(e);break;case"NUMERIC_FAULT":case"BUFFER_OVERRUN":o=RangeError(e);break;default:o=Error(e)}return defineProperties(o,{code:t}),n&&Object.assign(o,n),null==o.shortMessage&&defineProperties(o,{shortMessage:i}),o}(t,n,o)}function assertArgument(e,t,n,o){errors_assert(e,t,"INVALID_ARGUMENT",{argument:n,value:o})}let u=["NFD","NFC","NFKD","NFKC"].reduce((e,t)=>{try{if("test"!=="test".normalize(t))throw Error("bad");if("NFD"===t){let e=String.fromCharCode(233).normalize("NFD"),t=String.fromCharCode(101,769);if(e!==t)throw Error("broken")}e.push(t)}catch(e){}return e},[]);function _getBytes(e,t,n){if(e instanceof Uint8Array)return n?new Uint8Array(e):e;if("string"==typeof e&&e.match(/^0x([0-9a-f][0-9a-f])*$/i)){let t=new Uint8Array((e.length-2)/2),n=2;for(let o=0;o>4]+d[15&o]}return n}function concat(e){return"0x"+e.map(e=>data_hexlify(e).substring(2)).join("")}function dataLength(e){return isHexString(e,!0)?(e.length-2)/2:data_getBytes(e).length}let p=!1,_keccak256=function(e){return(0,c.fr)(e)},f=_keccak256;function keccak256(e){let t=data_getBytes(e,"data");return data_hexlify(f(t))}keccak256._=_keccak256,keccak256.lock=function(){p=!0},keccak256.register=function(e){if(p)throw TypeError("keccak256 is locked");f=e},Object.freeze(keccak256);let m=BigInt(0),b=BigInt(36);function getChecksumAddress(e){e=e.toLowerCase();let t=e.substring(2).split(""),n=new Uint8Array(40);for(let e=0;e<40;e++)n[e]=t[e].charCodeAt(0);let o=data_getBytes(keccak256(n));for(let e=0;e<40;e+=2)o[e>>1]>>4>=8&&(t[e]=t[e].toUpperCase()),(15&o[e>>1])>=8&&(t[e+1]=t[e+1].toUpperCase());return"0x"+t.join("")}let g={};for(let e=0;e<10;e++)g[String(e)]=String(e);for(let e=0;e<26;e++)g[String.fromCharCode(65+e)]=String(10+e);let y=function(){let e={};for(let t=0;t<36;t++){let n="0123456789abcdefghijklmnopqrstuvwxyz"[t];e[n]=BigInt(t)}return e}();var v=n(11606),w=n(27499);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */let C=BigInt(0),E=BigInt(1),x=BigInt(2),A=BigInt(3),k=BigInt(4),B=BigInt(5),S=BigInt(8);function modular_mod(e,t){let n=e%t;return n>=C?n:t+n}function pow2(e,t,n){let o=e;for(;t-- >C;)o*=o,o%=n;return o}function invert(e,t){if(e===C||t<=C)throw Error(`invert: expected positive integers, got n=${e} mod=${t}`);let n=modular_mod(e,t),o=t,i=C,s=E,l=E,c=C;for(;n!==C;){let e=o/n,t=o%n,u=i-l*e,d=s-c*e;o=n,n=t,i=l,s=c,l=u,c=d}let u=o;if(u!==E)throw Error("invert: does not exist");return modular_mod(i,t)}BigInt(9),BigInt(16);let I=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function nLength(e,t){let n=void 0!==t?t:e.toString(2).length;return{nBitLength:n,nByteLength:Math.ceil(n/8)}}function getFieldBytesLength(e){if("bigint"!=typeof e)throw Error("field order must be bigint");let t=e.toString(2).length;return Math.ceil(t/8)}function getMinHashLength(e){let t=getFieldBytesLength(e);return t+Math.ceil(t/2)}var j=n(93527),T=n(66409);let HMAC=class HMAC extends T.kb{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,(0,j.vp)(e);let n=(0,T.O0)(t);if(this.iHash=e.create(),"function"!=typeof this.iHash.update)throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let e=0;enew HMAC(e,t).update(n).digest();hmac.create=(e,t)=>new HMAC(e,t);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */let P=BigInt(0),M=BigInt(1);function validateBasic(e){return!function(e){let t=I.reduce((e,t)=>(e[t]="function",e),{ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"});(0,w.FF)(e,t)}(e.Fp),(0,w.FF)(e,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...nLength(e.n,e.nBitLength),...e,p:e.Fp.ORDER})}let{bytesToNumberBE:O,hexToBytes:R}=w,U={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(e){let{Err:t}=U;if(e.length<2||2!==e[0])throw new t("Invalid signature integer tag");let n=e[1],o=e.subarray(2,n+2);if(!n||o.length!==n)throw new t("Invalid signature integer: wrong length");if(128&o[0])throw new t("Invalid signature integer: negative");if(0===o[0]&&!(128&o[1]))throw new t("Invalid signature integer: unnecessary leading zero");return{d:O(o),l:e.subarray(n+2)}},toSig(e){let{Err:t}=U,n="string"==typeof e?R(e):e;if(!(n instanceof Uint8Array))throw Error("ui8a expected");let o=n.length;if(o<2||48!=n[0])throw new t("Invalid signature tag");if(n[1]!==o-2)throw new t("Invalid signature: incorrect length");let{d:i,l:s}=U._parseInt(n.subarray(2)),{d:l,l:c}=U._parseInt(s);if(c.length)throw new t("Invalid signature: left bytes after parsing");return{r:i,s:l}},hexFromSig(e){let slice=e=>8&Number.parseInt(e[0],16)?"00"+e:e,h=e=>{let t=e.toString(16);return 1&t.length?`0${t}`:t},t=slice(h(e.s)),n=slice(h(e.r)),o=t.length/2,i=n.length/2,s=h(o),l=h(i);return`30${h(i+o+4)}02${l}${n}02${s}${t}`}},F=BigInt(0),N=BigInt(1),D=(BigInt(2),BigInt(3));BigInt(4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */let _=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),L=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),z=BigInt(1),q=BigInt(2),divNearest=(e,t)=>(e+t/q)/t,G=function(e,t,n=!1,o={}){if(e<=C)throw Error(`Expected Field ORDER > 0, got ${e}`);let{nBitLength:i,nByteLength:s}=nLength(e,t);if(s>2048)throw Error("Field lengths over 2048 bytes are not supported");let l=function(e){if(e%k===A){let t=(e+E)/k;return function(e,n){let o=e.pow(n,t);if(!e.eql(e.sqr(o),n))throw Error("Cannot find square root");return o}}if(e%S===B){let t=(e-B)/S;return function(e,n){let o=e.mul(n,x),i=e.pow(o,t),s=e.mul(n,i),l=e.mul(e.mul(s,x),i),c=e.mul(s,e.sub(l,e.ONE));if(!e.eql(e.sqr(c),n))throw Error("Cannot find square root");return c}}return function(e){let t,n,o;let i=(e-E)/x;for(t=e-E,n=0;t%x===C;t/=x,n++);for(o=x;o 0");if(n===E)return C;let o=E;for(;t>C;)t&E&&(o=o*e%n),e=e*e%n,t>>=E;return o}(o,i,e)!==e-E;o++);if(1===n){let t=(e+E)/k;return function(e,n){let o=e.pow(n,t);if(!e.eql(e.sqr(o),n))throw Error("Cannot find square root");return o}}let s=(t+E)/x;return function(e,l){if(e.pow(l,i)===e.neg(e.ONE))throw Error("Cannot find square root");let c=n,u=e.pow(e.mul(e.ONE,o),t),d=e.pow(l,s),p=e.pow(l,t);for(;!e.eql(p,e.ONE);){if(e.eql(p,e.ZERO))return e.ZERO;let t=1;for(let n=e.sqr(p);tmodular_mod(t,e),isValid:t=>{if("bigint"!=typeof t)throw Error(`Invalid field element: expected bigint, got ${typeof t}`);return C<=t&&te===C,isOdd:e=>(e&E)===E,neg:t=>modular_mod(-t,e),eql:(e,t)=>e===t,sqr:t=>modular_mod(t*t,e),add:(t,n)=>modular_mod(t+n,e),sub:(t,n)=>modular_mod(t-n,e),mul:(t,n)=>modular_mod(t*n,e),pow:(e,t)=>(function(e,t,n){if(n 0");if(n===C)return e.ONE;if(n===E)return t;let o=e.ONE,i=t;for(;n>C;)n&E&&(o=e.mul(o,i)),i=e.sqr(i),n>>=E;return o})(c,e,t),div:(t,n)=>modular_mod(t*invert(n,e),e),sqrN:e=>e*e,addN:(e,t)=>e+t,subN:(e,t)=>e-t,mulN:(e,t)=>e*t,inv:t=>invert(t,e),sqrt:o.sqrt||(e=>l(c,e)),invertBatch:e=>(function(e,t){let n=Array(t.length),o=t.reduce((t,o,i)=>e.is0(o)?t:(n[i]=t,e.mul(t,o)),e.ONE),i=e.inv(o);return t.reduceRight((t,o,i)=>e.is0(o)?t:(n[i]=e.mul(t,n[i]),e.mul(t,o)),i),n})(c,e),cmov:(e,t,n)=>n?t:e,toBytes:e=>n?(0,w.S5)(e,s):(0,w.tL)(e,s),fromBytes:e=>{if(e.length!==s)throw Error(`Fp.fromBytes: expected ${s}, got ${e.length}`);return n?(0,w.ty)(e):(0,w.bytesToNumberBE)(e)}});return Object.freeze(c)}(_,void 0,void 0,{sqrt:function(e){let t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),l=BigInt(44),c=BigInt(88),u=e*e*e%_,d=u*u*e%_,p=pow2(d,t,_)*d%_,f=pow2(p,t,_)*d%_,m=pow2(f,q,_)*u%_,b=pow2(m,o,_)*m%_,g=pow2(b,i,_)*b%_,y=pow2(g,l,_)*g%_,v=pow2(y,c,_)*y%_,w=pow2(v,l,_)*g%_,C=pow2(w,t,_)*d%_,E=pow2(C,s,_)*b%_,x=pow2(E,n,_)*u%_,A=pow2(x,q,_);if(!G.eql(G.sqr(A),e))throw Error("Cannot find square root");return A}}),W=function(e,t){let create=t=>(function(e){let t=function(e){let t=validateBasic(e);return w.FF(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}(e),{Fp:n,n:o}=t,i=n.BYTES+1,s=2*n.BYTES+1;function modN(e){return modular_mod(e,o)}let{ProjectivePoint:l,normPrivateKeyToScalar:c,weierstrassEquation:u,isWithinCurveOrder:d}=function(e){let t=/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function(e){let t=validateBasic(e);w.FF(t,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:n,Fp:o,a:i}=t;if(n){if(!o.eql(i,o.ZERO))throw Error("Endomorphism can only be defined for Koblitz curves that have a=0");if("object"!=typeof n||"bigint"!=typeof n.beta||"function"!=typeof n.splitScalar)throw Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...t})}(e),{Fp:n}=t,o=t.toBytes||((e,t,o)=>{let i=t.toAffine();return w.eV(Uint8Array.from([4]),n.toBytes(i.x),n.toBytes(i.y))}),i=t.fromBytes||(e=>{let t=e.subarray(1),o=n.fromBytes(t.subarray(0,n.BYTES)),i=n.fromBytes(t.subarray(n.BYTES,2*n.BYTES));return{x:o,y:i}});function weierstrassEquation(e){let{a:o,b:i}=t,s=n.sqr(e),l=n.mul(s,e);return n.add(n.add(l,n.mul(e,o)),i)}if(!n.eql(n.sqr(t.Gy),weierstrassEquation(t.Gx)))throw Error("bad generator point: equation left != right");function isWithinCurveOrder(e){return"bigint"==typeof e&&Fn.eql(e,n.ZERO);return is0(t)&&is0(o)?Point.ZERO:new Point(t,o,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(e){let t=n.invertBatch(e.map(e=>e.pz));return e.map((e,n)=>e.toAffine(t[n])).map(Point.fromAffine)}static fromHex(e){let t=Point.fromAffine(i((0,w.ql)("pointHex",e)));return t.assertValidity(),t}static fromPrivateKey(e){return Point.BASE.multiply(normPrivateKeyToScalar(e))}_setWindowSize(e){this._WINDOW_SIZE=e,s.delete(this)}assertValidity(){if(this.is0()){if(t.allowInfinityPoint&&!n.is0(this.py))return;throw Error("bad point: ZERO")}let{x:e,y:o}=this.toAffine();if(!n.isValid(e)||!n.isValid(o))throw Error("bad point: x or y not FE");let i=n.sqr(o),s=weierstrassEquation(e);if(!n.eql(i,s))throw Error("bad point: equation left != right");if(!this.isTorsionFree())throw Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:e}=this.toAffine();if(n.isOdd)return!n.isOdd(e);throw Error("Field doesn't support isOdd")}equals(e){assertPrjPoint(e);let{px:t,py:o,pz:i}=this,{px:s,py:l,pz:c}=e,u=n.eql(n.mul(t,c),n.mul(s,i)),d=n.eql(n.mul(o,c),n.mul(l,i));return u&&d}negate(){return new Point(this.px,n.neg(this.py),this.pz)}double(){let{a:e,b:o}=t,i=n.mul(o,D),{px:s,py:l,pz:c}=this,u=n.ZERO,d=n.ZERO,p=n.ZERO,f=n.mul(s,s),m=n.mul(l,l),b=n.mul(c,c),g=n.mul(s,l);return g=n.add(g,g),p=n.mul(s,c),p=n.add(p,p),u=n.mul(e,p),d=n.mul(i,b),d=n.add(u,d),u=n.sub(m,d),d=n.add(m,d),d=n.mul(u,d),u=n.mul(g,u),p=n.mul(i,p),b=n.mul(e,b),g=n.sub(f,b),g=n.mul(e,g),g=n.add(g,p),p=n.add(f,f),f=n.add(p,f),f=n.add(f,b),f=n.mul(f,g),d=n.add(d,f),b=n.mul(l,c),b=n.add(b,b),f=n.mul(b,g),u=n.sub(u,f),p=n.mul(b,m),p=n.add(p,p),p=n.add(p,p),new Point(u,d,p)}add(e){assertPrjPoint(e);let{px:o,py:i,pz:s}=this,{px:l,py:c,pz:u}=e,d=n.ZERO,p=n.ZERO,f=n.ZERO,m=t.a,b=n.mul(t.b,D),g=n.mul(o,l),y=n.mul(i,c),v=n.mul(s,u),w=n.add(o,i),C=n.add(l,c);w=n.mul(w,C),C=n.add(g,y),w=n.sub(w,C),C=n.add(o,s);let E=n.add(l,u);return C=n.mul(C,E),E=n.add(g,v),C=n.sub(C,E),E=n.add(i,s),d=n.add(c,u),E=n.mul(E,d),d=n.add(y,v),E=n.sub(E,d),f=n.mul(m,C),d=n.mul(b,v),f=n.add(d,f),d=n.sub(y,f),f=n.add(y,f),p=n.mul(d,f),y=n.add(g,g),y=n.add(y,g),v=n.mul(m,v),C=n.mul(b,C),y=n.add(y,v),v=n.sub(g,v),v=n.mul(m,v),C=n.add(C,v),g=n.mul(y,C),p=n.add(p,g),g=n.mul(E,C),d=n.mul(w,d),d=n.sub(d,g),g=n.mul(w,y),f=n.mul(E,f),f=n.add(f,g),new Point(d,p,f)}subtract(e){return this.add(e.negate())}is0(){return this.equals(Point.ZERO)}wNAF(e){return c.wNAFCached(this,s,e,e=>{let t=n.invertBatch(e.map(e=>e.pz));return e.map((e,n)=>e.toAffine(t[n])).map(Point.fromAffine)})}multiplyUnsafe(e){let o=Point.ZERO;if(e===F)return o;if(assertGE(e),e===N)return this;let{endo:i}=t;if(!i)return c.unsafeLadder(this,e);let{k1neg:s,k1:l,k2neg:u,k2:d}=i.splitScalar(e),p=o,f=o,m=this;for(;l>F||d>F;)l&N&&(p=p.add(m)),d&N&&(f=f.add(m)),m=m.double(),l>>=N,d>>=N;return s&&(p=p.negate()),u&&(f=f.negate()),f=new Point(n.mul(f.px,i.beta),f.py,f.pz),p.add(f)}multiply(e){let o,i;assertGE(e);let{endo:s}=t;if(s){let{k1neg:t,k1:l,k2neg:u,k2:d}=s.splitScalar(e),{p:p,f:f}=this.wNAF(l),{p:m,f:b}=this.wNAF(d);p=c.constTimeNegate(t,p),m=c.constTimeNegate(u,m),m=new Point(n.mul(m.px,s.beta),m.py,m.pz),o=p.add(m),i=f.add(b)}else{let{p:t,f:n}=this.wNAF(e);o=t,i=n}return Point.normalizeZ([o,i])[0]}multiplyAndAddUnsafe(e,t,n){let o=Point.BASE,mul=(e,t)=>t!==F&&t!==N&&e.equals(o)?e.multiply(t):e.multiplyUnsafe(t),i=mul(this,t).add(mul(e,n));return i.is0()?void 0:i}toAffine(e){let{px:t,py:o,pz:i}=this,s=this.is0();null==e&&(e=s?n.ONE:n.inv(i));let l=n.mul(t,e),c=n.mul(o,e),u=n.mul(i,e);if(s)return{x:n.ZERO,y:n.ZERO};if(!n.eql(u,n.ONE))throw Error("invZ was invalid");return{x:l,y:c}}isTorsionFree(){let{h:e,isTorsionFree:n}=t;if(e===N)return!0;if(n)return n(Point,this);throw Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:e,clearCofactor:n}=t;return e===N?this:n?n(Point,this):this.multiplyUnsafe(t.h)}toRawBytes(e=!0){return this.assertValidity(),o(Point,this,e)}toHex(e=!0){return w.ci(this.toRawBytes(e))}};Point.BASE=new Point(t.Gx,t.Gy,n.ONE),Point.ZERO=new Point(n.ZERO,n.ONE,n.ZERO);let l=t.nBitLength,c=function(e,t){let constTimeNegate=(e,t)=>{let n=t.negate();return e?n:t},opts=e=>({windows:Math.ceil(t/e)+1,windowSize:2**(e-1)});return{constTimeNegate,unsafeLadder(t,n){let o=e.ZERO,i=t;for(;n>P;)n&M&&(o=o.add(i)),i=i.double(),n>>=M;return o},precomputeWindow(e,t){let{windows:n,windowSize:o}=opts(t),i=[],s=e,l=s;for(let e=0;e>=p,i>s&&(i-=d,o+=M);let f=t+Math.abs(i)-1,m=e%2!=0,b=i<0;0===i?c=c.add(constTimeNegate(m,n[t])):l=l.add(constTimeNegate(b,n[f]))}return{p:l,f:c}},wNAFCached(e,t,n,o){let i=e._WINDOW_SIZE||1,s=t.get(e);return s||(s=this.precomputeWindow(e,i),1!==i&&t.set(e,o(s))),this.wNAF(i,s,n)}}}(Point,t.endo?Math.ceil(l/2):l);return{CURVE:t,ProjectivePoint:Point,normPrivateKeyToScalar,weierstrassEquation,isWithinCurveOrder}}({...t,toBytes(e,t,o){let i=t.toAffine(),s=n.toBytes(i.x),l=w.eV;return o?l(Uint8Array.from([t.hasEvenY()?2:3]),s):l(Uint8Array.from([4]),s,n.toBytes(i.y))},fromBytes(e){let t=e.length,o=e[0],l=e.subarray(1);if(t===i&&(2===o||3===o)){let e=w.bytesToNumberBE(l);if(!(Fw.ci(w.tL(e,t.nByteLength));function isBiggerThanHalfOrder(e){let t=o>>N;return e>t}let slcNum=(e,t,n)=>w.bytesToNumberBE(e.slice(t,n));let Signature=class Signature{constructor(e,t,n){this.r=e,this.s=t,this.recovery=n,this.assertValidity()}static fromCompact(e){let n=t.nByteLength;return e=(0,w.ql)("compactSignature",e,2*n),new Signature(slcNum(e,0,n),slcNum(e,n,2*n))}static fromDER(e){let{r:t,s:n}=U.toSig((0,w.ql)("DER",e));return new Signature(t,n)}assertValidity(){if(!d(this.r))throw Error("r must be 0 < r < CURVE.n");if(!d(this.s))throw Error("s must be 0 < s < CURVE.n")}addRecoveryBit(e){return new Signature(this.r,this.s,e)}recoverPublicKey(e){let{r:i,s,recovery:c}=this,u=f((0,w.ql)("msgHash",e));if(null==c||![0,1,2,3].includes(c))throw Error("recovery id invalid");let d=2===c||3===c?i+t.n:i;if(d>=n.ORDER)throw Error("recovery id 2 or 3 invalid");let p=(1&c)==0?"02":"03",m=l.fromHex(p+numToNByteStr(d)),b=invert(d,o),g=modN(-u*b),y=modN(s*b),v=l.BASE.multiplyAndAddUnsafe(m,g,y);if(!v)throw Error("point at infinify");return v.assertValidity(),v}hasHighS(){return isBiggerThanHalfOrder(this.s)}normalizeS(){return this.hasHighS()?new Signature(this.r,modN(-this.s),this.recovery):this}toDERRawBytes(){return w.hexToBytes(this.toDERHex())}toDERHex(){return U.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return w.hexToBytes(this.toCompactHex())}toCompactHex(){return numToNByteStr(this.r)+numToNByteStr(this.s)}};function isProbPub(e){let t=e instanceof Uint8Array,n="string"==typeof e,o=(t||n)&&e.length;return t?o===i||o===s:n?o===2*i||o===2*s:e instanceof l}let p=t.bits2int||function(e){let n=w.bytesToNumberBE(e),o=8*e.length-t.nBitLength;return o>0?n>>BigInt(o):n},f=t.bits2int_modN||function(e){return modN(p(e))},m=w.dQ(t.nBitLength);function int2octets(e){if("bigint"!=typeof e)throw Error("bigint expected");if(!(F<=e&&ee in s))throw Error("sign() legacy options not supported");let{hash:u,randomBytes:m}=t,{lowS:g,prehash:y,extraEntropy:v}=s;null==g&&(g=!0),e=(0,w.ql)("msgHash",e),y&&(e=(0,w.ql)("prehashed msgHash",u(e)));let C=f(e),E=c(i),x=[int2octets(E),int2octets(C)];if(null!=v){let e=!0===v?m(n.BYTES):v;x.push((0,w.ql)("extraEntropy",e))}let A=w.eV(...x);return{seed:A,k2sig:function(e){let t=p(e);if(!d(t))return;let n=invert(t,o),i=l.BASE.multiply(t).toAffine(),s=modN(i.x);if(s===F)return;let c=modN(n*modN(C+s*E));if(c===F)return;let u=(i.x===s?0:2)|Number(i.y&N),f=c;return g&&isBiggerThanHalfOrder(c)&&(f=isBiggerThanHalfOrder(c)?modN(-c):c,u^=1),new Signature(s,f,u)}}}(e,i,s),g=w.n$(t.hash.outputLen,t.nByteLength,t.hmac);return g(u,m)},verify:function(e,n,i,s=g){let c,u;if(n=(0,w.ql)("msgHash",n),i=(0,w.ql)("publicKey",i),"strict"in s)throw Error("options.strict was renamed to lowS");let{lowS:d,prehash:p}=s;try{if("string"==typeof e||e instanceof Uint8Array)try{u=Signature.fromDER(e)}catch(t){if(!(t instanceof U.Err))throw t;u=Signature.fromCompact(e)}else if("object"==typeof e&&"bigint"==typeof e.r&&"bigint"==typeof e.s){let{r:t,s:n}=e;u=new Signature(t,n)}else throw Error("PARSE");c=l.fromHex(i)}catch(e){if("PARSE"===e.message)throw Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(d&&u.hasHighS())return!1;p&&(n=t.hash(n));let{r:m,s:b}=u,y=f(n),v=invert(b,o),C=modN(y*v),E=modN(m*v),x=l.BASE.multiplyAndAddUnsafe(c,C,E)?.toAffine();if(!x)return!1;let A=modN(x.x);return A===m},ProjectivePoint:l,Signature,utils:{isValidPrivateKey(e){try{return c(e),!0}catch(e){return!1}},normPrivateKeyToScalar:c,randomPrivateKey:()=>{let e=getMinHashLength(t.n);return function(e,t,n=!1){let o=e.length,i=getFieldBytesLength(t),s=getMinHashLength(t);if(o<16||o1024)throw Error(`expected ${s}-1024 bytes of input, got ${o}`);let l=n?(0,w.bytesToNumberBE)(e):(0,w.ty)(e),c=modular_mod(l,t-E)+E;return n?(0,w.S5)(c,i):(0,w.tL)(c,i)}(t.randomBytes(e),t.n)},precompute:(e=8,t=l.BASE)=>(t._setWindowSize(e),t.multiply(BigInt(3)),t)}}})({...e,hash:t,hmac:(e,...n)=>hmac(t,e,(0,T.eV)(...n)),randomBytes:T.O6});return Object.freeze({...create(t),create})}({a:BigInt(0),b:BigInt(7),Fp:G,n:L,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:e=>{let t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-z*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=BigInt("0x100000000000000000000000000000000"),s=divNearest(t*e,L),l=divNearest(-n*e,L),c=modular_mod(e-s*t-l*o,L),u=modular_mod(-s*n-l*t,L),d=c>i,p=u>i;if(d&&(c=L-c),p&&(u=L-u),c>i||u>i)throw Error("splitScalar: Endomorphism failed, k="+e);return{k1neg:d,k1:c,k2neg:p,k2:u}}}},v.J),H=(BigInt(0),W.ProjectivePoint,BigInt(0));function getBigInt(e,t){switch(typeof e){case"bigint":return e;case"number":return assertArgument(Number.isInteger(e),"underflow",t||"value",e),assertArgument(e>=-9007199254740991&&e<=9007199254740991,"overflow",t||"value",e),BigInt(e);case"string":try{if(""===e)throw Error("empty string");if("-"===e[0]&&"-"!==e[1])return-BigInt(e.substring(1));return BigInt(e)}catch(n){assertArgument(!1,`invalid BigNumberish string: ${n.message}`,t||"value",e)}}assertArgument(!1,"invalid BigNumberish value",t||"value",e)}function getUint(e,t){let n=getBigInt(e,t);return errors_assert(n>=H,"unsigned value cannot be negative","NUMERIC_FAULT",{fault:"overflow",operation:"getUint",value:e}),n}function getNumber(e,t){switch(typeof e){case"bigint":return assertArgument(e>=-9007199254740991&&e<=9007199254740991,"overflow",t||"value",e),Number(e);case"number":return assertArgument(Number.isInteger(e),"underflow",t||"value",e),assertArgument(e>=-9007199254740991&&e<=9007199254740991,"overflow",t||"value",e),e;case"string":try{if(""===e)throw Error("empty string");return getNumber(BigInt(e),t)}catch(n){assertArgument(!1,`invalid numeric string: ${n.message}`,t||"value",e)}}assertArgument(!1,"invalid numeric value",t||"value",e)}function toBeHex(e,t){let n=getUint(e,"value"),o=n.toString(16);if(null==t)o.length%2&&(o="0"+o);else{let n=getNumber(t,"width");for(errors_assert(2*n>=o.length,`value exceeds width (${n} bytes)`,"NUMERIC_FAULT",{operation:"toBeHex",fault:"overflow",value:e});o.length<2*n;)o="0"+o}return"0x"+o}BigInt(1);let Q="0x0000000000000000000000000000000000000000000000000000000000000000",K=BigInt(0),V=BigInt(1),Z=BigInt(2),J=BigInt(27),X=BigInt(28),Y=BigInt(35),$={};function toUint256(e){return function(e,t,n){let o=data_getBytes(e);errors_assert(t>=o.length,"padding exceeds data length","BUFFER_OVERRUN",{buffer:new Uint8Array(o),length:t,offset:t+1});let i=new Uint8Array(t);return i.fill(0),n?i.set(o,t-o.length):i.set(o,0),data_hexlify(i)}(function(e){let t=getUint(e,"value");if(t===H)return new Uint8Array([]);let n=t.toString(16);n.length%2&&(n="0"+n);let o=new Uint8Array(n.length/2);for(let e=0;eparseInt(t.substring(0,3)),"non-canonical s","value",t),this.#t=t}get v(){return this.#r}set v(e){let t=getNumber(e,"value");assertArgument(27===t||28===t,"invalid v","v",e),this.#r=t}get networkV(){return this.#n}get legacyChainId(){let e=this.networkV;return null==e?null:Signature.getChainId(e)}get yParity(){return 27===this.v?0:1}get yParityAndS(){let e=data_getBytes(this.s);return this.yParity&&(e[0]|=128),data_hexlify(e)}get compactSerialized(){return concat([this.r,this.yParityAndS])}get serialized(){return concat([this.r,this.s,this.yParity?"0x1c":"0x1b"])}constructor(e,t,n,o){!function(e,t,n){if(null==n&&(n=""),e!==t){let e=n,t="new";n&&(e+=".",t+=" "+n),errors_assert(!1,`private constructor; use ${e}from* methods`,"UNSUPPORTED_OPERATION",{operation:t})}}(e,$,"Signature"),this.#e=t,this.#t=n,this.#r=o,this.#n=null}[Symbol.for("nodejs.util.inspect.custom")](){return`Signature { r: "${this.r}", s: "${this.s}", yParity: ${this.yParity}, networkV: ${this.networkV} }`}clone(){let e=new Signature($,this.r,this.s,this.v);return this.networkV&&(e.#n=this.networkV),e}toJSON(){let e=this.networkV;return{_type:"signature",networkV:null!=e?e.toString():null,r:this.r,s:this.s,v:this.v}}static getChainId(e){let t=getBigInt(e,"v");return t==J||t==X?K:(assertArgument(t>=Y,"invalid EIP-155 v","v",e),(t-Y)/Z)}static getChainIdV(e,t){return getBigInt(e)*Z+BigInt(35+t-27)}static getNormalizedV(e){let t=getBigInt(e);return t===K||t===J?27:t===V||t===X?28:(assertArgument(t>=Y,"invalid v","v",e),t&V?27:28)}static from(e){function assertError(t,n){assertArgument(t,n,"signature",e)}if(null==e)return new Signature($,Q,Q,27);if("string"==typeof e){let t=data_getBytes(e,"signature");if(64===t.length){let e=data_hexlify(t.slice(0,32)),n=t.slice(32,64),o=128&n[0]?28:27;return n[0]&=127,new Signature($,e,data_hexlify(n),o)}if(65===t.length){let e=data_hexlify(t.slice(0,32)),n=t.slice(32,64);assertError((128&n[0])==0,"non-canonical s");let o=Signature.getNormalizedV(t[64]);return new Signature($,e,data_hexlify(n),o)}assertError(!1,"invalid raw signature length")}if(e instanceof Signature)return e.clone();let t=e.r;assertError(null!=t,"missing r");let n=toUint256(t),o=function(e,t){if(null!=e)return toUint256(e);if(null!=t){assertError(isHexString(t,32),"invalid yParityAndS");let e=data_getBytes(t);return e[0]&=127,data_hexlify(e)}assertError(!1,"missing s")}(e.s,e.yParityAndS);assertError((128&data_getBytes(o)[0])==0,"non-canonical s");let{networkV:i,v:s}=function(e,t,n){if(null!=e){let t=getBigInt(e);return{networkV:t>=Y?t:void 0,v:Signature.getNormalizedV(t)}}if(null!=t)return assertError(isHexString(t,32),"invalid yParityAndS"),{v:128&data_getBytes(t)[0]?28:27};if(null!=n){switch(getNumber(n,"sig.yParity")){case 0:return{v:27};case 1:return{v:28}}assertError(!1,"invalid yParity")}assertError(!1,"missing v")}(e.v,e.yParityAndS,e.yParity),l=new Signature($,n,o,s);return i&&(l.#n=i),assertError(null==e.yParity||getNumber(e.yParity,"sig.yParity")===l.yParity,"yParity mismatch"),assertError(null==e.yParityAndS||e.yParityAndS===l.yParityAndS,"yParityAndS mismatch"),l}};let SigningKey=class SigningKey{#a;constructor(e){assertArgument(32===dataLength(e),"invalid private key","privateKey","[REDACTED]"),this.#a=data_hexlify(e)}get privateKey(){return this.#a}get publicKey(){return SigningKey.computePublicKey(this.#a)}get compressedPublicKey(){return SigningKey.computePublicKey(this.#a,!0)}sign(e){assertArgument(32===dataLength(e),"invalid digest length","digest",e);let t=W.sign(getBytesCopy(e),getBytesCopy(this.#a),{lowS:!0});return Signature.from({r:toBeHex(t.r,32),s:toBeHex(t.s,32),v:t.recovery?28:27})}computeSharedSecret(e){let t=SigningKey.computePublicKey(e);return data_hexlify(W.getSharedSecret(getBytesCopy(this.#a),data_getBytes(t),!1))}static computePublicKey(e,t){let n=data_getBytes(e,"key");if(32===n.length){let e=W.getPublicKey(n,!!t);return data_hexlify(e)}if(64===n.length){let e=new Uint8Array(65);e[0]=4,e.set(n,1),n=e}let o=W.ProjectivePoint.fromHex(n);return data_hexlify(o.toRawBytes(t))}static recoverPublicKey(e,t){assertArgument(32===dataLength(e),"invalid digest length","digest",e);let n=Signature.from(t),o=W.Signature.fromCompact(getBytesCopy(concat([n.r,n.s])));o=o.addRecoveryBit(n.yParity);let i=o.recoverPublicKey(getBytesCopy(e));return assertArgument(null!=i,"invalid signautre for digest","signature",t),"0x"+i.toHex(!1)}static addPoints(e,t,n){let o=W.ProjectivePoint.fromHex(SigningKey.computePublicKey(e).substring(2)),i=W.ProjectivePoint.fromHex(SigningKey.computePublicKey(t).substring(2));return"0x"+o.add(i).toHex(!!n)}};function ignoreFunc(e,t,n,o,i){if("BAD_PREFIX"===e||"UNEXPECTED_CONTINUE"===e){let e=0;for(let o=t+1;o>6==2;o++)e++;return e}return"OVERRUN"===e?n.length-t-1:0}function toUtf8Bytes(e,t){assertArgument("string"==typeof e,"invalid string value","str",e),null!=t&&(errors_assert(u.indexOf(t)>=0,"platform missing String.prototype.normalize","UNSUPPORTED_OPERATION",{operation:"String.prototype.normalize",info:{form:t}}),e=e.normalize(t));let n=[];for(let t=0;t>6|192),n.push(63&o|128);else if((64512&o)==55296){t++;let i=e.charCodeAt(t);assertArgument(t>18|240),n.push(s>>12&63|128),n.push(s>>6&63|128),n.push(63&s|128)}else n.push(o>>12|224),n.push(o>>6&63|128),n.push(63&o|128)}return new Uint8Array(n)}Object.freeze({error:function(e,t,n,o,i){assertArgument(!1,`invalid codepoint at offset ${t}; ${e}`,"bytes",n)},ignore:ignoreFunc,replace:function(e,t,n,o,i){return"OVERLONG"===e?(assertArgument("number"==typeof i,"invalid bad code point for replacement","badCodepoint",i),o.push(i),0):(o.push(65533),ignoreFunc(e,t,n,o,i))}});let ee=(0,i.createContext)(void 0),AdminProvider=e=>{let{children:t}=e,{address:n,isConnected:c}=(0,s.m)(),{signMessage:u,data:d}=(0,l.Q)(),[p,f]=(0,i.useState)(!1),[v,w]=(0,i.useState)([]),[C,E]=(0,i.useState)(),[x,A]=(0,i.useState)(),[k,B]=(0,i.useState)(!0),[S,I]=(0,i.useState)([]);return(0,i.useEffect)(()=>{c&&n||(A(void 0),E(void 0))},[n,c]),(0,i.useEffect)(()=>{let e=localStorage.getItem("expiryTimestamp"),t=e?parseInt(e,10):null;if(t&&t>Date.now()){E(t);let e=localStorage.getItem("signature");e&&A(e)}},[n,c]),(0,i.useEffect)(()=>{C&&C>Date.now()&&(localStorage.setItem("expiryTimestamp",C.toString()),x&&localStorage.setItem("signature",x))},[C,x,n,c]),(0,i.useEffect)(()=>{d&&A(d)},[d,n,c]),(0,i.useEffect)(()=>{let e=setInterval(()=>{if(C){let e=Date.now();B(eclearInterval(e)},[C,n,c]),(0,i.useEffect)(()=>{if(C&&x){var e;let t=null===(e=function(e,t){var n,o;let i=("string"==typeof(n=e)&&(n=toUtf8Bytes(n)),keccak256(concat([toUtf8Bytes("\x19Ethereum Signed Message:\n"),toUtf8Bytes(String(n.length)),n])));return function(e){if(assertArgument("string"==typeof e,"invalid address","address",e),e.match(/^(0x)?[0-9a-fA-F]{40}$/)){e.startsWith("0x")||(e="0x"+e);let t=getChecksumAddress(e);return assertArgument(!e.match(/([A-F].*[a-f])|([a-f].*[A-F])/)||t===e,"bad address checksum","address",e),t}if(e.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){assertArgument(e.substring(2,4)===function(e){let t=(e=(e=e.toUpperCase()).substring(4)+e.substring(0,2)+"00").split("").map(e=>g[e]).join("");for(;t.length>=15;){let e=t.substring(0,15);t=parseInt(e,10)%97+t.substring(e.length)}let n=String(98-parseInt(t,10)%97);for(;n.length<2;)n="0"+n;return n}(e),"bad icap checksum","address",e);let t=(function(e){e=e.toLowerCase();let t=m;for(let n=0;n{let e=v.some(e=>n&&(null==e?void 0:e.toLowerCase())===(null==n?void 0:n.toLowerCase()));f(e)},[n,v,c]),(0,o.jsx)(ee.Provider,{value:{admin:p,setAdmin:f,allAdmins:v,setAllAdmins:w,expiryTimestamp:C,setExpiryTimestamp:E,generateSignature:()=>{let e=Date.now()+432e5;u({message:e.toString()}),E(e)},signature:x,setSignature:A,validTimestamp:k,setValidTimestamp:B,networks:S,setNetworks:I},children:t})},useAdminContext=()=>{let e=(0,i.useContext)(ee);if(void 0===e)throw Error("AdminContext must be used within an AdminProvider");return e}},38492:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return App}});var o=n(85893);n(32352);var i=n(59581);n(56953);var s=n(89192),l=n(99931),c=n(24139),u=n(56888),d=n(27037),p=n(7506),f=class extends p.l{constructor(e={}){super(),this.config=e,this.#o=new Map}#o;build(e,t,n){let o=t.queryKey,i=t.queryHash??(0,c.Rm)(o,t),s=this.get(i);return s||(s=new u.A({cache:this,queryKey:o,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(o)}),this.add(s)),s}add(e){this.#o.has(e.queryHash)||(this.#o.set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){let t=this.#o.get(e.queryHash);t&&(e.destroy(),t===e&&this.#o.delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){d.V.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#o.get(e)}getAll(){return[...this.#o.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>(0,c._x)(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>(0,c._x)(e,t)):t}notify(e){d.V.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){d.V.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){d.V.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},m=n(59289),b=class extends p.l{constructor(e={}){super(),this.config=e,this.#i=[],this.#s=0}#i;#s;#l;build(e,t,n){let o=new m.m({mutationCache:this,mutationId:++this.#s,options:e.defaultMutationOptions(t),state:n});return this.add(o),o}add(e){this.#i.push(e),this.notify({type:"added",mutation:e})}remove(e){this.#i=this.#i.filter(t=>t!==e),this.notify({type:"removed",mutation:e})}clear(){d.V.batch(()=>{this.#i.forEach(e=>{this.remove(e)})})}getAll(){return this.#i}find(e){let t={exact:!0,...e};return this.#i.find(e=>(0,c.X7)(t,e))}findAll(e={}){return this.#i.filter(t=>(0,c.X7)(e,t))}notify(e){d.V.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){return this.#l=(this.#l??Promise.resolve()).then(()=>{let e=this.#i.filter(e=>e.state.isPaused);return d.V.batch(()=>e.reduce((e,t)=>e.then(()=>t.continue().catch(c.ZT)),Promise.resolve()))}).then(()=>{this.#l=void 0}),this.#l}},g=n(66474),y=n(14304);function getNextPageParam(e,{pages:t,pageParams:n}){let o=t.length-1;return e.getNextPageParam(t[o],t,n[o],n)}function getPreviousPageParam(e,{pages:t,pageParams:n}){return e.getPreviousPageParam?.(t[0],t,n[0],n)}var v=class{#c;#u;#d;#p;#h;#f;#m;#b;constructor(e={}){this.#c=e.queryCache||new f,this.#u=e.mutationCache||new b,this.#d=e.defaultOptions||{},this.#p=new Map,this.#h=new Map,this.#f=0}mount(){this.#f++,1===this.#f&&(this.#m=g.j.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#c.onFocus())}),this.#b=y.N.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#c.onOnline())}))}unmount(){this.#f--,0===this.#f&&(this.#m?.(),this.#m=void 0,this.#b?.(),this.#b=void 0)}isFetching(e){return this.#c.findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return this.#u.findAll({...e,status:"pending"}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#c.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.getQueryData(e.queryKey);if(void 0===t)return this.fetchQuery(e);{let n=this.defaultQueryOptions(e),o=this.#c.build(this,n);return e.revalidateIfStale&&o.isStaleByTime(n.staleTime)&&this.prefetchQuery(n),Promise.resolve(t)}}getQueriesData(e){return this.getQueryCache().findAll(e).map(({queryKey:e,state:t})=>{let n=t.data;return[e,n]})}setQueryData(e,t,n){let o=this.defaultQueryOptions({queryKey:e}),i=this.#c.get(o.queryHash),s=i?.state.data,l=(0,c.SE)(t,s);if(void 0!==l)return this.#c.build(this,o).setData(l,{...n,manual:!0})}setQueriesData(e,t,n){return d.V.batch(()=>this.getQueryCache().findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#c.get(t.queryHash)?.state}removeQueries(e){let t=this.#c;d.V.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#c,o={type:"active",...e};return d.V.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries(o,t)))}cancelQueries(e={},t={}){let n={revert:!0,...t},o=d.V.batch(()=>this.#c.findAll(e).map(e=>e.cancel(n)));return Promise.all(o).then(c.ZT).catch(c.ZT)}invalidateQueries(e={},t={}){return d.V.batch(()=>{if(this.#c.findAll(e).forEach(e=>{e.invalidate()}),"none"===e.refetchType)return Promise.resolve();let n={...e,type:e.refetchType??e.type??"active"};return this.refetchQueries(n,t)})}refetchQueries(e={},t){let n={...t,cancelRefetch:t?.cancelRefetch??!0},o=d.V.batch(()=>this.#c.findAll(e).filter(e=>!e.isDisabled()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(c.ZT)),"paused"===e.state.fetchStatus?Promise.resolve():t}));return Promise.all(o).then(c.ZT)}fetchQuery(e){let t=this.defaultQueryOptions(e);void 0===t.retry&&(t.retry=!1);let n=this.#c.build(this,t);return n.isStaleByTime(t.staleTime)?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(c.ZT).catch(c.ZT)}fetchInfiniteQuery(e){var t;return e.behavior=(t=e.pages,{onFetch:(e,n)=>{let fetchFn=async()=>{let n;let o=e.options,i=e.fetchOptions?.meta?.fetchMore?.direction,s=e.state.data?.pages||[],l=e.state.data?.pageParams||[],u=!1,addSignalProperty=t=>{Object.defineProperty(t,"signal",{enumerable:!0,get:()=>(e.signal.aborted?u=!0:e.signal.addEventListener("abort",()=>{u=!0}),e.signal)})},d=e.options.queryFn&&e.options.queryFn!==c.CN?e.options.queryFn:()=>Promise.reject(Error(`Missing queryFn: '${e.options.queryHash}'`)),fetchPage=async(t,n,o)=>{if(u)return Promise.reject();if(null==n&&t.pages.length)return Promise.resolve(t);let i={queryKey:e.queryKey,pageParam:n,direction:o?"backward":"forward",meta:e.options.meta};addSignalProperty(i);let s=await d(i),{maxPages:l}=e.options,p=o?c.Ht:c.VX;return{pages:p(t.pages,s,l),pageParams:p(t.pageParams,n,l)}};if(i&&s.length){let e="backward"===i,t=e?getPreviousPageParam:getNextPageParam,c={pages:s,pageParams:l},u=t(o,c);n=await fetchPage(c,u,e)}else{n=await fetchPage({pages:[],pageParams:[]},l[0]??o.initialPageParam);let e=t??s.length;for(let t=1;te.options.persister?.(fetchFn,{queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},n):e.fetchFn=fetchFn}}),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(c.ZT).catch(c.ZT)}resumePausedMutations(){return y.N.isOnline()?this.#u.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#c}getMutationCache(){return this.#u}getDefaultOptions(){return this.#d}setDefaultOptions(e){this.#d=e}setQueryDefaults(e,t){this.#p.set((0,c.Ym)(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#p.values()],n={};return t.forEach(t=>{(0,c.to)(e,t.queryKey)&&(n={...n,...t.defaultOptions})}),n}setMutationDefaults(e,t){this.#h.set((0,c.Ym)(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#h.values()],n={};return t.forEach(t=>{(0,c.to)(e,t.mutationKey)&&(n={...n,...t.defaultOptions})}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#d.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=(0,c.Rm)(t.queryKey,t)),void 0===t.refetchOnReconnect&&(t.refetchOnReconnect="always"!==t.networkMode),void 0===t.throwOnError&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),!0!==t.enabled&&t.queryFn===c.CN&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#d.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#c.clear(),this.#u.clear()}},w=n(30202),C=n(86164);let E=(0,C.a)({id:31337,name:"Hardhat",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["http://127.0.0.1:8545"]}}});var x=n(66403);let A=(0,C.a)({id:5,name:"Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.ankr.com/eth_goerli"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli.etherscan.io",apiUrl:"https://api-goerli.etherscan.io/api"}},contracts:{ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},ensUniversalResolver:{address:"0xfc4AC75C46C914aF5892d6d3eFFcebD7917293F1",blockCreated:10339206},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:6507670}},testnet:!0});var k=n(95946),B=n(43310),S=n(6073),I=n(30866);let j={block:(0,B.G)({format(e){let t=e.transactions?.map(e=>{if("string"==typeof e)return e;let t=S.Tr(e);return"0x7e"===t.typeHex&&(t.isSystemTx=e.isSystemTx,t.mint=e.mint?k.y_(e.mint):void 0,t.sourceHash=e.sourceHash,t.type="deposit"),t});return{transactions:t,stateRoot:e.stateRoot}}}),transaction:(0,S.y_)({format(e){let t={};return"0x7e"===e.type&&(t.isSystemTx=e.isSystemTx,t.mint=e.mint?(0,k.y_)(e.mint):void 0,t.sourceHash=e.sourceHash,t.type="deposit"),t}}),transactionReceipt:(0,I.d)({format:e=>({l1GasPrice:e.l1GasPrice?(0,k.y_)(e.l1GasPrice):null,l1GasUsed:e.l1GasUsed?(0,k.y_)(e.l1GasUsed):null,l1Fee:e.l1Fee?(0,k.y_)(e.l1Fee):null,l1FeeScalar:e.l1FeeScalar?Number(e.l1FeeScalar):null})})};var T=n(26087),P=n(60480),M=n(57040),O=n(92106),R=n(62027),U=n(11221),F=n(11187);function toRlp(e,t="hex"){let n=function getEncodable(e){return Array.isArray(e)?function(e){let t=e.reduce((e,t)=>e+t.length,0),n=getSizeOfLength(t),o=t<=55?1+t:1+n+t;return{length:o,encode(o){for(let{encode:i}of(t<=55?o.pushByte(192+t):(o.pushByte(247+n),1===n?o.pushUint8(t):2===n?o.pushUint16(t):3===n?o.pushUint24(t):o.pushUint32(t)),e))i(o)}}}(e.map(e=>getEncodable(e))):function(e){let t="string"==typeof e?(0,F.nr)(e):e,n=getSizeOfLength(t.length),o=1===t.length&&t[0]<128?1:t.length<=55?1+t.length:1+n+t.length;return{length:o,encode(e){1===t.length&&t[0]<128||(t.length<=55?e.pushByte(128+t.length):(e.pushByte(183+n),1===n?e.pushUint8(t.length):2===n?e.pushUint16(t.length):3===n?e.pushUint24(t.length):e.pushUint32(t.length))),e.pushBytes(t)}}}(e)}(e),o=(0,U.q)(new Uint8Array(n.length));return(n.encode(o),"hex"===t)?(0,O.ci)(o.bytes):o.bytes}function getSizeOfLength(e){if(e<256)return 1;if(e<65536)return 2;if(e<16777216)return 3;if(e<4294967296)return 4;throw new R.G("Length is too large.")}var N=n(33639);function blobsToCommitments(e){let{kzg:t}=e,n=e.to??("string"==typeof e.blobs[0]?"hex":"bytes"),o="string"==typeof e.blobs[0]?e.blobs.map(e=>(0,F.nr)(e)):e.blobs,i=[];for(let e of o)i.push(Uint8Array.from(t.blobToKzgCommitment(e)));return"bytes"===n?i:i.map(e=>(0,O.ci)(e))}function blobsToProofs(e){let{kzg:t}=e,n=e.to??("string"==typeof e.blobs[0]?"hex":"bytes"),o="string"==typeof e.blobs[0]?e.blobs.map(e=>(0,F.nr)(e)):e.blobs,i="string"==typeof e.commitments[0]?e.commitments.map(e=>(0,F.nr)(e)):e.commitments,s=[];for(let e=0;e(0,O.ci)(e))}var D=n(11606),_=n(15102);let BlobSizeTooLargeError=class BlobSizeTooLargeError extends R.G{constructor({maxSize:e,size:t}){super("Blob size is too large.",{metaMessages:[`Max: ${e} bytes`,`Given: ${t} bytes`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BlobSizeTooLargeError"})}};let EmptyBlobError=class EmptyBlobError extends R.G{constructor(){super("Blob data must not be empty."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EmptyBlobError"})}};let InvalidVersionedHashSizeError=class InvalidVersionedHashSizeError extends R.G{constructor({hash:e,size:t}){super(`Versioned hash "${e}" size is invalid.`,{metaMessages:["Expected: 32",`Received: ${t}`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidVersionedHashSizeError"})}};let InvalidVersionedHashVersionError=class InvalidVersionedHashVersionError extends R.G{constructor({hash:e,version:t}){super(`Versioned hash "${e}" version is invalid.`,{metaMessages:["Expected: 1",`Received: ${t}`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidVersionedHashVersionError"})}};var L=n(39135),z=n(61836),q=n(80377),G=n(26445),W=n(3972);function assertTransactionEIP1559(e){let{chainId:t,maxPriorityFeePerGas:n,maxFeePerGas:o,to:i}=e;if(t<=0)throw new q.hJ({chainId:t});if(i&&!(0,P.U)(i))throw new T.b({address:i});if(o&&o>2n**256n-1n)throw new G.Hh({maxFeePerGas:o});if(n&&o&&n>o)throw new G.cs({maxFeePerGas:o,maxPriorityFeePerGas:n})}var H=n(82994);function serializeAccessList(e){if(!e||0===e.length)return[];let t=[];for(let n=0;n2n**256n-1n)throw new G.Hh({maxFeePerGas:o})}(e);let p=serializeAccessList(u),f=[(0,O.NC)(n),s?(0,O.NC)(s):"0x",d?(0,O.NC)(d):"0x",o?(0,O.NC)(o):"0x",l??"0x",c?(0,O.NC)(c):"0x",i??"0x",p,...toYParitySignatureArray(e,t)];return(0,M.SM)(["0x01",toRlp(f)])}(e,t):"eip4844"===n?function(e,t){let{chainId:n,gas:o,nonce:i,to:s,value:l,maxFeePerBlobGas:c,maxFeePerGas:u,maxPriorityFeePerGas:d,accessList:p,data:f}=e;!function(e){let{blobVersionedHashes:t}=e;if(t){if(0===t.length)throw new EmptyBlobError;for(let e of t){let t=(0,L.d)(e),n=(0,k.ly)((0,W.tP)(e,0,1));if(32!==t)throw new InvalidVersionedHashSizeError({hash:e,size:t});if(1!==n)throw new InvalidVersionedHashVersionError({hash:e,version:n})}}assertTransactionEIP1559(e)}(e);let m=e.blobVersionedHashes,b=e.sidecars;if(e.blobs){let t="string"==typeof e.blobs[0]?e.blobs:e.blobs.map(e=>(0,O.ci)(e)),n=e.kzg,o=blobsToCommitments({blobs:t,kzg:n}),i=blobsToProofs({blobs:t,commitments:o,kzg:n});m=function(e){let{commitments:t,version:n}=e,o=e.to??("string"==typeof t[0]?"hex":"bytes"),i=[];for(let e of t)i.push(function(e){let{commitment:t,version:n=1}=e,o=e.to??("string"==typeof t?"hex":"bytes"),i=function(e,t){let n=(0,D.J)((0,_.v)(e,{strict:!1})?(0,F.O0)(e):e);return"bytes"===(t||"hex")?n:(0,O.NC)(n)}(t,"bytes");return i.set([n],0),"bytes"===o?i:(0,O.ci)(i)}({commitment:e,to:o,version:n}));return i}({commitments:o}),!1!==b&&(b=function(e){let{data:t,kzg:n,to:o}=e,i=e.blobs??function(e){let t=e.to??("string"==typeof e.data?"hex":"bytes"),n="string"==typeof e.data?(0,F.nr)(e.data):e.data,o=(0,L.d)(n);if(!o)throw new EmptyBlobError;if(o>253951)throw new BlobSizeTooLargeError({maxSize:253951,size:o});let i=[],s=!0,l=0;for(;s;){let e=(0,U.q)(new Uint8Array(131072)),t=0;for(;t<4096;){let o=n.slice(l,l+31);if(e.pushByte(0),e.pushBytes(o),o.length<31){e.pushByte(128),s=!1;break}t++,l+=31}i.push(e)}return"bytes"===t?i.map(e=>e.bytes):i.map(e=>(0,O.ci)(e.bytes))}({data:t,to:o}),s=e.commitments??blobsToCommitments({blobs:i,kzg:n,to:o}),l=e.proofs??blobsToProofs({blobs:i,commitments:s,kzg:n,to:o}),c=[];for(let e=0;e2n**256n-1n)throw new G.Hh({maxFeePerGas:o});if(l)throw new R.G("`accessList` is not a valid Legacy Transaction attribute.")}(e);let d=[s?(0,O.NC)(s):"0x",u?(0,O.NC)(u):"0x",o?(0,O.NC)(o):"0x",l??"0x",c?(0,O.NC)(c):"0x",i??"0x"];if(t){let e=(()=>{if(t.v>=35n){let e=(t.v-35n)/2n;return e>0?t.v:27n+(35n===t.v?0n:1n)}if(n>0)return BigInt(2*n)+BigInt(35n+t.v-27n);let e=27n+(27n===t.v?0n:1n);if(t.v!==e)throw new N.vl({v:t.v});return e})();d=[...d,(0,O.NC)(e),t.r,t.s]}else n>0&&(d=[...d,(0,O.NC)(n),"0x","0x"]);return toRlp(d)}(e,t)}function toYParitySignatureArray(e,t){let{r:n,s:o,v:i,yParity:s}=t??e;if(void 0===n||void 0===o||void 0===i&&void 0===s)return[];let l="number"==typeof s?s?(0,O.NC)(1):"0x":0n===i?"0x":1n===i?(0,O.NC)(1):27n===i?"0x":(0,O.NC)(1);return[l,(0,z.f)(n),(0,z.f)(o)]}let Q={contracts:{gasPriceOracle:{address:"0x420000000000000000000000000000000000000F"},l1Block:{address:"0x4200000000000000000000000000000000000015"},l2CrossDomainMessenger:{address:"0x4200000000000000000000000000000000000007"},l2Erc721Bridge:{address:"0x4200000000000000000000000000000000000014"},l2StandardBridge:{address:"0x4200000000000000000000000000000000000010"},l2ToL1MessagePasser:{address:"0x4200000000000000000000000000000000000016"}},formatters:j,serializers:{transaction:function(e,t){return"deposit"===e.type||void 0!==e.sourceHash?function(e){!function(e){let{from:t,to:n}=e;if(t&&!(0,P.U)(t))throw new T.b({address:t});if(n&&!(0,P.U)(n))throw new T.b({address:n})}(e);let{sourceHash:t,data:n,from:o,gas:i,isSystemTx:s,mint:l,to:c,value:u}=e,d=[t,o,c??"0x",l?(0,O.NC)(l):"0x",u?(0,O.NC)(u):"0x",i?(0,O.NC)(i):"0x",s?"0x1":"0x",n??"0x"];return(0,M.SM)(["0x7e",toRlp(d)])}(e):serializeTransaction(e,t)}}},K=(0,C.a)({...Q,id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimism Explorer",url:"https://optimistic.etherscan.io",apiUrl:"https://api-optimistic.etherscan.io/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0xdfe97868233d1aa22e815a266982f2cf17685a27"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:4286263},portal:{1:{address:"0xbEb5Fc579115071764c7423A4f12eDde41f106Ed"}},l1StandardBridge:{1:{address:"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1"}}},sourceId:1}),V=(0,C.a)({id:14,name:"Flare Mainnet",nativeCurrency:{decimals:18,name:"flare",symbol:"FLR"},rpcUrls:{default:{http:["https://flare-api.flare.network/ext/C/rpc"]}},blockExplorers:{default:{name:"Flare Explorer",url:"https://flare-explorer.flare.network",apiUrl:"https://flare-explorer.flare.network/api"}}}),Z=(0,C.a)({id:16,name:"Coston",nativeCurrency:{decimals:18,name:"costonflare",symbol:"CFLR"},rpcUrls:{default:{http:["https://coston-api.flare.network/ext/C/rpc"]}},blockExplorers:{default:{name:"Coston Explorer",url:"https://coston-explorer.flare.network",apiUrl:"https://coston-explorer.flare.network/api"}},testnet:!0}),J=(0,C.a)({id:19,name:"Songbird Mainnet",nativeCurrency:{decimals:18,name:"songbird",symbol:"SGB"},rpcUrls:{default:{http:["https://songbird-api.flare.network/ext/C/rpc"]}},blockExplorers:{default:{name:"Songbird Explorer",url:"https://songbird-explorer.flare.network",apiUrl:"https://songbird-explorer.flare.network/api"}}}),X=(0,C.a)({id:25,name:"Cronos Mainnet",nativeCurrency:{decimals:18,name:"Cronos",symbol:"CRO"},rpcUrls:{default:{http:["https://evm.cronos.org"]}},blockExplorers:{default:{name:"Cronos Explorer",url:"https://explorer.cronos.org",apiUrl:"https://explorer-api.cronos.org/mainnet/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:1963112}}}),Y=(0,C.a)({id:30,name:"Rootstock Mainnet",network:"rootstock",nativeCurrency:{decimals:18,name:"Rootstock Bitcoin",symbol:"RBTC"},rpcUrls:{default:{http:["https://public-node.rsk.co"]}},blockExplorers:{default:{name:"RSK Explorer",url:"https://explorer.rsk.co"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:4249540}}}),$=(0,C.a)({id:40,name:"Telos",nativeCurrency:{decimals:18,name:"Telos",symbol:"TLOS"},rpcUrls:{default:{http:["https://mainnet.telos.net/evm"]}},blockExplorers:{default:{name:"Teloscan",url:"https://www.teloscan.io/"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:246530709}}}),ee=(0,C.a)({id:41,name:"Telos",nativeCurrency:{decimals:18,name:"Telos",symbol:"TLOS"},rpcUrls:{default:{http:["https://testnet.telos.net/evm"]}},blockExplorers:{default:{name:"Teloscan (testnet)",url:"https://testnet.teloscan.io/"}},testnet:!0}),et=(0,C.a)({id:42,network:"lukso",name:"LUKSO",nativeCurrency:{name:"LUKSO",symbol:"LYX",decimals:18},rpcUrls:{default:{http:["https://rpc.mainnet.lukso.network"],webSocket:["wss://ws-rpc.mainnet.lukso.network"]}},blockExplorers:{default:{name:"LUKSO Mainnet Explorer",url:"https://explorer.execution.mainnet.lukso.network",apiUrl:"https://api.explorer.execution.mainnet.lukso.network/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:468183}}}),er=(0,C.a)({id:50,name:"XinFin Network",nativeCurrency:{decimals:18,name:"XDC",symbol:"XDC"},rpcUrls:{default:{http:["https://rpc.xinfin.network"]}},blockExplorers:{xinfin:{name:"XinFin",url:"https://explorer.xinfin.network"},default:{name:"Blocksscan",url:"https://xdc.blocksscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:71542788}}}),en=(0,C.a)({id:51,name:"Apothem Network",nativeCurrency:{decimals:18,name:"TXDC",symbol:"TXDC"},rpcUrls:{default:{http:["https://erpc.apothem.network"]}},blockExplorers:{default:{name:"Blocksscan",url:"https://apothem.blocksscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:59765389}}}),ea=(0,C.a)({id:56,name:"BNB Smart Chain",nativeCurrency:{decimals:18,name:"BNB",symbol:"BNB"},rpcUrls:{default:{http:["https://rpc.ankr.com/bsc"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com",apiUrl:"https://api.bscscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:15921452}}}),eo=(0,C.a)({id:57,name:"Syscoin Mainnet",nativeCurrency:{decimals:18,name:"Syscoin",symbol:"SYS"},rpcUrls:{default:{http:["https://rpc.syscoin.org"],webSocket:["wss://rpc.syscoin.org/wss"]}},blockExplorers:{default:{name:"SyscoinExplorer",url:"https://explorer.syscoin.org",apiUrl:"https://explorer.syscoin.org/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:287139}}}),ei=(0,C.a)({id:61,name:"Ethereum Classic",nativeCurrency:{decimals:18,name:"ETC",symbol:"ETC"},rpcUrls:{default:{http:["https://etc.rivet.link"]}},blockExplorers:{default:{name:"Blockscout",url:"https://blockscout.com/etc/mainnet"}}}),es=(0,C.a)({id:66,name:"OKC",nativeCurrency:{decimals:18,name:"OKT",symbol:"OKT"},rpcUrls:{default:{http:["https://exchainrpc.okex.org"]}},blockExplorers:{default:{name:"oklink",url:"https://www.oklink.com/okc"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:10364792}}}),el=(0,C.a)({id:71,name:"Conflux eSpace Testnet",network:"cfx-espace-testnet",testnet:!0,nativeCurrency:{name:"Conflux",symbol:"CFX",decimals:18},rpcUrls:{default:{http:["https://evmtestnet.confluxrpc.org"],webSocket:["wss://evmtestnet.confluxrpc.org/ws"]}},blockExplorers:{default:{name:"ConfluxScan",url:"https://evmtestnet.confluxscan.io"}},contracts:{multicall3:{address:"0xEFf0078910f638cd81996cc117bccD3eDf2B072F",blockCreated:117499050}}}),ec=(0,C.a)({id:82,name:"Meter",nativeCurrency:{decimals:18,name:"MTR",symbol:"MTR"},rpcUrls:{default:{http:["https://rpc.meter.io"]}},blockExplorers:{default:{name:"MeterScan",url:"https://scan.meter.io"}}}),eu=(0,C.a)({id:83,name:"Meter Testnet",nativeCurrency:{decimals:18,name:"MTR",symbol:"MTR"},rpcUrls:{default:{http:["https://rpctest.meter.io"]}},blockExplorers:{default:{name:"MeterTestnetScan",url:"https://scan-warringstakes.meter.io"}}}),ed=(0,C.a)({id:97,name:"Binance Smart Chain Testnet",nativeCurrency:{decimals:18,name:"BNB",symbol:"tBNB"},rpcUrls:{default:{http:["https://data-seed-prebsc-1-s1.bnbchain.org:8545"]}},blockExplorers:{default:{name:"BscScan",url:"https://testnet.bscscan.com",apiUrl:"https://testnet.bscscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:17422483}},testnet:!0}),ep=(0,C.a)({id:100,name:"Gnosis",nativeCurrency:{decimals:18,name:"Gnosis",symbol:"xDAI"},rpcUrls:{default:{http:["https://rpc.gnosischain.com"],webSocket:["wss://rpc.gnosischain.com/wss"]}},blockExplorers:{default:{name:"Gnosisscan",url:"https://gnosisscan.io",apiUrl:"https://api.gnosisscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:21022491}}}),eh=(0,C.a)({id:109,name:"Shibarium",network:"shibarium",nativeCurrency:{name:"Bone",symbol:"BONE",decimals:18},rpcUrls:{default:{http:["https://rpc.shibrpc.com"]}},blockExplorers:{default:{name:"Blockscout",url:"https://shibariumscan.io"}},contracts:{multicall3:{address:"0x864Bf681ADD6052395188A89101A1B37d3B4C961",blockCreated:265900}}}),ef=(0,C.a)({id:114,name:"Coston2",nativeCurrency:{decimals:18,name:"coston2flare",symbol:"C2FLR"},rpcUrls:{default:{http:["https://coston2-api.flare.network/ext/C/rpc"]}},blockExplorers:{default:{name:"Coston2 Explorer",url:"https://coston2-explorer.flare.network",apiUrl:"https://coston2-explorer.flare.network/api"}},testnet:!0}),em=(0,C.a)({id:122,name:"Fuse",nativeCurrency:{name:"Fuse",symbol:"FUSE",decimals:18},rpcUrls:{default:{http:["https://rpc.fuse.io"]}},blockExplorers:{default:{name:"Fuse Explorer",url:"https://explorer.fuse.io",apiUrl:"https://explorer.fuse.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:16146628}}}),eb=(0,C.a)({id:123,name:"Fuse Sparknet",nativeCurrency:{name:"Spark",symbol:"SPARK",decimals:18},rpcUrls:{default:{http:["https://rpc.fusespark.io"]}},blockExplorers:{default:{name:"Sparkent Explorer",url:"https://explorer.fusespark.io",apiUrl:"https://explorer.fusespark.io/api"}}}),eg=(0,C.a)({id:137,name:"Polygon",nativeCurrency:{name:"MATIC",symbol:"MATIC",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com",apiUrl:"https://api.polygonscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:25770160}}}),ey=(0,C.a)({id:148,name:"Shimmer",network:"shimmer",nativeCurrency:{decimals:18,name:"Shimmer",symbol:"SMR"},rpcUrls:{default:{http:["https://json-rpc.evm.shimmer.network"]}},blockExplorers:{default:{name:"Shimmer Network Explorer",url:"https://explorer.evm.shimmer.network",apiUrl:"https://explorer.evm.shimmer.network/api"}}}),ev=(0,C.a)({id:169,name:"Manta Pacific Mainnet",network:"manta",nativeCurrency:{decimals:18,name:"ETH",symbol:"ETH"},rpcUrls:{default:{http:["https://pacific-rpc.manta.network/http"]}},blockExplorers:{default:{name:"Manta Explorer",url:"https://pacific-explorer.manta.network",apiUrl:"https://pacific-explorer.manta.network/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:332890}}}),ew=(0,C.a)({id:195,name:"X1 Testnet",nativeCurrency:{decimals:18,name:"OKB",symbol:"OKB"},rpcUrls:{default:{http:["https://x1testrpc.okx.com"]}},blockExplorers:{default:{name:"OKLink",url:"https://www.oklink.com/x1-test"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:624344}},testnet:!0}),eC=(0,C.a)({id:199,name:"BitTorrent",network:"bittorrent-chain-mainnet",nativeCurrency:{name:"BitTorrent",symbol:"BTT",decimals:18},rpcUrls:{default:{http:["https://rpc.bittorrentchain.io"]},public:{http:["https://rpc.bittorrentchain.io"]}},blockExplorers:{default:{name:"Bttcscan",url:"https://bttcscan.com",apiUrl:"https://api.bttcscan.com/api"}}}),eE=(0,C.a)({id:204,name:"opBNB",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://opbnb-mainnet-rpc.bnbchain.org"]}},blockExplorers:{default:{name:"opbnbscan",url:"https://mainnet.opbnbscan.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:512881}}}),ex=(0,C.a)({id:240,name:"Nexilix Smart Chain",nativeCurrency:{decimals:18,name:"Nexilix",symbol:"NEXILIX"},rpcUrls:{default:{http:["https://rpcurl.pos.nexilix.com"]}},blockExplorers:{default:{name:"NexilixScan",url:"https://scan.nexilix.com"}},contracts:{multicall3:{address:"0x58381c8e2BF9d0C2C4259cA14BdA9Afe02831244",blockCreated:74448}}}),eA=(0,C.a)({id:242,name:"Plinga",nativeCurrency:{name:"Plinga",symbol:"PLINGA",decimals:18},rpcUrls:{default:{http:["https://rpcurl.mainnet.plgchain.com"]}},blockExplorers:{default:{name:"Plgscan",url:"https://www.plgscan.com"}},contracts:{multicall3:{address:"0x0989576160f2e7092908BB9479631b901060b6e4",blockCreated:204489}}}),ek=(0,C.a)({id:248,name:"Oasys",nativeCurrency:{name:"Oasys",symbol:"OAS",decimals:18},rpcUrls:{default:{http:["https://rpc.mainnet.oasys.games"]}},blockExplorers:{default:{name:"OasysScan",url:"https://scan.oasys.games",apiUrl:"https://scan.oasys.games/api"}}}),eB=(0,C.a)({id:250,name:"Fantom",nativeCurrency:{decimals:18,name:"Fantom",symbol:"FTM"},rpcUrls:{default:{http:["https://rpc.ankr.com/fantom"]}},blockExplorers:{default:{name:"FTMScan",url:"https://ftmscan.com",apiUrl:"https://api.ftmscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:33001987}}}),eS=(0,C.a)({...Q,id:252,name:"Fraxtal",nativeCurrency:{name:"Frax Ether",symbol:"frxETH",decimals:18},rpcUrls:{default:{http:["https://rpc.frax.com"]}},blockExplorers:{default:{name:"fraxscan",url:"https://fraxscan.com",apiUrl:"https://api.fraxscan.com/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0x66CC916Ed5C6C2FA97014f7D1cD141528Ae171e4"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11"},portal:{1:{address:"0x36cb65c1967A0Fb0EEE11569C51C2f2aA1Ca6f6D",blockCreated:19135323}},l1StandardBridge:{1:{address:"0x34C0bD5877A5Ee7099D0f5688D65F4bB9158BDE2",blockCreated:19135323}}},sourceId:1}),eI=(0,C.a)({id:255,name:"Kroma",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://api.kroma.network"]}},blockExplorers:{default:{name:"Kroma Explorer",url:"https://blockscout.kroma.network",apiUrl:"https://blockscout.kroma.network/api"}},testnet:!1}),ej=(0,C.a)({id:260,name:"zkSync InMemory Node",network:"zksync-in-memory-node",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["http://localhost:8011"]}},testnet:!0}),eT=(0,C.a)({id:270,name:"zkSync CLI Local Node",network:"zksync-cli-local-node",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["http://localhost:3050"]}},testnet:!0}),eP=(0,C.a)({id:288,name:"Boba Network",nativeCurrency:{decimals:18,name:"Boba",symbol:"BOBA"},rpcUrls:{default:{http:["https://mainnet.boba.network"]}},blockExplorers:{default:{name:"BOBAScan",url:"https://bobascan.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:446859}}}),eM=(0,C.a)({id:295,name:"Hedera Mainnet",network:"hedera-mainnet",nativeCurrency:{symbol:"HBAR",name:"HBAR",decimals:18},rpcUrls:{default:{http:["https://mainnet.hashio.io/api"]}},blockExplorers:{default:{name:"Hashscan",url:"https://hashscan.io/mainnet"}},testnet:!1}),eO=(0,C.a)({id:296,name:"Hedera Testnet",network:"hedera-testnet",nativeCurrency:{symbol:"HBAR",name:"HBAR",decimals:18},rpcUrls:{default:{http:["https://testnet.hashio.io/api"]}},blockExplorers:{default:{name:"Hashscan",url:"https://hashscan.io/testnet"}},testnet:!0}),eR=(0,C.a)({id:297,name:"Hedera Previewnet",network:"hedera-previewnet",nativeCurrency:{symbol:"HBAR",name:"HBAR",decimals:18},rpcUrls:{default:{http:["https://previewnet.hashio.io/api"]}},blockExplorers:{default:{name:"Hashscan",url:"https://hashscan.io/previewnet"}},testnet:!0});var eU=n(53992),eF=n(74688);let eN={block:(0,B.G)({format(e){let t=e.transactions?.map(e=>{if("string"==typeof e)return e;let t=eN.transaction?.format(e);return"0x71"===t.typeHex?t.type="eip712":"0xff"===t.typeHex&&(t.type="priority"),t});return{l1BatchNumber:e.l1BatchNumber?(0,k.y_)(e.l1BatchNumber):null,l1BatchTimestamp:e.l1BatchTimestamp?(0,k.y_)(e.l1BatchTimestamp):null,transactions:t}}}),transaction:(0,S.y_)({format(e){let t={};return"0x71"===e.type?t.type="eip712":"0xff"===e.type&&(t.type="priority"),{...t,l1BatchNumber:e.l1BatchNumber?(0,k.y_)(e.l1BatchNumber):null,l1BatchTxIndex:e.l1BatchTxIndex?(0,k.y_)(e.l1BatchTxIndex):null}}}),transactionReceipt:(0,I.d)({format:e=>({l1BatchNumber:e.l1BatchNumber?(0,k.y_)(e.l1BatchNumber):null,l1BatchTxIndex:e.l1BatchTxIndex?(0,k.y_)(e.l1BatchTxIndex):null,logs:e.logs.map(e=>({...(0,eU.U)(e),l1BatchNumber:e.l1BatchNumber?(0,k.y_)(e.l1BatchNumber):null,transactionLogIndex:(0,k.ly)(e.transactionLogIndex),logType:e.logType})),l2ToL1Logs:e.l2ToL1Logs.map(e=>({blockNumber:(0,k.y_)(e.blockHash),blockHash:e.blockHash,l1BatchNumber:(0,k.y_)(e.l1BatchNumber),transactionIndex:(0,k.y_)(e.transactionIndex),shardId:(0,k.y_)(e.shardId),isService:e.isService,sender:e.sender,key:e.key,value:e.value,transactionHash:e.transactionHash,logIndex:(0,k.y_)(e.logIndex)}))})}),transactionRequest:(0,eF.iy)({exclude:["customSignature","factoryDeps","gasPerPubdata","paymaster","paymasterInput"],format:e=>e.gasPerPubdata||e.paymaster&&e.paymasterInput||e.factoryDeps||e.customSignature?{eip712Meta:{...e.gasPerPubdata?{gasPerPubdata:(0,O.NC)(e.gasPerPubdata)}:{},...e.paymaster&&e.paymasterInput?{paymasterParams:{paymaster:e.paymaster,paymasterInput:Array.from((0,F.nr)(e.paymasterInput))}}:{},...e.factoryDeps?{factoryDeps:e.factoryDeps}:{},...e.customSignature?{customSignature:Array.from((0,F.nr)(e.customSignature))}:{}},type:"0x71"}:{}})};let InvalidEip712TransactionError=class InvalidEip712TransactionError extends R.G{constructor(){super('Transaction is not an EIP712 transaction.\n\nTransaction must:\n - include `type: "eip712"`\n - include one of the following: `customSignature`, `paymaster`, `paymasterInput`, `gasPerPubdata`, `factoryDeps`'),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidEip712TransactionError"})}};function isEIP712Transaction(e){return"eip712"===e.type||"customSignature"in e&&!!e.customSignature||"paymaster"in e&&!!e.paymaster||"paymasterInput"in e&&!!e.paymasterInput||"gasPerPubdata"in e&&"bigint"==typeof e.gasPerPubdata||"factoryDeps"in e&&!!e.factoryDeps}function assertEip712Transaction(e){let{chainId:t,to:n,from:o,paymaster:i,paymasterInput:s}=e;if(!isEIP712Transaction(e))throw new InvalidEip712TransactionError;if(!t||t<=0)throw new q.hJ({chainId:t});if(n&&!(0,P.U)(n))throw new T.b({address:n});if(o&&!(0,P.U)(o))throw new T.b({address:o});if(i&&!(0,P.U)(i))throw new T.b({address:i});if(i&&!s)throw new R.G("`paymasterInput` must be provided when `paymaster` is defined");if(!i&&s)throw new R.G("`paymaster` must be provided when `paymasterInput` is defined")}let eD={formatters:eN,serializers:{transaction:function(e,t){return isEIP712Transaction(e)?function(e){let{chainId:t,gas:n,nonce:o,to:i,from:s,value:l,maxFeePerGas:c,maxPriorityFeePerGas:u,customSignature:d,factoryDeps:p,paymaster:f,paymasterInput:m,gasPerPubdata:b,data:g}=e;assertEip712Transaction(e);let y=[o?(0,O.NC)(o):"0x",u?(0,O.NC)(u):"0x",c?(0,O.NC)(c):"0x",n?(0,O.NC)(n):"0x",i??"0x",l?(0,O.NC)(l):"0x",g??"0x0",(0,O.NC)(t),(0,O.NC)(""),(0,O.NC)(""),(0,O.NC)(t),s??"0x",b?(0,O.NC)(b):"0x",p??[],d??"0x",f&&m?[f,m]:[]];return(0,M.SM)(["0x71",toRlp(y)])}(e):serializeTransaction(e,t)}},custom:{getEip712Domain:e=>{assertEip712Transaction(e);let t=function(e){let{gas:t,nonce:n,to:o,from:i,value:s,maxFeePerGas:l,maxPriorityFeePerGas:c,factoryDeps:u,paymaster:d,paymasterInput:p,gasPerPubdata:f,data:m}=e;return{txType:113n,from:BigInt(i),to:o?BigInt(o):0n,gasLimit:t??0n,gasPerPubdataByteLimit:f??0n,maxFeePerGas:l??0n,maxPriorityFeePerGas:c??0n,paymaster:d?BigInt(d):0n,nonce:n?BigInt(n):0n,value:s??0n,data:m||"0x0",factoryDeps:u??[],paymasterInput:p||"0x0"}}(e);return{domain:{name:"zkSync",version:"2",chainId:e.chainId},types:{Transaction:[{name:"txType",type:"uint256"},{name:"from",type:"uint256"},{name:"to",type:"uint256"},{name:"gasLimit",type:"uint256"},{name:"gasPerPubdataByteLimit",type:"uint256"},{name:"maxFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"paymaster",type:"uint256"},{name:"nonce",type:"uint256"},{name:"value",type:"uint256"},{name:"data",type:"bytes"},{name:"factoryDeps",type:"bytes32[]"},{name:"paymasterInput",type:"bytes"}]},primaryType:"Transaction",message:t}}}},e_=(0,C.a)({...eD,id:300,name:"zkSync Sepolia Testnet",network:"zksync-sepolia-testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.era.zksync.dev"],webSocket:["wss://sepolia.era.zksync.dev/ws"]}},blockExplorers:{default:{name:"zkExplorer",url:"https://sepolia.explorer.zksync.io/"}},contracts:{multicall3:{address:"0xF9cda624FBC7e059355ce98a31693d299FACd963"}},testnet:!0}),eL=(0,C.a)({id:314,name:"Filecoin Mainnet",nativeCurrency:{decimals:18,name:"filecoin",symbol:"FIL"},rpcUrls:{default:{http:["https://api.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filfox",url:"https://filfox.info/en"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3328594}}}),ez=(0,C.a)({id:321,name:"KCC Mainnet",network:"KCC Mainnet",nativeCurrency:{decimals:18,name:"KCS",symbol:"KCS"},rpcUrls:{default:{http:["https://kcc-rpc.com"]},public:{http:["https://kcc-rpc.com"]}},blockExplorers:{default:{name:"KCC Explorer",url:"https://explorer.kcc.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:11760430}},testnet:!1}),eq=(0,C.a)({...eD,id:324,name:"zkSync Era",network:"zksync-era",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://mainnet.era.zksync.io"],webSocket:["wss://mainnet.era.zksync.io/ws"]}},blockExplorers:{default:{name:"Etherscan",url:"https://era.zksync.network/",apiUrl:"https://api-era.zksync.network/api"}},contracts:{multicall3:{address:"0xF9cda624FBC7e059355ce98a31693d299FACd963"}}}),eG=(0,C.a)({id:338,name:"Cronos Testnet",nativeCurrency:{decimals:18,name:"CRO",symbol:"tCRO"},rpcUrls:{default:{http:["https://evm-t3.cronos.org"]}},blockExplorers:{default:{name:"Cronos Explorer",url:"https://cronos.org/explorer/testnet3"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:10191251}},testnet:!0}),eW=(0,C.a)({id:369,name:"PulseChain",nativeCurrency:{name:"Pulse",symbol:"PLS",decimals:18},testnet:!1,rpcUrls:{default:{http:["https://rpc.pulsechain.com"],webSocket:["wss://ws.pulsechain.com"]}},blockExplorers:{default:{name:"PulseScan",url:"https://scan.pulsechain.com",apiUrl:"https://api.scan.pulsechain.com/api"}},contracts:{ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14353601}}}),eH=(0,C.a)({...Q,id:420,name:"Optimism Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://goerli.optimism.io"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli-optimism.etherscan.io",apiUrl:"https://goerli-optimism.etherscan.io/api"}},contracts:{...Q.contracts,l2OutputOracle:{5:{address:"0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:49461},portal:{5:{address:"0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383"}},l1StandardBridge:{5:{address:"0x636Af16bf2f682dD3109e60102b8E1A089FedAa8"}}},testnet:!0,sourceId:5}),eQ=(0,C.a)({id:424,network:"pgn",name:"PGN",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.publicgoods.network"]}},blockExplorers:{default:{name:"PGN Explorer",url:"https://explorer.publicgoods.network",apiUrl:"https://explorer.publicgoods.network/api"},blocksout:{name:"PGN Explorer",url:"https://explorer.publicgoods.network",apiUrl:"https://explorer.publicgoods.network/api"}},contracts:{l2OutputOracle:{1:{address:"0x9E6204F750cD866b299594e2aC9eA824E2e5f95c"}},multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3380209},portal:{1:{address:"0xb26Fd985c5959bBB382BAFdD0b879E149e48116c"}},l1StandardBridge:{1:{address:"0xD0204B9527C1bA7bD765Fa5CCD9355d38338272b"}}},formatters:j,sourceId:1}),eK=(0,C.a)({id:570,name:"Rollux Mainnet",nativeCurrency:{decimals:18,name:"Syscoin",symbol:"SYS"},rpcUrls:{default:{http:["https://rpc.rollux.com"],webSocket:["wss://rpc.rollux.com/wss"]}},blockExplorers:{default:{name:"RolluxExplorer",url:"https://explorer.rollux.com",apiUrl:"https://explorer.rollux.com/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:119222}}}),eV=(0,C.a)({id:571,name:"MetaChain Mainnet",nativeCurrency:{name:"Metatime Coin",symbol:"MTC",decimals:18},rpcUrls:{default:{http:["https://rpc.metatime.com"]}},blockExplorers:{default:{name:"MetaExplorer",url:"https://explorer.metatime.com"}},contracts:{multicall3:{address:"0x0000000000000000000000000000000000003001",blockCreated:0}}}),eZ=(0,C.a)({id:592,name:"Astar",network:"astar-mainnet",nativeCurrency:{name:"Astar",symbol:"ASTR",decimals:18},rpcUrls:{default:{http:["https://astar.api.onfinality.io/public"]}},blockExplorers:{default:{name:"Astar Subscan",url:"https://astar.subscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:761794}},testnet:!1}),eJ=(0,C.a)({id:595,name:"Mandala TC9",network:"mandala",nativeCurrency:{name:"Mandala",symbol:"mACA",decimals:18},rpcUrls:{public:{http:["https://eth-rpc-tc9.aca-staging.network"],webSocket:["wss://eth-rpc-tc9.aca-staging.network"]},default:{http:["https://eth-rpc-tc9.aca-staging.network"],webSocket:["wss://eth-rpc-tc9.aca-staging.network"]}},blockExplorers:{default:{name:"Mandala Blockscout",url:"https://blockscout.mandala.aca-staging.network",apiUrl:"https://blockscout.mandala.aca-staging.network/api"}},testnet:!0}),eX=(0,C.a)({id:599,name:"Metis Goerli",nativeCurrency:{decimals:18,name:"Metis Goerli",symbol:"METIS"},rpcUrls:{default:{http:["https://goerli.gateway.metisdevops.link"]}},blockExplorers:{default:{name:"Metis Goerli Explorer",url:"https://goerli.explorer.metisdevops.link",apiUrl:"https://goerli.explorer.metisdevops.link/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1006207}}}),eY=(0,C.a)({id:646,name:"FlowEVM Previewnet",nativeCurrency:{decimals:18,name:"Flow",symbol:"FLOW"},rpcUrls:{default:{http:["https://previewnet.evm.nodes.onflow.org"]}},blockExplorers:{default:{name:"Previewnet Explorer",url:"https://previewnet.flowdiver.io"}}}),e$=(0,C.a)({id:686,name:"Karura",network:"karura",nativeCurrency:{name:"Karura",symbol:"KAR",decimals:18},rpcUrls:{public:{http:["https://eth-rpc-karura.aca-api.network"],webSocket:["wss://eth-rpc-karura.aca-api.network"]},default:{http:["https://eth-rpc-karura.aca-api.network"],webSocket:["wss://eth-rpc-karura.aca-api.network"]}},blockExplorers:{default:{name:"Karura Blockscout",url:"https://blockscout.karura.network",apiUrl:"https://blockscout.karura.network/api"}},testnet:!1}),e0=(0,C.a)({id:747,name:"FlowEVM Mainnet",nativeCurrency:{decimals:18,name:"Flow",symbol:"FLOW"},rpcUrls:{default:{http:["https://mainnet.evm.nodes.onflow.org"]}},blockExplorers:{default:{name:"Mainnet Explorer",url:"https://flowdiver.io"}}}),e1=(0,C.a)({id:787,name:"Acala",network:"acala",nativeCurrency:{name:"Acala",symbol:"ACA",decimals:18},rpcUrls:{public:{http:["https://eth-rpc-acala.aca-api.network"],webSocket:["wss://eth-rpc-acala.aca-api.network"]},default:{http:["https://eth-rpc-acala.aca-api.network"],webSocket:["wss://eth-rpc-acala.aca-api.network"]}},blockExplorers:{default:{name:"Acala Blockscout",url:"https://blockscout.acala.network",apiUrl:"https://blockscout.acala.network/api"}},testnet:!1}),e6=(0,C.a)({id:841,name:"Taraxa Mainnet",nativeCurrency:{name:"Tara",symbol:"TARA",decimals:18},rpcUrls:{default:{http:["https://rpc.mainnet.taraxa.io"]}},blockExplorers:{default:{name:"Taraxa Explorer",url:"https://explorer.mainnet.taraxa.io"}}}),e3=(0,C.a)({id:842,name:"Taraxa Testnet",nativeCurrency:{name:"Tara",symbol:"TARA",decimals:18},rpcUrls:{default:{http:["https://rpc.testnet.taraxa.io"]}},blockExplorers:{default:{name:"Taraxa Explorer",url:"https://explorer.testnet.taraxa.io"}},testnet:!0}),e2=(0,C.a)({id:888,name:"Wanchain",nativeCurrency:{name:"WANCHAIN",symbol:"WAN",decimals:18},rpcUrls:{default:{http:["https://gwan-ssl.wandevs.org:56891","https://gwan2-ssl.wandevs.org"]}},blockExplorers:{default:{name:"WanScan",url:"https://wanscan.org"}},contracts:{multicall3:{address:"0xcDF6A1566e78EB4594c86Fe73Fcdc82429e97fbB",blockCreated:25312390}}}),e7=(0,C.a)({id:919,name:"Mode Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.mode.network"]}},blockExplorers:{default:{name:"Blockscout",url:"https://sepolia.explorer.mode.network",apiUrl:"https://sepolia.explorer.mode.network/api"}},contracts:{multicall3:{address:"0xBAba8373113Fb7a68f195deF18732e01aF8eDfCF",blockCreated:3019007}},testnet:!0}),e8=(0,C.a)({id:943,name:"PulseChain V4",testnet:!0,nativeCurrency:{name:"V4 Pulse",symbol:"v4PLS",decimals:18},rpcUrls:{default:{http:["https://rpc.v4.testnet.pulsechain.com"],webSocket:["wss://ws.v4.testnet.pulsechain.com"]}},blockExplorers:{default:{name:"PulseScan",url:"https://scan.v4.testnet.pulsechain.com",apiUrl:"https://scan.v4.testnet.pulsechain.com/api"}},contracts:{ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14353601}}}),e5=(0,C.a)({id:997,name:"5ireChain Thunder Testnet",nativeCurrency:{name:"5ire Token",symbol:"5IRE",decimals:18},rpcUrls:{default:{http:["https://rpc-testnet.5ire.network"]}},blockExplorers:{default:{name:"5ireChain Explorer",url:"https://explorer.5ire.network"}},testnet:!0}),e4=(0,C.a)({id:999,name:"Wanchain Testnet",nativeCurrency:{name:"WANCHAIN",symbol:"WANt",decimals:18},rpcUrls:{default:{http:["https://gwan-ssl.wandevs.org:46891"]}},blockExplorers:{default:{name:"WanScanTest",url:"https://wanscan.org"}},contracts:{multicall3:{address:"0x11c89bF4496c39FB80535Ffb4c92715839CC5324",blockCreated:24743448}},testnet:!0}),e9=(0,C.a)({...Q,id:999,name:"Zora Goerli Testnet",nativeCurrency:{decimals:18,name:"Zora Goerli",symbol:"ETH"},rpcUrls:{default:{http:["https://testnet.rpc.zora.energy"],webSocket:["wss://testnet.rpc.zora.energy"]}},blockExplorers:{default:{name:"Explorer",url:"https://testnet.explorer.zora.energy",apiUrl:"https://testnet.explorer.zora.energy/api"}},contracts:{...Q.contracts,multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:189123},portal:{5:{address:"0xDb9F51790365e7dc196e7D072728df39Be958ACe"}}},sourceId:5,testnet:!0}),te=(0,C.a)({id:1001,name:"Klaytn Baobab Testnet",network:"klaytn-baobab",nativeCurrency:{decimals:18,name:"Baobab Klaytn",symbol:"KLAY"},rpcUrls:{default:{http:["https://public-en-baobab.klaytn.net"]}},blockExplorers:{default:{name:"KlaytnScope",url:"https://baobab.klaytnscope.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:123390593}},testnet:!0}),tt=(0,C.a)({id:1004,name:"Ekta Testnet",nativeCurrency:{decimals:18,name:"EKTA",symbol:"EKTA"},rpcUrls:{default:{http:["https://test.ekta.io:8545"]}},blockExplorers:{default:{name:"Test Ektascan",url:"https://test.ektascan.io",apiUrl:"https://test.ektascan.io/api"}},testnet:!0}),tr=(0,C.a)({id:1017,name:"BNB Greenfield Chain",nativeCurrency:{decimals:18,name:"BNB",symbol:"BNB"},rpcUrls:{default:{http:["https://greenfield-chain.bnbchain.org"]}},blockExplorers:{default:{name:"BNB Greenfield Mainnet Scan",url:"https://greenfieldscan.com"}},testnet:!1}),tn=(0,C.a)({id:1028,name:"BitTorrent Chain Testnet",network:"bittorrent-chain-testnet",nativeCurrency:{name:"BitTorrent",symbol:"BTT",decimals:18},rpcUrls:{default:{http:["https://testrpc.bittorrentchain.io"]},public:{http:["https://testrpc.bittorrentchain.io"]}},blockExplorers:{default:{name:"Bttcscan",url:"https://testnet.bttcscan.com",apiUrl:"https://testnet.bttcscan.com/api"}},testnet:!0}),ta=(0,C.a)({id:1030,name:"Conflux eSpace",nativeCurrency:{name:"Conflux",symbol:"CFX",decimals:18},rpcUrls:{default:{http:["https://evm.confluxrpc.org"],webSocket:["wss://evm.confluxrpc.org/ws"]}},blockExplorers:{default:{name:"ConfluxScan",url:"https://evm.confluxscan.io"}},contracts:{multicall3:{address:"0xEFf0078910f638cd81996cc117bccD3eDf2B072F",blockCreated:68602935}}}),to=(0,C.a)({id:1038,name:"Bronos Testnet",nativeCurrency:{decimals:18,name:"Bronos Coin",symbol:"tBRO"},rpcUrls:{default:{http:["https://evm-testnet.bronos.org"]}},blockExplorers:{default:{name:"BronoScan",url:"https://tbroscan.bronos.org"}},testnet:!0}),ti=(0,C.a)({id:1039,name:"Bronos",nativeCurrency:{decimals:18,name:"BRO",symbol:"BRO"},rpcUrls:{default:{http:["https://evm.bronos.org"]}},blockExplorers:{default:{name:"BronoScan",url:"https://broscan.bronos.org"}}}),ts=(0,C.a)({id:1073,name:"Shimmer Testnet",network:"shimmer-testnet",nativeCurrency:{decimals:18,name:"Shimmer",symbol:"SMR"},rpcUrls:{default:{http:["https://json-rpc.evm.testnet.shimmer.network"]}},blockExplorers:{default:{name:"Shimmer Network Explorer",url:"https://explorer.evm.testnet.shimmer.network",apiUrl:"https://explorer.evm.testnet.shimmer.network/api"}},testnet:!0}),tl=(0,C.a)({id:1088,name:"Metis",nativeCurrency:{decimals:18,name:"Metis",symbol:"METIS"},rpcUrls:{default:{http:["https://andromeda.metis.io/?owner=1088"]}},blockExplorers:{default:{name:"Andromeda Explorer",url:"https://andromeda-explorer.metis.io",apiUrl:"https://andromeda-explorer.metis.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:2338552}}}),tc=(0,C.a)({id:1101,name:"Polygon zkEVM",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://zkevm-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://zkevm.polygonscan.com",apiUrl:"https://api-zkevm.polygonscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:57746}}}),tu=(0,C.a)({id:1111,name:"WEMIX",network:"wemix-mainnet",nativeCurrency:{name:"WEMIX",symbol:"WEMIX",decimals:18},rpcUrls:{default:{http:["https://api.wemix.com"]},public:{http:["https://api.wemix.com"]}},blockExplorers:{default:{name:"wemixExplorer",url:"https://explorer.wemix.com"}}}),td=(0,C.a)({id:1112,name:"WEMIX Testnet",network:"wemix-testnet",nativeCurrency:{name:"WEMIX",symbol:"tWEMIX",decimals:18},rpcUrls:{default:{http:["https://api.test.wemix.com"]},public:{http:["https://api.test.wemix.com"]}},blockExplorers:{default:{name:"wemixExplorer",url:"https://testnet.wemixscan.com",apiUrl:"https://testnet.wemixscan.com/api"}},testnet:!0}),tp=(0,C.a)({id:1116,name:"Core Dao",nativeCurrency:{decimals:18,name:"Core",symbol:"CORE"},rpcUrls:{default:{http:["https://rpc.coredao.org"]}},blockExplorers:{default:{name:"CoreDao",url:"https://scan.coredao.org"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:11907934}},testnet:!1}),th=(0,C.a)({id:1130,network:"defichain-evm",name:"DeFiChain EVM Mainnet",nativeCurrency:{name:"DeFiChain",symbol:"DFI",decimals:8},rpcUrls:{default:{http:["https://eth.mainnet.ocean.jellyfishsdk.com"]},public:{http:["https://eth.mainnet.ocean.jellyfishsdk.com"]}},blockExplorers:{default:{name:"DeFiScan",url:"https://meta.defiscan.live"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:137852}}}),tf=(0,C.a)({id:1131,network:"defichain-evm-testnet",name:"DeFiChain EVM Testnet",nativeCurrency:{name:"DeFiChain",symbol:"DFI",decimals:8},rpcUrls:{default:{http:["https://eth.testnet.ocean.jellyfishsdk.com"]},public:{http:["https://eth.testnet.ocean.jellyfishsdk.com"]}},blockExplorers:{default:{name:"DeFiScan",url:"https://meta.defiscan.live/?network=TestNet"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:156462}},testnet:!0}),tm=(0,C.a)({id:1281,name:"Moonbeam Development Node",nativeCurrency:{decimals:18,name:"DEV",symbol:"DEV"},rpcUrls:{default:{http:["http://127.0.0.1:9944"],webSocket:["wss://127.0.0.1:9944"]}}}),tb=(0,C.a)({id:1284,name:"Moonbeam",nativeCurrency:{decimals:18,name:"GLMR",symbol:"GLMR"},rpcUrls:{default:{http:["https://moonbeam.public.blastapi.io"],webSocket:["wss://moonbeam.public.blastapi.io"]}},blockExplorers:{default:{name:"Moonscan",url:"https://moonscan.io",apiUrl:"https://api-moonbeam.moonscan.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:609002}},testnet:!1}),tg=(0,C.a)({id:1285,name:"Moonriver",nativeCurrency:{decimals:18,name:"MOVR",symbol:"MOVR"},rpcUrls:{default:{http:["https://moonriver.public.blastapi.io"],webSocket:["wss://moonriver.public.blastapi.io"]}},blockExplorers:{default:{name:"Moonscan",url:"https://moonriver.moonscan.io",apiUrl:"https://api-moonriver.moonscan.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:1597904}},testnet:!1}),ty=(0,C.a)({id:1287,name:"Moonbase Alpha",nativeCurrency:{decimals:18,name:"DEV",symbol:"DEV"},rpcUrls:{default:{http:["https://rpc.api.moonbase.moonbeam.network"],webSocket:["wss://wss.api.moonbase.moonbeam.network"]}},blockExplorers:{default:{name:"Moonscan",url:"https://moonbase.moonscan.io",apiUrl:"https://moonbase.moonscan.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:1850686}},testnet:!0}),tv=(0,C.a)({id:1337,name:"Localhost",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["http://127.0.0.1:8545"]}}}),tw=(0,C.a)({id:1442,name:"Polygon zkEVM Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.public.zkevm-test.net"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://testnet-zkevm.polygonscan.com",apiUrl:"https://testnet-zkevm.polygonscan.com/api"}},testnet:!0,contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:525686}}}),tC=(0,C.a)({id:1453,name:"MetaChain Istanbul",nativeCurrency:{name:"Metatime Coin",symbol:"MTC",decimals:18},rpcUrls:{default:{http:["https://istanbul-rpc.metachain.dev"]}},blockExplorers:{default:{name:"MetaExplorer",url:"https://istanbul-explorer.metachain.dev"}},contracts:{multicall3:{address:"0x0000000000000000000000000000000000003001",blockCreated:0}},testnet:!0}),tE=(0,C.a)({id:1559,name:"Tenet",network:"tenet-mainnet",nativeCurrency:{name:"TENET",symbol:"TENET",decimals:18},rpcUrls:{default:{http:["https://rpc.tenet.org"]}},blockExplorers:{default:{name:"TenetScan Mainnet",url:"https://tenetscan.io",apiUrl:"https://tenetscan.io/api"}},testnet:!1}),tx=(0,C.a)({id:1663,name:"Horizen Gobi Testnet",nativeCurrency:{decimals:18,name:"Test ZEN",symbol:"tZEN"},rpcUrls:{default:{http:["https://gobi-testnet.horizenlabs.io/ethv1"]}},blockExplorers:{default:{name:"Gobi Explorer",url:"https://gobi-explorer.horizen.io"}},contracts:{},testnet:!0}),tA=(0,C.a)({id:1686,name:"Mint Sepolia Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://testnet-rpc.mintchain.io"]}},blockExplorers:{default:{name:"Mintchain Testnet explorer",url:"https://testnet-explorer.mintchain.io"}},testnet:!0}),tk=(0,C.a)({id:1890,name:"LightLink Phoenix Mainnet",network:"lightlink-phoenix",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://replicator.phoenix.lightlink.io/rpc/v1"]}},blockExplorers:{default:{name:"LightLink Phoenix Explorer",url:"https://phoenix.lightlink.io"}},testnet:!1}),tB=(0,C.a)({id:1891,name:"LightLink Pegasus Testnet",network:"lightlink-pegasus",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://replicator.pegasus.lightlink.io/rpc/v1"]}},blockExplorers:{default:{name:"LightLink Pegasus Explorer",url:"https://pegasus.lightlink.io"}},testnet:!0}),tS=(0,C.a)({id:1994,name:"Ekta",nativeCurrency:{decimals:18,name:"EKTA",symbol:"EKTA"},rpcUrls:{default:{http:["https://main.ekta.io"]}},blockExplorers:{default:{name:"Ektascan",url:"https://ektascan.io",apiUrl:"https://ektascan.io/api"}}}),tI=(0,C.a)({id:2e3,name:"Dogechain",nativeCurrency:{decimals:18,name:"Dogechain",symbol:"DC"},rpcUrls:{default:{http:["https://rpc.dogechain.dog"]}},blockExplorers:{default:{name:"DogeChainExplorer",url:"https://explorer.dogechain.dog",apiUrl:"https://explorer.dogechain.dog/api"}}}),tj=(0,C.a)({id:2020,name:"Ronin",nativeCurrency:{name:"RON",symbol:"RON",decimals:18},rpcUrls:{default:{http:["https://api.roninchain.com/rpc"]}},blockExplorers:{default:{name:"Ronin Explorer",url:"https://app.roninchain.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:26023535}}}),tT=(0,C.a)({id:2021,name:"Edgeware EdgeEVM Mainnet",nativeCurrency:{decimals:18,name:"Edgeware",symbol:"EDG"},rpcUrls:{default:{http:["https://edgeware-evm.jelliedowl.net"]}},blockExplorers:{default:{name:"Edgscan by Bharathcoorg",url:"https://edgscan.live",apiUrl:"https://edgscan.live/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:18117872}}}),tP=(0,C.a)({id:2021,name:"Saigon Testnet",nativeCurrency:{name:"RON",symbol:"RON",decimals:18},rpcUrls:{default:{http:["https://saigon-testnet.roninchain.com/rpc"]}},blockExplorers:{default:{name:"Saigon Explorer",url:"https://saigon-app.roninchain.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:18736871}},testnet:!0}),tM=(0,C.a)({id:2022,name:"Beresheet BereEVM Testnet",nativeCurrency:{decimals:18,name:"Testnet EDG",symbol:"tEDG"},rpcUrls:{default:{http:["https://beresheet-evm.jelliedowl.net"]}},blockExplorers:{default:{name:"Edgscan by Bharathcoorg",url:"https://testnet.edgscan.live",apiUrl:"https://testnet.edgscan.live/api"}}}),tO=(0,C.a)({id:2221,name:"Kava EVM Testnet",network:"kava-testnet",nativeCurrency:{name:"Kava",symbol:"KAVA",decimals:18},rpcUrls:{default:{http:["https://evm.testnet.kava.io"]}},blockExplorers:{default:{name:"Kava EVM Testnet Explorer",url:"https://testnet.kavascan.com/",apiUrl:"https://testnet.kavascan.com/api"}},contracts:{multicall3:{address:"0xDf1D724A7166261eEB015418fe8c7679BBEa7fd6",blockCreated:7242179}},testnet:!0}),tR=(0,C.a)({id:2222,name:"Kava EVM",network:"kava-mainnet",nativeCurrency:{name:"Kava",symbol:"KAVA",decimals:18},rpcUrls:{default:{http:["https://evm.kava.io"]}},blockExplorers:{default:{name:"Kava EVM Explorer",url:"https://kavascan.com",apiUrl:"https://kavascan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:3661165}},testnet:!1}),tU=(0,C.a)({...Q,id:2331,name:"RSS3 VSL Sepolia Testnet",nativeCurrency:{name:"RSS3",symbol:"RSS3",decimals:18},rpcUrls:{default:{http:["https://rpc.testnet.rss3.io"]}},blockExplorers:{default:{name:"RSS3 VSL Sepolia Testnet Scan",url:"https://scan.testnet.rss3.io",apiUrl:"https://scan.testnet.rss3.io/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0xDb5c46C3Eaa6Ed6aE8b2379785DF7dd029C0dC81"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:55697},portal:{11155111:{address:"0xcBD77E8E1E7F06B25baDe67142cdE82652Da7b57",blockCreated:5345035}},l1StandardBridge:{11155111:{address:"0xdDD29bb63B0839FB1cE0eE439Ff027738595D07B"}}},testnet:!0,sourceId:11155111}),tF=(0,C.a)({id:2358,name:"Kroma Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://api.sepolia.kroma.network"]}},blockExplorers:{default:{name:"Kroma Sepolia Explorer",url:"https://blockscout.sepolia.kroma.network",apiUrl:"https://blockscout.sepolia.kroma.network/api"}},testnet:!0}),tN=(0,C.a)({...Q,id:2522,name:"Fraxtal Testnet",nativeCurrency:{name:"Frax Ether",symbol:"frxETH",decimals:18},rpcUrls:{default:{http:["https://rpc.testnet.frax.com"]}},blockExplorers:{default:{name:"fraxscan testnet",url:"https://holesky.fraxscan.com",apiUrl:"https://api-holesky.fraxscan.com/api"}},contracts:{...Q.contracts,l2OutputOracle:{17e3:{address:"0x715EA64DA13F4d0831ece4Ad3E8c1aa013167F32"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11"},portal:{17e3:{address:"0xB9c64BfA498d5b9a8398Ed6f46eb76d90dE5505d",blockCreated:318416}},l1StandardBridge:{17e3:{address:"0x0BaafC217162f64930909aD9f2B27125121d6332",blockCreated:318416}}},sourceId:17e3}),tD=(0,C.a)({id:2710,name:"Morph Sepolia",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc-testnet.morphl2.io"]}},blockExplorers:{default:{name:"Morph Testnet Explorer",url:"https://explorer-testnet.morphl2.io",apiUrl:"https://explorer-api-testnet.morphl2.io/api"}},testnet:!0}),t_=(0,C.a)({id:3141,name:"Filecoin Hyperspace",nativeCurrency:{decimals:18,name:"testnet filecoin",symbol:"tFIL"},rpcUrls:{default:{http:["https://api.hyperspace.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filfox",url:"https://hyperspace.filfox.info/en"}}}),tL=(0,C.a)({id:3737,name:"Crossbell",nativeCurrency:{decimals:18,name:"CSB",symbol:"CSB"},rpcUrls:{default:{http:["https://rpc.crossbell.io"]}},blockExplorers:{default:{name:"CrossScan",url:"https://scan.crossbell.io",apiUrl:"https://scan.crossbell.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:38246031}}}),tz=(0,C.a)({id:3776,name:"Astar zkEVM",network:"AstarZkEVM",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.startale.com/astar-zkevm"]}},blockExplorers:{default:{name:"Astar zkEVM Explorer",url:"https://astar-zkevm.explorer.startale.com"}},contracts:{multicall3:{address:"0x36eabf148272BA81A5225C6a3637972F0EE17771",blockCreated:93528}},testnet:!1}),tq=(0,C.a)({id:3993,name:"APEX Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc-testnet.apexlayer.xyz"]}},blockExplorers:{default:{name:"Blockscout",url:"https://exp-testnet.apexlayer.xyz",apiUrl:"https://exp-testnet.apexlayer.xyz/api"}},contracts:{multicall3:{address:"0xf7642be33a6b18D16a995657adb5a68CD0438aE2",blockCreated:283775}},testnet:!0}),tG=(0,C.a)({id:4002,name:"Fantom Testnet",nativeCurrency:{decimals:18,name:"Fantom",symbol:"FTM"},rpcUrls:{default:{http:["https://rpc.testnet.fantom.network"]}},blockExplorers:{default:{name:"FTMScan",url:"https://testnet.ftmscan.com",apiUrl:"https://testnet.ftmscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:8328688}}}),tW=(0,C.a)({id:4090,network:"oasis-testnet",name:"Oasis Testnet",nativeCurrency:{name:"Fasttoken",symbol:"FTN",decimals:18},rpcUrls:{default:{http:["https://rpc1.oasis.bahamutchain.com"]},public:{http:["https://rpc1.oasis.bahamutchain.com"]}},blockExplorers:{default:{name:"Ftnscan",url:"https://oasis.ftnscan.com",apiUrl:"https://oasis.ftnscan.com/api"}},testnet:!0}),tH=(0,C.a)({id:4200,name:"Merlin",nativeCurrency:{name:"BTC",symbol:"BTC",decimals:18},rpcUrls:{default:{http:["https://rpc.merlinchain.io"]}},blockExplorers:{default:{name:"blockscout",url:"https://scan.merlinchain.io",apiUrl:"https://scan.merlinchain.io/api"}}}),tQ=(0,C.a)({id:4201,name:"LUKSO Testnet",nativeCurrency:{decimals:18,name:"LUKSO Testnet",symbol:"LYXt"},rpcUrls:{default:{http:["https://rpc.testnet.lukso.network"],webSocket:["wss://ws-rpc.testnet.lukso.network"]}},blockExplorers:{default:{name:"LUKSO Testnet Explorer",url:"https://explorer.execution.testnet.lukso.network",apiUrl:"https://api.explorer.execution.testnet.lukso.network/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:605348}},testnet:!0}),tK=(0,C.a)({...Q,id:4202,network:"lisk-sepolia",name:"Lisk Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia-api.lisk.com"]}},blockExplorers:{default:{name:"Blockscout",url:"https://sepolia-blockscout.lisk.com",apiUrl:"https://sepolia-blockscout.lisk.com/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0xA0E35F56C318DE1bD5D9ca6A94Fe7e37C5663348"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11"},portal:{11155111:{address:"0xe3d90F21490686Ec7eF37BE788E02dfC12787264"}},l1StandardBridge:{11155111:{address:"0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5"}}},testnet:!0,sourceId:11155111}),tV=(0,C.a)({id:4242,name:"Nexi",nativeCurrency:{name:"Nexi",symbol:"NEXI",decimals:18},rpcUrls:{default:{http:["https://rpc.chain.nexi.technology"]}},blockExplorers:{default:{name:"NexiScan",url:"https://www.nexiscan.com",apiUrl:"https://www.nexiscan.com/api"}},contracts:{multicall3:{address:"0x0277A46Cc69A57eE3A6C8c158bA874832F718B8E",blockCreated:25770160}}}),tZ=(0,C.a)({id:4337,name:"Beam",network:"beam",nativeCurrency:{decimals:18,name:"Beam",symbol:"BEAM"},rpcUrls:{public:{http:["https://build.onbeam.com/rpc"],webSocket:["wss://build.onbeam.com/ws"]},default:{http:["https://build.onbeam.com/rpc"],webSocket:["wss://build.onbeam.com/ws"]}},blockExplorers:{default:{name:"Beam Explorer",url:"https://subnets.avax.network/beam"}},contracts:{multicall3:{address:"0x4956f15efdc3dc16645e90cc356eafa65ffc65ec",blockCreated:1}}}),tJ=(0,C.a)({id:4689,name:"IoTeX",nativeCurrency:{decimals:18,name:"IoTeX",symbol:"IOTX"},rpcUrls:{default:{http:["https://babel-api.mainnet.iotex.io"],webSocket:["wss://babel-api.mainnet.iotex.io"]}},blockExplorers:{default:{name:"IoTeXScan",url:"https://iotexscan.io"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:22163670}}}),tX=(0,C.a)({id:4690,name:"IoTeX Testnet",nativeCurrency:{decimals:18,name:"IoTeX",symbol:"IOTX"},rpcUrls:{default:{http:["https://babel-api.testnet.iotex.io"],webSocket:["wss://babel-api.testnet.iotex.io"]}},blockExplorers:{default:{name:"IoTeXScan",url:"https://testnet.iotexscan.io"}},testnet:!0}),tY=(0,C.a)({id:4759,name:"MEVerse Chain Testnet",nativeCurrency:{decimals:18,name:"MEVerse",symbol:"MEV"},rpcUrls:{default:{http:["https://rpc.meversetestnet.io"]}},blockExplorers:{default:{name:"Explorer",url:"https://testnet.meversescan.io/"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:64371115}},testnet:!0}),t$=(0,C.a)({id:4777,name:"BlackFort Exchange Network Testnet",nativeCurrency:{name:"BlackFort Testnet Token",symbol:"TBXN",decimals:18},rpcUrls:{default:{http:["https://testnet.blackfort.network/rpc"]}},blockExplorers:{default:{name:"Blockscout",url:"https://testnet-explorer.blackfort.network",apiUrl:"https://testnet-explorer.blackfort.network/api"}}}),t0=(0,C.a)({id:4999,name:"BlackFort Exchange Network",nativeCurrency:{name:"BlackFort Token",symbol:"BXN",decimals:18},rpcUrls:{default:{http:["https://mainnet.blackfort.network/rpc"]}},blockExplorers:{default:{name:"Blockscout",url:"https://explorer.blackfort.network",apiUrl:"https://explorer.blackfort.network/api"}}}),t1=(0,C.a)({id:5e3,name:"Mantle",nativeCurrency:{decimals:18,name:"MNT",symbol:"MNT"},rpcUrls:{default:{http:["https://rpc.mantle.xyz"]}},blockExplorers:{default:{name:"Mantle Explorer",url:"https://explorer.mantle.xyz",apiUrl:"https://explorer.mantle.xyz/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:304717}}}),t6=(0,C.a)({id:5001,name:"Mantle Testnet",nativeCurrency:{decimals:18,name:"MNT",symbol:"MNT"},rpcUrls:{default:{http:["https://rpc.testnet.mantle.xyz"]}},blockExplorers:{default:{name:"Mantle Testnet Explorer",url:"https://explorer.testnet.mantle.xyz",apiUrl:"https://explorer.testnet.mantle.xyz/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:561333}},testnet:!0}),t3=(0,C.a)({id:5165,network:"bahamut",name:"Bahamut",nativeCurrency:{name:"Fasttoken",symbol:"FTN",decimals:18},rpcUrls:{default:{http:["https://rpc1.bahamut.io","https://bahamut.publicnode.com","https://rpc2.bahamut.io"],webSocket:["wss://ws1.sahara.bahamutchain.com","wss://bahamut.publicnode.com","wss://ws2.sahara.bahamutchain.com"]},public:{http:["https://rpc1.bahamut.io","https://bahamut.publicnode.com","https://rpc2.bahamut.io"],webSocket:["wss://ws1.sahara.bahamutchain.com","wss://bahamut.publicnode.com","wss://ws2.sahara.bahamutchain.com"]}},blockExplorers:{default:{name:"Ftnscan",url:"https://www.ftnscan.com",apiUrl:"https://www.ftnscan.com/api"}}}),t2=(0,C.a)({id:5611,name:"opBNB Testnet",nativeCurrency:{decimals:18,name:"tBNB",symbol:"tBNB"},rpcUrls:{default:{http:["https://opbnb-testnet-rpc.bnbchain.org"]}},blockExplorers:{default:{name:"opbnbscan",url:"https://testnet.opbnbscan.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3705108}},testnet:!0}),t7=(0,C.a)({id:5700,name:"Syscoin Tanenbaum Testnet",nativeCurrency:{decimals:18,name:"Syscoin",symbol:"SYS"},rpcUrls:{default:{http:["https://rpc.tanenbaum.io"],webSocket:["wss://rpc.tanenbaum.io/wss"]}},blockExplorers:{default:{name:"SyscoinTestnetExplorer",url:"https://tanenbaum.io"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:271288}}}),t8=(0,C.a)({id:7e3,name:"ZetaChain",nativeCurrency:{decimals:18,name:"Zeta",symbol:"ZETA"},rpcUrls:{default:{http:["https://zetachain-evm.blockpi.network/v1/rpc/public"]}},blockExplorers:{default:{name:"ZetaScan",url:"https://explorer.zetachain.com"}},testnet:!1}),t5=(0,C.a)({id:7001,name:"ZetaChain Athens Testnet",nativeCurrency:{decimals:18,name:"Zeta",symbol:"aZETA"},rpcUrls:{default:{http:["https://zetachain-athens-evm.blockpi.network/v1/rpc/public"]}},blockExplorers:{default:{name:"ZetaScan",url:"https://athens3.explorer.zetachain.com"}},testnet:!0}),t4=(0,C.a)({id:7518,name:"MEVerse Chain Mainnet",nativeCurrency:{decimals:18,name:"MEVerse",symbol:"MEV"},rpcUrls:{default:{http:["https://rpc.meversemainnet.io"]}},blockExplorers:{default:{name:"Explorer",url:"https://www.meversescan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:86881340}}}),t9=(0,C.a)({id:7700,name:"Canto",nativeCurrency:{decimals:18,name:"Canto",symbol:"CANTO"},rpcUrls:{default:{http:["https://canto.gravitychain.io"]}},blockExplorers:{default:{name:"Tuber.Build (Blockscout)",url:"https://tuber.build"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:2905789}}}),re=(0,C.a)({id:8082,name:"Shardeum Sphinx",nativeCurrency:{name:"SHARDEUM",symbol:"SHM",decimals:18},rpcUrls:{default:{http:["https://sphinx.shardeum.org"]}},blockExplorers:{default:{name:"Shardeum Explorer",url:"https://explorer-sphinx.shardeum.org"}},testnet:!0}),rt=(0,C.a)({id:8217,name:"Klaytn",nativeCurrency:{decimals:18,name:"Klaytn",symbol:"KLAY"},rpcUrls:{default:{http:["https://public-en-cypress.klaytn.net"]}},blockExplorers:{default:{name:"KlaytnScope",url:"https://scope.klaytn.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:96002415}}}),rr=(0,C.a)({...Q,id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"Basescan",url:"https://basescan.org",apiUrl:"https://api.basescan.org/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0x56315b90c40730925ec5485cf004d835058518A0"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:5022},portal:{1:{address:"0x49048044D57e1C92A77f79988d21Fa8fAF74E97e",blockCreated:17482143}},l1StandardBridge:{1:{address:"0x3154Cf16ccdb4C6d922629664174b904d80F2C35",blockCreated:17482143}}},sourceId:1}),rn=(0,C.a)({id:8899,name:"JIBCHAIN L1",network:"jbc",nativeCurrency:{name:"JBC",symbol:"JBC",decimals:18},rpcUrls:{default:{http:["https://rpc-l1.jibchain.net"]},public:{http:["https://rpc-l1.jibchain.net"]}},blockExplorers:{default:{name:"Blockscout",url:"https://exp-l1.jibchain.net",apiUrl:"https://exp-l1.jibchain.net/api"}},contracts:{multicall3:{address:"0xc0C8C486D1466C57Efe13C2bf000d4c56F47CBdC",blockCreated:2299048}},testnet:!1}),ra=(0,C.a)({id:9e3,name:"Evmos Testnet",nativeCurrency:{decimals:18,name:"Evmos",symbol:"EVMOS"},rpcUrls:{default:{http:["https://eth.bd.evmos.dev:8545"]}},blockExplorers:{default:{name:"Evmos Testnet Block Explorer",url:"https://evm.evmos.dev/"}}}),ro=(0,C.a)({id:9001,name:"Evmos",nativeCurrency:{decimals:18,name:"Evmos",symbol:"EVMOS"},rpcUrls:{default:{http:["https://eth.bd.evmos.org:8545"]}},blockExplorers:{default:{name:"Evmos Block Explorer",url:"https://escan.live"}}}),ri=(0,C.a)({id:9700,name:"OORT MainnetDev",nativeCurrency:{decimals:18,name:"OORT",symbol:"OORT"},rpcUrls:{default:{http:["https://dev-rpc.oortech.com"]}},blockExplorers:{oort:{name:"OORT MainnetDev Explorer",url:"https://dev-scan.oortech.com"},default:{name:"OORT MainnetDev Explorer",url:"https://dev-scan.oortech.com"}}}),rs=(0,C.a)({id:10200,name:"Gnosis Chiado",nativeCurrency:{decimals:18,name:"Gnosis",symbol:"xDAI"},rpcUrls:{default:{http:["https://rpc.chiadochain.net"],webSocket:["wss://rpc.chiadochain.net/wss"]}},blockExplorers:{default:{name:"Blockscout",url:"https://blockscout.chiadochain.net",apiUrl:"https://blockscout.chiadochain.net/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:4967313}},testnet:!0}),rl=(0,C.a)({id:11235,name:"HAQQ Mainnet",nativeCurrency:{decimals:18,name:"Islamic Coin",symbol:"ISLM"},rpcUrls:{default:{http:["https://rpc.eth.haqq.network"]}},blockExplorers:{default:{name:"HAQQ Explorer",url:"https://explorer.haqq.network",apiUrl:"https://explorer.haqq.network/api"}}}),rc=(0,C.a)({id:12306,name:"Fibo Chain",nativeCurrency:{decimals:18,name:"fibo",symbol:"FIBO"},rpcUrls:{default:{http:["https://network.hzroc.art"]}},blockExplorers:{default:{name:"FiboScan",url:"https://scan.fibochain.org"}}}),ru=(0,C.a)({...Q,id:12553,name:"RSS3 VSL Mainnet",nativeCurrency:{name:"RSS3",symbol:"RSS3",decimals:18},rpcUrls:{default:{http:["https://rpc.rss3.io"]}},blockExplorers:{default:{name:"RSS3 VSL Mainnet Scan",url:"https://scan.rss3.io",apiUrl:"https://scan.rss3.io/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0xE6f24d2C32B3109B18ed33cF08eFb490b1e09C10"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14193},portal:{1:{address:"0x6A12432491bbbE8d3babf75F759766774C778Db4",blockCreated:19387057}},l1StandardBridge:{1:{address:"0x4cbab69108Aa72151EDa5A3c164eA86845f18438"}}},sourceId:1}),rd=(0,C.a)({id:13337,name:"Beam Testnet",network:"beam",nativeCurrency:{decimals:18,name:"Beam",symbol:"BEAM"},rpcUrls:{public:{http:["https://build.onbeam.com/rpc/testnet"],webSocket:["wss://build.onbeam.com/ws/testnet"]},default:{http:["https://build.onbeam.com/rpc/testnet"],webSocket:["wss://build.onbeam.com/ws/testnet"]}},blockExplorers:{default:{name:"Beam Explorer",url:"https://subnets-test.avax.network/beam"}},contracts:{multicall3:{address:"0x9bf49b704ee2a095b95c1f2d4eb9010510c41c9e",blockCreated:3}},testnet:!0}),rp=(0,C.a)({id:13381,name:"Phoenix Blockchain",nativeCurrency:{name:"Phoenix",symbol:"PHX",decimals:18},rpcUrls:{default:{http:["https://rpc.phoenixplorer.com"]}},blockExplorers:{default:{name:"Phoenixplorer",url:"https://phoenixplorer.com",apiUrl:"https://phoenixplorer.com/api"}},contracts:{multicall3:{address:"0x498cF757a575cFF2c2Ed9f532f56Efa797f86442",blockCreated:5620192}}}),rh=(0,C.a)({id:15557,name:"EOS EVM Testnet",nativeCurrency:{decimals:18,name:"EOS",symbol:"EOS"},rpcUrls:{default:{http:["https://api.testnet.evm.eosnetwork.com"]}},blockExplorers:{default:{name:"EOS EVM Testnet Explorer",url:"https://explorer.testnet.evm.eosnetwork.com",apiUrl:"https://explorer.testnet.evm.eosnetwork.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:9067940}},testnet:!0}),rf=(0,C.a)({id:17e3,name:"Holesky",nativeCurrency:{name:"Holesky Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://ethereum-holesky.publicnode.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://holesky.etherscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:77},ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",blockCreated:801613},ensUniversalResolver:{address:"0xa6AC935D4971E3CD133b950aE053bECD16fE7f3b",blockCreated:973484}},testnet:!0}),rm=(0,C.a)({id:17777,name:"EOS EVM",nativeCurrency:{decimals:18,name:"EOS",symbol:"EOS"},rpcUrls:{default:{http:["https://api.evm.eosnetwork.com"]}},blockExplorers:{default:{name:"EOS EVM Explorer",url:"https://explorer.evm.eosnetwork.com",apiUrl:"https://explorer.evm.eosnetwork.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:7943933}}}),rb=(0,C.a)({id:23294,name:"Oasis Sapphire",network:"sapphire",nativeCurrency:{name:"Sapphire Rose",symbol:"ROSE",decimals:18},rpcUrls:{default:{http:["https://sapphire.oasis.io"],webSocket:["wss://sapphire.oasis.io/ws"]}},blockExplorers:{default:{name:"Oasis Sapphire Explorer",url:"https://explorer.sapphire.oasis.io",apiUrl:"https://explorer.sapphire.oasis.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:734531}}}),rg=(0,C.a)({id:23295,name:"Oasis Sapphire Testnet",network:"sapphire-testnet",nativeCurrency:{name:"Sapphire Test Rose",symbol:"TEST",decimals:18},rpcUrls:{default:{http:["https://testnet.sapphire.oasis.dev"],webSocket:["wss://testnet.sapphire.oasis.dev/ws"]}},blockExplorers:{default:{name:"Oasis Sapphire Testnet Explorer",url:"https://testnet.explorer.sapphire.oasis.dev",apiUrl:"https://testnet.explorer.sapphire.oasis.dev/api"}},testnet:!0}),ry=(0,C.a)({id:31337,name:"Anvil",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["http://127.0.0.1:8545"],webSocket:["ws://127.0.0.1:8545"]}}}),rv=(0,C.a)({id:31337,name:"Foundry",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["http://127.0.0.1:8545"],webSocket:["ws://127.0.0.1:8545"]}}}),rw=(0,C.a)({id:32769,name:"Zilliqa",network:"zilliqa",nativeCurrency:{name:"Zilliqa",symbol:"ZIL",decimals:18},rpcUrls:{default:{http:["https://api.zilliqa.com"]}},blockExplorers:{default:{name:"Ethernal",url:"https://evmx.zilliqa.com"}},testnet:!1}),rC=(0,C.a)({id:33101,name:"Zilliqa Testnet",network:"zilliqa-testnet",nativeCurrency:{name:"Zilliqa",symbol:"ZIL",decimals:18},rpcUrls:{default:{http:["https://dev-api.zilliqa.com"]}},blockExplorers:{default:{name:"Ethernal",url:"https://evmx.testnet.zilliqa.com"}},testnet:!0}),rE=(0,C.a)({id:34443,name:"Mode Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.mode.network"]}},blockExplorers:{default:{name:"Mode Explorer",url:"https://explorer.mode.network"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:2465882}}}),rx=(0,C.a)({id:35441,name:"Q Mainnet",nativeCurrency:{decimals:18,name:"Q",symbol:"Q"},rpcUrls:{default:{http:["https://rpc.q.org"]}},blockExplorers:{default:{name:"Q Mainnet Explorer",url:"https://explorer.q.org",apiUrl:"https://explorer.q.org/api"}}}),rA=(0,C.a)({id:35443,name:"Q Testnet",nativeCurrency:{decimals:18,name:"Q",symbol:"Q"},rpcUrls:{default:{http:["https://rpc.qtestnet.org"]}},blockExplorers:{default:{name:"Q Testnet Explorer",url:"https://explorer.qtestnet.org",apiUrl:"https://explorer.qtestnet.org/api"}},testnet:!0}),rk=(0,C.a)({id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io",apiUrl:"https://api.arbiscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:7654707}}}),rB=(0,C.a)({id:42170,name:"Arbitrum Nova",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://nova.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://nova.arbiscan.io",apiUrl:"https://api-nova.arbiscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1746963}}});function isEmpty(e){return 0===e||0n===e||null==e||"0"===e||""===e||"string"==typeof e&&("0x"===(0,z.f)(e).toLowerCase()||"0x00"===(0,z.f)(e).toLowerCase())}function isPresent(e){return!isEmpty(e)}function isEIP1559(e){return void 0!==e.maxFeePerGas&&void 0!==e.maxPriorityFeePerGas}function isCIP42(e){return"cip42"===e.type||isEIP1559(e)&&(isPresent(e.feeCurrency)||isPresent(e.gatewayFeeRecipient)||isPresent(e.gatewayFee))}function isCIP64(e){return"cip64"===e.type||isEIP1559(e)&&isPresent(e.feeCurrency)&&isEmpty(e.gatewayFee)&&isEmpty(e.gatewayFeeRecipient)}let rS={block:(0,B.G)({exclude:["difficulty","gasLimit","mixHash","nonce","uncles"],format(e){let t=e.transactions?.map(e=>"string"==typeof e?e:{...S.Tr(e),feeCurrency:e.feeCurrency,..."0x7b"!==e.type?{gatewayFee:e.gatewayFee?k.y_(e.gatewayFee):null,gatewayFeeRecipient:e.gatewayFeeRecipient||null}:{}});return{randomness:e.randomness,transactions:t}}}),transaction:(0,S.y_)({format(e){let t={feeCurrency:e.feeCurrency};return"0x7b"===e.type?t.type="cip64":("0x7c"===e.type&&(t.type="cip42"),t.gatewayFee=e.gatewayFee?(0,k.y_)(e.gatewayFee):null,t.gatewayFeeRecipient=e.gatewayFeeRecipient),t}}),transactionRequest:(0,eF.iy)({format(e){let t={feeCurrency:e.feeCurrency};return isCIP64(e)?t.type="0x7b":(isCIP42(e)&&(t.type="0x7c"),t.gatewayFee=void 0!==e.gatewayFee?(0,O.eC)(e.gatewayFee):void 0,t.gatewayFeeRecipient=e.gatewayFeeRecipient),t}})},rI=2n**256n-1n,rj={formatters:rS,serializers:{transaction:function(e,t){return isCIP64(e)?function(e,t){!function(e){let{chainId:t,maxPriorityFeePerGas:n,gasPrice:o,maxFeePerGas:i,to:s,feeCurrency:l}=e;if(t<=0)throw new q.hJ({chainId:t});if(s&&!(0,P.U)(s))throw new T.b({address:s});if(o)throw new R.G("`gasPrice` is not a valid CIP-64 Transaction attribute.");if(isPresent(i)&&i>rI)throw new G.Hh({maxFeePerGas:i});if(isPresent(n)&&isPresent(i)&&n>i)throw new G.cs({maxFeePerGas:i,maxPriorityFeePerGas:n});if(isPresent(l)&&!(0,P.U)(l))throw new R.G("`feeCurrency` MUST be a token address for CIP-64 transactions.");if(isEmpty(l))throw new R.G("`feeCurrency` must be provided for CIP-64 transactions.")}(e);let{chainId:n,gas:o,nonce:i,to:s,value:l,maxFeePerGas:c,maxPriorityFeePerGas:u,accessList:d,feeCurrency:p,data:f}=e,m=[(0,O.NC)(n),i?(0,O.NC)(i):"0x",u?(0,O.NC)(u):"0x",c?(0,O.NC)(c):"0x",o?(0,O.NC)(o):"0x",s??"0x",l?(0,O.NC)(l):"0x",f??"0x",serializeAccessList(d),p,...toYParitySignatureArray(e,t)];return(0,M.SM)(["0x7b",toRlp(m)])}(e,t):isCIP42(e)?function(e,t){!function(e){let{chainId:t,maxPriorityFeePerGas:n,gasPrice:o,maxFeePerGas:i,to:s,feeCurrency:l,gatewayFee:c,gatewayFeeRecipient:u}=e;if(t<=0)throw new q.hJ({chainId:t});if(s&&!(0,P.U)(s))throw new T.b({address:s});if(o)throw new R.G("`gasPrice` is not a valid CIP-42 Transaction attribute.");if(isPresent(i)&&i>rI)throw new G.Hh({maxFeePerGas:i});if(isPresent(n)&&isPresent(i)&&n>i)throw new G.cs({maxFeePerGas:i,maxPriorityFeePerGas:n});if(isPresent(c)&&isEmpty(u)||isPresent(u)&&isEmpty(c))throw new R.G("`gatewayFee` and `gatewayFeeRecipient` must be provided together.");if(isPresent(l)&&!(0,P.U)(l))throw new R.G("`feeCurrency` MUST be a token address for CIP-42 transactions.");if(isPresent(u)&&!(0,P.U)(u))throw new T.b(u);if(isEmpty(l)&&isEmpty(u))throw new R.G("Either `feeCurrency` or `gatewayFeeRecipient` must be provided for CIP-42 transactions.")}(e);let{chainId:n,gas:o,nonce:i,to:s,value:l,maxFeePerGas:c,maxPriorityFeePerGas:u,accessList:d,feeCurrency:p,gatewayFeeRecipient:f,gatewayFee:m,data:b}=e,g=[(0,O.NC)(n),i?(0,O.NC)(i):"0x",u?(0,O.NC)(u):"0x",c?(0,O.NC)(c):"0x",o?(0,O.NC)(o):"0x",p??"0x",f??"0x",m?(0,O.NC)(m):"0x",s??"0x",l?(0,O.NC)(l):"0x",b??"0x",serializeAccessList(d),...toYParitySignatureArray(e,t)];return(0,M.SM)(["0x7c",toRlp(g)])}(e,t):serializeTransaction(e,t)}}},rT=(0,C.a)({...rj,id:42220,name:"Celo",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://forno.celo.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/mainnet",apiUrl:"https://explorer.celo.org/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:13112599}},testnet:!1}),rP=(0,C.a)({id:42766,name:"ZKFair Mainnet",network:"zkfair-mainnet",nativeCurrency:{decimals:18,name:"USD Coin",symbol:"USDC"},rpcUrls:{default:{http:["https://rpc.zkfair.io"]},public:{http:["https://rpc.zkfair.io"]}},blockExplorers:{default:{name:"zkFair Explorer",url:"https://scan.zkfair.io",apiUrl:"https://scan.zkfair.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:6090959}},testnet:!1}),rM=(0,C.a)({id:43113,name:"Avalanche Fuji",nativeCurrency:{decimals:18,name:"Avalanche Fuji",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax-test.network/ext/bc/C/rpc"]}},blockExplorers:{default:{name:"SnowScan",url:"https://testnet.snowscan.xyz",apiUrl:"https://api-testnet.snowscan.xyz"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:7096959}},testnet:!0}),rO=(0,C.a)({id:43114,name:"Avalanche",nativeCurrency:{decimals:18,name:"Avalanche",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax.network/ext/bc/C/rpc"]}},blockExplorers:{default:{name:"SnowScan",url:"https://snowscan.xyz",apiUrl:"https://api.snowscan.xyz/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:11907934}}}),rR=(0,C.a)({id:43851,name:"ZKFair Testnet",network:"zkfair-testnet",nativeCurrency:{decimals:18,name:"USD Coin",symbol:"USDC"},rpcUrls:{default:{http:["https://testnet-rpc.zkfair.io"]},public:{http:["https://testnet-rpc.zkfair.io"]}},blockExplorers:{default:{name:"zkFair Explorer",url:"https://testnet-scan.zkfair.io"}},testnet:!0}),rU=(0,C.a)({...rj,id:44787,name:"Alfajores",nativeCurrency:{decimals:18,name:"CELO",symbol:"A-CELO"},rpcUrls:{default:{http:["https://alfajores-forno.celo-testnet.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/alfajores",apiUrl:"https://explorer.celo.org/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:14569001}},testnet:!0}),rF=(0,C.a)({id:53935,name:"DFK Chain",nativeCurrency:{decimals:18,name:"Jewel",symbol:"JEWEL"},rpcUrls:{default:{http:["https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"]}},blockExplorers:{default:{name:"DFKSubnetScan",url:"https://subnets.avax.network/defi-kingdoms"}}}),rN=(0,C.a)({id:54211,name:"HAQQ Testedge 2",nativeCurrency:{decimals:18,name:"Islamic Coin",symbol:"ISLMT"},rpcUrls:{default:{http:["https://rpc.eth.testedge2.haqq.network"]}},blockExplorers:{default:{name:"HAQQ Explorer",url:"https://explorer.testedge2.haqq.network",apiUrl:"https://explorer.testedge2.haqq.network/api"}}}),rD=(0,C.a)({id:57e3,name:"Rollux Testnet",nativeCurrency:{decimals:18,name:"Syscoin",symbol:"SYS"},rpcUrls:{default:{http:["https://rpc-tanenbaum.rollux.com/"],webSocket:["wss://rpc-tanenbaum.rollux.com/wss"]}},blockExplorers:{default:{name:"RolluxTestnetExplorer",url:"https://rollux.tanenbaum.io",apiUrl:"https://rollux.tanenbaum.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:1813675}}}),r_=(0,C.a)({id:58008,network:"pgn-testnet",name:"PGN ",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.publicgoods.network"]}},blockExplorers:{default:{name:"PGN Testnet Explorer",url:"https://explorer.sepolia.publicgoods.network",apiUrl:"https://explorer.sepolia.publicgoods.network/api"},blocksout:{name:"PGN Testnet Explorer",url:"https://explorer.sepolia.publicgoods.network",apiUrl:"https://explorer.sepolia.publicgoods.network/api"}},contracts:{l2OutputOracle:{11155111:{address:"0xD5bAc3152ffC25318F848B3DD5dA6C85171BaEEe"}},portal:{11155111:{address:"0xF04BdD5353Bb0EFF6CA60CfcC78594278eBfE179"}},l1StandardBridge:{11155111:{address:"0xFaE6abCAF30D23e233AC7faF747F2fC3a5a6Bfa3"}},multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3754925}},formatters:j,sourceId:11155111,testnet:!0}),rL=(0,C.a)({id:59140,name:"Linea Goerli Testnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli.lineascan.build",apiUrl:"https://goerli.lineascan.build/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:498623}},testnet:!0}),rz=(0,C.a)({id:59144,name:"Linea Mainnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://lineascan.build",apiUrl:"https://api.lineascan.build/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:42}},testnet:!1}),rq=(0,C.a)({id:64240,name:"Fantom Sonic Open Testnet",network:"fantom-sonic-testnet",nativeCurrency:{decimals:18,name:"Fantom",symbol:"FTM"},rpcUrls:{default:{http:["https://rpcapi.sonic.fantom.network"]}},blockExplorers:{default:{name:"Fantom Sonic Open Testnet Explorer",url:"https://public-sonic.fantom.network"}},testnet:!0}),rG=(0,C.a)({id:80001,name:"Polygon Mumbai",nativeCurrency:{name:"MATIC",symbol:"MATIC",decimals:18},rpcUrls:{default:{http:["https://rpc.ankr.com/polygon_mumbai"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://mumbai.polygonscan.com",apiUrl:"https://mumbai.polygonscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:25770160}},testnet:!0}),rW=(0,C.a)({id:80002,name:"Polygon Amoy",nativeCurrency:{name:"MATIC",symbol:"MATIC",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"OK LINK",url:"https://www.oklink.com/amoy"}},testnet:!0}),rH=(0,C.a)({id:80085,name:"Berachain Artio",nativeCurrency:{decimals:18,name:"BERA Token",symbol:"BERA"},rpcUrls:{default:{http:["https://artio.rpc.berachain.com"]}},blockExplorers:{default:{name:"Berachain",url:"https://artio.beratrail.io"}},testnet:!0}),rQ=(0,C.a)({id:81457,name:"Blast",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://rpc.blast.io"]}},blockExplorers:{default:{name:"Blastscan",url:"https://blastscan.io"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:212929}},sourceId:1}),rK=(0,C.a)({...Q,id:84531,name:"Base Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://goerli.base.org"]}},blockExplorers:{default:{name:"Basescan",url:"https://goerli.basescan.org",apiUrl:"https://goerli.basescan.org/api"}},contracts:{...Q.contracts,l2OutputOracle:{5:{address:"0x2A35891ff30313CcFa6CE88dcf3858bb075A2298"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1376988},portal:{5:{address:"0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA"}},l1StandardBridge:{5:{address:"0xfA6D8Ee5BE770F84FC001D098C4bD604Fe01284a"}}},testnet:!0,sourceId:5}),rV=(0,C.a)({...Q,id:84532,network:"base-sepolia",name:"Base Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.base.org"]}},blockExplorers:{default:{name:"Basescan",url:"https://sepolia.basescan.org",apiUrl:"https://api-sepolia.basescan.org/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254"}},portal:{11155111:{address:"0x49f53e41452c74589e85ca1677426ba426459e85",blockCreated:4446677}},l1StandardBridge:{11155111:{address:"0xfd0Bf71F60660E2f608ed56e1659C450eB113120",blockCreated:4446677}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1059647}},testnet:!0,sourceId:11155111}),rZ=(0,C.a)({id:88882,name:"Chiliz Spicy Testnet",network:"chiliz-spicy-Testnet",nativeCurrency:{decimals:18,name:"CHZ",symbol:"CHZ"},rpcUrls:{default:{http:["https://spicy-rpc.chiliz.com","https://chiliz-spicy.publicnode.com"],webSocket:["wss://spicy-rpc-ws.chiliz.com","wss://chiliz-spicy.publicnode.com"]}},blockExplorers:{default:{name:"Chiliz Explorer",url:"http://spicy-explorer.chiliz.com",apiUrl:"http://spicy-explorer.chiliz.com/api"}},testnet:!0}),rJ=(0,C.a)({id:88888,name:"Chiliz Chain",network:"chiliz-chain",nativeCurrency:{decimals:18,name:"CHZ",symbol:"CHZ"},rpcUrls:{default:{http:["https://rpc.ankr.com/chiliz","https://chiliz.publicnode.com"]}},blockExplorers:{default:{name:"Chiliz Explorer",url:"https://scan.chiliz.com",apiUrl:"https://scan.chiliz.com/api"}}}),rX=(0,C.a)({id:100009,name:"Vechain",nativeCurrency:{name:"VeChain",symbol:"VET",decimals:18},rpcUrls:{default:{http:["https://mainnet.vechain.org"]}},blockExplorers:{default:{name:"Vechain Explorer",url:"https://explore.vechain.org"},vechainStats:{name:"Vechain Stats",url:"https://vechainstats.com"}}}),rY=(0,C.a)({id:105105,name:"Stratis Mainnet",network:"stratis",nativeCurrency:{name:"Stratis",symbol:"STRAX",decimals:18},rpcUrls:{default:{http:["https://rpc.stratisevm.com"]}},blockExplorers:{default:{name:"Stratis Explorer",url:"https://explorer.stratisevm.com"}}}),r$=(0,C.a)({id:128123,name:"Etherlink Testnet",nativeCurrency:{decimals:18,name:"Tez",symbol:"XTZ"},rpcUrls:{default:{http:["https://node.ghostnet.etherlink.com"]}},blockExplorers:{default:{name:"Etherlink Testnet",url:"https://testnet-explorer.etherlink.com"}},testnet:!0}),r0=(0,C.a)({id:167005,name:"Taiko (Alpha-3 Testnet)",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.test.taiko.xyz"]}},blockExplorers:{default:{name:"blockscout",url:"https://explorer.test.taiko.xyz"}}}),r1=(0,C.a)({id:167007,name:"Taiko Jolnir (Alpha-5 Testnet)",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.jolnir.taiko.xyz"]}},blockExplorers:{default:{name:"blockscout",url:"https://explorer.jolnir.taiko.xyz"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:732706}},testnet:!0}),r6=(0,C.a)({id:167008,name:"Taiko Katla (Alpha-6 Testnet)",network:"tko-katla",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.katla.taiko.xyz"]},public:{http:["https://rpc.katla.taiko.xyz"]}},blockExplorers:{default:{name:"blockscout",url:"https://explorer.katla.taiko.xyz"}}}),r3=(0,C.a)({id:205205,name:"Auroria Testnet",network:"auroria",nativeCurrency:{name:"Auroria Stratis",symbol:"tSTRAX",decimals:18},rpcUrls:{default:{http:["https://auroria.rpc.stratisevm.com"]}},blockExplorers:{default:{name:"Auroria Testnet Explorer",url:"https://auroria.explorer.stratisevm.com"}},testnet:!0}),r2=(0,C.a)({id:314159,name:"Filecoin Calibration",nativeCurrency:{decimals:18,name:"testnet filecoin",symbol:"tFIL"},rpcUrls:{default:{http:["https://api.calibration.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filscan",url:"https://calibration.filscan.io"}}}),r7=(0,C.a)({id:421613,name:"Arbitrum Goerli",nativeCurrency:{name:"Arbitrum Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://goerli-rollup.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://goerli.arbiscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:88114}},testnet:!0}),r8=(0,C.a)({id:421614,name:"Arbitrum Sepolia",nativeCurrency:{name:"Arbitrum Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia-rollup.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://sepolia.arbiscan.io",apiUrl:"https://api-sepolia.arbiscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:81930}},testnet:!0}),r5=(0,C.a)({id:534351,name:"Scroll Sepolia",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia-rpc.scroll.io"]}},blockExplorers:{default:{name:"Blockscout",url:"https://sepolia-blockscout.scroll.io",apiUrl:"https://sepolia-blockscout.scroll.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:9473}},testnet:!0}),r4=(0,C.a)({id:534352,name:"Scroll",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.scroll.io"],webSocket:["wss://wss-rpc.scroll.io/ws"]}},blockExplorers:{default:{name:"Scrollscan",url:"https://scrollscan.com",apiUrl:"https://api.scrollscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14}},testnet:!1}),r9=(0,C.a)({id:534353,name:"Scroll Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://alpha-rpc.scroll.io/l2"],webSocket:["wss://alpha-rpc.scroll.io/l2/ws"]}},blockExplorers:{default:{name:"Blockscout",url:"https://blockscout.scroll.io",apiUrl:"https://blockscout.scroll.io/api"}},testnet:!0}),ne=(0,C.a)({id:641230,name:"Bear Network Chain Mainnet",nativeCurrency:{decimals:18,name:"BearNetworkChain",symbol:"BRNKC"},rpcUrls:{default:{http:["https://brnkc-mainnet.bearnetwork.net"]}},blockExplorers:{default:{name:"BrnkScan",url:"https://brnkscan.bearnetwork.net",apiUrl:"https://brnkscan.bearnetwork.net/api"}}}),nt=(0,C.a)({id:751230,name:"Bear Network Chain Testnet",nativeCurrency:{decimals:18,name:"tBRNKC",symbol:"tBRNKC"},rpcUrls:{default:{http:["https://brnkc-test.bearnetwork.net"]}},blockExplorers:{default:{name:"BrnkTestScan",url:"https://brnktest-scan.bearnetwork.net",apiUrl:"https://brnktest-scan.bearnetwork.net/api"}},testnet:!0}),nr=(0,C.a)({id:1337803,name:"Zhejiang",nativeCurrency:{name:"Zhejiang Ether",symbol:"ZhejETH",decimals:18},rpcUrls:{default:{http:["https://rpc.zhejiang.ethpandaops.io"]}},blockExplorers:{default:{name:"Beaconchain",url:"https://zhejiang.beaconcha.in"}},testnet:!0}),nn=(0,C.a)({id:3441005,name:"Manta Pacific Testnet",network:"manta-testnet",nativeCurrency:{decimals:18,name:"ETH",symbol:"ETH"},rpcUrls:{default:{http:["https://manta-testnet.calderachain.xyz/http"]}},blockExplorers:{default:{name:"Manta Testnet Explorer",url:"https://pacific-explorer.testnet.manta.network",apiUrl:"https://pacific-explorer.testnet.manta.network/api"}},contracts:{multicall3:{address:"0x211B1643b95Fe76f11eD8880EE810ABD9A4cf56C",blockCreated:419915}},testnet:!0}),na=(0,C.a)({id:6038361,name:"Astar zkEVM Testnet zKyoto",network:"zKyoto",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.startale.com/zkyoto"]}},blockExplorers:{default:{name:"zKyoto Explorer",url:"https://astar-zkyoto.blockscout.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:196153}},testnet:!0}),no=(0,C.a)({...Q,id:7777777,name:"Zora",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://rpc.zora.energy"],webSocket:["wss://rpc.zora.energy"]}},blockExplorers:{default:{name:"Explorer",url:"https://explorer.zora.energy",apiUrl:"https://explorer.zora.energy/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0x9E6204F750cD866b299594e2aC9eA824E2e5f95c"}},multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:5882},portal:{1:{address:"0x1a0ad011913A150f69f6A19DF447A0CfD9551054"}},l1StandardBridge:{1:{address:"0x3e2Ea9B92B7E48A52296fD261dc26fd995284631"}}},sourceId:1}),ni=(0,C.a)({id:11155111,name:"Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"SEP",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io",apiUrl:"https://api-sepolia.etherscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:751532},ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},ensUniversalResolver:{address:"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC",blockCreated:5317080}},testnet:!0}),ns=(0,C.a)({...Q,id:11155420,name:"OP Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.optimism.io"]}},blockExplorers:{default:{name:"Blockscout",url:"https://optimism-sepolia.blockscout.com",apiUrl:"https://optimism-sepolia.blockscout.com/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0x90E9c4f8a994a250F6aEfd61CAFb4F2e895D458F"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1620204},portal:{11155111:{address:"0x16Fc5058F25648194471939df75CF27A2fdC48BC"}},l1StandardBridge:{11155111:{address:"0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1"}}},testnet:!0,sourceId:11155111}),nl=(0,C.a)({...Q,id:28122024,name:"Ancient8 Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpcv2-testnet.ancient8.gg"]}},blockExplorers:{default:{name:"Ancient8 Celestia Testnet explorer",url:"https://scanv2-testnet.ancient8.gg",apiUrl:"https://scanv2-testnet.ancient8.gg/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0x942fD5017c0F60575930D8574Eaca13BEcD6e1bB"}},portal:{11155111:{address:"0xfa1d9E26A6aCD7b22115D27572c1221B9803c960",blockCreated:4972908}},l1StandardBridge:{11155111:{address:"0xF6Bc0146d3c74D48306e79Ae134A260E418C9335",blockCreated:4972908}}},sourceId:11155111}),nc=(0,C.a)({id:37084624,name:"SKALE Nebula Testnet",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://testnet.skalenodes.com/v1/lanky-ill-funny-testnet"],webSocket:["wss://testnet.skalenodes.com/v1/ws/lanky-ill-funny-testnet"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://lanky-ill-funny-testnet.explorer.testnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:105141}},testnet:!0}),nu=(0,C.a)({id:161221135,name:"Plume Testnet",nativeCurrency:{name:"Plume Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://plume-testnet.rpc.caldera.xyz/http"],webSocket:["wss://plume-testnet.rpc.caldera.xyz/ws"]}},blockExplorers:{default:{name:"Blockscout",url:"https://plume-testnet.explorer.caldera.xyz",apiUrl:"https://plume-testnet.explorer.caldera.xyz/api"}},testnet:!0,sourceId:11155111}),nd=(0,C.a)({id:168587773,name:"Blast Sepolia",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.blast.io"]}},blockExplorers:{default:{name:"Blastscan",url:"https://testnet.blastscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:756690}},testnet:!0,sourceId:11155111}),np=(0,C.a)({id:245022926,name:"Neon EVM DevNet",nativeCurrency:{name:"NEON",symbol:"NEON",decimals:18},rpcUrls:{default:{http:["https://devnet.neonevm.org"]}},blockExplorers:{default:{name:"Neonscan",url:"https://devnet.neonscan.org"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:205206112}},testnet:!0}),nh=(0,C.a)({id:245022934,network:"neonMainnet",name:"Neon EVM MainNet",nativeCurrency:{name:"NEON",symbol:"NEON",decimals:18},rpcUrls:{default:{http:["https://neon-proxy-mainnet.solana.p2p.org"]}},blockExplorers:{default:{name:"Neonscan",url:"https://neonscan.org"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:206545524}},testnet:!1}),nf=(0,C.a)({id:278611351,name:"SKALE | Razor Network",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/turbulent-unique-scheat"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/turbulent-unique-scheat"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://turbulent-unique-scheat.explorer.mainnet.skalenodes.com"}},contracts:{}}),nm=(0,C.a)({id:391845894,name:"SKALE | Block Brawlers",nativeCurrency:{name:"BRAWL",symbol:"BRAWL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/frayed-decent-antares"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/frayed-decent-antares"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://frayed-decent-antares.explorer.mainnet.skalenodes.com"}},contracts:{}}),nb=(0,C.a)({...Q,id:888888888,name:"Ancient8",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.ancient8.gg"]}},blockExplorers:{default:{name:"Ancient8 explorer",url:"https://scan.ancient8.gg",apiUrl:"https://scan.ancient8.gg/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0xB09DC08428C8b4EFB4ff9C0827386CDF34277996"}},portal:{1:{address:"0x639F2AECE398Aa76b07e59eF6abe2cFe32bacb68",blockCreated:19070571}},l1StandardBridge:{1:{address:"0xd5e3eDf5b68135D559D572E26bF863FBC1950033",blockCreated:19070571}}},sourceId:1}),ng=(0,C.a)({id:974399131,name:"SKALE Calypso Testnet",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://testnet.skalenodes.com/v1/giant-half-dual-testnet"],webSocket:["wss://testnet.skalenodes.com/v1/ws/giant-half-dual-testnet"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://giant-half-dual-testnet.explorer.testnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:103220}},testnet:!0}),ny=(0,C.a)({...Q,id:999999999,name:"Zora Sepolia",network:"zora-sepolia",nativeCurrency:{decimals:18,name:"Zora Sepolia",symbol:"ETH"},rpcUrls:{default:{http:["https://sepolia.rpc.zora.energy"],webSocket:["wss://sepolia.rpc.zora.energy"]}},blockExplorers:{default:{name:"Zora Sepolia Explorer",url:"https://sepolia.explorer.zora.energy/",apiUrl:"https://sepolia.explorer.zora.energy/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0x2615B481Bd3E5A1C0C7Ca3Da1bdc663E8615Ade9"}},multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:83160},portal:{11155111:{address:"0xeffE2C6cA9Ab797D418f0D91eA60807713f3536f"}},l1StandardBridge:{11155111:{address:"0x5376f1D543dcbB5BD416c56C189e4cB7399fCcCB"}}},sourceId:11155111,testnet:!0}),nv=(0,C.a)({id:1020352220,name:"SKALE Titan Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://testnet.skalenodes.com/v1/aware-fake-trim-testnet"],webSocket:["wss://testnet.skalenodes.com/v1/ws/aware-fake-trim-testnet"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://aware-fake-trim-testnet.explorer.testnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:104072}},testnet:!0}),nw=(0,C.a)({id:1026062157,name:"SKALE | CryptoBlades",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/affectionate-immediate-pollux"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/affectionate-immediate-pollux"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://affectionate-immediate-pollux.explorer.mainnet.skalenodes.com"}},contracts:{}}),nC=(0,C.a)({id:2046399126,name:"SKALE | Crypto Colosseum",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/haunting-devoted-deneb"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/haunting-devoted-deneb"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://haunting-devoted-deneb.explorer.mainnet.skalenodes.com"}},contracts:{}}),nE=(0,C.a)({id:1273227453,name:"SKALE | Human Protocol",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/wan-red-ain"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/wan-red-ain"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://wan-red-ain.explorer.mainnet.skalenodes.com"}},contracts:{}}),nx=(0,C.a)({id:1313161554,name:"Aurora",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://mainnet.aurora.dev"]}},blockExplorers:{default:{name:"Aurorascan",url:"https://aurorascan.dev",apiUrl:"https://aurorascan.dev/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:62907816}}}),nA=(0,C.a)({id:1313161555,name:"Aurora Testnet",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://testnet.aurora.dev"]}},blockExplorers:{default:{name:"Aurorascan",url:"https://testnet.aurorascan.dev",apiUrl:"https://testnet.aurorascan.dev/api"}},testnet:!0}),nk=(0,C.a)({id:1350216234,name:"SKALE | Titan Community Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/parallel-stormy-spica"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/parallel-stormy-spica"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://parallel-stormy-spica.explorer.mainnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:2076458}}}),nB=(0,C.a)({id:1444673419,name:"SKALE Europa Testnet",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://testnet.skalenodes.com/v1/juicy-low-small-testnet"],webSocket:["wss://testnet.skalenodes.com/v1/ws/juicy-low-small-testnet"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://juicy-low-small-testnet.explorer.testnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:110858}},testnet:!0}),nS=(0,C.a)({id:1482601649,name:"SKALE | Nebula Gaming Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/green-giddy-denebola"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/green-giddy-denebola"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://green-giddy-denebola.explorer.mainnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:2372986}}}),nI=(0,C.a)({id:1564830818,name:"SKALE | Calypso NFT Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/honorable-steel-rasalhague"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3107626}}}),nj=(0,C.a)({id:16666e5,name:"Harmony One",nativeCurrency:{name:"Harmony",symbol:"ONE",decimals:18},rpcUrls:{default:{http:["https://rpc.ankr.com/harmony"]}},blockExplorers:{default:{name:"Harmony Explorer",url:"https://explorer.harmony.one"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:24185753}}}),nT=(0,C.a)({id:2046399126,name:"SKALE | Europa Liquidity Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/elated-tan-skat"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/elated-tan-skat"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://elated-tan-skat.explorer.mainnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3113495}}}),nP=(0,C.a)({id:2139927552,name:"SKALE | Exorde",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/light-vast-diphda"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/light-vast-diphda"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://light-vast-diphda.explorer.mainnet.skalenodes.com"}},contracts:{}}),nM=(0,C.a)({id:11297108099,name:"Palm Testnet",nativeCurrency:{decimals:18,name:"PALM",symbol:"PALM"},rpcUrls:{default:{http:["https://palm-mainnet.public.blastapi.io"],webSocket:["wss://palm-mainnet.public.blastapi.io"]}},blockExplorers:{default:{name:"Chainlens",url:"https://palm.chainlens.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:15429248}},testnet:!0}),nO=(0,C.a)({id:11297108109,name:"Palm",nativeCurrency:{decimals:18,name:"PALM",symbol:"PALM"},rpcUrls:{default:{http:["https://palm-mainnet.public.blastapi.io"],webSocket:["wss://palm-mainnet.public.blastapi.io"]}},blockExplorers:{default:{name:"Chainlens",url:"https://palm.chainlens.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:15429248}}}),nR=(0,C.a)({id:107107114116,name:"Kakarot Sepolia",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia-rpc.kakarot.org"]}},blockExplorers:{default:{name:"Kakarot Scan",url:"https://sepolia.kakarotscan.org"}},testnet:!0}),nU={...E,id:8996,name:"Ganache",network:"ganache",rpcUrls:{default:{http:["http://127.0.0.1:8545"]}}},nF=[x.R,A,K,V,Z,J,X,Y,$,ee,et,er,en,ea,eo,ei,es,el,ec,eu,ed,ep,eh,ef,em,eb,eg,ey,ev,ew,eC,eE,ex,eA,ek,eB,eS,eI,ej,eT,eP,eM,eO,eR,e_,eL,ez,eq,eG,eW,eH,eQ,eK,eV,eZ,eJ,eX,eY,e$,e0,e1,e6,e3,e2,e7,e8,e5,e4,e9,te,tt,tr,tn,ta,to,ti,ts,tl,tc,tu,td,tp,th,tf,tm,tb,tg,ty,tv,tw,tC,tE,tx,tA,tk,tB,tS,tI,tj,tT,tP,tM,tO,tR,tU,tF,tN,tD,t_,tL,tz,tq,tG,tW,tH,tQ,tK,tV,tZ,tJ,tX,tY,t$,t0,t1,t6,t3,t2,t7,t8,t5,t4,t9,re,rt,rr,rn,ra,ro,ri,rs,rl,rc,ru,rd,rp,rh,rf,rm,rb,rg,ry,rv,E,rw,rC,rE,rx,rA,rk,rB,rT,rP,rM,rO,rR,rU,rF,rN,rD,r_,rL,rz,rq,rG,rW,rH,rQ,rK,rV,rZ,rJ,rX,rY,r$,r0,r1,r6,r3,r2,r7,r8,r5,r4,r9,ne,nt,nr,nn,na,no,ni,ns,nl,nc,nu,nd,np,nh,nf,nm,nb,ng,ny,nv,nw,nC,nE,nx,nA,nk,nB,nS,nI,nj,nT,nP,nM,nO,nR,nU];var nN=n(27061);function App(e){let{Component:t,pageProps:n}=e,c=(0,s.vX)({appName:"Ocean Node Dashboard",projectId:nN.env.NEXT_PUBLIC_WALLET_CONNECT_ID?nN.env.NEXT_PUBLIC_WALLET_CONNECT_ID:"da267f7e1897e2cf92a7710f92e8f660",chains:nF,ssr:!0}),u=new v;return(0,o.jsx)(l.F,{config:c,children:(0,o.jsx)(w.aH,{client:u,children:(0,o.jsx)(s.pj,{children:(0,o.jsx)(i.I,{children:(0,o.jsx)(t,{...n})})})})})}},56953:function(){},32352:function(){},92592:function(e,t,n){let o=n(47138),i=n(95115),s=n(6907),l=n(93776);function renderCanvas(e,t,n,s,l){let c=[].slice.call(arguments,1),u=c.length,d="function"==typeof c[u-1];if(!d&&!o())throw Error("Callback required as last argument");if(d){if(u<2)throw Error("Too few arguments provided");2===u?(l=n,n=t,t=s=void 0):3===u&&(t.getContext&&void 0===l?(l=s,s=void 0):(l=s,s=n,n=t,t=void 0))}else{if(u<1)throw Error("Too few arguments provided");return 1===u?(n=t,t=s=void 0):2!==u||t.getContext||(s=n,n=t,t=void 0),new Promise(function(o,l){try{let l=i.create(n,s);o(e(l,t,s))}catch(e){l(e)}})}try{let o=i.create(n,s);l(null,e(o,t,s))}catch(e){l(e)}}t.create=i.create,t.toCanvas=renderCanvas.bind(null,s.render),t.toDataURL=renderCanvas.bind(null,s.renderToDataURL),t.toString=renderCanvas.bind(null,function(e,t,n){return l.render(e,n)})},47138:function(e){e.exports=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then}},21845:function(e,t,n){let o=n(10242).getSymbolSize;t.getRowColCoords=function(e){if(1===e)return[];let t=Math.floor(e/7)+2,n=o(e),i=145===n?26:2*Math.ceil((n-13)/(2*t-2)),s=[n-7];for(let e=1;e>>7-e%8&1)==1},put:function(e,t){for(let n=0;n>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},e.exports=BitBuffer},73280:function(e){function BitMatrix(e){if(!e||e<1)throw Error("BitMatrix size must be defined and greater than 0");this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}BitMatrix.prototype.set=function(e,t,n,o){let i=e*this.size+t;this.data[i]=n,o&&(this.reservedBit[i]=!0)},BitMatrix.prototype.get=function(e,t){return this.data[e*this.size+t]},BitMatrix.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},BitMatrix.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},e.exports=BitMatrix},43424:function(e,t,n){let o=n(62378),i=n(76910);function ByteData(e){this.mode=i.BYTE,"string"==typeof e&&(e=o(e)),this.data=new Uint8Array(e)}ByteData.getBitsLength=function(e){return 8*e},ByteData.prototype.getLength=function(){return this.data.length},ByteData.prototype.getBitsLength=function(){return ByteData.getBitsLength(this.data.length)},ByteData.prototype.write=function(e){for(let t=0,n=this.data.length;t=0&&e.bit<4},t.from=function(e,n){if(t.isValid(e))return e;try{return function(e){if("string"!=typeof e)throw Error("Param is not a string");let n=e.toLowerCase();switch(n){case"l":case"low":return t.L;case"m":case"medium":return t.M;case"q":case"quartile":return t.Q;case"h":case"high":return t.H;default:throw Error("Unknown EC Level: "+e)}}(e)}catch(e){return n}}},76526:function(e,t,n){let o=n(10242).getSymbolSize;t.getPositions=function(e){let t=o(e);return[[0,0],[t-7,0],[0,t-7]]}},61642:function(e,t,n){let o=n(10242),i=o.getBCHDigit(1335);t.getEncodedBits=function(e,t){let n=e.bit<<3|t,s=n<<10;for(;o.getBCHDigit(s)-i>=0;)s^=1335<=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error("Invalid SJIS character: "+this.data[t]+"\nMake sure your charset is UTF-8");n=(n>>>8&255)*192+(255&n),e.put(n,13)}},e.exports=KanjiData},27126:function(e,t){t.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};let n={N1:3,N2:3,N3:40,N4:10};t.isValid=function(e){return null!=e&&""!==e&&!isNaN(e)&&e>=0&&e<=7},t.from=function(e){return t.isValid(e)?parseInt(e,10):void 0},t.getPenaltyN1=function(e){let t=e.size,o=0,i=0,s=0,l=null,c=null;for(let u=0;u=5&&(o+=n.N1+(i-5)),l=t,i=1),(t=e.get(d,u))===c?s++:(s>=5&&(o+=n.N1+(s-5)),c=t,s=1)}i>=5&&(o+=n.N1+(i-5)),s>=5&&(o+=n.N1+(s-5))}return o},t.getPenaltyN2=function(e){let t=e.size,o=0;for(let n=0;n=10&&(1488===i||93===i)&&o++,s=s<<1&2047|e.get(l,n),l>=10&&(1488===s||93===s)&&o++}return o*n.N3},t.getPenaltyN4=function(e){let t=0,o=e.data.length;for(let n=0;n=1&&t<10?e.ccBits[0]:t<27?e.ccBits[1]:e.ccBits[2]},t.getBestModeForData=function(e){return i.testNumeric(e)?t.NUMERIC:i.testAlphanumeric(e)?t.ALPHANUMERIC:i.testKanji(e)?t.KANJI:t.BYTE},t.toString=function(e){if(e&&e.id)return e.id;throw Error("Invalid mode")},t.isValid=function(e){return e&&e.bit&&e.ccBits},t.from=function(e,n){if(t.isValid(e))return e;try{return function(e){if("string"!=typeof e)throw Error("Param is not a string");let n=e.toLowerCase();switch(n){case"numeric":return t.NUMERIC;case"alphanumeric":return t.ALPHANUMERIC;case"kanji":return t.KANJI;case"byte":return t.BYTE;default:throw Error("Unknown mode: "+e)}}(e)}catch(e){return n}}},41085:function(e,t,n){let o=n(76910);function NumericData(e){this.mode=o.NUMERIC,this.data=e.toString()}NumericData.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},NumericData.prototype.getLength=function(){return this.data.length},NumericData.prototype.getBitsLength=function(){return NumericData.getBitsLength(this.data.length)},NumericData.prototype.write=function(e){let t,n;for(t=0;t+3<=this.data.length;t+=3)n=parseInt(this.data.substr(t,3),10),e.put(n,10);let o=this.data.length-t;o>0&&(n=parseInt(this.data.substr(t),10),e.put(n,3*o+1))},e.exports=NumericData},26143:function(e,t,n){let o=n(69729);t.mul=function(e,t){let n=new Uint8Array(e.length+t.length-1);for(let i=0;i=0;){let e=n[0];for(let i=0;i>o&1)==1,o<6?e.set(o,8,i,!0):o<8?e.set(o+1,8,i,!0):e.set(s-15+o,8,i,!0),o<8?e.set(8,s-o-1,i,!0):o<9?e.set(8,15-o-1+1,i,!0):e.set(8,15-o-1,i,!0);e.set(s-8,8,1,!0)}t.create=function(e,t){let n,b;if(void 0===e||""===e)throw Error("No input text");let v=i.M;return void 0!==t&&(v=i.from(t.errorCorrectionLevel,i.M),n=m.from(t.version),b=d.from(t.maskPattern),t.toSJISFunc&&o.setToSJISFunction(t.toSJISFunc)),function(e,t,n,i){let b;if(Array.isArray(e))b=y.fromArray(e);else if("string"==typeof e){let o=t;if(!o){let t=y.rawSplit(e);o=m.getBestVersionForData(t,n)}b=y.fromString(e,o||40)}else throw Error("Invalid data");let v=m.getBestVersionForData(b,n);if(!v)throw Error("The amount of data is too big to be stored in a QR Code");if(t){if(t=0&&t<=6&&(0===o||6===o)||o>=0&&o<=6&&(0===t||6===t)||t>=2&&t<=4&&o>=2&&o<=4?e.set(i+t,s+o,!0,!0):e.set(i+t,s+o,!1,!0))}}(E,t),function(e){let t=e.size;for(let n=8;n=7&&function(e,t){let n,o,i;let s=e.size,l=m.getEncodedBits(t);for(let t=0;t<18;t++)n=Math.floor(t/3),o=t%3+s-8-3,i=(l>>t&1)==1,e.set(n,o,i,!0),e.set(o,n,i,!0)}(E,t),function(e,t){let n=e.size,o=-1,i=n-1,s=7,l=0;for(let c=n-1;c>0;c-=2)for(6===c&&c--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,c-n)){let o=!1;l>>s&1)==1),e.set(i,c-n,o),-1==--s&&(l++,s=7)}if((i+=o)<0||n<=i){i-=o,o=-o;break}}}(E,w),isNaN(i)&&(i=d.getBestMask(E,setupFormatInfo.bind(null,E,n))),d.applyMask(i,E),setupFormatInfo(E,n,i),{modules:E,version:t,errorCorrectionLevel:n,maskPattern:i,segments:b}}(e,n,v,b)}},52882:function(e,t,n){let o=n(26143);function ReedSolomonEncoder(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}ReedSolomonEncoder.prototype.initialize=function(e){this.degree=e,this.genPoly=o.generateECPolynomial(this.degree)},ReedSolomonEncoder.prototype.encode=function(e){if(!this.genPoly)throw Error("Encoder not initialized");let t=new Uint8Array(e.length+this.degree);t.set(e);let n=o.mod(t,this.genPoly),i=this.degree-n.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(n,i),e}return n},e.exports=ReedSolomonEncoder},7007:function(e,t){let n="[0-9]+",o="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";o=o.replace(/u/g,"\\u");let i="(?:(?![A-Z0-9 $%*+\\-./:]|"+o+")(?:.|[\r\n]))+";t.KANJI=RegExp(o,"g"),t.BYTE_KANJI=RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),t.BYTE=RegExp(i,"g"),t.NUMERIC=RegExp(n,"g"),t.ALPHANUMERIC=RegExp("[A-Z $%*+\\-./:]+","g");let s=RegExp("^"+o+"$"),l=RegExp("^"+n+"$"),c=RegExp("^[A-Z0-9 $%*+\\-./:]+$");t.testKanji=function(e){return s.test(e)},t.testNumeric=function(e){return l.test(e)},t.testAlphanumeric=function(e){return c.test(e)}},16130:function(e,t,n){let o=n(76910),i=n(41085),s=n(8260),l=n(43424),c=n(35442),u=n(7007),d=n(10242),p=n(65987);function getStringByteLength(e){return unescape(encodeURIComponent(e)).length}function getSegments(e,t,n){let o;let i=[];for(;null!==(o=e.exec(n));)i.push({data:o[0],index:o.index,mode:t,length:o[0].length});return i}function getSegmentsFromString(e){let t,n;let i=getSegments(u.NUMERIC,o.NUMERIC,e),s=getSegments(u.ALPHANUMERIC,o.ALPHANUMERIC,e);d.isKanjiModeEnabled()?(t=getSegments(u.BYTE,o.BYTE,e),n=getSegments(u.KANJI,o.KANJI,e)):(t=getSegments(u.BYTE_KANJI,o.BYTE,e),n=[]);let l=i.concat(s,t,n);return l.sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function getSegmentBitsLength(e,t){switch(t){case o.NUMERIC:return i.getBitsLength(e);case o.ALPHANUMERIC:return s.getBitsLength(e);case o.KANJI:return c.getBitsLength(e);case o.BYTE:return l.getBitsLength(e)}}function buildSingleSegment(e,t){let n;let u=o.getBestModeForData(e);if((n=o.from(t,u))!==o.BYTE&&n.bit=0?e[e.length-1]:null;return n&&n.mode===t.mode?e[e.length-1].data+=t.data:e.push(t),e},[]))},t.rawSplit=function(e){return t.fromArray(getSegmentsFromString(e,d.isKanjiModeEnabled()))}},10242:function(e,t){let n;let o=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];t.getSymbolSize=function(e){if(!e)throw Error('"version" cannot be null or undefined');if(e<1||e>40)throw Error('"version" should be in range from 1 to 40');return 4*e+17},t.getSymbolTotalCodewords=function(e){return o[e]},t.getBCHDigit=function(e){let t=0;for(;0!==e;)t++,e>>>=1;return t},t.setToSJISFunction=function(e){if("function"!=typeof e)throw Error('"toSJISFunc" is not a valid function.');n=e},t.isKanjiModeEnabled=function(){return void 0!==n},t.toSJIS=function(e){return n(e)}},43114:function(e,t){t.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}},23103:function(e,t,n){let o=n(10242),i=n(35393),s=n(64908),l=n(76910),c=n(43114),u=o.getBCHDigit(7973);function getReservedBitsCount(e,t){return l.getCharCountIndicator(e,t)+4}t.from=function(e,t){return c.isValid(e)?parseInt(e,10):t},t.getCapacity=function(e,t,n){if(!c.isValid(e))throw Error("Invalid QR Code version");void 0===n&&(n=l.BYTE);let s=o.getSymbolTotalCodewords(e),u=i.getTotalCodewordsCount(e,t),d=(s-u)*8;if(n===l.MIXED)return d;let p=d-getReservedBitsCount(n,e);switch(n){case l.NUMERIC:return Math.floor(p/10*3);case l.ALPHANUMERIC:return Math.floor(p/11*2);case l.KANJI:return Math.floor(p/13);case l.BYTE:default:return Math.floor(p/8)}},t.getBestVersionForData=function(e,n){let o;let i=s.from(n,s.M);if(Array.isArray(e)){if(e.length>1)return function(e,n){for(let o=1;o<=40;o++){let i=function(e,t){let n=0;return e.forEach(function(e){let o=getReservedBitsCount(e.mode,t);n+=o+e.getBitsLength()}),n}(e,o);if(i<=t.getCapacity(o,n,l.MIXED))return o}}(e,i);if(0===e.length)return 1;o=e[0]}else o=e;return function(e,n,o){for(let i=1;i<=40;i++)if(n<=t.getCapacity(i,o,e))return i}(o.mode,o.getLength(),i)},t.getEncodedBits=function(e){if(!c.isValid(e)||e<7)throw Error("Invalid QR Code version");let t=e<<12;for(;o.getBCHDigit(t)-u>=0;)t^=7973<':"",d="0&&u>0&&e[c-1]||(o+=s?svgCmd("M",u+n,.5+d+n):svgCmd("m",i,0),i=0,s=!1),u+1',p=i.width?'width="'+i.width+'" height="'+i.width+'" ':"",f=''+u+d+"\n";return"function"==typeof n&&n(null,f),f}},89653:function(e,t){function hex2rgba(e){if("number"==typeof e&&(e=e.toString()),"string"!=typeof e)throw Error("Color should be defined as hex string");let t=e.slice().replace("#","").split("");if(t.length<3||5===t.length||t.length>8)throw Error("Invalid hex color: "+e);(3===t.length||4===t.length)&&(t=Array.prototype.concat.apply([],t.map(function(e){return[e,e]}))),6===t.length&&t.push("F","F");let n=parseInt(t.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:255&n,hex:"#"+t.slice(0,6).join("")}}t.getOptions=function(e){e||(e={}),e.color||(e.color={});let t=void 0===e.margin||null===e.margin||e.margin<0?4:e.margin,n=e.width&&e.width>=21?e.width:void 0,o=e.scale||4;return{width:n,scale:n?4:o,margin:t,color:{dark:hex2rgba(e.color.dark||"#000000ff"),light:hex2rgba(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}},t.getScale=function(e,t){return t.width&&t.width>=e+2*t.margin?t.width/(e+2*t.margin):t.scale},t.getImageWidth=function(e,n){let o=t.getScale(e,n);return Math.floor((e+2*n.margin)*o)},t.qrToImageData=function(e,n,o){let i=n.modules.size,s=n.modules.data,l=t.getScale(i,o),c=Math.floor((i+2*o.margin)*l),u=o.margin*l,d=[o.color.light,o.color.dark];for(let t=0;t=u&&n>=u&&tt.indexOf(o)&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,o=Object.getOwnPropertySymbols(e);it.indexOf(o[i])&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(n[o[i]]=e[o[i]]);return n}function __decorate(e,t,n,o){var i,s=arguments.length,l=s<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,o);else for(var c=e.length-1;c>=0;c--)(i=e[c])&&(l=(s<3?i(l):s>3?i(t,n,l):i(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l}function __param(e,t){return function(n,o){t(n,o,e)}}function __metadata(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function __awaiter(e,t,n,o){return new(n||(n=Promise))(function(i,s){function fulfilled(e){try{step(o.next(e))}catch(e){s(e)}}function rejected(e){try{step(o.throw(e))}catch(e){s(e)}}function step(e){var t;e.done?i(e.value):((t=e.value)instanceof n?t:new n(function(e){e(t)})).then(fulfilled,rejected)}step((o=o.apply(e,t||[])).next())})}function __generator(e,t){var n,o,i,s,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return s={next:verb(0),throw:verb(1),return:verb(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function verb(s){return function(c){return function(s){if(n)throw TypeError("Generator is already executing.");for(;l;)try{if(n=1,o&&(i=2&s[0]?o.return:s[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;switch(o=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return l.label++,{value:s[1],done:!1};case 5:l.label++,o=s[1],s=[0];continue;case 7:s=l.ops.pop(),l.trys.pop();continue;default:if(!(i=(i=l.trys).length>0&&i[i.length-1])&&(6===s[0]||2===s[0])){l=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,i,s=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(o=s.next()).done;)l.push(o.value)}catch(e){i={error:e}}finally{try{o&&!o.done&&(n=s.return)&&n.call(s)}finally{if(i)throw i.error}}return l}function __spread(){for(var e=[],t=0;t1||resume(e,t)})})}function resume(e,t){try{var n;(n=i[e](t)).value instanceof __await?Promise.resolve(n.value.v).then(fulfill,reject):settle(s[0][2],n)}catch(e){settle(s[0][3],e)}}function fulfill(e){resume("next",e)}function reject(e){resume("throw",e)}function settle(e,t){e(t),s.shift(),s.length&&resume(s[0][0],s[0][1])}}function __asyncDelegator(e){var t,n;return t={},verb("next"),verb("throw",function(e){throw e}),verb("return"),t[Symbol.iterator]=function(){return this},t;function verb(o,i){t[o]=e[o]?function(t){return(n=!n)?{value:__await(e[o](t)),done:"return"===o}:i?i(t):t}:i}}function __asyncValues(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=__values(e),t={},verb("next"),verb("throw"),verb("return"),t[Symbol.asyncIterator]=function(){return this},t);function verb(n){t[n]=e[n]&&function(t){return new Promise(function(o,i){!function(e,t,n,o){Promise.resolve(o).then(function(t){e({value:t,done:n})},t)}(o,i,(t=e[n](t)).done,t.value)})}}}function __makeTemplateObject(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var i=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function __importStar(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return i(t,e),t}function __importDefault(e){return e&&e.__esModule?e:{default:e}}function __classPrivateFieldGet(e,t,n,o){if("a"===n&&!o)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(e):o?o.value:t.get(e)}function __classPrivateFieldSet(e,t,n,o,i){if("m"===o)throw TypeError("Private method is not writable");if("a"===o&&!i)throw TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(e,n):i?i.value=n:t.set(e,n),n}function __classPrivateFieldIn(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}},42238:function(e,t,n){var o;!function(i,s){"use strict";var l="function",c="undefined",u="object",d="string",p="major",f="model",m="name",b="type",g="vendor",y="version",v="architecture",w="console",C="mobile",E="tablet",x="smarttv",A="wearable",k="embedded",B="Amazon",S="Apple",I="ASUS",j="BlackBerry",T="Browser",P="Chrome",M="Firefox",O="Google",R="Huawei",U="Microsoft",F="Motorola",N="Opera",D="Samsung",_="Sharp",L="Sony",z="Xiaomi",q="Zebra",G="Facebook",W="Chromium OS",H="Mac OS",extend=function(e,t){var n={};for(var o in e)t[o]&&t[o].length%2==0?n[o]=t[o].concat(e[o]):n[o]=e[o];return n},enumerize=function(e){for(var t={},n=0;n0?2===c.length?typeof c[1]==l?this[c[0]]=c[1].call(this,p):this[c[0]]=c[1]:3===c.length?typeof c[1]!==l||c[1].exec&&c[1].test?this[c[0]]=p?p.replace(c[1],c[2]):s:this[c[0]]=p?c[1].call(this,p,c[2]):s:4===c.length&&(this[c[0]]=p?c[3].call(this,p.replace(c[1],c[2])):s):this[c]=p||s;f+=2}},strMapper=function(e,t){for(var n in t)if(typeof t[n]===u&&t[n].length>0){for(var o=0;o2&&(e[f]="iPad",e[b]=E),e},this.getEngine=function(){var e={};return e[m]=s,e[y]=s,rgxMapper.call(e,o,x.engine),e},this.getOS=function(){var e={};return e[m]=s,e[y]=s,rgxMapper.call(e,o,x.os),A&&!e[m]&&w&&"Unknown"!=w.platform&&(e[m]=w.platform.replace(/chrome os/i,W).replace(/macos/i,H)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return o},this.setUA=function(e){return o=typeof e===d&&e.length>500?trim(e,500):e,this},this.setUA(o),this};UAParser.VERSION="1.0.37",UAParser.BROWSER=enumerize([m,y,p]),UAParser.CPU=enumerize([v]),UAParser.DEVICE=enumerize([f,g,b,w,C,x,E,A,k]),UAParser.ENGINE=UAParser.OS=enumerize([m,y]),typeof t!==c?(e.exports&&(t=e.exports=UAParser),t.UAParser=UAParser):n.amdO?s!==(o=(function(){return UAParser}).call(t,n,t,e))&&(e.exports=o):typeof i!==c&&(i.UAParser=UAParser);var V=typeof i!==c&&(i.jQuery||i.Zepto);if(V&&!V.ua){var Z=new UAParser;V.ua=Z.getResult(),V.ua.get=function(){return Z.getUA()},V.ua.set=function(e){Z.setUA(e);var t=Z.getResult();for(var n in t)V.ua[n]=t[n]}}}("object"==typeof window?window:this)},53250:function(e,t,n){"use strict";/** +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2888],{65987:function(e){"use strict";var t={single_source_shortest_paths:function(e,n,o){var i,s,l,c,u,d,p,f={},m={};m[n]=0;var g=t.PriorityQueue.make();for(g.push(n,0);!g.empty();)for(l in s=(i=g.pop()).value,c=i.cost,u=e[s]||{})u.hasOwnProperty(l)&&(d=c+u[l],p=m[l],(void 0===m[l]||p>d)&&(m[l]=d,g.push(l,d),f[l]=s));if(void 0!==o&&void 0===m[o])throw Error(["Could not find a path from ",n," to ",o,"."].join(""));return f},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],o=t;o;)n.push(o),e[o],o=e[o];return n.reverse(),n},find_path:function(e,n,o){var i=t.single_source_shortest_paths(e,n,o);return t.extract_shortest_path_from_predecessor_list(i,o)},PriorityQueue:{make:function(e){var n,o=t.PriorityQueue,i={};for(n in e=e||{},o)o.hasOwnProperty(n)&&(i[n]=o[n]);return i.queue=[],i.sorter=e.sorter||o.default_sorter,i},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){this.queue.push({value:e,cost:t}),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};e.exports=t},62378:function(e){"use strict";e.exports=function(e){for(var t=[],n=e.length,o=0;o=55296&&i<=56319&&n>o+1){var s=e.charCodeAt(o+1);s>=56320&&s<=57343&&(i=(i-55296)*1024+s-56320+65536,o+=1)}if(i<128){t.push(i);continue}if(i<2048){t.push(i>>6|192),t.push(63&i|128);continue}if(i<55296||i>=57344&&i<65536){t.push(i>>12|224),t.push(i>>6&63|128),t.push(63&i|128);continue}if(i>=65536&&i<=1114111){t.push(i>>18|240),t.push(i>>12&63|128),t.push(i>>6&63|128),t.push(63&i|128);continue}t.push(239,191,189)}return new Uint8Array(t).buffer}},26729:function(e){"use strict";var t=Object.prototype.hasOwnProperty,n="~";function Events(){}function EE(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function addListener(e,t,o,i,s){if("function"!=typeof o)throw TypeError("The listener must be a function");var l=new EE(o,i||e,s),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],l]:e._events[c].push(l):(e._events[c]=l,e._eventsCount++),e}function clearEvent(e,t){0==--e._eventsCount?e._events=new Events:delete e._events[t]}function EventEmitter(){this._events=new Events,this._eventsCount=0}Object.create&&(Events.prototype=Object.create(null),new Events().__proto__||(n=!1)),EventEmitter.prototype.eventNames=function(){var e,o,i=[];if(0===this._eventsCount)return i;for(o in e=this._events)t.call(e,o)&&i.push(n?o.slice(1):o);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},EventEmitter.prototype.listeners=function(e){var t=n?n+e:e,o=this._events[t];if(!o)return[];if(o.fn)return[o.fn];for(var i=0,s=o.length,l=Array(s);ie.trim());for(let n=0;n>4]+t[15&e[o]];return n}if("object"==typeof e&&"function"==typeof e.toJSON)return stringify(e.toJSON());switch(typeof e){case"boolean":case"symbol":case"number":return e.toString();case"bigint":return BigInt(e).toString();case"string":return JSON.stringify(e);case"object":{let t=Object.keys(e);return t.sort(),"{ "+t.map(t=>`${stringify(t)}: ${stringify(e[t])}`).join(", ")+" }"}}return"[ COULD NOT SERIALIZE ]"}function errors_assert(e,t,n,o){if(!e)throw function(e,t,n){let o,i=e;{let o=[];if(n){if("message"in n||"code"in n||"name"in n)throw Error(`value will overwrite populated values: ${stringify(n)}`);for(let e in n){if("shortMessage"===e)continue;let t=n[e];o.push(e+"="+stringify(t))}}o.push(`code=${t}`),o.push("version=6.11.1"),o.length&&(e+=" ("+o.join(", ")+")")}switch(t){case"INVALID_ARGUMENT":o=TypeError(e);break;case"NUMERIC_FAULT":case"BUFFER_OVERRUN":o=RangeError(e);break;default:o=Error(e)}return defineProperties(o,{code:t}),n&&Object.assign(o,n),null==o.shortMessage&&defineProperties(o,{shortMessage:i}),o}(t,n,o)}function assertArgument(e,t,n,o){errors_assert(e,t,"INVALID_ARGUMENT",{argument:n,value:o})}let u=["NFD","NFC","NFKD","NFKC"].reduce((e,t)=>{try{if("test"!=="test".normalize(t))throw Error("bad");if("NFD"===t){let e=String.fromCharCode(233).normalize("NFD"),t=String.fromCharCode(101,769);if(e!==t)throw Error("broken")}e.push(t)}catch(e){}return e},[]);function _getBytes(e,t,n){if(e instanceof Uint8Array)return n?new Uint8Array(e):e;if("string"==typeof e&&e.match(/^0x([0-9a-f][0-9a-f])*$/i)){let t=new Uint8Array((e.length-2)/2),n=2;for(let o=0;o>4]+d[15&o]}return n}function concat(e){return"0x"+e.map(e=>data_hexlify(e).substring(2)).join("")}function dataLength(e){return isHexString(e,!0)?(e.length-2)/2:data_getBytes(e).length}let p=!1,_keccak256=function(e){return(0,c.fr)(e)},f=_keccak256;function keccak256(e){let t=data_getBytes(e,"data");return data_hexlify(f(t))}keccak256._=_keccak256,keccak256.lock=function(){p=!0},keccak256.register=function(e){if(p)throw TypeError("keccak256 is locked");f=e},Object.freeze(keccak256);let m=BigInt(0),g=BigInt(36);function getChecksumAddress(e){e=e.toLowerCase();let t=e.substring(2).split(""),n=new Uint8Array(40);for(let e=0;e<40;e++)n[e]=t[e].charCodeAt(0);let o=data_getBytes(keccak256(n));for(let e=0;e<40;e+=2)o[e>>1]>>4>=8&&(t[e]=t[e].toUpperCase()),(15&o[e>>1])>=8&&(t[e+1]=t[e+1].toUpperCase());return"0x"+t.join("")}let b={};for(let e=0;e<10;e++)b[String(e)]=String(e);for(let e=0;e<26;e++)b[String.fromCharCode(65+e)]=String(10+e);let y=function(){let e={};for(let t=0;t<36;t++){let n="0123456789abcdefghijklmnopqrstuvwxyz"[t];e[n]=BigInt(t)}return e}();var v=n(11606),w=n(27499);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */let C=BigInt(0),E=BigInt(1),x=BigInt(2),A=BigInt(3),k=BigInt(4),B=BigInt(5),S=BigInt(8);function modular_mod(e,t){let n=e%t;return n>=C?n:t+n}function pow2(e,t,n){let o=e;for(;t-- >C;)o*=o,o%=n;return o}function invert(e,t){if(e===C||t<=C)throw Error(`invert: expected positive integers, got n=${e} mod=${t}`);let n=modular_mod(e,t),o=t,i=C,s=E,l=E,c=C;for(;n!==C;){let e=o/n,t=o%n,u=i-l*e,d=s-c*e;o=n,n=t,i=l,s=c,l=u,c=d}let u=o;if(u!==E)throw Error("invert: does not exist");return modular_mod(i,t)}BigInt(9),BigInt(16);let I=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function nLength(e,t){let n=void 0!==t?t:e.toString(2).length;return{nBitLength:n,nByteLength:Math.ceil(n/8)}}function getFieldBytesLength(e){if("bigint"!=typeof e)throw Error("field order must be bigint");let t=e.toString(2).length;return Math.ceil(t/8)}function getMinHashLength(e){let t=getFieldBytesLength(e);return t+Math.ceil(t/2)}var j=n(93527),T=n(66409);let HMAC=class HMAC extends T.kb{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,(0,j.vp)(e);let n=(0,T.O0)(t);if(this.iHash=e.create(),"function"!=typeof this.iHash.update)throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let e=0;enew HMAC(e,t).update(n).digest();hmac.create=(e,t)=>new HMAC(e,t);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */let P=BigInt(0),M=BigInt(1);function validateBasic(e){return!function(e){let t=I.reduce((e,t)=>(e[t]="function",e),{ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"});(0,w.FF)(e,t)}(e.Fp),(0,w.FF)(e,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...nLength(e.n,e.nBitLength),...e,p:e.Fp.ORDER})}let{bytesToNumberBE:O,hexToBytes:R}=w,U={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(e){let{Err:t}=U;if(e.length<2||2!==e[0])throw new t("Invalid signature integer tag");let n=e[1],o=e.subarray(2,n+2);if(!n||o.length!==n)throw new t("Invalid signature integer: wrong length");if(128&o[0])throw new t("Invalid signature integer: negative");if(0===o[0]&&!(128&o[1]))throw new t("Invalid signature integer: unnecessary leading zero");return{d:O(o),l:e.subarray(n+2)}},toSig(e){let{Err:t}=U,n="string"==typeof e?R(e):e;if(!(n instanceof Uint8Array))throw Error("ui8a expected");let o=n.length;if(o<2||48!=n[0])throw new t("Invalid signature tag");if(n[1]!==o-2)throw new t("Invalid signature: incorrect length");let{d:i,l:s}=U._parseInt(n.subarray(2)),{d:l,l:c}=U._parseInt(s);if(c.length)throw new t("Invalid signature: left bytes after parsing");return{r:i,s:l}},hexFromSig(e){let slice=e=>8&Number.parseInt(e[0],16)?"00"+e:e,h=e=>{let t=e.toString(16);return 1&t.length?`0${t}`:t},t=slice(h(e.s)),n=slice(h(e.r)),o=t.length/2,i=n.length/2,s=h(o),l=h(i);return`30${h(i+o+4)}02${l}${n}02${s}${t}`}},F=BigInt(0),N=BigInt(1),D=(BigInt(2),BigInt(3));BigInt(4);/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */let _=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),L=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),z=BigInt(1),q=BigInt(2),divNearest=(e,t)=>(e+t/q)/t,G=function(e,t,n=!1,o={}){if(e<=C)throw Error(`Expected Field ORDER > 0, got ${e}`);let{nBitLength:i,nByteLength:s}=nLength(e,t);if(s>2048)throw Error("Field lengths over 2048 bytes are not supported");let l=function(e){if(e%k===A){let t=(e+E)/k;return function(e,n){let o=e.pow(n,t);if(!e.eql(e.sqr(o),n))throw Error("Cannot find square root");return o}}if(e%S===B){let t=(e-B)/S;return function(e,n){let o=e.mul(n,x),i=e.pow(o,t),s=e.mul(n,i),l=e.mul(e.mul(s,x),i),c=e.mul(s,e.sub(l,e.ONE));if(!e.eql(e.sqr(c),n))throw Error("Cannot find square root");return c}}return function(e){let t,n,o;let i=(e-E)/x;for(t=e-E,n=0;t%x===C;t/=x,n++);for(o=x;o 0");if(n===E)return C;let o=E;for(;t>C;)t&E&&(o=o*e%n),e=e*e%n,t>>=E;return o}(o,i,e)!==e-E;o++);if(1===n){let t=(e+E)/k;return function(e,n){let o=e.pow(n,t);if(!e.eql(e.sqr(o),n))throw Error("Cannot find square root");return o}}let s=(t+E)/x;return function(e,l){if(e.pow(l,i)===e.neg(e.ONE))throw Error("Cannot find square root");let c=n,u=e.pow(e.mul(e.ONE,o),t),d=e.pow(l,s),p=e.pow(l,t);for(;!e.eql(p,e.ONE);){if(e.eql(p,e.ZERO))return e.ZERO;let t=1;for(let n=e.sqr(p);tmodular_mod(t,e),isValid:t=>{if("bigint"!=typeof t)throw Error(`Invalid field element: expected bigint, got ${typeof t}`);return C<=t&&te===C,isOdd:e=>(e&E)===E,neg:t=>modular_mod(-t,e),eql:(e,t)=>e===t,sqr:t=>modular_mod(t*t,e),add:(t,n)=>modular_mod(t+n,e),sub:(t,n)=>modular_mod(t-n,e),mul:(t,n)=>modular_mod(t*n,e),pow:(e,t)=>(function(e,t,n){if(n 0");if(n===C)return e.ONE;if(n===E)return t;let o=e.ONE,i=t;for(;n>C;)n&E&&(o=e.mul(o,i)),i=e.sqr(i),n>>=E;return o})(c,e,t),div:(t,n)=>modular_mod(t*invert(n,e),e),sqrN:e=>e*e,addN:(e,t)=>e+t,subN:(e,t)=>e-t,mulN:(e,t)=>e*t,inv:t=>invert(t,e),sqrt:o.sqrt||(e=>l(c,e)),invertBatch:e=>(function(e,t){let n=Array(t.length),o=t.reduce((t,o,i)=>e.is0(o)?t:(n[i]=t,e.mul(t,o)),e.ONE),i=e.inv(o);return t.reduceRight((t,o,i)=>e.is0(o)?t:(n[i]=e.mul(t,n[i]),e.mul(t,o)),i),n})(c,e),cmov:(e,t,n)=>n?t:e,toBytes:e=>n?(0,w.S5)(e,s):(0,w.tL)(e,s),fromBytes:e=>{if(e.length!==s)throw Error(`Fp.fromBytes: expected ${s}, got ${e.length}`);return n?(0,w.ty)(e):(0,w.bytesToNumberBE)(e)}});return Object.freeze(c)}(_,void 0,void 0,{sqrt:function(e){let t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),l=BigInt(44),c=BigInt(88),u=e*e*e%_,d=u*u*e%_,p=pow2(d,t,_)*d%_,f=pow2(p,t,_)*d%_,m=pow2(f,q,_)*u%_,g=pow2(m,o,_)*m%_,b=pow2(g,i,_)*g%_,y=pow2(b,l,_)*b%_,v=pow2(y,c,_)*y%_,w=pow2(v,l,_)*b%_,C=pow2(w,t,_)*d%_,E=pow2(C,s,_)*g%_,x=pow2(E,n,_)*u%_,A=pow2(x,q,_);if(!G.eql(G.sqr(A),e))throw Error("Cannot find square root");return A}}),W=function(e,t){let create=t=>(function(e){let t=function(e){let t=validateBasic(e);return w.FF(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}(e),{Fp:n,n:o}=t,i=n.BYTES+1,s=2*n.BYTES+1;function modN(e){return modular_mod(e,o)}let{ProjectivePoint:l,normPrivateKeyToScalar:c,weierstrassEquation:u,isWithinCurveOrder:d}=function(e){let t=/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function(e){let t=validateBasic(e);w.FF(t,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:n,Fp:o,a:i}=t;if(n){if(!o.eql(i,o.ZERO))throw Error("Endomorphism can only be defined for Koblitz curves that have a=0");if("object"!=typeof n||"bigint"!=typeof n.beta||"function"!=typeof n.splitScalar)throw Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...t})}(e),{Fp:n}=t,o=t.toBytes||((e,t,o)=>{let i=t.toAffine();return w.eV(Uint8Array.from([4]),n.toBytes(i.x),n.toBytes(i.y))}),i=t.fromBytes||(e=>{let t=e.subarray(1),o=n.fromBytes(t.subarray(0,n.BYTES)),i=n.fromBytes(t.subarray(n.BYTES,2*n.BYTES));return{x:o,y:i}});function weierstrassEquation(e){let{a:o,b:i}=t,s=n.sqr(e),l=n.mul(s,e);return n.add(n.add(l,n.mul(e,o)),i)}if(!n.eql(n.sqr(t.Gy),weierstrassEquation(t.Gx)))throw Error("bad generator point: equation left != right");function isWithinCurveOrder(e){return"bigint"==typeof e&&Fn.eql(e,n.ZERO);return is0(t)&&is0(o)?Point.ZERO:new Point(t,o,n.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(e){let t=n.invertBatch(e.map(e=>e.pz));return e.map((e,n)=>e.toAffine(t[n])).map(Point.fromAffine)}static fromHex(e){let t=Point.fromAffine(i((0,w.ql)("pointHex",e)));return t.assertValidity(),t}static fromPrivateKey(e){return Point.BASE.multiply(normPrivateKeyToScalar(e))}_setWindowSize(e){this._WINDOW_SIZE=e,s.delete(this)}assertValidity(){if(this.is0()){if(t.allowInfinityPoint&&!n.is0(this.py))return;throw Error("bad point: ZERO")}let{x:e,y:o}=this.toAffine();if(!n.isValid(e)||!n.isValid(o))throw Error("bad point: x or y not FE");let i=n.sqr(o),s=weierstrassEquation(e);if(!n.eql(i,s))throw Error("bad point: equation left != right");if(!this.isTorsionFree())throw Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:e}=this.toAffine();if(n.isOdd)return!n.isOdd(e);throw Error("Field doesn't support isOdd")}equals(e){assertPrjPoint(e);let{px:t,py:o,pz:i}=this,{px:s,py:l,pz:c}=e,u=n.eql(n.mul(t,c),n.mul(s,i)),d=n.eql(n.mul(o,c),n.mul(l,i));return u&&d}negate(){return new Point(this.px,n.neg(this.py),this.pz)}double(){let{a:e,b:o}=t,i=n.mul(o,D),{px:s,py:l,pz:c}=this,u=n.ZERO,d=n.ZERO,p=n.ZERO,f=n.mul(s,s),m=n.mul(l,l),g=n.mul(c,c),b=n.mul(s,l);return b=n.add(b,b),p=n.mul(s,c),p=n.add(p,p),u=n.mul(e,p),d=n.mul(i,g),d=n.add(u,d),u=n.sub(m,d),d=n.add(m,d),d=n.mul(u,d),u=n.mul(b,u),p=n.mul(i,p),g=n.mul(e,g),b=n.sub(f,g),b=n.mul(e,b),b=n.add(b,p),p=n.add(f,f),f=n.add(p,f),f=n.add(f,g),f=n.mul(f,b),d=n.add(d,f),g=n.mul(l,c),g=n.add(g,g),f=n.mul(g,b),u=n.sub(u,f),p=n.mul(g,m),p=n.add(p,p),p=n.add(p,p),new Point(u,d,p)}add(e){assertPrjPoint(e);let{px:o,py:i,pz:s}=this,{px:l,py:c,pz:u}=e,d=n.ZERO,p=n.ZERO,f=n.ZERO,m=t.a,g=n.mul(t.b,D),b=n.mul(o,l),y=n.mul(i,c),v=n.mul(s,u),w=n.add(o,i),C=n.add(l,c);w=n.mul(w,C),C=n.add(b,y),w=n.sub(w,C),C=n.add(o,s);let E=n.add(l,u);return C=n.mul(C,E),E=n.add(b,v),C=n.sub(C,E),E=n.add(i,s),d=n.add(c,u),E=n.mul(E,d),d=n.add(y,v),E=n.sub(E,d),f=n.mul(m,C),d=n.mul(g,v),f=n.add(d,f),d=n.sub(y,f),f=n.add(y,f),p=n.mul(d,f),y=n.add(b,b),y=n.add(y,b),v=n.mul(m,v),C=n.mul(g,C),y=n.add(y,v),v=n.sub(b,v),v=n.mul(m,v),C=n.add(C,v),b=n.mul(y,C),p=n.add(p,b),b=n.mul(E,C),d=n.mul(w,d),d=n.sub(d,b),b=n.mul(w,y),f=n.mul(E,f),f=n.add(f,b),new Point(d,p,f)}subtract(e){return this.add(e.negate())}is0(){return this.equals(Point.ZERO)}wNAF(e){return c.wNAFCached(this,s,e,e=>{let t=n.invertBatch(e.map(e=>e.pz));return e.map((e,n)=>e.toAffine(t[n])).map(Point.fromAffine)})}multiplyUnsafe(e){let o=Point.ZERO;if(e===F)return o;if(assertGE(e),e===N)return this;let{endo:i}=t;if(!i)return c.unsafeLadder(this,e);let{k1neg:s,k1:l,k2neg:u,k2:d}=i.splitScalar(e),p=o,f=o,m=this;for(;l>F||d>F;)l&N&&(p=p.add(m)),d&N&&(f=f.add(m)),m=m.double(),l>>=N,d>>=N;return s&&(p=p.negate()),u&&(f=f.negate()),f=new Point(n.mul(f.px,i.beta),f.py,f.pz),p.add(f)}multiply(e){let o,i;assertGE(e);let{endo:s}=t;if(s){let{k1neg:t,k1:l,k2neg:u,k2:d}=s.splitScalar(e),{p:p,f:f}=this.wNAF(l),{p:m,f:g}=this.wNAF(d);p=c.constTimeNegate(t,p),m=c.constTimeNegate(u,m),m=new Point(n.mul(m.px,s.beta),m.py,m.pz),o=p.add(m),i=f.add(g)}else{let{p:t,f:n}=this.wNAF(e);o=t,i=n}return Point.normalizeZ([o,i])[0]}multiplyAndAddUnsafe(e,t,n){let o=Point.BASE,mul=(e,t)=>t!==F&&t!==N&&e.equals(o)?e.multiply(t):e.multiplyUnsafe(t),i=mul(this,t).add(mul(e,n));return i.is0()?void 0:i}toAffine(e){let{px:t,py:o,pz:i}=this,s=this.is0();null==e&&(e=s?n.ONE:n.inv(i));let l=n.mul(t,e),c=n.mul(o,e),u=n.mul(i,e);if(s)return{x:n.ZERO,y:n.ZERO};if(!n.eql(u,n.ONE))throw Error("invZ was invalid");return{x:l,y:c}}isTorsionFree(){let{h:e,isTorsionFree:n}=t;if(e===N)return!0;if(n)return n(Point,this);throw Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:e,clearCofactor:n}=t;return e===N?this:n?n(Point,this):this.multiplyUnsafe(t.h)}toRawBytes(e=!0){return this.assertValidity(),o(Point,this,e)}toHex(e=!0){return w.ci(this.toRawBytes(e))}};Point.BASE=new Point(t.Gx,t.Gy,n.ONE),Point.ZERO=new Point(n.ZERO,n.ONE,n.ZERO);let l=t.nBitLength,c=function(e,t){let constTimeNegate=(e,t)=>{let n=t.negate();return e?n:t},opts=e=>({windows:Math.ceil(t/e)+1,windowSize:2**(e-1)});return{constTimeNegate,unsafeLadder(t,n){let o=e.ZERO,i=t;for(;n>P;)n&M&&(o=o.add(i)),i=i.double(),n>>=M;return o},precomputeWindow(e,t){let{windows:n,windowSize:o}=opts(t),i=[],s=e,l=s;for(let e=0;e>=p,i>s&&(i-=d,o+=M);let f=t+Math.abs(i)-1,m=e%2!=0,g=i<0;0===i?c=c.add(constTimeNegate(m,n[t])):l=l.add(constTimeNegate(g,n[f]))}return{p:l,f:c}},wNAFCached(e,t,n,o){let i=e._WINDOW_SIZE||1,s=t.get(e);return s||(s=this.precomputeWindow(e,i),1!==i&&t.set(e,o(s))),this.wNAF(i,s,n)}}}(Point,t.endo?Math.ceil(l/2):l);return{CURVE:t,ProjectivePoint:Point,normPrivateKeyToScalar,weierstrassEquation,isWithinCurveOrder}}({...t,toBytes(e,t,o){let i=t.toAffine(),s=n.toBytes(i.x),l=w.eV;return o?l(Uint8Array.from([t.hasEvenY()?2:3]),s):l(Uint8Array.from([4]),s,n.toBytes(i.y))},fromBytes(e){let t=e.length,o=e[0],l=e.subarray(1);if(t===i&&(2===o||3===o)){let e=w.bytesToNumberBE(l);if(!(Fw.ci(w.tL(e,t.nByteLength));function isBiggerThanHalfOrder(e){let t=o>>N;return e>t}let slcNum=(e,t,n)=>w.bytesToNumberBE(e.slice(t,n));let Signature=class Signature{constructor(e,t,n){this.r=e,this.s=t,this.recovery=n,this.assertValidity()}static fromCompact(e){let n=t.nByteLength;return e=(0,w.ql)("compactSignature",e,2*n),new Signature(slcNum(e,0,n),slcNum(e,n,2*n))}static fromDER(e){let{r:t,s:n}=U.toSig((0,w.ql)("DER",e));return new Signature(t,n)}assertValidity(){if(!d(this.r))throw Error("r must be 0 < r < CURVE.n");if(!d(this.s))throw Error("s must be 0 < s < CURVE.n")}addRecoveryBit(e){return new Signature(this.r,this.s,e)}recoverPublicKey(e){let{r:i,s,recovery:c}=this,u=f((0,w.ql)("msgHash",e));if(null==c||![0,1,2,3].includes(c))throw Error("recovery id invalid");let d=2===c||3===c?i+t.n:i;if(d>=n.ORDER)throw Error("recovery id 2 or 3 invalid");let p=(1&c)==0?"02":"03",m=l.fromHex(p+numToNByteStr(d)),g=invert(d,o),b=modN(-u*g),y=modN(s*g),v=l.BASE.multiplyAndAddUnsafe(m,b,y);if(!v)throw Error("point at infinify");return v.assertValidity(),v}hasHighS(){return isBiggerThanHalfOrder(this.s)}normalizeS(){return this.hasHighS()?new Signature(this.r,modN(-this.s),this.recovery):this}toDERRawBytes(){return w.hexToBytes(this.toDERHex())}toDERHex(){return U.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return w.hexToBytes(this.toCompactHex())}toCompactHex(){return numToNByteStr(this.r)+numToNByteStr(this.s)}};function isProbPub(e){let t=e instanceof Uint8Array,n="string"==typeof e,o=(t||n)&&e.length;return t?o===i||o===s:n?o===2*i||o===2*s:e instanceof l}let p=t.bits2int||function(e){let n=w.bytesToNumberBE(e),o=8*e.length-t.nBitLength;return o>0?n>>BigInt(o):n},f=t.bits2int_modN||function(e){return modN(p(e))},m=w.dQ(t.nBitLength);function int2octets(e){if("bigint"!=typeof e)throw Error("bigint expected");if(!(F<=e&&ee in s))throw Error("sign() legacy options not supported");let{hash:u,randomBytes:m}=t,{lowS:b,prehash:y,extraEntropy:v}=s;null==b&&(b=!0),e=(0,w.ql)("msgHash",e),y&&(e=(0,w.ql)("prehashed msgHash",u(e)));let C=f(e),E=c(i),x=[int2octets(E),int2octets(C)];if(null!=v){let e=!0===v?m(n.BYTES):v;x.push((0,w.ql)("extraEntropy",e))}let A=w.eV(...x);return{seed:A,k2sig:function(e){let t=p(e);if(!d(t))return;let n=invert(t,o),i=l.BASE.multiply(t).toAffine(),s=modN(i.x);if(s===F)return;let c=modN(n*modN(C+s*E));if(c===F)return;let u=(i.x===s?0:2)|Number(i.y&N),f=c;return b&&isBiggerThanHalfOrder(c)&&(f=isBiggerThanHalfOrder(c)?modN(-c):c,u^=1),new Signature(s,f,u)}}}(e,i,s),b=w.n$(t.hash.outputLen,t.nByteLength,t.hmac);return b(u,m)},verify:function(e,n,i,s=b){let c,u;if(n=(0,w.ql)("msgHash",n),i=(0,w.ql)("publicKey",i),"strict"in s)throw Error("options.strict was renamed to lowS");let{lowS:d,prehash:p}=s;try{if("string"==typeof e||e instanceof Uint8Array)try{u=Signature.fromDER(e)}catch(t){if(!(t instanceof U.Err))throw t;u=Signature.fromCompact(e)}else if("object"==typeof e&&"bigint"==typeof e.r&&"bigint"==typeof e.s){let{r:t,s:n}=e;u=new Signature(t,n)}else throw Error("PARSE");c=l.fromHex(i)}catch(e){if("PARSE"===e.message)throw Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(d&&u.hasHighS())return!1;p&&(n=t.hash(n));let{r:m,s:g}=u,y=f(n),v=invert(g,o),C=modN(y*v),E=modN(m*v),x=l.BASE.multiplyAndAddUnsafe(c,C,E)?.toAffine();if(!x)return!1;let A=modN(x.x);return A===m},ProjectivePoint:l,Signature,utils:{isValidPrivateKey(e){try{return c(e),!0}catch(e){return!1}},normPrivateKeyToScalar:c,randomPrivateKey:()=>{let e=getMinHashLength(t.n);return function(e,t,n=!1){let o=e.length,i=getFieldBytesLength(t),s=getMinHashLength(t);if(o<16||o1024)throw Error(`expected ${s}-1024 bytes of input, got ${o}`);let l=n?(0,w.bytesToNumberBE)(e):(0,w.ty)(e),c=modular_mod(l,t-E)+E;return n?(0,w.S5)(c,i):(0,w.tL)(c,i)}(t.randomBytes(e),t.n)},precompute:(e=8,t=l.BASE)=>(t._setWindowSize(e),t.multiply(BigInt(3)),t)}}})({...e,hash:t,hmac:(e,...n)=>hmac(t,e,(0,T.eV)(...n)),randomBytes:T.O6});return Object.freeze({...create(t),create})}({a:BigInt(0),b:BigInt(7),Fp:G,n:L,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:e=>{let t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-z*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=BigInt("0x100000000000000000000000000000000"),s=divNearest(t*e,L),l=divNearest(-n*e,L),c=modular_mod(e-s*t-l*o,L),u=modular_mod(-s*n-l*t,L),d=c>i,p=u>i;if(d&&(c=L-c),p&&(u=L-u),c>i||u>i)throw Error("splitScalar: Endomorphism failed, k="+e);return{k1neg:d,k1:c,k2neg:p,k2:u}}}},v.J),H=(BigInt(0),W.ProjectivePoint,BigInt(0));function getBigInt(e,t){switch(typeof e){case"bigint":return e;case"number":return assertArgument(Number.isInteger(e),"underflow",t||"value",e),assertArgument(e>=-9007199254740991&&e<=9007199254740991,"overflow",t||"value",e),BigInt(e);case"string":try{if(""===e)throw Error("empty string");if("-"===e[0]&&"-"!==e[1])return-BigInt(e.substring(1));return BigInt(e)}catch(n){assertArgument(!1,`invalid BigNumberish string: ${n.message}`,t||"value",e)}}assertArgument(!1,"invalid BigNumberish value",t||"value",e)}function getUint(e,t){let n=getBigInt(e,t);return errors_assert(n>=H,"unsigned value cannot be negative","NUMERIC_FAULT",{fault:"overflow",operation:"getUint",value:e}),n}function getNumber(e,t){switch(typeof e){case"bigint":return assertArgument(e>=-9007199254740991&&e<=9007199254740991,"overflow",t||"value",e),Number(e);case"number":return assertArgument(Number.isInteger(e),"underflow",t||"value",e),assertArgument(e>=-9007199254740991&&e<=9007199254740991,"overflow",t||"value",e),e;case"string":try{if(""===e)throw Error("empty string");return getNumber(BigInt(e),t)}catch(n){assertArgument(!1,`invalid numeric string: ${n.message}`,t||"value",e)}}assertArgument(!1,"invalid numeric value",t||"value",e)}function toBeHex(e,t){let n=getUint(e,"value"),o=n.toString(16);if(null==t)o.length%2&&(o="0"+o);else{let n=getNumber(t,"width");for(errors_assert(2*n>=o.length,`value exceeds width (${n} bytes)`,"NUMERIC_FAULT",{operation:"toBeHex",fault:"overflow",value:e});o.length<2*n;)o="0"+o}return"0x"+o}BigInt(1);let Q="0x0000000000000000000000000000000000000000000000000000000000000000",K=BigInt(0),V=BigInt(1),Z=BigInt(2),J=BigInt(27),X=BigInt(28),Y=BigInt(35),$={};function toUint256(e){return function(e,t,n){let o=data_getBytes(e);errors_assert(t>=o.length,"padding exceeds data length","BUFFER_OVERRUN",{buffer:new Uint8Array(o),length:t,offset:t+1});let i=new Uint8Array(t);return i.fill(0),n?i.set(o,t-o.length):i.set(o,0),data_hexlify(i)}(function(e){let t=getUint(e,"value");if(t===H)return new Uint8Array([]);let n=t.toString(16);n.length%2&&(n="0"+n);let o=new Uint8Array(n.length/2);for(let e=0;eparseInt(t.substring(0,3)),"non-canonical s","value",t),this.#t=t}get v(){return this.#r}set v(e){let t=getNumber(e,"value");assertArgument(27===t||28===t,"invalid v","v",e),this.#r=t}get networkV(){return this.#n}get legacyChainId(){let e=this.networkV;return null==e?null:Signature.getChainId(e)}get yParity(){return 27===this.v?0:1}get yParityAndS(){let e=data_getBytes(this.s);return this.yParity&&(e[0]|=128),data_hexlify(e)}get compactSerialized(){return concat([this.r,this.yParityAndS])}get serialized(){return concat([this.r,this.s,this.yParity?"0x1c":"0x1b"])}constructor(e,t,n,o){!function(e,t,n){if(null==n&&(n=""),e!==t){let e=n,t="new";n&&(e+=".",t+=" "+n),errors_assert(!1,`private constructor; use ${e}from* methods`,"UNSUPPORTED_OPERATION",{operation:t})}}(e,$,"Signature"),this.#e=t,this.#t=n,this.#r=o,this.#n=null}[Symbol.for("nodejs.util.inspect.custom")](){return`Signature { r: "${this.r}", s: "${this.s}", yParity: ${this.yParity}, networkV: ${this.networkV} }`}clone(){let e=new Signature($,this.r,this.s,this.v);return this.networkV&&(e.#n=this.networkV),e}toJSON(){let e=this.networkV;return{_type:"signature",networkV:null!=e?e.toString():null,r:this.r,s:this.s,v:this.v}}static getChainId(e){let t=getBigInt(e,"v");return t==J||t==X?K:(assertArgument(t>=Y,"invalid EIP-155 v","v",e),(t-Y)/Z)}static getChainIdV(e,t){return getBigInt(e)*Z+BigInt(35+t-27)}static getNormalizedV(e){let t=getBigInt(e);return t===K||t===J?27:t===V||t===X?28:(assertArgument(t>=Y,"invalid v","v",e),t&V?27:28)}static from(e){function assertError(t,n){assertArgument(t,n,"signature",e)}if(null==e)return new Signature($,Q,Q,27);if("string"==typeof e){let t=data_getBytes(e,"signature");if(64===t.length){let e=data_hexlify(t.slice(0,32)),n=t.slice(32,64),o=128&n[0]?28:27;return n[0]&=127,new Signature($,e,data_hexlify(n),o)}if(65===t.length){let e=data_hexlify(t.slice(0,32)),n=t.slice(32,64);assertError((128&n[0])==0,"non-canonical s");let o=Signature.getNormalizedV(t[64]);return new Signature($,e,data_hexlify(n),o)}assertError(!1,"invalid raw signature length")}if(e instanceof Signature)return e.clone();let t=e.r;assertError(null!=t,"missing r");let n=toUint256(t),o=function(e,t){if(null!=e)return toUint256(e);if(null!=t){assertError(isHexString(t,32),"invalid yParityAndS");let e=data_getBytes(t);return e[0]&=127,data_hexlify(e)}assertError(!1,"missing s")}(e.s,e.yParityAndS);assertError((128&data_getBytes(o)[0])==0,"non-canonical s");let{networkV:i,v:s}=function(e,t,n){if(null!=e){let t=getBigInt(e);return{networkV:t>=Y?t:void 0,v:Signature.getNormalizedV(t)}}if(null!=t)return assertError(isHexString(t,32),"invalid yParityAndS"),{v:128&data_getBytes(t)[0]?28:27};if(null!=n){switch(getNumber(n,"sig.yParity")){case 0:return{v:27};case 1:return{v:28}}assertError(!1,"invalid yParity")}assertError(!1,"missing v")}(e.v,e.yParityAndS,e.yParity),l=new Signature($,n,o,s);return i&&(l.#n=i),assertError(null==e.yParity||getNumber(e.yParity,"sig.yParity")===l.yParity,"yParity mismatch"),assertError(null==e.yParityAndS||e.yParityAndS===l.yParityAndS,"yParityAndS mismatch"),l}};let SigningKey=class SigningKey{#a;constructor(e){assertArgument(32===dataLength(e),"invalid private key","privateKey","[REDACTED]"),this.#a=data_hexlify(e)}get privateKey(){return this.#a}get publicKey(){return SigningKey.computePublicKey(this.#a)}get compressedPublicKey(){return SigningKey.computePublicKey(this.#a,!0)}sign(e){assertArgument(32===dataLength(e),"invalid digest length","digest",e);let t=W.sign(getBytesCopy(e),getBytesCopy(this.#a),{lowS:!0});return Signature.from({r:toBeHex(t.r,32),s:toBeHex(t.s,32),v:t.recovery?28:27})}computeSharedSecret(e){let t=SigningKey.computePublicKey(e);return data_hexlify(W.getSharedSecret(getBytesCopy(this.#a),data_getBytes(t),!1))}static computePublicKey(e,t){let n=data_getBytes(e,"key");if(32===n.length){let e=W.getPublicKey(n,!!t);return data_hexlify(e)}if(64===n.length){let e=new Uint8Array(65);e[0]=4,e.set(n,1),n=e}let o=W.ProjectivePoint.fromHex(n);return data_hexlify(o.toRawBytes(t))}static recoverPublicKey(e,t){assertArgument(32===dataLength(e),"invalid digest length","digest",e);let n=Signature.from(t),o=W.Signature.fromCompact(getBytesCopy(concat([n.r,n.s])));o=o.addRecoveryBit(n.yParity);let i=o.recoverPublicKey(getBytesCopy(e));return assertArgument(null!=i,"invalid signautre for digest","signature",t),"0x"+i.toHex(!1)}static addPoints(e,t,n){let o=W.ProjectivePoint.fromHex(SigningKey.computePublicKey(e).substring(2)),i=W.ProjectivePoint.fromHex(SigningKey.computePublicKey(t).substring(2));return"0x"+o.add(i).toHex(!!n)}};function ignoreFunc(e,t,n,o,i){if("BAD_PREFIX"===e||"UNEXPECTED_CONTINUE"===e){let e=0;for(let o=t+1;o>6==2;o++)e++;return e}return"OVERRUN"===e?n.length-t-1:0}function toUtf8Bytes(e,t){assertArgument("string"==typeof e,"invalid string value","str",e),null!=t&&(errors_assert(u.indexOf(t)>=0,"platform missing String.prototype.normalize","UNSUPPORTED_OPERATION",{operation:"String.prototype.normalize",info:{form:t}}),e=e.normalize(t));let n=[];for(let t=0;t>6|192),n.push(63&o|128);else if((64512&o)==55296){t++;let i=e.charCodeAt(t);assertArgument(t>18|240),n.push(s>>12&63|128),n.push(s>>6&63|128),n.push(63&s|128)}else n.push(o>>12|224),n.push(o>>6&63|128),n.push(63&o|128)}return new Uint8Array(n)}Object.freeze({error:function(e,t,n,o,i){assertArgument(!1,`invalid codepoint at offset ${t}; ${e}`,"bytes",n)},ignore:ignoreFunc,replace:function(e,t,n,o,i){return"OVERLONG"===e?(assertArgument("number"==typeof i,"invalid bad code point for replacement","badCodepoint",i),o.push(i),0):(o.push(65533),ignoreFunc(e,t,n,o,i))}});let ee=(0,i.createContext)(void 0),AdminProvider=e=>{let{children:t}=e,{address:n,isConnected:c}=(0,s.m)(),{signMessage:u,data:d}=(0,l.Q)(),[p,f]=(0,i.useState)(!1),[v,w]=(0,i.useState)([]),[C,E]=(0,i.useState)(),[x,A]=(0,i.useState)(),[k,B]=(0,i.useState)(!0),[S,I]=(0,i.useState)([]);return(0,i.useEffect)(()=>{c&&n||(A(void 0),E(void 0))},[n,c]),(0,i.useEffect)(()=>{let e=localStorage.getItem("expiryTimestamp"),t=e?parseInt(e,10):null;if(t&&t>Date.now()){E(t);let e=localStorage.getItem("signature");e&&A(e)}},[n,c]),(0,i.useEffect)(()=>{C&&C>Date.now()&&(localStorage.setItem("expiryTimestamp",C.toString()),x&&localStorage.setItem("signature",x))},[C,x,n,c]),(0,i.useEffect)(()=>{d&&A(d)},[d,n,c]),(0,i.useEffect)(()=>{let e=setInterval(()=>{if(C){let e=Date.now();B(eclearInterval(e)},[C,n,c]),(0,i.useEffect)(()=>{if(C&&x){var e;let t=null===(e=function(e,t){var n,o;let i=("string"==typeof(n=e)&&(n=toUtf8Bytes(n)),keccak256(concat([toUtf8Bytes("\x19Ethereum Signed Message:\n"),toUtf8Bytes(String(n.length)),n])));return function(e){if(assertArgument("string"==typeof e,"invalid address","address",e),e.match(/^(0x)?[0-9a-fA-F]{40}$/)){e.startsWith("0x")||(e="0x"+e);let t=getChecksumAddress(e);return assertArgument(!e.match(/([A-F].*[a-f])|([a-f].*[A-F])/)||t===e,"bad address checksum","address",e),t}if(e.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){assertArgument(e.substring(2,4)===function(e){let t=(e=(e=e.toUpperCase()).substring(4)+e.substring(0,2)+"00").split("").map(e=>b[e]).join("");for(;t.length>=15;){let e=t.substring(0,15);t=parseInt(e,10)%97+t.substring(e.length)}let n=String(98-parseInt(t,10)%97);for(;n.length<2;)n="0"+n;return n}(e),"bad icap checksum","address",e);let t=(function(e){e=e.toLowerCase();let t=m;for(let n=0;n{let e=v.some(e=>n&&(null==e?void 0:e.toLowerCase())===(null==n?void 0:n.toLowerCase()));f(e)},[n,v,c]),(0,o.jsx)(ee.Provider,{value:{admin:p,setAdmin:f,allAdmins:v,setAllAdmins:w,expiryTimestamp:C,setExpiryTimestamp:E,generateSignature:()=>{let e=Date.now()+432e5;u({message:e.toString()}),E(e)},signature:x,setSignature:A,validTimestamp:k,setValidTimestamp:B,networks:S,setNetworks:I},children:t})},useAdminContext=()=>{let e=(0,i.useContext)(ee);if(void 0===e)throw Error("AdminContext must be used within an AdminProvider");return e}},38492:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return App}});var o=n(85893);n(32352);var i=n(59581);n(56953);var s=n(89192),l=n(99931),c=n(24139),u=n(56888),d=n(27037),p=n(7506),f=class extends p.l{constructor(e={}){super(),this.config=e,this.#o=new Map}#o;build(e,t,n){let o=t.queryKey,i=t.queryHash??(0,c.Rm)(o,t),s=this.get(i);return s||(s=new u.A({cache:this,queryKey:o,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(o)}),this.add(s)),s}add(e){this.#o.has(e.queryHash)||(this.#o.set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){let t=this.#o.get(e.queryHash);t&&(e.destroy(),t===e&&this.#o.delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){d.V.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#o.get(e)}getAll(){return[...this.#o.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>(0,c._x)(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>(0,c._x)(e,t)):t}notify(e){d.V.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){d.V.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){d.V.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},m=n(59289),g=class extends p.l{constructor(e={}){super(),this.config=e,this.#i=[],this.#s=0}#i;#s;#l;build(e,t,n){let o=new m.m({mutationCache:this,mutationId:++this.#s,options:e.defaultMutationOptions(t),state:n});return this.add(o),o}add(e){this.#i.push(e),this.notify({type:"added",mutation:e})}remove(e){this.#i=this.#i.filter(t=>t!==e),this.notify({type:"removed",mutation:e})}clear(){d.V.batch(()=>{this.#i.forEach(e=>{this.remove(e)})})}getAll(){return this.#i}find(e){let t={exact:!0,...e};return this.#i.find(e=>(0,c.X7)(t,e))}findAll(e={}){return this.#i.filter(t=>(0,c.X7)(e,t))}notify(e){d.V.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){return this.#l=(this.#l??Promise.resolve()).then(()=>{let e=this.#i.filter(e=>e.state.isPaused);return d.V.batch(()=>e.reduce((e,t)=>e.then(()=>t.continue().catch(c.ZT)),Promise.resolve()))}).then(()=>{this.#l=void 0}),this.#l}},b=n(66474),y=n(14304);function getNextPageParam(e,{pages:t,pageParams:n}){let o=t.length-1;return e.getNextPageParam(t[o],t,n[o],n)}function getPreviousPageParam(e,{pages:t,pageParams:n}){return e.getPreviousPageParam?.(t[0],t,n[0],n)}var v=class{#c;#u;#d;#p;#h;#f;#m;#g;constructor(e={}){this.#c=e.queryCache||new f,this.#u=e.mutationCache||new g,this.#d=e.defaultOptions||{},this.#p=new Map,this.#h=new Map,this.#f=0}mount(){this.#f++,1===this.#f&&(this.#m=b.j.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#c.onFocus())}),this.#g=y.N.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#c.onOnline())}))}unmount(){this.#f--,0===this.#f&&(this.#m?.(),this.#m=void 0,this.#g?.(),this.#g=void 0)}isFetching(e){return this.#c.findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return this.#u.findAll({...e,status:"pending"}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#c.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.getQueryData(e.queryKey);if(void 0===t)return this.fetchQuery(e);{let n=this.defaultQueryOptions(e),o=this.#c.build(this,n);return e.revalidateIfStale&&o.isStaleByTime(n.staleTime)&&this.prefetchQuery(n),Promise.resolve(t)}}getQueriesData(e){return this.getQueryCache().findAll(e).map(({queryKey:e,state:t})=>{let n=t.data;return[e,n]})}setQueryData(e,t,n){let o=this.defaultQueryOptions({queryKey:e}),i=this.#c.get(o.queryHash),s=i?.state.data,l=(0,c.SE)(t,s);if(void 0!==l)return this.#c.build(this,o).setData(l,{...n,manual:!0})}setQueriesData(e,t,n){return d.V.batch(()=>this.getQueryCache().findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#c.get(t.queryHash)?.state}removeQueries(e){let t=this.#c;d.V.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#c,o={type:"active",...e};return d.V.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries(o,t)))}cancelQueries(e={},t={}){let n={revert:!0,...t},o=d.V.batch(()=>this.#c.findAll(e).map(e=>e.cancel(n)));return Promise.all(o).then(c.ZT).catch(c.ZT)}invalidateQueries(e={},t={}){return d.V.batch(()=>{if(this.#c.findAll(e).forEach(e=>{e.invalidate()}),"none"===e.refetchType)return Promise.resolve();let n={...e,type:e.refetchType??e.type??"active"};return this.refetchQueries(n,t)})}refetchQueries(e={},t){let n={...t,cancelRefetch:t?.cancelRefetch??!0},o=d.V.batch(()=>this.#c.findAll(e).filter(e=>!e.isDisabled()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(c.ZT)),"paused"===e.state.fetchStatus?Promise.resolve():t}));return Promise.all(o).then(c.ZT)}fetchQuery(e){let t=this.defaultQueryOptions(e);void 0===t.retry&&(t.retry=!1);let n=this.#c.build(this,t);return n.isStaleByTime(t.staleTime)?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(c.ZT).catch(c.ZT)}fetchInfiniteQuery(e){var t;return e.behavior=(t=e.pages,{onFetch:(e,n)=>{let fetchFn=async()=>{let n;let o=e.options,i=e.fetchOptions?.meta?.fetchMore?.direction,s=e.state.data?.pages||[],l=e.state.data?.pageParams||[],u=!1,addSignalProperty=t=>{Object.defineProperty(t,"signal",{enumerable:!0,get:()=>(e.signal.aborted?u=!0:e.signal.addEventListener("abort",()=>{u=!0}),e.signal)})},d=e.options.queryFn&&e.options.queryFn!==c.CN?e.options.queryFn:()=>Promise.reject(Error(`Missing queryFn: '${e.options.queryHash}'`)),fetchPage=async(t,n,o)=>{if(u)return Promise.reject();if(null==n&&t.pages.length)return Promise.resolve(t);let i={queryKey:e.queryKey,pageParam:n,direction:o?"backward":"forward",meta:e.options.meta};addSignalProperty(i);let s=await d(i),{maxPages:l}=e.options,p=o?c.Ht:c.VX;return{pages:p(t.pages,s,l),pageParams:p(t.pageParams,n,l)}};if(i&&s.length){let e="backward"===i,t=e?getPreviousPageParam:getNextPageParam,c={pages:s,pageParams:l},u=t(o,c);n=await fetchPage(c,u,e)}else{n=await fetchPage({pages:[],pageParams:[]},l[0]??o.initialPageParam);let e=t??s.length;for(let t=1;te.options.persister?.(fetchFn,{queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},n):e.fetchFn=fetchFn}}),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(c.ZT).catch(c.ZT)}resumePausedMutations(){return y.N.isOnline()?this.#u.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#c}getMutationCache(){return this.#u}getDefaultOptions(){return this.#d}setDefaultOptions(e){this.#d=e}setQueryDefaults(e,t){this.#p.set((0,c.Ym)(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#p.values()],n={};return t.forEach(t=>{(0,c.to)(e,t.queryKey)&&(n={...n,...t.defaultOptions})}),n}setMutationDefaults(e,t){this.#h.set((0,c.Ym)(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#h.values()],n={};return t.forEach(t=>{(0,c.to)(e,t.mutationKey)&&(n={...n,...t.defaultOptions})}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#d.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=(0,c.Rm)(t.queryKey,t)),void 0===t.refetchOnReconnect&&(t.refetchOnReconnect="always"!==t.networkMode),void 0===t.throwOnError&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),!0!==t.enabled&&t.queryFn===c.CN&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#d.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#c.clear(),this.#u.clear()}},w=n(30202),C=n(86164);let E=(0,C.a)({id:31337,name:"Hardhat",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["http://127.0.0.1:8545"]}}});var x=n(66403);let A=(0,C.a)({id:5,name:"Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.ankr.com/eth_goerli"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli.etherscan.io",apiUrl:"https://api-goerli.etherscan.io/api"}},contracts:{ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},ensUniversalResolver:{address:"0xfc4AC75C46C914aF5892d6d3eFFcebD7917293F1",blockCreated:10339206},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:6507670}},testnet:!0});var k=n(95946),B=n(43310),S=n(6073),I=n(30866);let j={block:(0,B.G)({format(e){let t=e.transactions?.map(e=>{if("string"==typeof e)return e;let t=S.Tr(e);return"0x7e"===t.typeHex&&(t.isSystemTx=e.isSystemTx,t.mint=e.mint?k.y_(e.mint):void 0,t.sourceHash=e.sourceHash,t.type="deposit"),t});return{transactions:t,stateRoot:e.stateRoot}}}),transaction:(0,S.y_)({format(e){let t={};return"0x7e"===e.type&&(t.isSystemTx=e.isSystemTx,t.mint=e.mint?(0,k.y_)(e.mint):void 0,t.sourceHash=e.sourceHash,t.type="deposit"),t}}),transactionReceipt:(0,I.d)({format:e=>({l1GasPrice:e.l1GasPrice?(0,k.y_)(e.l1GasPrice):null,l1GasUsed:e.l1GasUsed?(0,k.y_)(e.l1GasUsed):null,l1Fee:e.l1Fee?(0,k.y_)(e.l1Fee):null,l1FeeScalar:e.l1FeeScalar?Number(e.l1FeeScalar):null})})};var T=n(26087),P=n(60480),M=n(57040),O=n(92106),R=n(62027),U=n(11221),F=n(11187);function toRlp(e,t="hex"){let n=function getEncodable(e){return Array.isArray(e)?function(e){let t=e.reduce((e,t)=>e+t.length,0),n=getSizeOfLength(t),o=t<=55?1+t:1+n+t;return{length:o,encode(o){for(let{encode:i}of(t<=55?o.pushByte(192+t):(o.pushByte(247+n),1===n?o.pushUint8(t):2===n?o.pushUint16(t):3===n?o.pushUint24(t):o.pushUint32(t)),e))i(o)}}}(e.map(e=>getEncodable(e))):function(e){let t="string"==typeof e?(0,F.nr)(e):e,n=getSizeOfLength(t.length),o=1===t.length&&t[0]<128?1:t.length<=55?1+t.length:1+n+t.length;return{length:o,encode(e){1===t.length&&t[0]<128||(t.length<=55?e.pushByte(128+t.length):(e.pushByte(183+n),1===n?e.pushUint8(t.length):2===n?e.pushUint16(t.length):3===n?e.pushUint24(t.length):e.pushUint32(t.length))),e.pushBytes(t)}}}(e)}(e),o=(0,U.q)(new Uint8Array(n.length));return(n.encode(o),"hex"===t)?(0,O.ci)(o.bytes):o.bytes}function getSizeOfLength(e){if(e<256)return 1;if(e<65536)return 2;if(e<16777216)return 3;if(e<4294967296)return 4;throw new R.G("Length is too large.")}var N=n(33639);function blobsToCommitments(e){let{kzg:t}=e,n=e.to??("string"==typeof e.blobs[0]?"hex":"bytes"),o="string"==typeof e.blobs[0]?e.blobs.map(e=>(0,F.nr)(e)):e.blobs,i=[];for(let e of o)i.push(Uint8Array.from(t.blobToKzgCommitment(e)));return"bytes"===n?i:i.map(e=>(0,O.ci)(e))}function blobsToProofs(e){let{kzg:t}=e,n=e.to??("string"==typeof e.blobs[0]?"hex":"bytes"),o="string"==typeof e.blobs[0]?e.blobs.map(e=>(0,F.nr)(e)):e.blobs,i="string"==typeof e.commitments[0]?e.commitments.map(e=>(0,F.nr)(e)):e.commitments,s=[];for(let e=0;e(0,O.ci)(e))}var D=n(11606),_=n(15102);let BlobSizeTooLargeError=class BlobSizeTooLargeError extends R.G{constructor({maxSize:e,size:t}){super("Blob size is too large.",{metaMessages:[`Max: ${e} bytes`,`Given: ${t} bytes`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BlobSizeTooLargeError"})}};let EmptyBlobError=class EmptyBlobError extends R.G{constructor(){super("Blob data must not be empty."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EmptyBlobError"})}};let InvalidVersionedHashSizeError=class InvalidVersionedHashSizeError extends R.G{constructor({hash:e,size:t}){super(`Versioned hash "${e}" size is invalid.`,{metaMessages:["Expected: 32",`Received: ${t}`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidVersionedHashSizeError"})}};let InvalidVersionedHashVersionError=class InvalidVersionedHashVersionError extends R.G{constructor({hash:e,version:t}){super(`Versioned hash "${e}" version is invalid.`,{metaMessages:["Expected: 1",`Received: ${t}`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidVersionedHashVersionError"})}};var L=n(39135),z=n(61836),q=n(80377),G=n(26445),W=n(3972);function assertTransactionEIP1559(e){let{chainId:t,maxPriorityFeePerGas:n,maxFeePerGas:o,to:i}=e;if(t<=0)throw new q.hJ({chainId:t});if(i&&!(0,P.U)(i))throw new T.b({address:i});if(o&&o>2n**256n-1n)throw new G.Hh({maxFeePerGas:o});if(n&&o&&n>o)throw new G.cs({maxFeePerGas:o,maxPriorityFeePerGas:n})}var H=n(82994);function serializeAccessList(e){if(!e||0===e.length)return[];let t=[];for(let n=0;n2n**256n-1n)throw new G.Hh({maxFeePerGas:o})}(e);let p=serializeAccessList(u),f=[(0,O.NC)(n),s?(0,O.NC)(s):"0x",d?(0,O.NC)(d):"0x",o?(0,O.NC)(o):"0x",l??"0x",c?(0,O.NC)(c):"0x",i??"0x",p,...toYParitySignatureArray(e,t)];return(0,M.SM)(["0x01",toRlp(f)])}(e,t):"eip4844"===n?function(e,t){let{chainId:n,gas:o,nonce:i,to:s,value:l,maxFeePerBlobGas:c,maxFeePerGas:u,maxPriorityFeePerGas:d,accessList:p,data:f}=e;!function(e){let{blobVersionedHashes:t}=e;if(t){if(0===t.length)throw new EmptyBlobError;for(let e of t){let t=(0,L.d)(e),n=(0,k.ly)((0,W.tP)(e,0,1));if(32!==t)throw new InvalidVersionedHashSizeError({hash:e,size:t});if(1!==n)throw new InvalidVersionedHashVersionError({hash:e,version:n})}}assertTransactionEIP1559(e)}(e);let m=e.blobVersionedHashes,g=e.sidecars;if(e.blobs){let t="string"==typeof e.blobs[0]?e.blobs:e.blobs.map(e=>(0,O.ci)(e)),n=e.kzg,o=blobsToCommitments({blobs:t,kzg:n}),i=blobsToProofs({blobs:t,commitments:o,kzg:n});m=function(e){let{commitments:t,version:n}=e,o=e.to??("string"==typeof t[0]?"hex":"bytes"),i=[];for(let e of t)i.push(function(e){let{commitment:t,version:n=1}=e,o=e.to??("string"==typeof t?"hex":"bytes"),i=function(e,t){let n=(0,D.J)((0,_.v)(e,{strict:!1})?(0,F.O0)(e):e);return"bytes"===(t||"hex")?n:(0,O.NC)(n)}(t,"bytes");return i.set([n],0),"bytes"===o?i:(0,O.ci)(i)}({commitment:e,to:o,version:n}));return i}({commitments:o}),!1!==g&&(g=function(e){let{data:t,kzg:n,to:o}=e,i=e.blobs??function(e){let t=e.to??("string"==typeof e.data?"hex":"bytes"),n="string"==typeof e.data?(0,F.nr)(e.data):e.data,o=(0,L.d)(n);if(!o)throw new EmptyBlobError;if(o>253951)throw new BlobSizeTooLargeError({maxSize:253951,size:o});let i=[],s=!0,l=0;for(;s;){let e=(0,U.q)(new Uint8Array(131072)),t=0;for(;t<4096;){let o=n.slice(l,l+31);if(e.pushByte(0),e.pushBytes(o),o.length<31){e.pushByte(128),s=!1;break}t++,l+=31}i.push(e)}return"bytes"===t?i.map(e=>e.bytes):i.map(e=>(0,O.ci)(e.bytes))}({data:t,to:o}),s=e.commitments??blobsToCommitments({blobs:i,kzg:n,to:o}),l=e.proofs??blobsToProofs({blobs:i,commitments:s,kzg:n,to:o}),c=[];for(let e=0;e2n**256n-1n)throw new G.Hh({maxFeePerGas:o});if(l)throw new R.G("`accessList` is not a valid Legacy Transaction attribute.")}(e);let d=[s?(0,O.NC)(s):"0x",u?(0,O.NC)(u):"0x",o?(0,O.NC)(o):"0x",l??"0x",c?(0,O.NC)(c):"0x",i??"0x"];if(t){let e=(()=>{if(t.v>=35n){let e=(t.v-35n)/2n;return e>0?t.v:27n+(35n===t.v?0n:1n)}if(n>0)return BigInt(2*n)+BigInt(35n+t.v-27n);let e=27n+(27n===t.v?0n:1n);if(t.v!==e)throw new N.vl({v:t.v});return e})();d=[...d,(0,O.NC)(e),t.r,t.s]}else n>0&&(d=[...d,(0,O.NC)(n),"0x","0x"]);return toRlp(d)}(e,t)}function toYParitySignatureArray(e,t){let{r:n,s:o,v:i,yParity:s}=t??e;if(void 0===n||void 0===o||void 0===i&&void 0===s)return[];let l="number"==typeof s?s?(0,O.NC)(1):"0x":0n===i?"0x":1n===i?(0,O.NC)(1):27n===i?"0x":(0,O.NC)(1);return[l,(0,z.f)(n),(0,z.f)(o)]}let Q={contracts:{gasPriceOracle:{address:"0x420000000000000000000000000000000000000F"},l1Block:{address:"0x4200000000000000000000000000000000000015"},l2CrossDomainMessenger:{address:"0x4200000000000000000000000000000000000007"},l2Erc721Bridge:{address:"0x4200000000000000000000000000000000000014"},l2StandardBridge:{address:"0x4200000000000000000000000000000000000010"},l2ToL1MessagePasser:{address:"0x4200000000000000000000000000000000000016"}},formatters:j,serializers:{transaction:function(e,t){return"deposit"===e.type||void 0!==e.sourceHash?function(e){!function(e){let{from:t,to:n}=e;if(t&&!(0,P.U)(t))throw new T.b({address:t});if(n&&!(0,P.U)(n))throw new T.b({address:n})}(e);let{sourceHash:t,data:n,from:o,gas:i,isSystemTx:s,mint:l,to:c,value:u}=e,d=[t,o,c??"0x",l?(0,O.NC)(l):"0x",u?(0,O.NC)(u):"0x",i?(0,O.NC)(i):"0x",s?"0x1":"0x",n??"0x"];return(0,M.SM)(["0x7e",toRlp(d)])}(e):serializeTransaction(e,t)}}},K=(0,C.a)({...Q,id:10,name:"OP Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.optimism.io"]}},blockExplorers:{default:{name:"Optimism Explorer",url:"https://optimistic.etherscan.io",apiUrl:"https://api-optimistic.etherscan.io/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0xdfe97868233d1aa22e815a266982f2cf17685a27"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:4286263},portal:{1:{address:"0xbEb5Fc579115071764c7423A4f12eDde41f106Ed"}},l1StandardBridge:{1:{address:"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1"}}},sourceId:1}),V=(0,C.a)({id:14,name:"Flare Mainnet",nativeCurrency:{decimals:18,name:"flare",symbol:"FLR"},rpcUrls:{default:{http:["https://flare-api.flare.network/ext/C/rpc"]}},blockExplorers:{default:{name:"Flare Explorer",url:"https://flare-explorer.flare.network",apiUrl:"https://flare-explorer.flare.network/api"}}}),Z=(0,C.a)({id:16,name:"Coston",nativeCurrency:{decimals:18,name:"costonflare",symbol:"CFLR"},rpcUrls:{default:{http:["https://coston-api.flare.network/ext/C/rpc"]}},blockExplorers:{default:{name:"Coston Explorer",url:"https://coston-explorer.flare.network",apiUrl:"https://coston-explorer.flare.network/api"}},testnet:!0}),J=(0,C.a)({id:19,name:"Songbird Mainnet",nativeCurrency:{decimals:18,name:"songbird",symbol:"SGB"},rpcUrls:{default:{http:["https://songbird-api.flare.network/ext/C/rpc"]}},blockExplorers:{default:{name:"Songbird Explorer",url:"https://songbird-explorer.flare.network",apiUrl:"https://songbird-explorer.flare.network/api"}}}),X=(0,C.a)({id:25,name:"Cronos Mainnet",nativeCurrency:{decimals:18,name:"Cronos",symbol:"CRO"},rpcUrls:{default:{http:["https://evm.cronos.org"]}},blockExplorers:{default:{name:"Cronos Explorer",url:"https://explorer.cronos.org",apiUrl:"https://explorer-api.cronos.org/mainnet/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:1963112}}}),Y=(0,C.a)({id:30,name:"Rootstock Mainnet",network:"rootstock",nativeCurrency:{decimals:18,name:"Rootstock Bitcoin",symbol:"RBTC"},rpcUrls:{default:{http:["https://public-node.rsk.co"]}},blockExplorers:{default:{name:"RSK Explorer",url:"https://explorer.rsk.co"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:4249540}}}),$=(0,C.a)({id:40,name:"Telos",nativeCurrency:{decimals:18,name:"Telos",symbol:"TLOS"},rpcUrls:{default:{http:["https://mainnet.telos.net/evm"]}},blockExplorers:{default:{name:"Teloscan",url:"https://www.teloscan.io/"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:246530709}}}),ee=(0,C.a)({id:41,name:"Telos",nativeCurrency:{decimals:18,name:"Telos",symbol:"TLOS"},rpcUrls:{default:{http:["https://testnet.telos.net/evm"]}},blockExplorers:{default:{name:"Teloscan (testnet)",url:"https://testnet.teloscan.io/"}},testnet:!0}),et=(0,C.a)({id:42,network:"lukso",name:"LUKSO",nativeCurrency:{name:"LUKSO",symbol:"LYX",decimals:18},rpcUrls:{default:{http:["https://rpc.mainnet.lukso.network"],webSocket:["wss://ws-rpc.mainnet.lukso.network"]}},blockExplorers:{default:{name:"LUKSO Mainnet Explorer",url:"https://explorer.execution.mainnet.lukso.network",apiUrl:"https://api.explorer.execution.mainnet.lukso.network/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:468183}}}),er=(0,C.a)({id:50,name:"XinFin Network",nativeCurrency:{decimals:18,name:"XDC",symbol:"XDC"},rpcUrls:{default:{http:["https://rpc.xinfin.network"]}},blockExplorers:{xinfin:{name:"XinFin",url:"https://explorer.xinfin.network"},default:{name:"Blocksscan",url:"https://xdc.blocksscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:71542788}}}),en=(0,C.a)({id:51,name:"Apothem Network",nativeCurrency:{decimals:18,name:"TXDC",symbol:"TXDC"},rpcUrls:{default:{http:["https://erpc.apothem.network"]}},blockExplorers:{default:{name:"Blocksscan",url:"https://apothem.blocksscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:59765389}}}),ea=(0,C.a)({id:56,name:"BNB Smart Chain",nativeCurrency:{decimals:18,name:"BNB",symbol:"BNB"},rpcUrls:{default:{http:["https://rpc.ankr.com/bsc"]}},blockExplorers:{default:{name:"BscScan",url:"https://bscscan.com",apiUrl:"https://api.bscscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:15921452}}}),eo=(0,C.a)({id:57,name:"Syscoin Mainnet",nativeCurrency:{decimals:18,name:"Syscoin",symbol:"SYS"},rpcUrls:{default:{http:["https://rpc.syscoin.org"],webSocket:["wss://rpc.syscoin.org/wss"]}},blockExplorers:{default:{name:"SyscoinExplorer",url:"https://explorer.syscoin.org",apiUrl:"https://explorer.syscoin.org/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:287139}}}),ei=(0,C.a)({id:61,name:"Ethereum Classic",nativeCurrency:{decimals:18,name:"ETC",symbol:"ETC"},rpcUrls:{default:{http:["https://etc.rivet.link"]}},blockExplorers:{default:{name:"Blockscout",url:"https://blockscout.com/etc/mainnet"}}}),es=(0,C.a)({id:66,name:"OKC",nativeCurrency:{decimals:18,name:"OKT",symbol:"OKT"},rpcUrls:{default:{http:["https://exchainrpc.okex.org"]}},blockExplorers:{default:{name:"oklink",url:"https://www.oklink.com/okc"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:10364792}}}),el=(0,C.a)({id:71,name:"Conflux eSpace Testnet",network:"cfx-espace-testnet",testnet:!0,nativeCurrency:{name:"Conflux",symbol:"CFX",decimals:18},rpcUrls:{default:{http:["https://evmtestnet.confluxrpc.org"],webSocket:["wss://evmtestnet.confluxrpc.org/ws"]}},blockExplorers:{default:{name:"ConfluxScan",url:"https://evmtestnet.confluxscan.io"}},contracts:{multicall3:{address:"0xEFf0078910f638cd81996cc117bccD3eDf2B072F",blockCreated:117499050}}}),ec=(0,C.a)({id:82,name:"Meter",nativeCurrency:{decimals:18,name:"MTR",symbol:"MTR"},rpcUrls:{default:{http:["https://rpc.meter.io"]}},blockExplorers:{default:{name:"MeterScan",url:"https://scan.meter.io"}}}),eu=(0,C.a)({id:83,name:"Meter Testnet",nativeCurrency:{decimals:18,name:"MTR",symbol:"MTR"},rpcUrls:{default:{http:["https://rpctest.meter.io"]}},blockExplorers:{default:{name:"MeterTestnetScan",url:"https://scan-warringstakes.meter.io"}}}),ed=(0,C.a)({id:97,name:"Binance Smart Chain Testnet",nativeCurrency:{decimals:18,name:"BNB",symbol:"tBNB"},rpcUrls:{default:{http:["https://data-seed-prebsc-1-s1.bnbchain.org:8545"]}},blockExplorers:{default:{name:"BscScan",url:"https://testnet.bscscan.com",apiUrl:"https://testnet.bscscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:17422483}},testnet:!0}),ep=(0,C.a)({id:100,name:"Gnosis",nativeCurrency:{decimals:18,name:"Gnosis",symbol:"xDAI"},rpcUrls:{default:{http:["https://rpc.gnosischain.com"],webSocket:["wss://rpc.gnosischain.com/wss"]}},blockExplorers:{default:{name:"Gnosisscan",url:"https://gnosisscan.io",apiUrl:"https://api.gnosisscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:21022491}}}),eh=(0,C.a)({id:109,name:"Shibarium",network:"shibarium",nativeCurrency:{name:"Bone",symbol:"BONE",decimals:18},rpcUrls:{default:{http:["https://rpc.shibrpc.com"]}},blockExplorers:{default:{name:"Blockscout",url:"https://shibariumscan.io"}},contracts:{multicall3:{address:"0x864Bf681ADD6052395188A89101A1B37d3B4C961",blockCreated:265900}}}),ef=(0,C.a)({id:114,name:"Coston2",nativeCurrency:{decimals:18,name:"coston2flare",symbol:"C2FLR"},rpcUrls:{default:{http:["https://coston2-api.flare.network/ext/C/rpc"]}},blockExplorers:{default:{name:"Coston2 Explorer",url:"https://coston2-explorer.flare.network",apiUrl:"https://coston2-explorer.flare.network/api"}},testnet:!0}),em=(0,C.a)({id:122,name:"Fuse",nativeCurrency:{name:"Fuse",symbol:"FUSE",decimals:18},rpcUrls:{default:{http:["https://rpc.fuse.io"]}},blockExplorers:{default:{name:"Fuse Explorer",url:"https://explorer.fuse.io",apiUrl:"https://explorer.fuse.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:16146628}}}),eg=(0,C.a)({id:123,name:"Fuse Sparknet",nativeCurrency:{name:"Spark",symbol:"SPARK",decimals:18},rpcUrls:{default:{http:["https://rpc.fusespark.io"]}},blockExplorers:{default:{name:"Sparkent Explorer",url:"https://explorer.fusespark.io",apiUrl:"https://explorer.fusespark.io/api"}}}),eb=(0,C.a)({id:137,name:"Polygon",nativeCurrency:{name:"MATIC",symbol:"MATIC",decimals:18},rpcUrls:{default:{http:["https://polygon-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://polygonscan.com",apiUrl:"https://api.polygonscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:25770160}}}),ey=(0,C.a)({id:148,name:"Shimmer",network:"shimmer",nativeCurrency:{decimals:18,name:"Shimmer",symbol:"SMR"},rpcUrls:{default:{http:["https://json-rpc.evm.shimmer.network"]}},blockExplorers:{default:{name:"Shimmer Network Explorer",url:"https://explorer.evm.shimmer.network",apiUrl:"https://explorer.evm.shimmer.network/api"}}}),ev=(0,C.a)({id:169,name:"Manta Pacific Mainnet",network:"manta",nativeCurrency:{decimals:18,name:"ETH",symbol:"ETH"},rpcUrls:{default:{http:["https://pacific-rpc.manta.network/http"]}},blockExplorers:{default:{name:"Manta Explorer",url:"https://pacific-explorer.manta.network",apiUrl:"https://pacific-explorer.manta.network/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:332890}}}),ew=(0,C.a)({id:195,name:"X1 Testnet",nativeCurrency:{decimals:18,name:"OKB",symbol:"OKB"},rpcUrls:{default:{http:["https://x1testrpc.okx.com"]}},blockExplorers:{default:{name:"OKLink",url:"https://www.oklink.com/x1-test"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:624344}},testnet:!0}),eC=(0,C.a)({id:199,name:"BitTorrent",network:"bittorrent-chain-mainnet",nativeCurrency:{name:"BitTorrent",symbol:"BTT",decimals:18},rpcUrls:{default:{http:["https://rpc.bittorrentchain.io"]},public:{http:["https://rpc.bittorrentchain.io"]}},blockExplorers:{default:{name:"Bttcscan",url:"https://bttcscan.com",apiUrl:"https://api.bttcscan.com/api"}}}),eE=(0,C.a)({id:204,name:"opBNB",nativeCurrency:{name:"BNB",symbol:"BNB",decimals:18},rpcUrls:{default:{http:["https://opbnb-mainnet-rpc.bnbchain.org"]}},blockExplorers:{default:{name:"opbnbscan",url:"https://mainnet.opbnbscan.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:512881}}}),ex=(0,C.a)({id:240,name:"Nexilix Smart Chain",nativeCurrency:{decimals:18,name:"Nexilix",symbol:"NEXILIX"},rpcUrls:{default:{http:["https://rpcurl.pos.nexilix.com"]}},blockExplorers:{default:{name:"NexilixScan",url:"https://scan.nexilix.com"}},contracts:{multicall3:{address:"0x58381c8e2BF9d0C2C4259cA14BdA9Afe02831244",blockCreated:74448}}}),eA=(0,C.a)({id:242,name:"Plinga",nativeCurrency:{name:"Plinga",symbol:"PLINGA",decimals:18},rpcUrls:{default:{http:["https://rpcurl.mainnet.plgchain.com"]}},blockExplorers:{default:{name:"Plgscan",url:"https://www.plgscan.com"}},contracts:{multicall3:{address:"0x0989576160f2e7092908BB9479631b901060b6e4",blockCreated:204489}}}),ek=(0,C.a)({id:248,name:"Oasys",nativeCurrency:{name:"Oasys",symbol:"OAS",decimals:18},rpcUrls:{default:{http:["https://rpc.mainnet.oasys.games"]}},blockExplorers:{default:{name:"OasysScan",url:"https://scan.oasys.games",apiUrl:"https://scan.oasys.games/api"}}}),eB=(0,C.a)({id:250,name:"Fantom",nativeCurrency:{decimals:18,name:"Fantom",symbol:"FTM"},rpcUrls:{default:{http:["https://rpc.ankr.com/fantom"]}},blockExplorers:{default:{name:"FTMScan",url:"https://ftmscan.com",apiUrl:"https://api.ftmscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:33001987}}}),eS=(0,C.a)({...Q,id:252,name:"Fraxtal",nativeCurrency:{name:"Frax Ether",symbol:"frxETH",decimals:18},rpcUrls:{default:{http:["https://rpc.frax.com"]}},blockExplorers:{default:{name:"fraxscan",url:"https://fraxscan.com",apiUrl:"https://api.fraxscan.com/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0x66CC916Ed5C6C2FA97014f7D1cD141528Ae171e4"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11"},portal:{1:{address:"0x36cb65c1967A0Fb0EEE11569C51C2f2aA1Ca6f6D",blockCreated:19135323}},l1StandardBridge:{1:{address:"0x34C0bD5877A5Ee7099D0f5688D65F4bB9158BDE2",blockCreated:19135323}}},sourceId:1}),eI=(0,C.a)({id:255,name:"Kroma",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://api.kroma.network"]}},blockExplorers:{default:{name:"Kroma Explorer",url:"https://blockscout.kroma.network",apiUrl:"https://blockscout.kroma.network/api"}},testnet:!1}),ej=(0,C.a)({id:260,name:"zkSync InMemory Node",network:"zksync-in-memory-node",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["http://localhost:8011"]}},testnet:!0}),eT=(0,C.a)({id:270,name:"zkSync CLI Local Node",network:"zksync-cli-local-node",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["http://localhost:3050"]}},testnet:!0}),eP=(0,C.a)({id:288,name:"Boba Network",nativeCurrency:{decimals:18,name:"Boba",symbol:"BOBA"},rpcUrls:{default:{http:["https://mainnet.boba.network"]}},blockExplorers:{default:{name:"BOBAScan",url:"https://bobascan.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:446859}}}),eM=(0,C.a)({id:295,name:"Hedera Mainnet",network:"hedera-mainnet",nativeCurrency:{symbol:"HBAR",name:"HBAR",decimals:18},rpcUrls:{default:{http:["https://mainnet.hashio.io/api"]}},blockExplorers:{default:{name:"Hashscan",url:"https://hashscan.io/mainnet"}},testnet:!1}),eO=(0,C.a)({id:296,name:"Hedera Testnet",network:"hedera-testnet",nativeCurrency:{symbol:"HBAR",name:"HBAR",decimals:18},rpcUrls:{default:{http:["https://testnet.hashio.io/api"]}},blockExplorers:{default:{name:"Hashscan",url:"https://hashscan.io/testnet"}},testnet:!0}),eR=(0,C.a)({id:297,name:"Hedera Previewnet",network:"hedera-previewnet",nativeCurrency:{symbol:"HBAR",name:"HBAR",decimals:18},rpcUrls:{default:{http:["https://previewnet.hashio.io/api"]}},blockExplorers:{default:{name:"Hashscan",url:"https://hashscan.io/previewnet"}},testnet:!0});var eU=n(53992),eF=n(74688);let eN={block:(0,B.G)({format(e){let t=e.transactions?.map(e=>{if("string"==typeof e)return e;let t=eN.transaction?.format(e);return"0x71"===t.typeHex?t.type="eip712":"0xff"===t.typeHex&&(t.type="priority"),t});return{l1BatchNumber:e.l1BatchNumber?(0,k.y_)(e.l1BatchNumber):null,l1BatchTimestamp:e.l1BatchTimestamp?(0,k.y_)(e.l1BatchTimestamp):null,transactions:t}}}),transaction:(0,S.y_)({format(e){let t={};return"0x71"===e.type?t.type="eip712":"0xff"===e.type&&(t.type="priority"),{...t,l1BatchNumber:e.l1BatchNumber?(0,k.y_)(e.l1BatchNumber):null,l1BatchTxIndex:e.l1BatchTxIndex?(0,k.y_)(e.l1BatchTxIndex):null}}}),transactionReceipt:(0,I.d)({format:e=>({l1BatchNumber:e.l1BatchNumber?(0,k.y_)(e.l1BatchNumber):null,l1BatchTxIndex:e.l1BatchTxIndex?(0,k.y_)(e.l1BatchTxIndex):null,logs:e.logs.map(e=>({...(0,eU.U)(e),l1BatchNumber:e.l1BatchNumber?(0,k.y_)(e.l1BatchNumber):null,transactionLogIndex:(0,k.ly)(e.transactionLogIndex),logType:e.logType})),l2ToL1Logs:e.l2ToL1Logs.map(e=>({blockNumber:(0,k.y_)(e.blockHash),blockHash:e.blockHash,l1BatchNumber:(0,k.y_)(e.l1BatchNumber),transactionIndex:(0,k.y_)(e.transactionIndex),shardId:(0,k.y_)(e.shardId),isService:e.isService,sender:e.sender,key:e.key,value:e.value,transactionHash:e.transactionHash,logIndex:(0,k.y_)(e.logIndex)}))})}),transactionRequest:(0,eF.iy)({exclude:["customSignature","factoryDeps","gasPerPubdata","paymaster","paymasterInput"],format:e=>e.gasPerPubdata||e.paymaster&&e.paymasterInput||e.factoryDeps||e.customSignature?{eip712Meta:{...e.gasPerPubdata?{gasPerPubdata:(0,O.NC)(e.gasPerPubdata)}:{},...e.paymaster&&e.paymasterInput?{paymasterParams:{paymaster:e.paymaster,paymasterInput:Array.from((0,F.nr)(e.paymasterInput))}}:{},...e.factoryDeps?{factoryDeps:e.factoryDeps}:{},...e.customSignature?{customSignature:Array.from((0,F.nr)(e.customSignature))}:{}},type:"0x71"}:{}})};let InvalidEip712TransactionError=class InvalidEip712TransactionError extends R.G{constructor(){super('Transaction is not an EIP712 transaction.\n\nTransaction must:\n - include `type: "eip712"`\n - include one of the following: `customSignature`, `paymaster`, `paymasterInput`, `gasPerPubdata`, `factoryDeps`'),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidEip712TransactionError"})}};function isEIP712Transaction(e){return"eip712"===e.type||"customSignature"in e&&!!e.customSignature||"paymaster"in e&&!!e.paymaster||"paymasterInput"in e&&!!e.paymasterInput||"gasPerPubdata"in e&&"bigint"==typeof e.gasPerPubdata||"factoryDeps"in e&&!!e.factoryDeps}function assertEip712Transaction(e){let{chainId:t,to:n,from:o,paymaster:i,paymasterInput:s}=e;if(!isEIP712Transaction(e))throw new InvalidEip712TransactionError;if(!t||t<=0)throw new q.hJ({chainId:t});if(n&&!(0,P.U)(n))throw new T.b({address:n});if(o&&!(0,P.U)(o))throw new T.b({address:o});if(i&&!(0,P.U)(i))throw new T.b({address:i});if(i&&!s)throw new R.G("`paymasterInput` must be provided when `paymaster` is defined");if(!i&&s)throw new R.G("`paymaster` must be provided when `paymasterInput` is defined")}let eD={formatters:eN,serializers:{transaction:function(e,t){return isEIP712Transaction(e)?function(e){let{chainId:t,gas:n,nonce:o,to:i,from:s,value:l,maxFeePerGas:c,maxPriorityFeePerGas:u,customSignature:d,factoryDeps:p,paymaster:f,paymasterInput:m,gasPerPubdata:g,data:b}=e;assertEip712Transaction(e);let y=[o?(0,O.NC)(o):"0x",u?(0,O.NC)(u):"0x",c?(0,O.NC)(c):"0x",n?(0,O.NC)(n):"0x",i??"0x",l?(0,O.NC)(l):"0x",b??"0x0",(0,O.NC)(t),(0,O.NC)(""),(0,O.NC)(""),(0,O.NC)(t),s??"0x",g?(0,O.NC)(g):"0x",p??[],d??"0x",f&&m?[f,m]:[]];return(0,M.SM)(["0x71",toRlp(y)])}(e):serializeTransaction(e,t)}},custom:{getEip712Domain:e=>{assertEip712Transaction(e);let t=function(e){let{gas:t,nonce:n,to:o,from:i,value:s,maxFeePerGas:l,maxPriorityFeePerGas:c,factoryDeps:u,paymaster:d,paymasterInput:p,gasPerPubdata:f,data:m}=e;return{txType:113n,from:BigInt(i),to:o?BigInt(o):0n,gasLimit:t??0n,gasPerPubdataByteLimit:f??0n,maxFeePerGas:l??0n,maxPriorityFeePerGas:c??0n,paymaster:d?BigInt(d):0n,nonce:n?BigInt(n):0n,value:s??0n,data:m||"0x0",factoryDeps:u??[],paymasterInput:p||"0x0"}}(e);return{domain:{name:"zkSync",version:"2",chainId:e.chainId},types:{Transaction:[{name:"txType",type:"uint256"},{name:"from",type:"uint256"},{name:"to",type:"uint256"},{name:"gasLimit",type:"uint256"},{name:"gasPerPubdataByteLimit",type:"uint256"},{name:"maxFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"paymaster",type:"uint256"},{name:"nonce",type:"uint256"},{name:"value",type:"uint256"},{name:"data",type:"bytes"},{name:"factoryDeps",type:"bytes32[]"},{name:"paymasterInput",type:"bytes"}]},primaryType:"Transaction",message:t}}}},e_=(0,C.a)({...eD,id:300,name:"zkSync Sepolia Testnet",network:"zksync-sepolia-testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.era.zksync.dev"],webSocket:["wss://sepolia.era.zksync.dev/ws"]}},blockExplorers:{default:{name:"zkExplorer",url:"https://sepolia.explorer.zksync.io/"}},contracts:{multicall3:{address:"0xF9cda624FBC7e059355ce98a31693d299FACd963"}},testnet:!0}),eL=(0,C.a)({id:314,name:"Filecoin Mainnet",nativeCurrency:{decimals:18,name:"filecoin",symbol:"FIL"},rpcUrls:{default:{http:["https://api.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filfox",url:"https://filfox.info/en"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3328594}}}),ez=(0,C.a)({id:321,name:"KCC Mainnet",network:"KCC Mainnet",nativeCurrency:{decimals:18,name:"KCS",symbol:"KCS"},rpcUrls:{default:{http:["https://kcc-rpc.com"]},public:{http:["https://kcc-rpc.com"]}},blockExplorers:{default:{name:"KCC Explorer",url:"https://explorer.kcc.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:11760430}},testnet:!1}),eq=(0,C.a)({...eD,id:324,name:"zkSync Era",network:"zksync-era",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://mainnet.era.zksync.io"],webSocket:["wss://mainnet.era.zksync.io/ws"]}},blockExplorers:{default:{name:"Etherscan",url:"https://era.zksync.network/",apiUrl:"https://api-era.zksync.network/api"}},contracts:{multicall3:{address:"0xF9cda624FBC7e059355ce98a31693d299FACd963"}}}),eG=(0,C.a)({id:338,name:"Cronos Testnet",nativeCurrency:{decimals:18,name:"CRO",symbol:"tCRO"},rpcUrls:{default:{http:["https://evm-t3.cronos.org"]}},blockExplorers:{default:{name:"Cronos Explorer",url:"https://cronos.org/explorer/testnet3"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:10191251}},testnet:!0}),eW=(0,C.a)({id:369,name:"PulseChain",nativeCurrency:{name:"Pulse",symbol:"PLS",decimals:18},testnet:!1,rpcUrls:{default:{http:["https://rpc.pulsechain.com"],webSocket:["wss://ws.pulsechain.com"]}},blockExplorers:{default:{name:"PulseScan",url:"https://scan.pulsechain.com",apiUrl:"https://api.scan.pulsechain.com/api"}},contracts:{ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14353601}}}),eH=(0,C.a)({...Q,id:420,name:"Optimism Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://goerli.optimism.io"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli-optimism.etherscan.io",apiUrl:"https://goerli-optimism.etherscan.io/api"}},contracts:{...Q.contracts,l2OutputOracle:{5:{address:"0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:49461},portal:{5:{address:"0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383"}},l1StandardBridge:{5:{address:"0x636Af16bf2f682dD3109e60102b8E1A089FedAa8"}}},testnet:!0,sourceId:5}),eQ=(0,C.a)({id:424,network:"pgn",name:"PGN",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.publicgoods.network"]}},blockExplorers:{default:{name:"PGN Explorer",url:"https://explorer.publicgoods.network",apiUrl:"https://explorer.publicgoods.network/api"},blocksout:{name:"PGN Explorer",url:"https://explorer.publicgoods.network",apiUrl:"https://explorer.publicgoods.network/api"}},contracts:{l2OutputOracle:{1:{address:"0x9E6204F750cD866b299594e2aC9eA824E2e5f95c"}},multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3380209},portal:{1:{address:"0xb26Fd985c5959bBB382BAFdD0b879E149e48116c"}},l1StandardBridge:{1:{address:"0xD0204B9527C1bA7bD765Fa5CCD9355d38338272b"}}},formatters:j,sourceId:1}),eK=(0,C.a)({id:570,name:"Rollux Mainnet",nativeCurrency:{decimals:18,name:"Syscoin",symbol:"SYS"},rpcUrls:{default:{http:["https://rpc.rollux.com"],webSocket:["wss://rpc.rollux.com/wss"]}},blockExplorers:{default:{name:"RolluxExplorer",url:"https://explorer.rollux.com",apiUrl:"https://explorer.rollux.com/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:119222}}}),eV=(0,C.a)({id:571,name:"MetaChain Mainnet",nativeCurrency:{name:"Metatime Coin",symbol:"MTC",decimals:18},rpcUrls:{default:{http:["https://rpc.metatime.com"]}},blockExplorers:{default:{name:"MetaExplorer",url:"https://explorer.metatime.com"}},contracts:{multicall3:{address:"0x0000000000000000000000000000000000003001",blockCreated:0}}}),eZ=(0,C.a)({id:592,name:"Astar",network:"astar-mainnet",nativeCurrency:{name:"Astar",symbol:"ASTR",decimals:18},rpcUrls:{default:{http:["https://astar.api.onfinality.io/public"]}},blockExplorers:{default:{name:"Astar Subscan",url:"https://astar.subscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:761794}},testnet:!1}),eJ=(0,C.a)({id:595,name:"Mandala TC9",network:"mandala",nativeCurrency:{name:"Mandala",symbol:"mACA",decimals:18},rpcUrls:{public:{http:["https://eth-rpc-tc9.aca-staging.network"],webSocket:["wss://eth-rpc-tc9.aca-staging.network"]},default:{http:["https://eth-rpc-tc9.aca-staging.network"],webSocket:["wss://eth-rpc-tc9.aca-staging.network"]}},blockExplorers:{default:{name:"Mandala Blockscout",url:"https://blockscout.mandala.aca-staging.network",apiUrl:"https://blockscout.mandala.aca-staging.network/api"}},testnet:!0}),eX=(0,C.a)({id:599,name:"Metis Goerli",nativeCurrency:{decimals:18,name:"Metis Goerli",symbol:"METIS"},rpcUrls:{default:{http:["https://goerli.gateway.metisdevops.link"]}},blockExplorers:{default:{name:"Metis Goerli Explorer",url:"https://goerli.explorer.metisdevops.link",apiUrl:"https://goerli.explorer.metisdevops.link/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1006207}}}),eY=(0,C.a)({id:646,name:"FlowEVM Previewnet",nativeCurrency:{decimals:18,name:"Flow",symbol:"FLOW"},rpcUrls:{default:{http:["https://previewnet.evm.nodes.onflow.org"]}},blockExplorers:{default:{name:"Previewnet Explorer",url:"https://previewnet.flowdiver.io"}}}),e$=(0,C.a)({id:686,name:"Karura",network:"karura",nativeCurrency:{name:"Karura",symbol:"KAR",decimals:18},rpcUrls:{public:{http:["https://eth-rpc-karura.aca-api.network"],webSocket:["wss://eth-rpc-karura.aca-api.network"]},default:{http:["https://eth-rpc-karura.aca-api.network"],webSocket:["wss://eth-rpc-karura.aca-api.network"]}},blockExplorers:{default:{name:"Karura Blockscout",url:"https://blockscout.karura.network",apiUrl:"https://blockscout.karura.network/api"}},testnet:!1}),e0=(0,C.a)({id:747,name:"FlowEVM Mainnet",nativeCurrency:{decimals:18,name:"Flow",symbol:"FLOW"},rpcUrls:{default:{http:["https://mainnet.evm.nodes.onflow.org"]}},blockExplorers:{default:{name:"Mainnet Explorer",url:"https://flowdiver.io"}}}),e1=(0,C.a)({id:787,name:"Acala",network:"acala",nativeCurrency:{name:"Acala",symbol:"ACA",decimals:18},rpcUrls:{public:{http:["https://eth-rpc-acala.aca-api.network"],webSocket:["wss://eth-rpc-acala.aca-api.network"]},default:{http:["https://eth-rpc-acala.aca-api.network"],webSocket:["wss://eth-rpc-acala.aca-api.network"]}},blockExplorers:{default:{name:"Acala Blockscout",url:"https://blockscout.acala.network",apiUrl:"https://blockscout.acala.network/api"}},testnet:!1}),e6=(0,C.a)({id:841,name:"Taraxa Mainnet",nativeCurrency:{name:"Tara",symbol:"TARA",decimals:18},rpcUrls:{default:{http:["https://rpc.mainnet.taraxa.io"]}},blockExplorers:{default:{name:"Taraxa Explorer",url:"https://explorer.mainnet.taraxa.io"}}}),e3=(0,C.a)({id:842,name:"Taraxa Testnet",nativeCurrency:{name:"Tara",symbol:"TARA",decimals:18},rpcUrls:{default:{http:["https://rpc.testnet.taraxa.io"]}},blockExplorers:{default:{name:"Taraxa Explorer",url:"https://explorer.testnet.taraxa.io"}},testnet:!0}),e2=(0,C.a)({id:888,name:"Wanchain",nativeCurrency:{name:"WANCHAIN",symbol:"WAN",decimals:18},rpcUrls:{default:{http:["https://gwan-ssl.wandevs.org:56891","https://gwan2-ssl.wandevs.org"]}},blockExplorers:{default:{name:"WanScan",url:"https://wanscan.org"}},contracts:{multicall3:{address:"0xcDF6A1566e78EB4594c86Fe73Fcdc82429e97fbB",blockCreated:25312390}}}),e7=(0,C.a)({id:919,name:"Mode Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.mode.network"]}},blockExplorers:{default:{name:"Blockscout",url:"https://sepolia.explorer.mode.network",apiUrl:"https://sepolia.explorer.mode.network/api"}},contracts:{multicall3:{address:"0xBAba8373113Fb7a68f195deF18732e01aF8eDfCF",blockCreated:3019007}},testnet:!0}),e8=(0,C.a)({id:943,name:"PulseChain V4",testnet:!0,nativeCurrency:{name:"V4 Pulse",symbol:"v4PLS",decimals:18},rpcUrls:{default:{http:["https://rpc.v4.testnet.pulsechain.com"],webSocket:["wss://ws.v4.testnet.pulsechain.com"]}},blockExplorers:{default:{name:"PulseScan",url:"https://scan.v4.testnet.pulsechain.com",apiUrl:"https://scan.v4.testnet.pulsechain.com/api"}},contracts:{ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14353601}}}),e5=(0,C.a)({id:997,name:"5ireChain Thunder Testnet",nativeCurrency:{name:"5ire Token",symbol:"5IRE",decimals:18},rpcUrls:{default:{http:["https://rpc-testnet.5ire.network"]}},blockExplorers:{default:{name:"5ireChain Explorer",url:"https://explorer.5ire.network"}},testnet:!0}),e4=(0,C.a)({id:999,name:"Wanchain Testnet",nativeCurrency:{name:"WANCHAIN",symbol:"WANt",decimals:18},rpcUrls:{default:{http:["https://gwan-ssl.wandevs.org:46891"]}},blockExplorers:{default:{name:"WanScanTest",url:"https://wanscan.org"}},contracts:{multicall3:{address:"0x11c89bF4496c39FB80535Ffb4c92715839CC5324",blockCreated:24743448}},testnet:!0}),e9=(0,C.a)({...Q,id:999,name:"Zora Goerli Testnet",nativeCurrency:{decimals:18,name:"Zora Goerli",symbol:"ETH"},rpcUrls:{default:{http:["https://testnet.rpc.zora.energy"],webSocket:["wss://testnet.rpc.zora.energy"]}},blockExplorers:{default:{name:"Explorer",url:"https://testnet.explorer.zora.energy",apiUrl:"https://testnet.explorer.zora.energy/api"}},contracts:{...Q.contracts,multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:189123},portal:{5:{address:"0xDb9F51790365e7dc196e7D072728df39Be958ACe"}}},sourceId:5,testnet:!0}),te=(0,C.a)({id:1001,name:"Klaytn Baobab Testnet",network:"klaytn-baobab",nativeCurrency:{decimals:18,name:"Baobab Klaytn",symbol:"KLAY"},rpcUrls:{default:{http:["https://public-en-baobab.klaytn.net"]}},blockExplorers:{default:{name:"KlaytnScope",url:"https://baobab.klaytnscope.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:123390593}},testnet:!0}),tt=(0,C.a)({id:1004,name:"Ekta Testnet",nativeCurrency:{decimals:18,name:"EKTA",symbol:"EKTA"},rpcUrls:{default:{http:["https://test.ekta.io:8545"]}},blockExplorers:{default:{name:"Test Ektascan",url:"https://test.ektascan.io",apiUrl:"https://test.ektascan.io/api"}},testnet:!0}),tr=(0,C.a)({id:1017,name:"BNB Greenfield Chain",nativeCurrency:{decimals:18,name:"BNB",symbol:"BNB"},rpcUrls:{default:{http:["https://greenfield-chain.bnbchain.org"]}},blockExplorers:{default:{name:"BNB Greenfield Mainnet Scan",url:"https://greenfieldscan.com"}},testnet:!1}),tn=(0,C.a)({id:1028,name:"BitTorrent Chain Testnet",network:"bittorrent-chain-testnet",nativeCurrency:{name:"BitTorrent",symbol:"BTT",decimals:18},rpcUrls:{default:{http:["https://testrpc.bittorrentchain.io"]},public:{http:["https://testrpc.bittorrentchain.io"]}},blockExplorers:{default:{name:"Bttcscan",url:"https://testnet.bttcscan.com",apiUrl:"https://testnet.bttcscan.com/api"}},testnet:!0}),ta=(0,C.a)({id:1030,name:"Conflux eSpace",nativeCurrency:{name:"Conflux",symbol:"CFX",decimals:18},rpcUrls:{default:{http:["https://evm.confluxrpc.org"],webSocket:["wss://evm.confluxrpc.org/ws"]}},blockExplorers:{default:{name:"ConfluxScan",url:"https://evm.confluxscan.io"}},contracts:{multicall3:{address:"0xEFf0078910f638cd81996cc117bccD3eDf2B072F",blockCreated:68602935}}}),to=(0,C.a)({id:1038,name:"Bronos Testnet",nativeCurrency:{decimals:18,name:"Bronos Coin",symbol:"tBRO"},rpcUrls:{default:{http:["https://evm-testnet.bronos.org"]}},blockExplorers:{default:{name:"BronoScan",url:"https://tbroscan.bronos.org"}},testnet:!0}),ti=(0,C.a)({id:1039,name:"Bronos",nativeCurrency:{decimals:18,name:"BRO",symbol:"BRO"},rpcUrls:{default:{http:["https://evm.bronos.org"]}},blockExplorers:{default:{name:"BronoScan",url:"https://broscan.bronos.org"}}}),ts=(0,C.a)({id:1073,name:"Shimmer Testnet",network:"shimmer-testnet",nativeCurrency:{decimals:18,name:"Shimmer",symbol:"SMR"},rpcUrls:{default:{http:["https://json-rpc.evm.testnet.shimmer.network"]}},blockExplorers:{default:{name:"Shimmer Network Explorer",url:"https://explorer.evm.testnet.shimmer.network",apiUrl:"https://explorer.evm.testnet.shimmer.network/api"}},testnet:!0}),tl=(0,C.a)({id:1088,name:"Metis",nativeCurrency:{decimals:18,name:"Metis",symbol:"METIS"},rpcUrls:{default:{http:["https://andromeda.metis.io/?owner=1088"]}},blockExplorers:{default:{name:"Andromeda Explorer",url:"https://andromeda-explorer.metis.io",apiUrl:"https://andromeda-explorer.metis.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:2338552}}}),tc=(0,C.a)({id:1101,name:"Polygon zkEVM",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://zkevm-rpc.com"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://zkevm.polygonscan.com",apiUrl:"https://api-zkevm.polygonscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:57746}}}),tu=(0,C.a)({id:1111,name:"WEMIX",network:"wemix-mainnet",nativeCurrency:{name:"WEMIX",symbol:"WEMIX",decimals:18},rpcUrls:{default:{http:["https://api.wemix.com"]},public:{http:["https://api.wemix.com"]}},blockExplorers:{default:{name:"wemixExplorer",url:"https://explorer.wemix.com"}}}),td=(0,C.a)({id:1112,name:"WEMIX Testnet",network:"wemix-testnet",nativeCurrency:{name:"WEMIX",symbol:"tWEMIX",decimals:18},rpcUrls:{default:{http:["https://api.test.wemix.com"]},public:{http:["https://api.test.wemix.com"]}},blockExplorers:{default:{name:"wemixExplorer",url:"https://testnet.wemixscan.com",apiUrl:"https://testnet.wemixscan.com/api"}},testnet:!0}),tp=(0,C.a)({id:1116,name:"Core Dao",nativeCurrency:{decimals:18,name:"Core",symbol:"CORE"},rpcUrls:{default:{http:["https://rpc.coredao.org"]}},blockExplorers:{default:{name:"CoreDao",url:"https://scan.coredao.org"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:11907934}},testnet:!1}),th=(0,C.a)({id:1130,network:"defichain-evm",name:"DeFiChain EVM Mainnet",nativeCurrency:{name:"DeFiChain",symbol:"DFI",decimals:8},rpcUrls:{default:{http:["https://eth.mainnet.ocean.jellyfishsdk.com"]},public:{http:["https://eth.mainnet.ocean.jellyfishsdk.com"]}},blockExplorers:{default:{name:"DeFiScan",url:"https://meta.defiscan.live"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:137852}}}),tf=(0,C.a)({id:1131,network:"defichain-evm-testnet",name:"DeFiChain EVM Testnet",nativeCurrency:{name:"DeFiChain",symbol:"DFI",decimals:8},rpcUrls:{default:{http:["https://eth.testnet.ocean.jellyfishsdk.com"]},public:{http:["https://eth.testnet.ocean.jellyfishsdk.com"]}},blockExplorers:{default:{name:"DeFiScan",url:"https://meta.defiscan.live/?network=TestNet"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:156462}},testnet:!0}),tm=(0,C.a)({id:1281,name:"Moonbeam Development Node",nativeCurrency:{decimals:18,name:"DEV",symbol:"DEV"},rpcUrls:{default:{http:["http://127.0.0.1:9944"],webSocket:["wss://127.0.0.1:9944"]}}}),tg=(0,C.a)({id:1284,name:"Moonbeam",nativeCurrency:{decimals:18,name:"GLMR",symbol:"GLMR"},rpcUrls:{default:{http:["https://moonbeam.public.blastapi.io"],webSocket:["wss://moonbeam.public.blastapi.io"]}},blockExplorers:{default:{name:"Moonscan",url:"https://moonscan.io",apiUrl:"https://api-moonbeam.moonscan.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:609002}},testnet:!1}),tb=(0,C.a)({id:1285,name:"Moonriver",nativeCurrency:{decimals:18,name:"MOVR",symbol:"MOVR"},rpcUrls:{default:{http:["https://moonriver.public.blastapi.io"],webSocket:["wss://moonriver.public.blastapi.io"]}},blockExplorers:{default:{name:"Moonscan",url:"https://moonriver.moonscan.io",apiUrl:"https://api-moonriver.moonscan.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:1597904}},testnet:!1}),ty=(0,C.a)({id:1287,name:"Moonbase Alpha",nativeCurrency:{decimals:18,name:"DEV",symbol:"DEV"},rpcUrls:{default:{http:["https://rpc.api.moonbase.moonbeam.network"],webSocket:["wss://wss.api.moonbase.moonbeam.network"]}},blockExplorers:{default:{name:"Moonscan",url:"https://moonbase.moonscan.io",apiUrl:"https://moonbase.moonscan.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:1850686}},testnet:!0}),tv=(0,C.a)({id:1337,name:"Localhost",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["http://127.0.0.1:8545"]}}}),tw=(0,C.a)({id:1442,name:"Polygon zkEVM Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.public.zkevm-test.net"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://testnet-zkevm.polygonscan.com",apiUrl:"https://testnet-zkevm.polygonscan.com/api"}},testnet:!0,contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:525686}}}),tC=(0,C.a)({id:1453,name:"MetaChain Istanbul",nativeCurrency:{name:"Metatime Coin",symbol:"MTC",decimals:18},rpcUrls:{default:{http:["https://istanbul-rpc.metachain.dev"]}},blockExplorers:{default:{name:"MetaExplorer",url:"https://istanbul-explorer.metachain.dev"}},contracts:{multicall3:{address:"0x0000000000000000000000000000000000003001",blockCreated:0}},testnet:!0}),tE=(0,C.a)({id:1559,name:"Tenet",network:"tenet-mainnet",nativeCurrency:{name:"TENET",symbol:"TENET",decimals:18},rpcUrls:{default:{http:["https://rpc.tenet.org"]}},blockExplorers:{default:{name:"TenetScan Mainnet",url:"https://tenetscan.io",apiUrl:"https://tenetscan.io/api"}},testnet:!1}),tx=(0,C.a)({id:1663,name:"Horizen Gobi Testnet",nativeCurrency:{decimals:18,name:"Test ZEN",symbol:"tZEN"},rpcUrls:{default:{http:["https://gobi-testnet.horizenlabs.io/ethv1"]}},blockExplorers:{default:{name:"Gobi Explorer",url:"https://gobi-explorer.horizen.io"}},contracts:{},testnet:!0}),tA=(0,C.a)({id:1686,name:"Mint Sepolia Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://testnet-rpc.mintchain.io"]}},blockExplorers:{default:{name:"Mintchain Testnet explorer",url:"https://testnet-explorer.mintchain.io"}},testnet:!0}),tk=(0,C.a)({id:1890,name:"LightLink Phoenix Mainnet",network:"lightlink-phoenix",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://replicator.phoenix.lightlink.io/rpc/v1"]}},blockExplorers:{default:{name:"LightLink Phoenix Explorer",url:"https://phoenix.lightlink.io"}},testnet:!1}),tB=(0,C.a)({id:1891,name:"LightLink Pegasus Testnet",network:"lightlink-pegasus",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://replicator.pegasus.lightlink.io/rpc/v1"]}},blockExplorers:{default:{name:"LightLink Pegasus Explorer",url:"https://pegasus.lightlink.io"}},testnet:!0}),tS=(0,C.a)({id:1994,name:"Ekta",nativeCurrency:{decimals:18,name:"EKTA",symbol:"EKTA"},rpcUrls:{default:{http:["https://main.ekta.io"]}},blockExplorers:{default:{name:"Ektascan",url:"https://ektascan.io",apiUrl:"https://ektascan.io/api"}}}),tI=(0,C.a)({id:2e3,name:"Dogechain",nativeCurrency:{decimals:18,name:"Dogechain",symbol:"DC"},rpcUrls:{default:{http:["https://rpc.dogechain.dog"]}},blockExplorers:{default:{name:"DogeChainExplorer",url:"https://explorer.dogechain.dog",apiUrl:"https://explorer.dogechain.dog/api"}}}),tj=(0,C.a)({id:2020,name:"Ronin",nativeCurrency:{name:"RON",symbol:"RON",decimals:18},rpcUrls:{default:{http:["https://api.roninchain.com/rpc"]}},blockExplorers:{default:{name:"Ronin Explorer",url:"https://app.roninchain.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:26023535}}}),tT=(0,C.a)({id:2021,name:"Edgeware EdgeEVM Mainnet",nativeCurrency:{decimals:18,name:"Edgeware",symbol:"EDG"},rpcUrls:{default:{http:["https://edgeware-evm.jelliedowl.net"]}},blockExplorers:{default:{name:"Edgscan by Bharathcoorg",url:"https://edgscan.live",apiUrl:"https://edgscan.live/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:18117872}}}),tP=(0,C.a)({id:2021,name:"Saigon Testnet",nativeCurrency:{name:"RON",symbol:"RON",decimals:18},rpcUrls:{default:{http:["https://saigon-testnet.roninchain.com/rpc"]}},blockExplorers:{default:{name:"Saigon Explorer",url:"https://saigon-app.roninchain.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:18736871}},testnet:!0}),tM=(0,C.a)({id:2022,name:"Beresheet BereEVM Testnet",nativeCurrency:{decimals:18,name:"Testnet EDG",symbol:"tEDG"},rpcUrls:{default:{http:["https://beresheet-evm.jelliedowl.net"]}},blockExplorers:{default:{name:"Edgscan by Bharathcoorg",url:"https://testnet.edgscan.live",apiUrl:"https://testnet.edgscan.live/api"}}}),tO=(0,C.a)({id:2221,name:"Kava EVM Testnet",network:"kava-testnet",nativeCurrency:{name:"Kava",symbol:"KAVA",decimals:18},rpcUrls:{default:{http:["https://evm.testnet.kava.io"]}},blockExplorers:{default:{name:"Kava EVM Testnet Explorer",url:"https://testnet.kavascan.com/",apiUrl:"https://testnet.kavascan.com/api"}},contracts:{multicall3:{address:"0xDf1D724A7166261eEB015418fe8c7679BBEa7fd6",blockCreated:7242179}},testnet:!0}),tR=(0,C.a)({id:2222,name:"Kava EVM",network:"kava-mainnet",nativeCurrency:{name:"Kava",symbol:"KAVA",decimals:18},rpcUrls:{default:{http:["https://evm.kava.io"]}},blockExplorers:{default:{name:"Kava EVM Explorer",url:"https://kavascan.com",apiUrl:"https://kavascan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:3661165}},testnet:!1}),tU=(0,C.a)({...Q,id:2331,name:"RSS3 VSL Sepolia Testnet",nativeCurrency:{name:"RSS3",symbol:"RSS3",decimals:18},rpcUrls:{default:{http:["https://rpc.testnet.rss3.io"]}},blockExplorers:{default:{name:"RSS3 VSL Sepolia Testnet Scan",url:"https://scan.testnet.rss3.io",apiUrl:"https://scan.testnet.rss3.io/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0xDb5c46C3Eaa6Ed6aE8b2379785DF7dd029C0dC81"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:55697},portal:{11155111:{address:"0xcBD77E8E1E7F06B25baDe67142cdE82652Da7b57",blockCreated:5345035}},l1StandardBridge:{11155111:{address:"0xdDD29bb63B0839FB1cE0eE439Ff027738595D07B"}}},testnet:!0,sourceId:11155111}),tF=(0,C.a)({id:2358,name:"Kroma Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://api.sepolia.kroma.network"]}},blockExplorers:{default:{name:"Kroma Sepolia Explorer",url:"https://blockscout.sepolia.kroma.network",apiUrl:"https://blockscout.sepolia.kroma.network/api"}},testnet:!0}),tN=(0,C.a)({...Q,id:2522,name:"Fraxtal Testnet",nativeCurrency:{name:"Frax Ether",symbol:"frxETH",decimals:18},rpcUrls:{default:{http:["https://rpc.testnet.frax.com"]}},blockExplorers:{default:{name:"fraxscan testnet",url:"https://holesky.fraxscan.com",apiUrl:"https://api-holesky.fraxscan.com/api"}},contracts:{...Q.contracts,l2OutputOracle:{17e3:{address:"0x715EA64DA13F4d0831ece4Ad3E8c1aa013167F32"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11"},portal:{17e3:{address:"0xB9c64BfA498d5b9a8398Ed6f46eb76d90dE5505d",blockCreated:318416}},l1StandardBridge:{17e3:{address:"0x0BaafC217162f64930909aD9f2B27125121d6332",blockCreated:318416}}},sourceId:17e3}),tD=(0,C.a)({id:2710,name:"Morph Sepolia",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc-testnet.morphl2.io"]}},blockExplorers:{default:{name:"Morph Testnet Explorer",url:"https://explorer-testnet.morphl2.io",apiUrl:"https://explorer-api-testnet.morphl2.io/api"}},testnet:!0}),t_=(0,C.a)({id:3141,name:"Filecoin Hyperspace",nativeCurrency:{decimals:18,name:"testnet filecoin",symbol:"tFIL"},rpcUrls:{default:{http:["https://api.hyperspace.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filfox",url:"https://hyperspace.filfox.info/en"}}}),tL=(0,C.a)({id:3737,name:"Crossbell",nativeCurrency:{decimals:18,name:"CSB",symbol:"CSB"},rpcUrls:{default:{http:["https://rpc.crossbell.io"]}},blockExplorers:{default:{name:"CrossScan",url:"https://scan.crossbell.io",apiUrl:"https://scan.crossbell.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:38246031}}}),tz=(0,C.a)({id:3776,name:"Astar zkEVM",network:"AstarZkEVM",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.startale.com/astar-zkevm"]}},blockExplorers:{default:{name:"Astar zkEVM Explorer",url:"https://astar-zkevm.explorer.startale.com"}},contracts:{multicall3:{address:"0x36eabf148272BA81A5225C6a3637972F0EE17771",blockCreated:93528}},testnet:!1}),tq=(0,C.a)({id:3993,name:"APEX Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc-testnet.apexlayer.xyz"]}},blockExplorers:{default:{name:"Blockscout",url:"https://exp-testnet.apexlayer.xyz",apiUrl:"https://exp-testnet.apexlayer.xyz/api"}},contracts:{multicall3:{address:"0xf7642be33a6b18D16a995657adb5a68CD0438aE2",blockCreated:283775}},testnet:!0}),tG=(0,C.a)({id:4002,name:"Fantom Testnet",nativeCurrency:{decimals:18,name:"Fantom",symbol:"FTM"},rpcUrls:{default:{http:["https://rpc.testnet.fantom.network"]}},blockExplorers:{default:{name:"FTMScan",url:"https://testnet.ftmscan.com",apiUrl:"https://testnet.ftmscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:8328688}}}),tW=(0,C.a)({id:4090,network:"oasis-testnet",name:"Oasis Testnet",nativeCurrency:{name:"Fasttoken",symbol:"FTN",decimals:18},rpcUrls:{default:{http:["https://rpc1.oasis.bahamutchain.com"]},public:{http:["https://rpc1.oasis.bahamutchain.com"]}},blockExplorers:{default:{name:"Ftnscan",url:"https://oasis.ftnscan.com",apiUrl:"https://oasis.ftnscan.com/api"}},testnet:!0}),tH=(0,C.a)({id:4200,name:"Merlin",nativeCurrency:{name:"BTC",symbol:"BTC",decimals:18},rpcUrls:{default:{http:["https://rpc.merlinchain.io"]}},blockExplorers:{default:{name:"blockscout",url:"https://scan.merlinchain.io",apiUrl:"https://scan.merlinchain.io/api"}}}),tQ=(0,C.a)({id:4201,name:"LUKSO Testnet",nativeCurrency:{decimals:18,name:"LUKSO Testnet",symbol:"LYXt"},rpcUrls:{default:{http:["https://rpc.testnet.lukso.network"],webSocket:["wss://ws-rpc.testnet.lukso.network"]}},blockExplorers:{default:{name:"LUKSO Testnet Explorer",url:"https://explorer.execution.testnet.lukso.network",apiUrl:"https://api.explorer.execution.testnet.lukso.network/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:605348}},testnet:!0}),tK=(0,C.a)({...Q,id:4202,network:"lisk-sepolia",name:"Lisk Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia-api.lisk.com"]}},blockExplorers:{default:{name:"Blockscout",url:"https://sepolia-blockscout.lisk.com",apiUrl:"https://sepolia-blockscout.lisk.com/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0xA0E35F56C318DE1bD5D9ca6A94Fe7e37C5663348"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11"},portal:{11155111:{address:"0xe3d90F21490686Ec7eF37BE788E02dfC12787264"}},l1StandardBridge:{11155111:{address:"0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5"}}},testnet:!0,sourceId:11155111}),tV=(0,C.a)({id:4242,name:"Nexi",nativeCurrency:{name:"Nexi",symbol:"NEXI",decimals:18},rpcUrls:{default:{http:["https://rpc.chain.nexi.technology"]}},blockExplorers:{default:{name:"NexiScan",url:"https://www.nexiscan.com",apiUrl:"https://www.nexiscan.com/api"}},contracts:{multicall3:{address:"0x0277A46Cc69A57eE3A6C8c158bA874832F718B8E",blockCreated:25770160}}}),tZ=(0,C.a)({id:4337,name:"Beam",network:"beam",nativeCurrency:{decimals:18,name:"Beam",symbol:"BEAM"},rpcUrls:{public:{http:["https://build.onbeam.com/rpc"],webSocket:["wss://build.onbeam.com/ws"]},default:{http:["https://build.onbeam.com/rpc"],webSocket:["wss://build.onbeam.com/ws"]}},blockExplorers:{default:{name:"Beam Explorer",url:"https://subnets.avax.network/beam"}},contracts:{multicall3:{address:"0x4956f15efdc3dc16645e90cc356eafa65ffc65ec",blockCreated:1}}}),tJ=(0,C.a)({id:4689,name:"IoTeX",nativeCurrency:{decimals:18,name:"IoTeX",symbol:"IOTX"},rpcUrls:{default:{http:["https://babel-api.mainnet.iotex.io"],webSocket:["wss://babel-api.mainnet.iotex.io"]}},blockExplorers:{default:{name:"IoTeXScan",url:"https://iotexscan.io"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:22163670}}}),tX=(0,C.a)({id:4690,name:"IoTeX Testnet",nativeCurrency:{decimals:18,name:"IoTeX",symbol:"IOTX"},rpcUrls:{default:{http:["https://babel-api.testnet.iotex.io"],webSocket:["wss://babel-api.testnet.iotex.io"]}},blockExplorers:{default:{name:"IoTeXScan",url:"https://testnet.iotexscan.io"}},testnet:!0}),tY=(0,C.a)({id:4759,name:"MEVerse Chain Testnet",nativeCurrency:{decimals:18,name:"MEVerse",symbol:"MEV"},rpcUrls:{default:{http:["https://rpc.meversetestnet.io"]}},blockExplorers:{default:{name:"Explorer",url:"https://testnet.meversescan.io/"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:64371115}},testnet:!0}),t$=(0,C.a)({id:4777,name:"BlackFort Exchange Network Testnet",nativeCurrency:{name:"BlackFort Testnet Token",symbol:"TBXN",decimals:18},rpcUrls:{default:{http:["https://testnet.blackfort.network/rpc"]}},blockExplorers:{default:{name:"Blockscout",url:"https://testnet-explorer.blackfort.network",apiUrl:"https://testnet-explorer.blackfort.network/api"}}}),t0=(0,C.a)({id:4999,name:"BlackFort Exchange Network",nativeCurrency:{name:"BlackFort Token",symbol:"BXN",decimals:18},rpcUrls:{default:{http:["https://mainnet.blackfort.network/rpc"]}},blockExplorers:{default:{name:"Blockscout",url:"https://explorer.blackfort.network",apiUrl:"https://explorer.blackfort.network/api"}}}),t1=(0,C.a)({id:5e3,name:"Mantle",nativeCurrency:{decimals:18,name:"MNT",symbol:"MNT"},rpcUrls:{default:{http:["https://rpc.mantle.xyz"]}},blockExplorers:{default:{name:"Mantle Explorer",url:"https://explorer.mantle.xyz",apiUrl:"https://explorer.mantle.xyz/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:304717}}}),t6=(0,C.a)({id:5001,name:"Mantle Testnet",nativeCurrency:{decimals:18,name:"MNT",symbol:"MNT"},rpcUrls:{default:{http:["https://rpc.testnet.mantle.xyz"]}},blockExplorers:{default:{name:"Mantle Testnet Explorer",url:"https://explorer.testnet.mantle.xyz",apiUrl:"https://explorer.testnet.mantle.xyz/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:561333}},testnet:!0}),t3=(0,C.a)({id:5165,network:"bahamut",name:"Bahamut",nativeCurrency:{name:"Fasttoken",symbol:"FTN",decimals:18},rpcUrls:{default:{http:["https://rpc1.bahamut.io","https://bahamut.publicnode.com","https://rpc2.bahamut.io"],webSocket:["wss://ws1.sahara.bahamutchain.com","wss://bahamut.publicnode.com","wss://ws2.sahara.bahamutchain.com"]},public:{http:["https://rpc1.bahamut.io","https://bahamut.publicnode.com","https://rpc2.bahamut.io"],webSocket:["wss://ws1.sahara.bahamutchain.com","wss://bahamut.publicnode.com","wss://ws2.sahara.bahamutchain.com"]}},blockExplorers:{default:{name:"Ftnscan",url:"https://www.ftnscan.com",apiUrl:"https://www.ftnscan.com/api"}}}),t2=(0,C.a)({id:5611,name:"opBNB Testnet",nativeCurrency:{decimals:18,name:"tBNB",symbol:"tBNB"},rpcUrls:{default:{http:["https://opbnb-testnet-rpc.bnbchain.org"]}},blockExplorers:{default:{name:"opbnbscan",url:"https://testnet.opbnbscan.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3705108}},testnet:!0}),t7=(0,C.a)({id:5700,name:"Syscoin Tanenbaum Testnet",nativeCurrency:{decimals:18,name:"Syscoin",symbol:"SYS"},rpcUrls:{default:{http:["https://rpc.tanenbaum.io"],webSocket:["wss://rpc.tanenbaum.io/wss"]}},blockExplorers:{default:{name:"SyscoinTestnetExplorer",url:"https://tanenbaum.io"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:271288}}}),t8=(0,C.a)({id:7e3,name:"ZetaChain",nativeCurrency:{decimals:18,name:"Zeta",symbol:"ZETA"},rpcUrls:{default:{http:["https://zetachain-evm.blockpi.network/v1/rpc/public"]}},blockExplorers:{default:{name:"ZetaScan",url:"https://explorer.zetachain.com"}},testnet:!1}),t5=(0,C.a)({id:7001,name:"ZetaChain Athens Testnet",nativeCurrency:{decimals:18,name:"Zeta",symbol:"aZETA"},rpcUrls:{default:{http:["https://zetachain-athens-evm.blockpi.network/v1/rpc/public"]}},blockExplorers:{default:{name:"ZetaScan",url:"https://athens3.explorer.zetachain.com"}},testnet:!0}),t4=(0,C.a)({id:7518,name:"MEVerse Chain Mainnet",nativeCurrency:{decimals:18,name:"MEVerse",symbol:"MEV"},rpcUrls:{default:{http:["https://rpc.meversemainnet.io"]}},blockExplorers:{default:{name:"Explorer",url:"https://www.meversescan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:86881340}}}),t9=(0,C.a)({id:7700,name:"Canto",nativeCurrency:{decimals:18,name:"Canto",symbol:"CANTO"},rpcUrls:{default:{http:["https://canto.gravitychain.io"]}},blockExplorers:{default:{name:"Tuber.Build (Blockscout)",url:"https://tuber.build"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:2905789}}}),re=(0,C.a)({id:8082,name:"Shardeum Sphinx",nativeCurrency:{name:"SHARDEUM",symbol:"SHM",decimals:18},rpcUrls:{default:{http:["https://sphinx.shardeum.org"]}},blockExplorers:{default:{name:"Shardeum Explorer",url:"https://explorer-sphinx.shardeum.org"}},testnet:!0}),rt=(0,C.a)({id:8217,name:"Klaytn",nativeCurrency:{decimals:18,name:"Klaytn",symbol:"KLAY"},rpcUrls:{default:{http:["https://public-en-cypress.klaytn.net"]}},blockExplorers:{default:{name:"KlaytnScope",url:"https://scope.klaytn.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:96002415}}}),rr=(0,C.a)({...Q,id:8453,name:"Base",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.base.org"]}},blockExplorers:{default:{name:"Basescan",url:"https://basescan.org",apiUrl:"https://api.basescan.org/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0x56315b90c40730925ec5485cf004d835058518A0"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:5022},portal:{1:{address:"0x49048044D57e1C92A77f79988d21Fa8fAF74E97e",blockCreated:17482143}},l1StandardBridge:{1:{address:"0x3154Cf16ccdb4C6d922629664174b904d80F2C35",blockCreated:17482143}}},sourceId:1}),rn=(0,C.a)({id:8899,name:"JIBCHAIN L1",network:"jbc",nativeCurrency:{name:"JBC",symbol:"JBC",decimals:18},rpcUrls:{default:{http:["https://rpc-l1.jibchain.net"]},public:{http:["https://rpc-l1.jibchain.net"]}},blockExplorers:{default:{name:"Blockscout",url:"https://exp-l1.jibchain.net",apiUrl:"https://exp-l1.jibchain.net/api"}},contracts:{multicall3:{address:"0xc0C8C486D1466C57Efe13C2bf000d4c56F47CBdC",blockCreated:2299048}},testnet:!1}),ra=(0,C.a)({id:9e3,name:"Evmos Testnet",nativeCurrency:{decimals:18,name:"Evmos",symbol:"EVMOS"},rpcUrls:{default:{http:["https://eth.bd.evmos.dev:8545"]}},blockExplorers:{default:{name:"Evmos Testnet Block Explorer",url:"https://evm.evmos.dev/"}}}),ro=(0,C.a)({id:9001,name:"Evmos",nativeCurrency:{decimals:18,name:"Evmos",symbol:"EVMOS"},rpcUrls:{default:{http:["https://eth.bd.evmos.org:8545"]}},blockExplorers:{default:{name:"Evmos Block Explorer",url:"https://escan.live"}}}),ri=(0,C.a)({id:9700,name:"OORT MainnetDev",nativeCurrency:{decimals:18,name:"OORT",symbol:"OORT"},rpcUrls:{default:{http:["https://dev-rpc.oortech.com"]}},blockExplorers:{oort:{name:"OORT MainnetDev Explorer",url:"https://dev-scan.oortech.com"},default:{name:"OORT MainnetDev Explorer",url:"https://dev-scan.oortech.com"}}}),rs=(0,C.a)({id:10200,name:"Gnosis Chiado",nativeCurrency:{decimals:18,name:"Gnosis",symbol:"xDAI"},rpcUrls:{default:{http:["https://rpc.chiadochain.net"],webSocket:["wss://rpc.chiadochain.net/wss"]}},blockExplorers:{default:{name:"Blockscout",url:"https://blockscout.chiadochain.net",apiUrl:"https://blockscout.chiadochain.net/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:4967313}},testnet:!0}),rl=(0,C.a)({id:11235,name:"HAQQ Mainnet",nativeCurrency:{decimals:18,name:"Islamic Coin",symbol:"ISLM"},rpcUrls:{default:{http:["https://rpc.eth.haqq.network"]}},blockExplorers:{default:{name:"HAQQ Explorer",url:"https://explorer.haqq.network",apiUrl:"https://explorer.haqq.network/api"}}}),rc=(0,C.a)({id:12306,name:"Fibo Chain",nativeCurrency:{decimals:18,name:"fibo",symbol:"FIBO"},rpcUrls:{default:{http:["https://network.hzroc.art"]}},blockExplorers:{default:{name:"FiboScan",url:"https://scan.fibochain.org"}}}),ru=(0,C.a)({...Q,id:12553,name:"RSS3 VSL Mainnet",nativeCurrency:{name:"RSS3",symbol:"RSS3",decimals:18},rpcUrls:{default:{http:["https://rpc.rss3.io"]}},blockExplorers:{default:{name:"RSS3 VSL Mainnet Scan",url:"https://scan.rss3.io",apiUrl:"https://scan.rss3.io/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0xE6f24d2C32B3109B18ed33cF08eFb490b1e09C10"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14193},portal:{1:{address:"0x6A12432491bbbE8d3babf75F759766774C778Db4",blockCreated:19387057}},l1StandardBridge:{1:{address:"0x4cbab69108Aa72151EDa5A3c164eA86845f18438"}}},sourceId:1}),rd=(0,C.a)({id:13337,name:"Beam Testnet",network:"beam",nativeCurrency:{decimals:18,name:"Beam",symbol:"BEAM"},rpcUrls:{public:{http:["https://build.onbeam.com/rpc/testnet"],webSocket:["wss://build.onbeam.com/ws/testnet"]},default:{http:["https://build.onbeam.com/rpc/testnet"],webSocket:["wss://build.onbeam.com/ws/testnet"]}},blockExplorers:{default:{name:"Beam Explorer",url:"https://subnets-test.avax.network/beam"}},contracts:{multicall3:{address:"0x9bf49b704ee2a095b95c1f2d4eb9010510c41c9e",blockCreated:3}},testnet:!0}),rp=(0,C.a)({id:13381,name:"Phoenix Blockchain",nativeCurrency:{name:"Phoenix",symbol:"PHX",decimals:18},rpcUrls:{default:{http:["https://rpc.phoenixplorer.com"]}},blockExplorers:{default:{name:"Phoenixplorer",url:"https://phoenixplorer.com",apiUrl:"https://phoenixplorer.com/api"}},contracts:{multicall3:{address:"0x498cF757a575cFF2c2Ed9f532f56Efa797f86442",blockCreated:5620192}}}),rh=(0,C.a)({id:15557,name:"EOS EVM Testnet",nativeCurrency:{decimals:18,name:"EOS",symbol:"EOS"},rpcUrls:{default:{http:["https://api.testnet.evm.eosnetwork.com"]}},blockExplorers:{default:{name:"EOS EVM Testnet Explorer",url:"https://explorer.testnet.evm.eosnetwork.com",apiUrl:"https://explorer.testnet.evm.eosnetwork.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:9067940}},testnet:!0}),rf=(0,C.a)({id:17e3,name:"Holesky",nativeCurrency:{name:"Holesky Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://ethereum-holesky.publicnode.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://holesky.etherscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:77},ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",blockCreated:801613},ensUniversalResolver:{address:"0xa6AC935D4971E3CD133b950aE053bECD16fE7f3b",blockCreated:973484}},testnet:!0}),rm=(0,C.a)({id:17777,name:"EOS EVM",nativeCurrency:{decimals:18,name:"EOS",symbol:"EOS"},rpcUrls:{default:{http:["https://api.evm.eosnetwork.com"]}},blockExplorers:{default:{name:"EOS EVM Explorer",url:"https://explorer.evm.eosnetwork.com",apiUrl:"https://explorer.evm.eosnetwork.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:7943933}}}),rg=(0,C.a)({id:23294,name:"Oasis Sapphire",network:"sapphire",nativeCurrency:{name:"Sapphire Rose",symbol:"ROSE",decimals:18},rpcUrls:{default:{http:["https://sapphire.oasis.io"],webSocket:["wss://sapphire.oasis.io/ws"]}},blockExplorers:{default:{name:"Oasis Sapphire Explorer",url:"https://explorer.sapphire.oasis.io",apiUrl:"https://explorer.sapphire.oasis.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:734531}}}),rb=(0,C.a)({id:23295,name:"Oasis Sapphire Testnet",network:"sapphire-testnet",nativeCurrency:{name:"Sapphire Test Rose",symbol:"TEST",decimals:18},rpcUrls:{default:{http:["https://testnet.sapphire.oasis.dev"],webSocket:["wss://testnet.sapphire.oasis.dev/ws"]}},blockExplorers:{default:{name:"Oasis Sapphire Testnet Explorer",url:"https://testnet.explorer.sapphire.oasis.dev",apiUrl:"https://testnet.explorer.sapphire.oasis.dev/api"}},testnet:!0}),ry=(0,C.a)({id:31337,name:"Anvil",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["http://127.0.0.1:8545"],webSocket:["ws://127.0.0.1:8545"]}}}),rv=(0,C.a)({id:31337,name:"Foundry",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["http://127.0.0.1:8545"],webSocket:["ws://127.0.0.1:8545"]}}}),rw=(0,C.a)({id:32769,name:"Zilliqa",network:"zilliqa",nativeCurrency:{name:"Zilliqa",symbol:"ZIL",decimals:18},rpcUrls:{default:{http:["https://api.zilliqa.com"]}},blockExplorers:{default:{name:"Ethernal",url:"https://evmx.zilliqa.com"}},testnet:!1}),rC=(0,C.a)({id:33101,name:"Zilliqa Testnet",network:"zilliqa-testnet",nativeCurrency:{name:"Zilliqa",symbol:"ZIL",decimals:18},rpcUrls:{default:{http:["https://dev-api.zilliqa.com"]}},blockExplorers:{default:{name:"Ethernal",url:"https://evmx.testnet.zilliqa.com"}},testnet:!0}),rE=(0,C.a)({id:34443,name:"Mode Mainnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://mainnet.mode.network"]}},blockExplorers:{default:{name:"Mode Explorer",url:"https://explorer.mode.network"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:2465882}}}),rx=(0,C.a)({id:35441,name:"Q Mainnet",nativeCurrency:{decimals:18,name:"Q",symbol:"Q"},rpcUrls:{default:{http:["https://rpc.q.org"]}},blockExplorers:{default:{name:"Q Mainnet Explorer",url:"https://explorer.q.org",apiUrl:"https://explorer.q.org/api"}}}),rA=(0,C.a)({id:35443,name:"Q Testnet",nativeCurrency:{decimals:18,name:"Q",symbol:"Q"},rpcUrls:{default:{http:["https://rpc.qtestnet.org"]}},blockExplorers:{default:{name:"Q Testnet Explorer",url:"https://explorer.qtestnet.org",apiUrl:"https://explorer.qtestnet.org/api"}},testnet:!0}),rk=(0,C.a)({id:42161,name:"Arbitrum One",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://arb1.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://arbiscan.io",apiUrl:"https://api.arbiscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:7654707}}}),rB=(0,C.a)({id:42170,name:"Arbitrum Nova",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://nova.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://nova.arbiscan.io",apiUrl:"https://api-nova.arbiscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1746963}}});function isEmpty(e){return 0===e||0n===e||null==e||"0"===e||""===e||"string"==typeof e&&("0x"===(0,z.f)(e).toLowerCase()||"0x00"===(0,z.f)(e).toLowerCase())}function isPresent(e){return!isEmpty(e)}function isEIP1559(e){return void 0!==e.maxFeePerGas&&void 0!==e.maxPriorityFeePerGas}function isCIP42(e){return"cip42"===e.type||isEIP1559(e)&&(isPresent(e.feeCurrency)||isPresent(e.gatewayFeeRecipient)||isPresent(e.gatewayFee))}function isCIP64(e){return"cip64"===e.type||isEIP1559(e)&&isPresent(e.feeCurrency)&&isEmpty(e.gatewayFee)&&isEmpty(e.gatewayFeeRecipient)}let rS={block:(0,B.G)({exclude:["difficulty","gasLimit","mixHash","nonce","uncles"],format(e){let t=e.transactions?.map(e=>"string"==typeof e?e:{...S.Tr(e),feeCurrency:e.feeCurrency,..."0x7b"!==e.type?{gatewayFee:e.gatewayFee?k.y_(e.gatewayFee):null,gatewayFeeRecipient:e.gatewayFeeRecipient||null}:{}});return{randomness:e.randomness,transactions:t}}}),transaction:(0,S.y_)({format(e){let t={feeCurrency:e.feeCurrency};return"0x7b"===e.type?t.type="cip64":("0x7c"===e.type&&(t.type="cip42"),t.gatewayFee=e.gatewayFee?(0,k.y_)(e.gatewayFee):null,t.gatewayFeeRecipient=e.gatewayFeeRecipient),t}}),transactionRequest:(0,eF.iy)({format(e){let t={feeCurrency:e.feeCurrency};return isCIP64(e)?t.type="0x7b":(isCIP42(e)&&(t.type="0x7c"),t.gatewayFee=void 0!==e.gatewayFee?(0,O.eC)(e.gatewayFee):void 0,t.gatewayFeeRecipient=e.gatewayFeeRecipient),t}})},rI=2n**256n-1n,rj={formatters:rS,serializers:{transaction:function(e,t){return isCIP64(e)?function(e,t){!function(e){let{chainId:t,maxPriorityFeePerGas:n,gasPrice:o,maxFeePerGas:i,to:s,feeCurrency:l}=e;if(t<=0)throw new q.hJ({chainId:t});if(s&&!(0,P.U)(s))throw new T.b({address:s});if(o)throw new R.G("`gasPrice` is not a valid CIP-64 Transaction attribute.");if(isPresent(i)&&i>rI)throw new G.Hh({maxFeePerGas:i});if(isPresent(n)&&isPresent(i)&&n>i)throw new G.cs({maxFeePerGas:i,maxPriorityFeePerGas:n});if(isPresent(l)&&!(0,P.U)(l))throw new R.G("`feeCurrency` MUST be a token address for CIP-64 transactions.");if(isEmpty(l))throw new R.G("`feeCurrency` must be provided for CIP-64 transactions.")}(e);let{chainId:n,gas:o,nonce:i,to:s,value:l,maxFeePerGas:c,maxPriorityFeePerGas:u,accessList:d,feeCurrency:p,data:f}=e,m=[(0,O.NC)(n),i?(0,O.NC)(i):"0x",u?(0,O.NC)(u):"0x",c?(0,O.NC)(c):"0x",o?(0,O.NC)(o):"0x",s??"0x",l?(0,O.NC)(l):"0x",f??"0x",serializeAccessList(d),p,...toYParitySignatureArray(e,t)];return(0,M.SM)(["0x7b",toRlp(m)])}(e,t):isCIP42(e)?function(e,t){!function(e){let{chainId:t,maxPriorityFeePerGas:n,gasPrice:o,maxFeePerGas:i,to:s,feeCurrency:l,gatewayFee:c,gatewayFeeRecipient:u}=e;if(t<=0)throw new q.hJ({chainId:t});if(s&&!(0,P.U)(s))throw new T.b({address:s});if(o)throw new R.G("`gasPrice` is not a valid CIP-42 Transaction attribute.");if(isPresent(i)&&i>rI)throw new G.Hh({maxFeePerGas:i});if(isPresent(n)&&isPresent(i)&&n>i)throw new G.cs({maxFeePerGas:i,maxPriorityFeePerGas:n});if(isPresent(c)&&isEmpty(u)||isPresent(u)&&isEmpty(c))throw new R.G("`gatewayFee` and `gatewayFeeRecipient` must be provided together.");if(isPresent(l)&&!(0,P.U)(l))throw new R.G("`feeCurrency` MUST be a token address for CIP-42 transactions.");if(isPresent(u)&&!(0,P.U)(u))throw new T.b(u);if(isEmpty(l)&&isEmpty(u))throw new R.G("Either `feeCurrency` or `gatewayFeeRecipient` must be provided for CIP-42 transactions.")}(e);let{chainId:n,gas:o,nonce:i,to:s,value:l,maxFeePerGas:c,maxPriorityFeePerGas:u,accessList:d,feeCurrency:p,gatewayFeeRecipient:f,gatewayFee:m,data:g}=e,b=[(0,O.NC)(n),i?(0,O.NC)(i):"0x",u?(0,O.NC)(u):"0x",c?(0,O.NC)(c):"0x",o?(0,O.NC)(o):"0x",p??"0x",f??"0x",m?(0,O.NC)(m):"0x",s??"0x",l?(0,O.NC)(l):"0x",g??"0x",serializeAccessList(d),...toYParitySignatureArray(e,t)];return(0,M.SM)(["0x7c",toRlp(b)])}(e,t):serializeTransaction(e,t)}}},rT=(0,C.a)({...rj,id:42220,name:"Celo",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://forno.celo.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/mainnet",apiUrl:"https://explorer.celo.org/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:13112599}},testnet:!1}),rP=(0,C.a)({id:42766,name:"ZKFair Mainnet",network:"zkfair-mainnet",nativeCurrency:{decimals:18,name:"USD Coin",symbol:"USDC"},rpcUrls:{default:{http:["https://rpc.zkfair.io"]},public:{http:["https://rpc.zkfair.io"]}},blockExplorers:{default:{name:"zkFair Explorer",url:"https://scan.zkfair.io",apiUrl:"https://scan.zkfair.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:6090959}},testnet:!1}),rM=(0,C.a)({id:43113,name:"Avalanche Fuji",nativeCurrency:{decimals:18,name:"Avalanche Fuji",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax-test.network/ext/bc/C/rpc"]}},blockExplorers:{default:{name:"SnowScan",url:"https://testnet.snowscan.xyz",apiUrl:"https://api-testnet.snowscan.xyz"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:7096959}},testnet:!0}),rO=(0,C.a)({id:43114,name:"Avalanche",nativeCurrency:{decimals:18,name:"Avalanche",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax.network/ext/bc/C/rpc"]}},blockExplorers:{default:{name:"SnowScan",url:"https://snowscan.xyz",apiUrl:"https://api.snowscan.xyz/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:11907934}}}),rR=(0,C.a)({id:43851,name:"ZKFair Testnet",network:"zkfair-testnet",nativeCurrency:{decimals:18,name:"USD Coin",symbol:"USDC"},rpcUrls:{default:{http:["https://testnet-rpc.zkfair.io"]},public:{http:["https://testnet-rpc.zkfair.io"]}},blockExplorers:{default:{name:"zkFair Explorer",url:"https://testnet-scan.zkfair.io"}},testnet:!0}),rU=(0,C.a)({...rj,id:44787,name:"Alfajores",nativeCurrency:{decimals:18,name:"CELO",symbol:"A-CELO"},rpcUrls:{default:{http:["https://alfajores-forno.celo-testnet.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/alfajores",apiUrl:"https://explorer.celo.org/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:14569001}},testnet:!0}),rF=(0,C.a)({id:53935,name:"DFK Chain",nativeCurrency:{decimals:18,name:"Jewel",symbol:"JEWEL"},rpcUrls:{default:{http:["https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"]}},blockExplorers:{default:{name:"DFKSubnetScan",url:"https://subnets.avax.network/defi-kingdoms"}}}),rN=(0,C.a)({id:54211,name:"HAQQ Testedge 2",nativeCurrency:{decimals:18,name:"Islamic Coin",symbol:"ISLMT"},rpcUrls:{default:{http:["https://rpc.eth.testedge2.haqq.network"]}},blockExplorers:{default:{name:"HAQQ Explorer",url:"https://explorer.testedge2.haqq.network",apiUrl:"https://explorer.testedge2.haqq.network/api"}}}),rD=(0,C.a)({id:57e3,name:"Rollux Testnet",nativeCurrency:{decimals:18,name:"Syscoin",symbol:"SYS"},rpcUrls:{default:{http:["https://rpc-tanenbaum.rollux.com/"],webSocket:["wss://rpc-tanenbaum.rollux.com/wss"]}},blockExplorers:{default:{name:"RolluxTestnetExplorer",url:"https://rollux.tanenbaum.io",apiUrl:"https://rollux.tanenbaum.io/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:1813675}}}),r_=(0,C.a)({id:58008,network:"pgn-testnet",name:"PGN ",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.publicgoods.network"]}},blockExplorers:{default:{name:"PGN Testnet Explorer",url:"https://explorer.sepolia.publicgoods.network",apiUrl:"https://explorer.sepolia.publicgoods.network/api"},blocksout:{name:"PGN Testnet Explorer",url:"https://explorer.sepolia.publicgoods.network",apiUrl:"https://explorer.sepolia.publicgoods.network/api"}},contracts:{l2OutputOracle:{11155111:{address:"0xD5bAc3152ffC25318F848B3DD5dA6C85171BaEEe"}},portal:{11155111:{address:"0xF04BdD5353Bb0EFF6CA60CfcC78594278eBfE179"}},l1StandardBridge:{11155111:{address:"0xFaE6abCAF30D23e233AC7faF747F2fC3a5a6Bfa3"}},multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3754925}},formatters:j,sourceId:11155111,testnet:!0}),rL=(0,C.a)({id:59140,name:"Linea Goerli Testnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli.lineascan.build",apiUrl:"https://goerli.lineascan.build/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:498623}},testnet:!0}),rz=(0,C.a)({id:59144,name:"Linea Mainnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://lineascan.build",apiUrl:"https://api.lineascan.build/api"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:42}},testnet:!1}),rq=(0,C.a)({id:64240,name:"Fantom Sonic Open Testnet",network:"fantom-sonic-testnet",nativeCurrency:{decimals:18,name:"Fantom",symbol:"FTM"},rpcUrls:{default:{http:["https://rpcapi.sonic.fantom.network"]}},blockExplorers:{default:{name:"Fantom Sonic Open Testnet Explorer",url:"https://public-sonic.fantom.network"}},testnet:!0}),rG=(0,C.a)({id:80001,name:"Polygon Mumbai",nativeCurrency:{name:"MATIC",symbol:"MATIC",decimals:18},rpcUrls:{default:{http:["https://rpc.ankr.com/polygon_mumbai"]}},blockExplorers:{default:{name:"PolygonScan",url:"https://mumbai.polygonscan.com",apiUrl:"https://mumbai.polygonscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:25770160}},testnet:!0}),rW=(0,C.a)({id:80002,name:"Polygon Amoy",nativeCurrency:{name:"MATIC",symbol:"MATIC",decimals:18},rpcUrls:{default:{http:["https://rpc-amoy.polygon.technology"]}},blockExplorers:{default:{name:"OK LINK",url:"https://www.oklink.com/amoy"}},testnet:!0}),rH=(0,C.a)({id:80085,name:"Berachain Artio",nativeCurrency:{decimals:18,name:"BERA Token",symbol:"BERA"},rpcUrls:{default:{http:["https://artio.rpc.berachain.com"]}},blockExplorers:{default:{name:"Berachain",url:"https://artio.beratrail.io"}},testnet:!0}),rQ=(0,C.a)({id:81457,name:"Blast",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://rpc.blast.io"]}},blockExplorers:{default:{name:"Blastscan",url:"https://blastscan.io"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:212929}},sourceId:1}),rK=(0,C.a)({...Q,id:84531,name:"Base Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://goerli.base.org"]}},blockExplorers:{default:{name:"Basescan",url:"https://goerli.basescan.org",apiUrl:"https://goerli.basescan.org/api"}},contracts:{...Q.contracts,l2OutputOracle:{5:{address:"0x2A35891ff30313CcFa6CE88dcf3858bb075A2298"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1376988},portal:{5:{address:"0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA"}},l1StandardBridge:{5:{address:"0xfA6D8Ee5BE770F84FC001D098C4bD604Fe01284a"}}},testnet:!0,sourceId:5}),rV=(0,C.a)({...Q,id:84532,network:"base-sepolia",name:"Base Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.base.org"]}},blockExplorers:{default:{name:"Basescan",url:"https://sepolia.basescan.org",apiUrl:"https://api-sepolia.basescan.org/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254"}},portal:{11155111:{address:"0x49f53e41452c74589e85ca1677426ba426459e85",blockCreated:4446677}},l1StandardBridge:{11155111:{address:"0xfd0Bf71F60660E2f608ed56e1659C450eB113120",blockCreated:4446677}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1059647}},testnet:!0,sourceId:11155111}),rZ=(0,C.a)({id:88882,name:"Chiliz Spicy Testnet",network:"chiliz-spicy-Testnet",nativeCurrency:{decimals:18,name:"CHZ",symbol:"CHZ"},rpcUrls:{default:{http:["https://spicy-rpc.chiliz.com","https://chiliz-spicy.publicnode.com"],webSocket:["wss://spicy-rpc-ws.chiliz.com","wss://chiliz-spicy.publicnode.com"]}},blockExplorers:{default:{name:"Chiliz Explorer",url:"http://spicy-explorer.chiliz.com",apiUrl:"http://spicy-explorer.chiliz.com/api"}},testnet:!0}),rJ=(0,C.a)({id:88888,name:"Chiliz Chain",network:"chiliz-chain",nativeCurrency:{decimals:18,name:"CHZ",symbol:"CHZ"},rpcUrls:{default:{http:["https://rpc.ankr.com/chiliz","https://chiliz.publicnode.com"]}},blockExplorers:{default:{name:"Chiliz Explorer",url:"https://scan.chiliz.com",apiUrl:"https://scan.chiliz.com/api"}}}),rX=(0,C.a)({id:100009,name:"Vechain",nativeCurrency:{name:"VeChain",symbol:"VET",decimals:18},rpcUrls:{default:{http:["https://mainnet.vechain.org"]}},blockExplorers:{default:{name:"Vechain Explorer",url:"https://explore.vechain.org"},vechainStats:{name:"Vechain Stats",url:"https://vechainstats.com"}}}),rY=(0,C.a)({id:105105,name:"Stratis Mainnet",network:"stratis",nativeCurrency:{name:"Stratis",symbol:"STRAX",decimals:18},rpcUrls:{default:{http:["https://rpc.stratisevm.com"]}},blockExplorers:{default:{name:"Stratis Explorer",url:"https://explorer.stratisevm.com"}}}),r$=(0,C.a)({id:128123,name:"Etherlink Testnet",nativeCurrency:{decimals:18,name:"Tez",symbol:"XTZ"},rpcUrls:{default:{http:["https://node.ghostnet.etherlink.com"]}},blockExplorers:{default:{name:"Etherlink Testnet",url:"https://testnet-explorer.etherlink.com"}},testnet:!0}),r0=(0,C.a)({id:167005,name:"Taiko (Alpha-3 Testnet)",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.test.taiko.xyz"]}},blockExplorers:{default:{name:"blockscout",url:"https://explorer.test.taiko.xyz"}}}),r1=(0,C.a)({id:167007,name:"Taiko Jolnir (Alpha-5 Testnet)",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.jolnir.taiko.xyz"]}},blockExplorers:{default:{name:"blockscout",url:"https://explorer.jolnir.taiko.xyz"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:732706}},testnet:!0}),r6=(0,C.a)({id:167008,name:"Taiko Katla (Alpha-6 Testnet)",network:"tko-katla",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.katla.taiko.xyz"]},public:{http:["https://rpc.katla.taiko.xyz"]}},blockExplorers:{default:{name:"blockscout",url:"https://explorer.katla.taiko.xyz"}}}),r3=(0,C.a)({id:205205,name:"Auroria Testnet",network:"auroria",nativeCurrency:{name:"Auroria Stratis",symbol:"tSTRAX",decimals:18},rpcUrls:{default:{http:["https://auroria.rpc.stratisevm.com"]}},blockExplorers:{default:{name:"Auroria Testnet Explorer",url:"https://auroria.explorer.stratisevm.com"}},testnet:!0}),r2=(0,C.a)({id:314159,name:"Filecoin Calibration",nativeCurrency:{decimals:18,name:"testnet filecoin",symbol:"tFIL"},rpcUrls:{default:{http:["https://api.calibration.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filscan",url:"https://calibration.filscan.io"}}}),r7=(0,C.a)({id:421613,name:"Arbitrum Goerli",nativeCurrency:{name:"Arbitrum Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://goerli-rollup.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://goerli.arbiscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:88114}},testnet:!0}),r8=(0,C.a)({id:421614,name:"Arbitrum Sepolia",nativeCurrency:{name:"Arbitrum Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia-rollup.arbitrum.io/rpc"]}},blockExplorers:{default:{name:"Arbiscan",url:"https://sepolia.arbiscan.io",apiUrl:"https://api-sepolia.arbiscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:81930}},testnet:!0}),r5=(0,C.a)({id:534351,name:"Scroll Sepolia",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia-rpc.scroll.io"]}},blockExplorers:{default:{name:"Blockscout",url:"https://sepolia-blockscout.scroll.io",apiUrl:"https://sepolia-blockscout.scroll.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:9473}},testnet:!0}),r4=(0,C.a)({id:534352,name:"Scroll",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.scroll.io"],webSocket:["wss://wss-rpc.scroll.io/ws"]}},blockExplorers:{default:{name:"Scrollscan",url:"https://scrollscan.com",apiUrl:"https://api.scrollscan.com/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14}},testnet:!1}),r9=(0,C.a)({id:534353,name:"Scroll Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://alpha-rpc.scroll.io/l2"],webSocket:["wss://alpha-rpc.scroll.io/l2/ws"]}},blockExplorers:{default:{name:"Blockscout",url:"https://blockscout.scroll.io",apiUrl:"https://blockscout.scroll.io/api"}},testnet:!0}),ne=(0,C.a)({id:641230,name:"Bear Network Chain Mainnet",nativeCurrency:{decimals:18,name:"BearNetworkChain",symbol:"BRNKC"},rpcUrls:{default:{http:["https://brnkc-mainnet.bearnetwork.net"]}},blockExplorers:{default:{name:"BrnkScan",url:"https://brnkscan.bearnetwork.net",apiUrl:"https://brnkscan.bearnetwork.net/api"}}}),nt=(0,C.a)({id:751230,name:"Bear Network Chain Testnet",nativeCurrency:{decimals:18,name:"tBRNKC",symbol:"tBRNKC"},rpcUrls:{default:{http:["https://brnkc-test.bearnetwork.net"]}},blockExplorers:{default:{name:"BrnkTestScan",url:"https://brnktest-scan.bearnetwork.net",apiUrl:"https://brnktest-scan.bearnetwork.net/api"}},testnet:!0}),nr=(0,C.a)({id:1337803,name:"Zhejiang",nativeCurrency:{name:"Zhejiang Ether",symbol:"ZhejETH",decimals:18},rpcUrls:{default:{http:["https://rpc.zhejiang.ethpandaops.io"]}},blockExplorers:{default:{name:"Beaconchain",url:"https://zhejiang.beaconcha.in"}},testnet:!0}),nn=(0,C.a)({id:3441005,name:"Manta Pacific Testnet",network:"manta-testnet",nativeCurrency:{decimals:18,name:"ETH",symbol:"ETH"},rpcUrls:{default:{http:["https://manta-testnet.calderachain.xyz/http"]}},blockExplorers:{default:{name:"Manta Testnet Explorer",url:"https://pacific-explorer.testnet.manta.network",apiUrl:"https://pacific-explorer.testnet.manta.network/api"}},contracts:{multicall3:{address:"0x211B1643b95Fe76f11eD8880EE810ABD9A4cf56C",blockCreated:419915}},testnet:!0}),na=(0,C.a)({id:6038361,name:"Astar zkEVM Testnet zKyoto",network:"zKyoto",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.startale.com/zkyoto"]}},blockExplorers:{default:{name:"zKyoto Explorer",url:"https://astar-zkyoto.blockscout.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:196153}},testnet:!0}),no=(0,C.a)({...Q,id:7777777,name:"Zora",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://rpc.zora.energy"],webSocket:["wss://rpc.zora.energy"]}},blockExplorers:{default:{name:"Explorer",url:"https://explorer.zora.energy",apiUrl:"https://explorer.zora.energy/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0x9E6204F750cD866b299594e2aC9eA824E2e5f95c"}},multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:5882},portal:{1:{address:"0x1a0ad011913A150f69f6A19DF447A0CfD9551054"}},l1StandardBridge:{1:{address:"0x3e2Ea9B92B7E48A52296fD261dc26fd995284631"}}},sourceId:1}),ni=(0,C.a)({id:11155111,name:"Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"SEP",decimals:18},rpcUrls:{default:{http:["https://rpc.sepolia.org"]}},blockExplorers:{default:{name:"Etherscan",url:"https://sepolia.etherscan.io",apiUrl:"https://api-sepolia.etherscan.io/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:751532},ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},ensUniversalResolver:{address:"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC",blockCreated:5317080}},testnet:!0}),ns=(0,C.a)({...Q,id:11155420,name:"OP Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.optimism.io"]}},blockExplorers:{default:{name:"Blockscout",url:"https://optimism-sepolia.blockscout.com",apiUrl:"https://optimism-sepolia.blockscout.com/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0x90E9c4f8a994a250F6aEfd61CAFb4F2e895D458F"}},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:1620204},portal:{11155111:{address:"0x16Fc5058F25648194471939df75CF27A2fdC48BC"}},l1StandardBridge:{11155111:{address:"0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1"}}},testnet:!0,sourceId:11155111}),nl=(0,C.a)({...Q,id:28122024,name:"Ancient8 Testnet",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpcv2-testnet.ancient8.gg"]}},blockExplorers:{default:{name:"Ancient8 Celestia Testnet explorer",url:"https://scanv2-testnet.ancient8.gg",apiUrl:"https://scanv2-testnet.ancient8.gg/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0x942fD5017c0F60575930D8574Eaca13BEcD6e1bB"}},portal:{11155111:{address:"0xfa1d9E26A6aCD7b22115D27572c1221B9803c960",blockCreated:4972908}},l1StandardBridge:{11155111:{address:"0xF6Bc0146d3c74D48306e79Ae134A260E418C9335",blockCreated:4972908}}},sourceId:11155111}),nc=(0,C.a)({id:37084624,name:"SKALE Nebula Testnet",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://testnet.skalenodes.com/v1/lanky-ill-funny-testnet"],webSocket:["wss://testnet.skalenodes.com/v1/ws/lanky-ill-funny-testnet"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://lanky-ill-funny-testnet.explorer.testnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:105141}},testnet:!0}),nu=(0,C.a)({id:161221135,name:"Plume Testnet",nativeCurrency:{name:"Plume Sepolia Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://plume-testnet.rpc.caldera.xyz/http"],webSocket:["wss://plume-testnet.rpc.caldera.xyz/ws"]}},blockExplorers:{default:{name:"Blockscout",url:"https://plume-testnet.explorer.caldera.xyz",apiUrl:"https://plume-testnet.explorer.caldera.xyz/api"}},testnet:!0,sourceId:11155111}),nd=(0,C.a)({id:168587773,name:"Blast Sepolia",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia.blast.io"]}},blockExplorers:{default:{name:"Blastscan",url:"https://testnet.blastscan.io"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:756690}},testnet:!0,sourceId:11155111}),np=(0,C.a)({id:245022926,name:"Neon EVM DevNet",nativeCurrency:{name:"NEON",symbol:"NEON",decimals:18},rpcUrls:{default:{http:["https://devnet.neonevm.org"]}},blockExplorers:{default:{name:"Neonscan",url:"https://devnet.neonscan.org"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:205206112}},testnet:!0}),nh=(0,C.a)({id:245022934,network:"neonMainnet",name:"Neon EVM MainNet",nativeCurrency:{name:"NEON",symbol:"NEON",decimals:18},rpcUrls:{default:{http:["https://neon-proxy-mainnet.solana.p2p.org"]}},blockExplorers:{default:{name:"Neonscan",url:"https://neonscan.org"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:206545524}},testnet:!1}),nf=(0,C.a)({id:278611351,name:"SKALE | Razor Network",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/turbulent-unique-scheat"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/turbulent-unique-scheat"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://turbulent-unique-scheat.explorer.mainnet.skalenodes.com"}},contracts:{}}),nm=(0,C.a)({id:391845894,name:"SKALE | Block Brawlers",nativeCurrency:{name:"BRAWL",symbol:"BRAWL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/frayed-decent-antares"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/frayed-decent-antares"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://frayed-decent-antares.explorer.mainnet.skalenodes.com"}},contracts:{}}),ng=(0,C.a)({...Q,id:888888888,name:"Ancient8",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.ancient8.gg"]}},blockExplorers:{default:{name:"Ancient8 explorer",url:"https://scan.ancient8.gg",apiUrl:"https://scan.ancient8.gg/api"}},contracts:{...Q.contracts,l2OutputOracle:{1:{address:"0xB09DC08428C8b4EFB4ff9C0827386CDF34277996"}},portal:{1:{address:"0x639F2AECE398Aa76b07e59eF6abe2cFe32bacb68",blockCreated:19070571}},l1StandardBridge:{1:{address:"0xd5e3eDf5b68135D559D572E26bF863FBC1950033",blockCreated:19070571}}},sourceId:1}),nb=(0,C.a)({id:974399131,name:"SKALE Calypso Testnet",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://testnet.skalenodes.com/v1/giant-half-dual-testnet"],webSocket:["wss://testnet.skalenodes.com/v1/ws/giant-half-dual-testnet"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://giant-half-dual-testnet.explorer.testnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:103220}},testnet:!0}),ny=(0,C.a)({...Q,id:999999999,name:"Zora Sepolia",network:"zora-sepolia",nativeCurrency:{decimals:18,name:"Zora Sepolia",symbol:"ETH"},rpcUrls:{default:{http:["https://sepolia.rpc.zora.energy"],webSocket:["wss://sepolia.rpc.zora.energy"]}},blockExplorers:{default:{name:"Zora Sepolia Explorer",url:"https://sepolia.explorer.zora.energy/",apiUrl:"https://sepolia.explorer.zora.energy/api"}},contracts:{...Q.contracts,l2OutputOracle:{11155111:{address:"0x2615B481Bd3E5A1C0C7Ca3Da1bdc663E8615Ade9"}},multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:83160},portal:{11155111:{address:"0xeffE2C6cA9Ab797D418f0D91eA60807713f3536f"}},l1StandardBridge:{11155111:{address:"0x5376f1D543dcbB5BD416c56C189e4cB7399fCcCB"}}},sourceId:11155111,testnet:!0}),nv=(0,C.a)({id:1020352220,name:"SKALE Titan Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://testnet.skalenodes.com/v1/aware-fake-trim-testnet"],webSocket:["wss://testnet.skalenodes.com/v1/ws/aware-fake-trim-testnet"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://aware-fake-trim-testnet.explorer.testnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:104072}},testnet:!0}),nw=(0,C.a)({id:1026062157,name:"SKALE | CryptoBlades",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/affectionate-immediate-pollux"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/affectionate-immediate-pollux"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://affectionate-immediate-pollux.explorer.mainnet.skalenodes.com"}},contracts:{}}),nC=(0,C.a)({id:2046399126,name:"SKALE | Crypto Colosseum",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/haunting-devoted-deneb"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/haunting-devoted-deneb"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://haunting-devoted-deneb.explorer.mainnet.skalenodes.com"}},contracts:{}}),nE=(0,C.a)({id:1273227453,name:"SKALE | Human Protocol",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/wan-red-ain"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/wan-red-ain"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://wan-red-ain.explorer.mainnet.skalenodes.com"}},contracts:{}}),nx=(0,C.a)({id:1313161554,name:"Aurora",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://mainnet.aurora.dev"]}},blockExplorers:{default:{name:"Aurorascan",url:"https://aurorascan.dev",apiUrl:"https://aurorascan.dev/api"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:62907816}}}),nA=(0,C.a)({id:1313161555,name:"Aurora Testnet",nativeCurrency:{decimals:18,name:"Ether",symbol:"ETH"},rpcUrls:{default:{http:["https://testnet.aurora.dev"]}},blockExplorers:{default:{name:"Aurorascan",url:"https://testnet.aurorascan.dev",apiUrl:"https://testnet.aurorascan.dev/api"}},testnet:!0}),nk=(0,C.a)({id:1350216234,name:"SKALE | Titan Community Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/parallel-stormy-spica"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/parallel-stormy-spica"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://parallel-stormy-spica.explorer.mainnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:2076458}}}),nB=(0,C.a)({id:1444673419,name:"SKALE Europa Testnet",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://testnet.skalenodes.com/v1/juicy-low-small-testnet"],webSocket:["wss://testnet.skalenodes.com/v1/ws/juicy-low-small-testnet"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://juicy-low-small-testnet.explorer.testnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:110858}},testnet:!0}),nS=(0,C.a)({id:1482601649,name:"SKALE | Nebula Gaming Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/green-giddy-denebola"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/green-giddy-denebola"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://green-giddy-denebola.explorer.mainnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:2372986}}}),nI=(0,C.a)({id:1564830818,name:"SKALE | Calypso NFT Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/honorable-steel-rasalhague"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3107626}}}),nj=(0,C.a)({id:16666e5,name:"Harmony One",nativeCurrency:{name:"Harmony",symbol:"ONE",decimals:18},rpcUrls:{default:{http:["https://rpc.ankr.com/harmony"]}},blockExplorers:{default:{name:"Harmony Explorer",url:"https://explorer.harmony.one"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:24185753}}}),nT=(0,C.a)({id:2046399126,name:"SKALE | Europa Liquidity Hub",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/elated-tan-skat"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/elated-tan-skat"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://elated-tan-skat.explorer.mainnet.skalenodes.com"}},contracts:{multicall3:{address:"0xcA11bde05977b3631167028862bE2a173976CA11",blockCreated:3113495}}}),nP=(0,C.a)({id:2139927552,name:"SKALE | Exorde",nativeCurrency:{name:"sFUEL",symbol:"sFUEL",decimals:18},rpcUrls:{default:{http:["https://mainnet.skalenodes.com/v1/light-vast-diphda"],webSocket:["wss://mainnet.skalenodes.com/v1/ws/light-vast-diphda"]}},blockExplorers:{default:{name:"SKALE Explorer",url:"https://light-vast-diphda.explorer.mainnet.skalenodes.com"}},contracts:{}}),nM=(0,C.a)({id:11297108099,name:"Palm Testnet",nativeCurrency:{decimals:18,name:"PALM",symbol:"PALM"},rpcUrls:{default:{http:["https://palm-mainnet.public.blastapi.io"],webSocket:["wss://palm-mainnet.public.blastapi.io"]}},blockExplorers:{default:{name:"Chainlens",url:"https://palm.chainlens.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:15429248}},testnet:!0}),nO=(0,C.a)({id:11297108109,name:"Palm",nativeCurrency:{decimals:18,name:"PALM",symbol:"PALM"},rpcUrls:{default:{http:["https://palm-mainnet.public.blastapi.io"],webSocket:["wss://palm-mainnet.public.blastapi.io"]}},blockExplorers:{default:{name:"Chainlens",url:"https://palm.chainlens.com"}},contracts:{multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:15429248}}}),nR=(0,C.a)({id:107107114116,name:"Kakarot Sepolia",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://sepolia-rpc.kakarot.org"]}},blockExplorers:{default:{name:"Kakarot Scan",url:"https://sepolia.kakarotscan.org"}},testnet:!0}),nU={...E,id:8996,name:"Ganache",network:"ganache",rpcUrls:{default:{http:["http://127.0.0.1:8545"]}}},nF=[x.R,A,K,V,Z,J,X,Y,$,ee,et,er,en,ea,eo,ei,es,el,ec,eu,ed,ep,eh,ef,em,eg,eb,ey,ev,ew,eC,eE,ex,eA,ek,eB,eS,eI,ej,eT,eP,eM,eO,eR,e_,eL,ez,eq,eG,eW,eH,eQ,eK,eV,eZ,eJ,eX,eY,e$,e0,e1,e6,e3,e2,e7,e8,e5,e4,e9,te,tt,tr,tn,ta,to,ti,ts,tl,tc,tu,td,tp,th,tf,tm,tg,tb,ty,tv,tw,tC,tE,tx,tA,tk,tB,tS,tI,tj,tT,tP,tM,tO,tR,tU,tF,tN,tD,t_,tL,tz,tq,tG,tW,tH,tQ,tK,tV,tZ,tJ,tX,tY,t$,t0,t1,t6,t3,t2,t7,t8,t5,t4,t9,re,rt,rr,rn,ra,ro,ri,rs,rl,rc,ru,rd,rp,rh,rf,rm,rg,rb,ry,rv,E,rw,rC,rE,rx,rA,rk,rB,rT,rP,rM,rO,rR,rU,rF,rN,rD,r_,rL,rz,rq,rG,rW,rH,rQ,rK,rV,rZ,rJ,rX,rY,r$,r0,r1,r6,r3,r2,r7,r8,r5,r4,r9,ne,nt,nr,nn,na,no,ni,ns,nl,nc,nu,nd,np,nh,nf,nm,ng,nb,ny,nv,nw,nC,nE,nx,nA,nk,nB,nS,nI,nj,nT,nP,nM,nO,nR,nU];var nN=n(27061);function App(e){let{Component:t,pageProps:n}=e,c=(0,s.vX)({appName:"Ocean Node Control Panel",projectId:nN.env.NEXT_PUBLIC_WALLET_CONNECT_ID?nN.env.NEXT_PUBLIC_WALLET_CONNECT_ID:"da267f7e1897e2cf92a7710f92e8f660",chains:nF,ssr:!0}),u=new v;return(0,o.jsx)(l.F,{config:c,children:(0,o.jsx)(w.aH,{client:u,children:(0,o.jsx)(s.pj,{children:(0,o.jsx)(i.I,{children:(0,o.jsx)(t,{...n})})})})})}},56953:function(){},32352:function(){},92592:function(e,t,n){let o=n(47138),i=n(95115),s=n(6907),l=n(93776);function renderCanvas(e,t,n,s,l){let c=[].slice.call(arguments,1),u=c.length,d="function"==typeof c[u-1];if(!d&&!o())throw Error("Callback required as last argument");if(d){if(u<2)throw Error("Too few arguments provided");2===u?(l=n,n=t,t=s=void 0):3===u&&(t.getContext&&void 0===l?(l=s,s=void 0):(l=s,s=n,n=t,t=void 0))}else{if(u<1)throw Error("Too few arguments provided");return 1===u?(n=t,t=s=void 0):2!==u||t.getContext||(s=n,n=t,t=void 0),new Promise(function(o,l){try{let l=i.create(n,s);o(e(l,t,s))}catch(e){l(e)}})}try{let o=i.create(n,s);l(null,e(o,t,s))}catch(e){l(e)}}t.create=i.create,t.toCanvas=renderCanvas.bind(null,s.render),t.toDataURL=renderCanvas.bind(null,s.renderToDataURL),t.toString=renderCanvas.bind(null,function(e,t,n){return l.render(e,n)})},47138:function(e){e.exports=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then}},21845:function(e,t,n){let o=n(10242).getSymbolSize;t.getRowColCoords=function(e){if(1===e)return[];let t=Math.floor(e/7)+2,n=o(e),i=145===n?26:2*Math.ceil((n-13)/(2*t-2)),s=[n-7];for(let e=1;e>>7-e%8&1)==1},put:function(e,t){for(let n=0;n>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},e.exports=BitBuffer},73280:function(e){function BitMatrix(e){if(!e||e<1)throw Error("BitMatrix size must be defined and greater than 0");this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}BitMatrix.prototype.set=function(e,t,n,o){let i=e*this.size+t;this.data[i]=n,o&&(this.reservedBit[i]=!0)},BitMatrix.prototype.get=function(e,t){return this.data[e*this.size+t]},BitMatrix.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},BitMatrix.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},e.exports=BitMatrix},43424:function(e,t,n){let o=n(62378),i=n(76910);function ByteData(e){this.mode=i.BYTE,"string"==typeof e&&(e=o(e)),this.data=new Uint8Array(e)}ByteData.getBitsLength=function(e){return 8*e},ByteData.prototype.getLength=function(){return this.data.length},ByteData.prototype.getBitsLength=function(){return ByteData.getBitsLength(this.data.length)},ByteData.prototype.write=function(e){for(let t=0,n=this.data.length;t=0&&e.bit<4},t.from=function(e,n){if(t.isValid(e))return e;try{return function(e){if("string"!=typeof e)throw Error("Param is not a string");let n=e.toLowerCase();switch(n){case"l":case"low":return t.L;case"m":case"medium":return t.M;case"q":case"quartile":return t.Q;case"h":case"high":return t.H;default:throw Error("Unknown EC Level: "+e)}}(e)}catch(e){return n}}},76526:function(e,t,n){let o=n(10242).getSymbolSize;t.getPositions=function(e){let t=o(e);return[[0,0],[t-7,0],[0,t-7]]}},61642:function(e,t,n){let o=n(10242),i=o.getBCHDigit(1335);t.getEncodedBits=function(e,t){let n=e.bit<<3|t,s=n<<10;for(;o.getBCHDigit(s)-i>=0;)s^=1335<=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error("Invalid SJIS character: "+this.data[t]+"\nMake sure your charset is UTF-8");n=(n>>>8&255)*192+(255&n),e.put(n,13)}},e.exports=KanjiData},27126:function(e,t){t.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};let n={N1:3,N2:3,N3:40,N4:10};t.isValid=function(e){return null!=e&&""!==e&&!isNaN(e)&&e>=0&&e<=7},t.from=function(e){return t.isValid(e)?parseInt(e,10):void 0},t.getPenaltyN1=function(e){let t=e.size,o=0,i=0,s=0,l=null,c=null;for(let u=0;u=5&&(o+=n.N1+(i-5)),l=t,i=1),(t=e.get(d,u))===c?s++:(s>=5&&(o+=n.N1+(s-5)),c=t,s=1)}i>=5&&(o+=n.N1+(i-5)),s>=5&&(o+=n.N1+(s-5))}return o},t.getPenaltyN2=function(e){let t=e.size,o=0;for(let n=0;n=10&&(1488===i||93===i)&&o++,s=s<<1&2047|e.get(l,n),l>=10&&(1488===s||93===s)&&o++}return o*n.N3},t.getPenaltyN4=function(e){let t=0,o=e.data.length;for(let n=0;n=1&&t<10?e.ccBits[0]:t<27?e.ccBits[1]:e.ccBits[2]},t.getBestModeForData=function(e){return i.testNumeric(e)?t.NUMERIC:i.testAlphanumeric(e)?t.ALPHANUMERIC:i.testKanji(e)?t.KANJI:t.BYTE},t.toString=function(e){if(e&&e.id)return e.id;throw Error("Invalid mode")},t.isValid=function(e){return e&&e.bit&&e.ccBits},t.from=function(e,n){if(t.isValid(e))return e;try{return function(e){if("string"!=typeof e)throw Error("Param is not a string");let n=e.toLowerCase();switch(n){case"numeric":return t.NUMERIC;case"alphanumeric":return t.ALPHANUMERIC;case"kanji":return t.KANJI;case"byte":return t.BYTE;default:throw Error("Unknown mode: "+e)}}(e)}catch(e){return n}}},41085:function(e,t,n){let o=n(76910);function NumericData(e){this.mode=o.NUMERIC,this.data=e.toString()}NumericData.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},NumericData.prototype.getLength=function(){return this.data.length},NumericData.prototype.getBitsLength=function(){return NumericData.getBitsLength(this.data.length)},NumericData.prototype.write=function(e){let t,n;for(t=0;t+3<=this.data.length;t+=3)n=parseInt(this.data.substr(t,3),10),e.put(n,10);let o=this.data.length-t;o>0&&(n=parseInt(this.data.substr(t),10),e.put(n,3*o+1))},e.exports=NumericData},26143:function(e,t,n){let o=n(69729);t.mul=function(e,t){let n=new Uint8Array(e.length+t.length-1);for(let i=0;i=0;){let e=n[0];for(let i=0;i>o&1)==1,o<6?e.set(o,8,i,!0):o<8?e.set(o+1,8,i,!0):e.set(s-15+o,8,i,!0),o<8?e.set(8,s-o-1,i,!0):o<9?e.set(8,15-o-1+1,i,!0):e.set(8,15-o-1,i,!0);e.set(s-8,8,1,!0)}t.create=function(e,t){let n,g;if(void 0===e||""===e)throw Error("No input text");let v=i.M;return void 0!==t&&(v=i.from(t.errorCorrectionLevel,i.M),n=m.from(t.version),g=d.from(t.maskPattern),t.toSJISFunc&&o.setToSJISFunction(t.toSJISFunc)),function(e,t,n,i){let g;if(Array.isArray(e))g=y.fromArray(e);else if("string"==typeof e){let o=t;if(!o){let t=y.rawSplit(e);o=m.getBestVersionForData(t,n)}g=y.fromString(e,o||40)}else throw Error("Invalid data");let v=m.getBestVersionForData(g,n);if(!v)throw Error("The amount of data is too big to be stored in a QR Code");if(t){if(t=0&&t<=6&&(0===o||6===o)||o>=0&&o<=6&&(0===t||6===t)||t>=2&&t<=4&&o>=2&&o<=4?e.set(i+t,s+o,!0,!0):e.set(i+t,s+o,!1,!0))}}(E,t),function(e){let t=e.size;for(let n=8;n=7&&function(e,t){let n,o,i;let s=e.size,l=m.getEncodedBits(t);for(let t=0;t<18;t++)n=Math.floor(t/3),o=t%3+s-8-3,i=(l>>t&1)==1,e.set(n,o,i,!0),e.set(o,n,i,!0)}(E,t),function(e,t){let n=e.size,o=-1,i=n-1,s=7,l=0;for(let c=n-1;c>0;c-=2)for(6===c&&c--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,c-n)){let o=!1;l>>s&1)==1),e.set(i,c-n,o),-1==--s&&(l++,s=7)}if((i+=o)<0||n<=i){i-=o,o=-o;break}}}(E,w),isNaN(i)&&(i=d.getBestMask(E,setupFormatInfo.bind(null,E,n))),d.applyMask(i,E),setupFormatInfo(E,n,i),{modules:E,version:t,errorCorrectionLevel:n,maskPattern:i,segments:g}}(e,n,v,g)}},52882:function(e,t,n){let o=n(26143);function ReedSolomonEncoder(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}ReedSolomonEncoder.prototype.initialize=function(e){this.degree=e,this.genPoly=o.generateECPolynomial(this.degree)},ReedSolomonEncoder.prototype.encode=function(e){if(!this.genPoly)throw Error("Encoder not initialized");let t=new Uint8Array(e.length+this.degree);t.set(e);let n=o.mod(t,this.genPoly),i=this.degree-n.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(n,i),e}return n},e.exports=ReedSolomonEncoder},7007:function(e,t){let n="[0-9]+",o="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";o=o.replace(/u/g,"\\u");let i="(?:(?![A-Z0-9 $%*+\\-./:]|"+o+")(?:.|[\r\n]))+";t.KANJI=RegExp(o,"g"),t.BYTE_KANJI=RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),t.BYTE=RegExp(i,"g"),t.NUMERIC=RegExp(n,"g"),t.ALPHANUMERIC=RegExp("[A-Z $%*+\\-./:]+","g");let s=RegExp("^"+o+"$"),l=RegExp("^"+n+"$"),c=RegExp("^[A-Z0-9 $%*+\\-./:]+$");t.testKanji=function(e){return s.test(e)},t.testNumeric=function(e){return l.test(e)},t.testAlphanumeric=function(e){return c.test(e)}},16130:function(e,t,n){let o=n(76910),i=n(41085),s=n(8260),l=n(43424),c=n(35442),u=n(7007),d=n(10242),p=n(65987);function getStringByteLength(e){return unescape(encodeURIComponent(e)).length}function getSegments(e,t,n){let o;let i=[];for(;null!==(o=e.exec(n));)i.push({data:o[0],index:o.index,mode:t,length:o[0].length});return i}function getSegmentsFromString(e){let t,n;let i=getSegments(u.NUMERIC,o.NUMERIC,e),s=getSegments(u.ALPHANUMERIC,o.ALPHANUMERIC,e);d.isKanjiModeEnabled()?(t=getSegments(u.BYTE,o.BYTE,e),n=getSegments(u.KANJI,o.KANJI,e)):(t=getSegments(u.BYTE_KANJI,o.BYTE,e),n=[]);let l=i.concat(s,t,n);return l.sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function getSegmentBitsLength(e,t){switch(t){case o.NUMERIC:return i.getBitsLength(e);case o.ALPHANUMERIC:return s.getBitsLength(e);case o.KANJI:return c.getBitsLength(e);case o.BYTE:return l.getBitsLength(e)}}function buildSingleSegment(e,t){let n;let u=o.getBestModeForData(e);if((n=o.from(t,u))!==o.BYTE&&n.bit=0?e[e.length-1]:null;return n&&n.mode===t.mode?e[e.length-1].data+=t.data:e.push(t),e},[]))},t.rawSplit=function(e){return t.fromArray(getSegmentsFromString(e,d.isKanjiModeEnabled()))}},10242:function(e,t){let n;let o=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];t.getSymbolSize=function(e){if(!e)throw Error('"version" cannot be null or undefined');if(e<1||e>40)throw Error('"version" should be in range from 1 to 40');return 4*e+17},t.getSymbolTotalCodewords=function(e){return o[e]},t.getBCHDigit=function(e){let t=0;for(;0!==e;)t++,e>>>=1;return t},t.setToSJISFunction=function(e){if("function"!=typeof e)throw Error('"toSJISFunc" is not a valid function.');n=e},t.isKanjiModeEnabled=function(){return void 0!==n},t.toSJIS=function(e){return n(e)}},43114:function(e,t){t.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}},23103:function(e,t,n){let o=n(10242),i=n(35393),s=n(64908),l=n(76910),c=n(43114),u=o.getBCHDigit(7973);function getReservedBitsCount(e,t){return l.getCharCountIndicator(e,t)+4}t.from=function(e,t){return c.isValid(e)?parseInt(e,10):t},t.getCapacity=function(e,t,n){if(!c.isValid(e))throw Error("Invalid QR Code version");void 0===n&&(n=l.BYTE);let s=o.getSymbolTotalCodewords(e),u=i.getTotalCodewordsCount(e,t),d=(s-u)*8;if(n===l.MIXED)return d;let p=d-getReservedBitsCount(n,e);switch(n){case l.NUMERIC:return Math.floor(p/10*3);case l.ALPHANUMERIC:return Math.floor(p/11*2);case l.KANJI:return Math.floor(p/13);case l.BYTE:default:return Math.floor(p/8)}},t.getBestVersionForData=function(e,n){let o;let i=s.from(n,s.M);if(Array.isArray(e)){if(e.length>1)return function(e,n){for(let o=1;o<=40;o++){let i=function(e,t){let n=0;return e.forEach(function(e){let o=getReservedBitsCount(e.mode,t);n+=o+e.getBitsLength()}),n}(e,o);if(i<=t.getCapacity(o,n,l.MIXED))return o}}(e,i);if(0===e.length)return 1;o=e[0]}else o=e;return function(e,n,o){for(let i=1;i<=40;i++)if(n<=t.getCapacity(i,o,e))return i}(o.mode,o.getLength(),i)},t.getEncodedBits=function(e){if(!c.isValid(e)||e<7)throw Error("Invalid QR Code version");let t=e<<12;for(;o.getBCHDigit(t)-u>=0;)t^=7973<':"",d="0&&u>0&&e[c-1]||(o+=s?svgCmd("M",u+n,.5+d+n):svgCmd("m",i,0),i=0,s=!1),u+1',p=i.width?'width="'+i.width+'" height="'+i.width+'" ':"",f=''+u+d+"\n";return"function"==typeof n&&n(null,f),f}},89653:function(e,t){function hex2rgba(e){if("number"==typeof e&&(e=e.toString()),"string"!=typeof e)throw Error("Color should be defined as hex string");let t=e.slice().replace("#","").split("");if(t.length<3||5===t.length||t.length>8)throw Error("Invalid hex color: "+e);(3===t.length||4===t.length)&&(t=Array.prototype.concat.apply([],t.map(function(e){return[e,e]}))),6===t.length&&t.push("F","F");let n=parseInt(t.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:255&n,hex:"#"+t.slice(0,6).join("")}}t.getOptions=function(e){e||(e={}),e.color||(e.color={});let t=void 0===e.margin||null===e.margin||e.margin<0?4:e.margin,n=e.width&&e.width>=21?e.width:void 0,o=e.scale||4;return{width:n,scale:n?4:o,margin:t,color:{dark:hex2rgba(e.color.dark||"#000000ff"),light:hex2rgba(e.color.light||"#ffffffff")},type:e.type,rendererOpts:e.rendererOpts||{}}},t.getScale=function(e,t){return t.width&&t.width>=e+2*t.margin?t.width/(e+2*t.margin):t.scale},t.getImageWidth=function(e,n){let o=t.getScale(e,n);return Math.floor((e+2*n.margin)*o)},t.qrToImageData=function(e,n,o){let i=n.modules.size,s=n.modules.data,l=t.getScale(i,o),c=Math.floor((i+2*o.margin)*l),u=o.margin*l,d=[o.color.light,o.color.dark];for(let t=0;t=u&&n>=u&&tt.indexOf(o)&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,o=Object.getOwnPropertySymbols(e);it.indexOf(o[i])&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(n[o[i]]=e[o[i]]);return n}function __decorate(e,t,n,o){var i,s=arguments.length,l=s<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,n,o);else for(var c=e.length-1;c>=0;c--)(i=e[c])&&(l=(s<3?i(l):s>3?i(t,n,l):i(t,n))||l);return s>3&&l&&Object.defineProperty(t,n,l),l}function __param(e,t){return function(n,o){t(n,o,e)}}function __metadata(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function __awaiter(e,t,n,o){return new(n||(n=Promise))(function(i,s){function fulfilled(e){try{step(o.next(e))}catch(e){s(e)}}function rejected(e){try{step(o.throw(e))}catch(e){s(e)}}function step(e){var t;e.done?i(e.value):((t=e.value)instanceof n?t:new n(function(e){e(t)})).then(fulfilled,rejected)}step((o=o.apply(e,t||[])).next())})}function __generator(e,t){var n,o,i,s,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return s={next:verb(0),throw:verb(1),return:verb(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function verb(s){return function(c){return function(s){if(n)throw TypeError("Generator is already executing.");for(;l;)try{if(n=1,o&&(i=2&s[0]?o.return:s[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;switch(o=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return l.label++,{value:s[1],done:!1};case 5:l.label++,o=s[1],s=[0];continue;case 7:s=l.ops.pop(),l.trys.pop();continue;default:if(!(i=(i=l.trys).length>0&&i[i.length-1])&&(6===s[0]||2===s[0])){l=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,i,s=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(o=s.next()).done;)l.push(o.value)}catch(e){i={error:e}}finally{try{o&&!o.done&&(n=s.return)&&n.call(s)}finally{if(i)throw i.error}}return l}function __spread(){for(var e=[],t=0;t1||resume(e,t)})})}function resume(e,t){try{var n;(n=i[e](t)).value instanceof __await?Promise.resolve(n.value.v).then(fulfill,reject):settle(s[0][2],n)}catch(e){settle(s[0][3],e)}}function fulfill(e){resume("next",e)}function reject(e){resume("throw",e)}function settle(e,t){e(t),s.shift(),s.length&&resume(s[0][0],s[0][1])}}function __asyncDelegator(e){var t,n;return t={},verb("next"),verb("throw",function(e){throw e}),verb("return"),t[Symbol.iterator]=function(){return this},t;function verb(o,i){t[o]=e[o]?function(t){return(n=!n)?{value:__await(e[o](t)),done:"return"===o}:i?i(t):t}:i}}function __asyncValues(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=__values(e),t={},verb("next"),verb("throw"),verb("return"),t[Symbol.asyncIterator]=function(){return this},t);function verb(n){t[n]=e[n]&&function(t){return new Promise(function(o,i){!function(e,t,n,o){Promise.resolve(o).then(function(t){e({value:t,done:n})},t)}(o,i,(t=e[n](t)).done,t.value)})}}}function __makeTemplateObject(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var i=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function __importStar(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return i(t,e),t}function __importDefault(e){return e&&e.__esModule?e:{default:e}}function __classPrivateFieldGet(e,t,n,o){if("a"===n&&!o)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(e):o?o.value:t.get(e)}function __classPrivateFieldSet(e,t,n,o,i){if("m"===o)throw TypeError("Private method is not writable");if("a"===o&&!i)throw TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(e,n):i?i.value=n:t.set(e,n),n}function __classPrivateFieldIn(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}},42238:function(e,t,n){var o;!function(i,s){"use strict";var l="function",c="undefined",u="object",d="string",p="major",f="model",m="name",g="type",b="vendor",y="version",v="architecture",w="console",C="mobile",E="tablet",x="smarttv",A="wearable",k="embedded",B="Amazon",S="Apple",I="ASUS",j="BlackBerry",T="Browser",P="Chrome",M="Firefox",O="Google",R="Huawei",U="Microsoft",F="Motorola",N="Opera",D="Samsung",_="Sharp",L="Sony",z="Xiaomi",q="Zebra",G="Facebook",W="Chromium OS",H="Mac OS",extend=function(e,t){var n={};for(var o in e)t[o]&&t[o].length%2==0?n[o]=t[o].concat(e[o]):n[o]=e[o];return n},enumerize=function(e){for(var t={},n=0;n0?2===c.length?typeof c[1]==l?this[c[0]]=c[1].call(this,p):this[c[0]]=c[1]:3===c.length?typeof c[1]!==l||c[1].exec&&c[1].test?this[c[0]]=p?p.replace(c[1],c[2]):s:this[c[0]]=p?c[1].call(this,p,c[2]):s:4===c.length&&(this[c[0]]=p?c[3].call(this,p.replace(c[1],c[2])):s):this[c]=p||s;f+=2}},strMapper=function(e,t){for(var n in t)if(typeof t[n]===u&&t[n].length>0){for(var o=0;o2&&(e[f]="iPad",e[g]=E),e},this.getEngine=function(){var e={};return e[m]=s,e[y]=s,rgxMapper.call(e,o,x.engine),e},this.getOS=function(){var e={};return e[m]=s,e[y]=s,rgxMapper.call(e,o,x.os),A&&!e[m]&&w&&"Unknown"!=w.platform&&(e[m]=w.platform.replace(/chrome os/i,W).replace(/macos/i,H)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return o},this.setUA=function(e){return o=typeof e===d&&e.length>500?trim(e,500):e,this},this.setUA(o),this};UAParser.VERSION="1.0.37",UAParser.BROWSER=enumerize([m,y,p]),UAParser.CPU=enumerize([v]),UAParser.DEVICE=enumerize([f,b,g,w,C,x,E,A,k]),UAParser.ENGINE=UAParser.OS=enumerize([m,y]),typeof t!==c?(e.exports&&(t=e.exports=UAParser),t.UAParser=UAParser):n.amdO?s!==(o=(function(){return UAParser}).call(t,n,t,e))&&(e.exports=o):typeof i!==c&&(i.UAParser=UAParser);var V=typeof i!==c&&(i.jQuery||i.Zepto);if(V&&!V.ua){var Z=new UAParser;V.ua=Z.getResult(),V.ua.get=function(){return Z.getUA()},V.ua.set=function(e){Z.setUA(e);var t=Z.getResult();for(var n in t)V.ua[n]=t[n]}}}("object"==typeof window?window:this)},53250:function(e,t,n){"use strict";/** * @license React * use-sync-external-store-shim.production.min.js * @@ -14,7 +14,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var o=n(67294),i=n(61688),s="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},l=i.useSyncExternalStore,c=o.useRef,u=o.useEffect,d=o.useMemo,p=o.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,o,i){var f=c(null);if(null===f.current){var m={hasValue:!1,value:null};f.current=m}else m=f.current;var b=l(e,(f=d(function(){function a(t){if(!c){if(c=!0,e=t,t=o(t),void 0!==i&&m.hasValue){var n=m.value;if(i(n,t))return l=n}return l=t}if(n=l,s(e,t))return n;var u=o(t);return void 0!==i&&i(n,u)?n:(e=t,l=u)}var e,l,c=!1,u=void 0===n?null:n;return[function(){return a(t())},null===u?void 0:function(){return a(u())}]},[t,n,o,i]))[0],f[1]);return u(function(){m.hasValue=!0,m.value=b},[b]),p(b),b}},61688:function(e,t,n){"use strict";e.exports=n(53250)},52798:function(e,t,n){"use strict";e.exports=n(50139)},27061:function(e){var t,n,o,i=e.exports={};function defaultSetTimout(){throw Error("setTimeout has not been defined")}function defaultClearTimeout(){throw Error("clearTimeout has not been defined")}function runTimeout(e){if(t===setTimeout)return setTimeout(e,0);if((t===defaultSetTimout||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){t=defaultSetTimout}try{n="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){n=defaultClearTimeout}}();var s=[],l=!1,c=-1;function cleanUpNextTick(){l&&o&&(l=!1,o.length?s=o.concat(s):c=-1,s.length&&drainQueue())}function drainQueue(){if(!l){var e=runTimeout(cleanUpNextTick);l=!0;for(var t=s.length;t;){for(o=s,s=[];++c1)for(var n=1;ne instanceof Uint8Array,s=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function bytesToHex(e){if(!u8a(e))throw Error("Uint8Array expected");let t="";for(let n=0;ne+t.length,0)),n=0;return e.forEach(e=>{if(!u8a(e))throw Error("Uint8Array expected");t.set(e,n),n+=e.length}),t}function equalBytes(e,t){if(e.length!==t.length)return!1;for(let n=0;n(i<new Uint8Array(e),u8fr=e=>Uint8Array.from(e);function createHmacDrbg(e,t,n){if("number"!=typeof e||e<2)throw Error("hashLen must be a number");if("number"!=typeof t||t<2)throw Error("qByteLen must be a number");if("function"!=typeof n)throw Error("hmacFn must be a function");let o=u8n(e),i=u8n(e),s=0,reset=()=>{o.fill(1),i.fill(0),s=0},h=(...e)=>n(i,o,...e),reseed=(e=u8n())=>{i=h(u8fr([0]),e),o=h(),0!==e.length&&(i=h(u8fr([1]),e),o=h())},gen=()=>{if(s++>=1e3)throw Error("drbg: tried 1000 values");let e=0,n=[];for(;e{let n;for(reset(),reseed(e);!(n=t(gen()));)reseed();return reset(),n}}let l={bigint:e=>"bigint"==typeof e,function:e=>"function"==typeof e,boolean:e=>"boolean"==typeof e,string:e=>"string"==typeof e,stringOrUint8Array:e=>"string"==typeof e||e instanceof Uint8Array,isSafeInteger:e=>Number.isSafeInteger(e),array:e=>Array.isArray(e),field:(e,t)=>t.Fp.isValid(e),hash:e=>"function"==typeof e&&Number.isSafeInteger(e.outputLen)};function validateObject(e,t,n={}){let checkField=(t,n,o)=>{let i=l[n];if("function"!=typeof i)throw Error(`Invalid validator "${n}", expected function`);let s=e[t];if((!o||void 0!==s)&&!i(s,e))throw Error(`Invalid param ${String(t)}=${s} (${typeof s}), expected ${n}`)};for(let[e,n]of Object.entries(t))checkField(e,n,!1);for(let[e,t]of Object.entries(n))checkField(e,t,!0);return e}},93527:function(e,t,n){"use strict";function number(e){if(!Number.isSafeInteger(e)||e<0)throw Error(`Wrong positive integer: ${e}`)}function bytes(e,...t){if(!(e instanceof Uint8Array))throw Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function hash(e){if("function"!=typeof e||"function"!=typeof e.create)throw Error("Hash should be wrapped by utils.wrapConstructor");number(e.outputLen),number(e.blockLen)}function exists(e,t=!0){if(e.destroyed)throw Error("Hash instance has been destroyed");if(t&&e.finished)throw Error("Hash#digest() has already been called")}function output(e,t){bytes(e);let n=t.outputLen;if(e.lengths-c&&(this.process(n,0),c=0);for(let e=c;e>i&s),c=Number(n&s),u=o?4:0,d=o?0:4;e.setUint32(t+u,l,o),e.setUint32(t+d,c,o)}(n,s-8,BigInt(8*this.length),l),this.process(n,0);let u=(0,i.GL)(e),d=this.outputLen;if(d%4)throw Error("_sha2: outputLen should be aligned to 32bit");let p=d/4,f=this.get();if(p>f.length)throw Error("_sha2: outputLen bigger than state");for(let e=0;ee&t^~e&n,Maj=(e,t,n)=>e&t^e&n^t&n,s=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),l=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),c=new Uint32Array(64);let SHA256=class SHA256 extends SHA2{constructor(){super(64,32,8,!1),this.A=0|l[0],this.B=0|l[1],this.C=0|l[2],this.D=0|l[3],this.E=0|l[4],this.F=0|l[5],this.G=0|l[6],this.H=0|l[7]}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:l,H:c}=this;return[e,t,n,o,i,s,l,c]}set(e,t,n,o,i,s,l,c){this.A=0|e,this.B=0|t,this.C=0|n,this.D=0|o,this.E=0|i,this.F=0|s,this.G=0|l,this.H=0|c}process(e,t){for(let n=0;n<16;n++,t+=4)c[n]=e.getUint32(t,!1);for(let e=16;e<64;e++){let t=c[e-15],n=c[e-2],o=(0,i.np)(t,7)^(0,i.np)(t,18)^t>>>3,s=(0,i.np)(n,17)^(0,i.np)(n,19)^n>>>10;c[e]=s+c[e-7]+o+c[e-16]|0}let{A:n,B:o,C:l,D:u,E:d,F:p,G:f,H:m}=this;for(let e=0;e<64;e++){let t=(0,i.np)(d,6)^(0,i.np)(d,11)^(0,i.np)(d,25),b=m+t+Chi(d,p,f)+s[e]+c[e]|0,g=(0,i.np)(n,2)^(0,i.np)(n,13)^(0,i.np)(n,22),y=g+Maj(n,o,l)|0;m=f,f=p,p=d,d=u+b|0,u=l,l=o,o=n,n=b+y|0}n=n+this.A|0,o=o+this.B|0,l=l+this.C|0,u=u+this.D|0,d=d+this.E|0,p=p+this.F|0,f=f+this.G|0,m=m+this.H|0,this.set(n,o,l,u,d,p,f,m)}roundClean(){c.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};let u=(0,i.hE)(()=>new SHA256)},22250:function(e,t,n){"use strict";n.d(t,{fr:function(){return C}});var o=n(93527);let i=BigInt(4294967296-1),s=BigInt(32),rotlSH=(e,t,n)=>e<>>32-n,rotlSL=(e,t,n)=>t<>>32-n,rotlBH=(e,t,n)=>t<>>64-n,rotlBL=(e,t,n)=>e<>>64-n;var l=n(66409);let[c,u,d]=[[],[],[]],p=BigInt(0),f=BigInt(1),m=BigInt(2),b=BigInt(7),g=BigInt(256),y=BigInt(113);for(let e=0,t=f,n=1,o=0;e<24;e++){[n,o]=[o,(2*n+3*o)%5],c.push(2*(5*o+n)),u.push((e+1)*(e+2)/2%64);let i=p;for(let e=0;e<7;e++)(t=(t<>b)*y)%g)&m&&(i^=f<<(f<>s&i)}:{h:0|Number(e>>s&i),l:0|Number(e&i)}}(e[l],t);[n[l],o[l]]=[c,u]}return[n,o]}(d,!0),rotlH=(e,t,n)=>n>32?rotlBH(e,t,n):rotlSH(e,t,n),rotlL=(e,t,n)=>n>32?rotlBL(e,t,n):rotlSL(e,t,n);let Keccak=class Keccak extends l.kb{constructor(e,t,n,i=!1,s=24){if(super(),this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=i,this.rounds=s,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,(0,o.Rx)(n),0>=this.blockLen||this.blockLen>=200)throw Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=(0,l.Jq)(this.state)}keccak(){!function(e,t=24){let n=new Uint32Array(10);for(let o=24-t;o<24;o++){for(let t=0;t<10;t++)n[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){let o=(t+8)%10,i=(t+2)%10,s=n[i],l=n[i+1],c=rotlH(s,l,1)^n[o],u=rotlL(s,l,1)^n[o+1];for(let n=0;n<50;n+=10)e[t+n]^=c,e[t+n+1]^=u}let t=e[2],i=e[3];for(let n=0;n<24;n++){let o=u[n],s=rotlH(t,i,o),l=rotlL(t,i,o),d=c[n];t=e[d],i=e[d+1],e[d]=s,e[d+1]=l}for(let t=0;t<50;t+=10){for(let o=0;o<10;o++)n[o]=e[t+o];for(let o=0;o<10;o++)e[t+o]^=~n[(o+2)%10]&n[(o+4)%10]}e[0]^=v[o],e[1]^=w[o]}n.fill(0)}(this.state32,this.rounds),this.posOut=0,this.pos=0}update(e){(0,o.Gg)(this);let{blockLen:t,state:n}=this;e=(0,l.O0)(e);let i=e.length;for(let o=0;o=n&&this.keccak();let s=Math.min(n-this.posOut,i-o);e.set(t.subarray(this.posOut,this.posOut+s),o),this.posOut+=s,o+=s}return e}xofInto(e){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return(0,o.Rx)(e),this.xofInto(new Uint8Array(e))}digestInto(e){if((0,o.J8)(e,this),this.finished)throw Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){let{blockLen:t,suffix:n,outputLen:o,rounds:i,enableXOF:s}=this;return e||(e=new Keccak(t,n,o,s,i)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=i,e.suffix=n,e.outputLen=o,e.enableXOF=s,e.destroyed=this.destroyed,e}};let C=(0,l.hE)(()=>new Keccak(136,1,32))},66409:function(e,t,n){"use strict";n.d(t,{kb:function(){return Hash},eV:function(){return concatBytes},GL:function(){return createView},O6:function(){return randomBytes},np:function(){return rotr},O0:function(){return toBytes},Jq:function(){return u32},hE:function(){return wrapConstructor}});let o="object"==typeof globalThis&&"crypto"in globalThis?globalThis.crypto:void 0,u8a=e=>e instanceof Uint8Array,u32=e=>new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4)),createView=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),rotr=(e,t)=>e<<32-t|e>>>t,i=68===new Uint8Array(new Uint32Array([287454020]).buffer)[0];if(!i)throw Error("Non little-endian hardware is not supported");function toBytes(e){if("string"==typeof e&&(e=function(e){if("string"!=typeof e)throw Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}(e)),!u8a(e))throw Error(`expected Uint8Array, got ${typeof e}`);return e}function concatBytes(...e){let t=new Uint8Array(e.reduce((e,t)=>e+t.length,0)),n=0;return e.forEach(e=>{if(!u8a(e))throw Error("Uint8Array expected");t.set(e,n),n+=e.length}),t}let Hash=class Hash{clone(){return this._cloneInto()}};function wrapConstructor(e){let hashC=t=>e().update(toBytes(t)).digest(),t=e();return hashC.outputLen=t.outputLen,hashC.blockLen=t.blockLen,hashC.create=()=>e(),hashC}function randomBytes(e=32){if(o&&"function"==typeof o.getRandomValues)return o.getRandomValues(new Uint8Array(e));throw Error("crypto.getRandomValues must be defined")}},93763:function(e,t,n){"use strict";n.d(t,{I:function(){return o}});var o=`{ + */var o=n(67294),i=n(61688),s="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},l=i.useSyncExternalStore,c=o.useRef,u=o.useEffect,d=o.useMemo,p=o.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,o,i){var f=c(null);if(null===f.current){var m={hasValue:!1,value:null};f.current=m}else m=f.current;var g=l(e,(f=d(function(){function a(t){if(!c){if(c=!0,e=t,t=o(t),void 0!==i&&m.hasValue){var n=m.value;if(i(n,t))return l=n}return l=t}if(n=l,s(e,t))return n;var u=o(t);return void 0!==i&&i(n,u)?n:(e=t,l=u)}var e,l,c=!1,u=void 0===n?null:n;return[function(){return a(t())},null===u?void 0:function(){return a(u())}]},[t,n,o,i]))[0],f[1]);return u(function(){m.hasValue=!0,m.value=g},[g]),p(g),g}},61688:function(e,t,n){"use strict";e.exports=n(53250)},52798:function(e,t,n){"use strict";e.exports=n(50139)},27061:function(e){var t,n,o,i=e.exports={};function defaultSetTimout(){throw Error("setTimeout has not been defined")}function defaultClearTimeout(){throw Error("clearTimeout has not been defined")}function runTimeout(e){if(t===setTimeout)return setTimeout(e,0);if((t===defaultSetTimout||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){t=defaultSetTimout}try{n="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){n=defaultClearTimeout}}();var s=[],l=!1,c=-1;function cleanUpNextTick(){l&&o&&(l=!1,o.length?s=o.concat(s):c=-1,s.length&&drainQueue())}function drainQueue(){if(!l){var e=runTimeout(cleanUpNextTick);l=!0;for(var t=s.length;t;){for(o=s,s=[];++c1)for(var n=1;ne instanceof Uint8Array,s=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function bytesToHex(e){if(!u8a(e))throw Error("Uint8Array expected");let t="";for(let n=0;ne+t.length,0)),n=0;return e.forEach(e=>{if(!u8a(e))throw Error("Uint8Array expected");t.set(e,n),n+=e.length}),t}function equalBytes(e,t){if(e.length!==t.length)return!1;for(let n=0;n(i<new Uint8Array(e),u8fr=e=>Uint8Array.from(e);function createHmacDrbg(e,t,n){if("number"!=typeof e||e<2)throw Error("hashLen must be a number");if("number"!=typeof t||t<2)throw Error("qByteLen must be a number");if("function"!=typeof n)throw Error("hmacFn must be a function");let o=u8n(e),i=u8n(e),s=0,reset=()=>{o.fill(1),i.fill(0),s=0},h=(...e)=>n(i,o,...e),reseed=(e=u8n())=>{i=h(u8fr([0]),e),o=h(),0!==e.length&&(i=h(u8fr([1]),e),o=h())},gen=()=>{if(s++>=1e3)throw Error("drbg: tried 1000 values");let e=0,n=[];for(;e{let n;for(reset(),reseed(e);!(n=t(gen()));)reseed();return reset(),n}}let l={bigint:e=>"bigint"==typeof e,function:e=>"function"==typeof e,boolean:e=>"boolean"==typeof e,string:e=>"string"==typeof e,stringOrUint8Array:e=>"string"==typeof e||e instanceof Uint8Array,isSafeInteger:e=>Number.isSafeInteger(e),array:e=>Array.isArray(e),field:(e,t)=>t.Fp.isValid(e),hash:e=>"function"==typeof e&&Number.isSafeInteger(e.outputLen)};function validateObject(e,t,n={}){let checkField=(t,n,o)=>{let i=l[n];if("function"!=typeof i)throw Error(`Invalid validator "${n}", expected function`);let s=e[t];if((!o||void 0!==s)&&!i(s,e))throw Error(`Invalid param ${String(t)}=${s} (${typeof s}), expected ${n}`)};for(let[e,n]of Object.entries(t))checkField(e,n,!1);for(let[e,t]of Object.entries(n))checkField(e,t,!0);return e}},93527:function(e,t,n){"use strict";function number(e){if(!Number.isSafeInteger(e)||e<0)throw Error(`Wrong positive integer: ${e}`)}function bytes(e,...t){if(!(e instanceof Uint8Array))throw Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function hash(e){if("function"!=typeof e||"function"!=typeof e.create)throw Error("Hash should be wrapped by utils.wrapConstructor");number(e.outputLen),number(e.blockLen)}function exists(e,t=!0){if(e.destroyed)throw Error("Hash instance has been destroyed");if(t&&e.finished)throw Error("Hash#digest() has already been called")}function output(e,t){bytes(e);let n=t.outputLen;if(e.lengths-c&&(this.process(n,0),c=0);for(let e=c;e>i&s),c=Number(n&s),u=o?4:0,d=o?0:4;e.setUint32(t+u,l,o),e.setUint32(t+d,c,o)}(n,s-8,BigInt(8*this.length),l),this.process(n,0);let u=(0,i.GL)(e),d=this.outputLen;if(d%4)throw Error("_sha2: outputLen should be aligned to 32bit");let p=d/4,f=this.get();if(p>f.length)throw Error("_sha2: outputLen bigger than state");for(let e=0;ee&t^~e&n,Maj=(e,t,n)=>e&t^e&n^t&n,s=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),l=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),c=new Uint32Array(64);let SHA256=class SHA256 extends SHA2{constructor(){super(64,32,8,!1),this.A=0|l[0],this.B=0|l[1],this.C=0|l[2],this.D=0|l[3],this.E=0|l[4],this.F=0|l[5],this.G=0|l[6],this.H=0|l[7]}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:l,H:c}=this;return[e,t,n,o,i,s,l,c]}set(e,t,n,o,i,s,l,c){this.A=0|e,this.B=0|t,this.C=0|n,this.D=0|o,this.E=0|i,this.F=0|s,this.G=0|l,this.H=0|c}process(e,t){for(let n=0;n<16;n++,t+=4)c[n]=e.getUint32(t,!1);for(let e=16;e<64;e++){let t=c[e-15],n=c[e-2],o=(0,i.np)(t,7)^(0,i.np)(t,18)^t>>>3,s=(0,i.np)(n,17)^(0,i.np)(n,19)^n>>>10;c[e]=s+c[e-7]+o+c[e-16]|0}let{A:n,B:o,C:l,D:u,E:d,F:p,G:f,H:m}=this;for(let e=0;e<64;e++){let t=(0,i.np)(d,6)^(0,i.np)(d,11)^(0,i.np)(d,25),g=m+t+Chi(d,p,f)+s[e]+c[e]|0,b=(0,i.np)(n,2)^(0,i.np)(n,13)^(0,i.np)(n,22),y=b+Maj(n,o,l)|0;m=f,f=p,p=d,d=u+g|0,u=l,l=o,o=n,n=g+y|0}n=n+this.A|0,o=o+this.B|0,l=l+this.C|0,u=u+this.D|0,d=d+this.E|0,p=p+this.F|0,f=f+this.G|0,m=m+this.H|0,this.set(n,o,l,u,d,p,f,m)}roundClean(){c.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};let u=(0,i.hE)(()=>new SHA256)},22250:function(e,t,n){"use strict";n.d(t,{fr:function(){return C}});var o=n(93527);let i=BigInt(4294967296-1),s=BigInt(32),rotlSH=(e,t,n)=>e<>>32-n,rotlSL=(e,t,n)=>t<>>32-n,rotlBH=(e,t,n)=>t<>>64-n,rotlBL=(e,t,n)=>e<>>64-n;var l=n(66409);let[c,u,d]=[[],[],[]],p=BigInt(0),f=BigInt(1),m=BigInt(2),g=BigInt(7),b=BigInt(256),y=BigInt(113);for(let e=0,t=f,n=1,o=0;e<24;e++){[n,o]=[o,(2*n+3*o)%5],c.push(2*(5*o+n)),u.push((e+1)*(e+2)/2%64);let i=p;for(let e=0;e<7;e++)(t=(t<>g)*y)%b)&m&&(i^=f<<(f<>s&i)}:{h:0|Number(e>>s&i),l:0|Number(e&i)}}(e[l],t);[n[l],o[l]]=[c,u]}return[n,o]}(d,!0),rotlH=(e,t,n)=>n>32?rotlBH(e,t,n):rotlSH(e,t,n),rotlL=(e,t,n)=>n>32?rotlBL(e,t,n):rotlSL(e,t,n);let Keccak=class Keccak extends l.kb{constructor(e,t,n,i=!1,s=24){if(super(),this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=i,this.rounds=s,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,(0,o.Rx)(n),0>=this.blockLen||this.blockLen>=200)throw Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=(0,l.Jq)(this.state)}keccak(){!function(e,t=24){let n=new Uint32Array(10);for(let o=24-t;o<24;o++){for(let t=0;t<10;t++)n[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){let o=(t+8)%10,i=(t+2)%10,s=n[i],l=n[i+1],c=rotlH(s,l,1)^n[o],u=rotlL(s,l,1)^n[o+1];for(let n=0;n<50;n+=10)e[t+n]^=c,e[t+n+1]^=u}let t=e[2],i=e[3];for(let n=0;n<24;n++){let o=u[n],s=rotlH(t,i,o),l=rotlL(t,i,o),d=c[n];t=e[d],i=e[d+1],e[d]=s,e[d+1]=l}for(let t=0;t<50;t+=10){for(let o=0;o<10;o++)n[o]=e[t+o];for(let o=0;o<10;o++)e[t+o]^=~n[(o+2)%10]&n[(o+4)%10]}e[0]^=v[o],e[1]^=w[o]}n.fill(0)}(this.state32,this.rounds),this.posOut=0,this.pos=0}update(e){(0,o.Gg)(this);let{blockLen:t,state:n}=this;e=(0,l.O0)(e);let i=e.length;for(let o=0;o=n&&this.keccak();let s=Math.min(n-this.posOut,i-o);e.set(t.subarray(this.posOut,this.posOut+s),o),this.posOut+=s,o+=s}return e}xofInto(e){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return(0,o.Rx)(e),this.xofInto(new Uint8Array(e))}digestInto(e){if((0,o.J8)(e,this),this.finished)throw Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){let{blockLen:t,suffix:n,outputLen:o,rounds:i,enableXOF:s}=this;return e||(e=new Keccak(t,n,o,s,i)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=i,e.suffix=n,e.outputLen=o,e.enableXOF=s,e.destroyed=this.destroyed,e}};let C=(0,l.hE)(()=>new Keccak(136,1,32))},66409:function(e,t,n){"use strict";n.d(t,{kb:function(){return Hash},eV:function(){return concatBytes},GL:function(){return createView},O6:function(){return randomBytes},np:function(){return rotr},O0:function(){return toBytes},Jq:function(){return u32},hE:function(){return wrapConstructor}});let o="object"==typeof globalThis&&"crypto"in globalThis?globalThis.crypto:void 0,u8a=e=>e instanceof Uint8Array,u32=e=>new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4)),createView=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),rotr=(e,t)=>e<<32-t|e>>>t,i=68===new Uint8Array(new Uint32Array([287454020]).buffer)[0];if(!i)throw Error("Non little-endian hardware is not supported");function toBytes(e){if("string"==typeof e&&(e=function(e){if("string"!=typeof e)throw Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}(e)),!u8a(e))throw Error(`expected Uint8Array, got ${typeof e}`);return e}function concatBytes(...e){let t=new Uint8Array(e.reduce((e,t)=>e+t.length,0)),n=0;return e.forEach(e=>{if(!u8a(e))throw Error("Uint8Array expected");t.set(e,n),n+=e.length}),t}let Hash=class Hash{clone(){return this._cloneInto()}};function wrapConstructor(e){let hashC=t=>e().update(toBytes(t)).digest(),t=e();return hashC.outputLen=t.outputLen,hashC.blockLen=t.blockLen,hashC.create=()=>e(),hashC}function randomBytes(e=32){if(o&&"function"==typeof o.getRandomValues)return o.getRandomValues(new Uint8Array(e));throw Error("crypto.getRandomValues must be defined")}},93763:function(e,t,n){"use strict";n.d(t,{I:function(){return o}});var o=`{ "connect_wallet": { "label": "Connect Wallet", "wrong_network": { @@ -1124,8 +1124,8 @@ } } } -`},89192:function(e,t,n){"use strict";let o,i,s,l,c,u,d,p,f,m,b,g,y,v,w,C,E;n.d(t,{NL:function(){return ConnectButton},pj:function(){return RainbowKitProvider},vX:function(){return getDefaultConfig}});var x,A,k,B,S,I,j,T,P='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',M={rounded:`SFRounded, ui-rounded, "SF Pro Rounded", ${P}`,system:P},O={large:{actionButton:"9999px",connectButton:"12px",modal:"24px",modalMobile:"28px"},medium:{actionButton:"10px",connectButton:"8px",modal:"16px",modalMobile:"18px"},none:{actionButton:"0px",connectButton:"0px",modal:"0px",modalMobile:"0px"},small:{actionButton:"4px",connectButton:"4px",modal:"8px",modalMobile:"8px"}},R={large:{modalOverlay:"blur(20px)"},none:{modalOverlay:"blur(0px)"},small:{modalOverlay:"blur(4px)"}},baseTheme=({borderRadius:e="large",fontStack:t="rounded",overlayBlur:n="none"})=>({blurs:{modalOverlay:R[n].modalOverlay},fonts:{body:M[t]},radii:{actionButton:O[e].actionButton,connectButton:O[e].connectButton,menuButton:O[e].connectButton,modal:O[e].modal,modalMobile:O[e].modalMobile}}),U={blue:{accentColor:"#0E76FD",accentColorForeground:"#FFF"},green:{accentColor:"#1DB847",accentColorForeground:"#FFF"},orange:{accentColor:"#FF801F",accentColorForeground:"#FFF"},pink:{accentColor:"#FF5CA0",accentColorForeground:"#FFF"},purple:{accentColor:"#5F5AFA",accentColorForeground:"#FFF"},red:{accentColor:"#FA423C",accentColorForeground:"#FFF"}},F=U.blue,lightTheme=({accentColor:e=F.accentColor,accentColorForeground:t=F.accentColorForeground,...n}={})=>({...baseTheme(n),colors:{accentColor:e,accentColorForeground:t,actionButtonBorder:"rgba(0, 0, 0, 0.04)",actionButtonBorderMobile:"rgba(0, 0, 0, 0.06)",actionButtonSecondaryBackground:"rgba(0, 0, 0, 0.06)",closeButton:"rgba(60, 66, 66, 0.8)",closeButtonBackground:"rgba(0, 0, 0, 0.06)",connectButtonBackground:"#FFF",connectButtonBackgroundError:"#FF494A",connectButtonInnerBackground:"linear-gradient(0deg, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.06))",connectButtonText:"#25292E",connectButtonTextError:"#FFF",connectionIndicator:"#30E000",downloadBottomCardBackground:"linear-gradient(126deg, rgba(255, 255, 255, 0) 9.49%, rgba(171, 171, 171, 0.04) 71.04%), #FFFFFF",downloadTopCardBackground:"linear-gradient(126deg, rgba(171, 171, 171, 0.2) 9.49%, rgba(255, 255, 255, 0) 71.04%), #FFFFFF",error:"#FF494A",generalBorder:"rgba(0, 0, 0, 0.06)",generalBorderDim:"rgba(0, 0, 0, 0.03)",menuItemBackground:"rgba(60, 66, 66, 0.1)",modalBackdrop:"rgba(0, 0, 0, 0.3)",modalBackground:"#FFF",modalBorder:"transparent",modalText:"#25292E",modalTextDim:"rgba(60, 66, 66, 0.3)",modalTextSecondary:"rgba(60, 66, 66, 0.6)",profileAction:"#FFF",profileActionHover:"rgba(255, 255, 255, 0.5)",profileForeground:"rgba(60, 66, 66, 0.06)",selectedOptionBorder:"rgba(60, 66, 66, 0.1)",standby:"#FFD641"},shadows:{connectButton:"0px 4px 12px rgba(0, 0, 0, 0.1)",dialog:"0px 8px 32px rgba(0, 0, 0, 0.32)",profileDetailsAction:"0px 2px 6px rgba(37, 41, 46, 0.04)",selectedOption:"0px 2px 6px rgba(0, 0, 0, 0.24)",selectedWallet:"0px 2px 6px rgba(0, 0, 0, 0.12)",walletLogo:"0px 2px 16px rgba(0, 0, 0, 0.16)"}});lightTheme.accentColors=U;var N=n(93763),D=n(67294),addRecipe=function(e,t){return Object.defineProperty(e,"__recipe__",{value:t,writable:!1}),e};function createNormalizeValueFn(e){var{conditions:t}=e;if(!t)throw Error("Styles have no conditions");return addRecipe(function(e){if("string"==typeof e||"number"==typeof e||"boolean"==typeof e){if(!t.defaultCondition)throw Error("No default condition");return{[t.defaultCondition]:e}}if(Array.isArray(e)){if(!("responsiveArray"in t))throw Error("Responsive arrays are not supported");var n={};for(var o in t.responsiveArray)null!=e[o]&&(n[t.responsiveArray[o]]=e[o]);return n}return e},{importPath:"@vanilla-extract/sprinkles/createUtils",importName:"createNormalizeValueFn",args:[{conditions:e.conditions}]})}function ownKeys(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function _objectSpread2(e){for(var t=1;tfunction(){for(var t=arguments.length,n=Array(t),o=0;oe.styles)),s=Object.keys(i),l=s.filter(e=>"mappings"in i[e]);return Object.assign(t=>{var n=[],o={},s=_objectSpread2({},t),c=!1;for(var u of l){var d=t[u];if(null!=d)for(var p of(c=!0,i[u].mappings))o[p]=d,null==s[p]&&delete s[p]}var f=c?_objectSpread2(_objectSpread2({},o),s):t;for(var m in f)if("continue"===function(){var e=f[m],t=i[m];try{if(t.mappings)return"continue";if("string"==typeof e||"number"==typeof e)n.push(t.values[e].defaultClass);else if(Array.isArray(e))for(var o=0;oe,_=n(92321),L=n(90512),z=n(37122),q=n(97405),G=n(95946),W=n(61836),H=n(15229),Q=n(92106);async function getBalance(e,{address:t,blockNumber:n,blockTag:o="latest"}){let i=n?(0,Q.eC)(n):void 0,s=await e.request({method:"eth_getBalance",params:[t,i||o]});return BigInt(s)}var K=n(81946),V=n(84192);function getUnit(e){return"number"==typeof e?e:"wei"===e?0:Math.abs(V.Bd[e])}var Z=n(16693),J=n(57412),X=n(62027),Y=n(7210),$=n(55629),ee=n(47864),et=n(39028);function getContractError(e,{abi:t,address:n,args:o,docsPath:i,functionName:s,sender:l}){let{code:c,data:u,message:d,shortMessage:p}=e instanceof q.VQ?e:e instanceof X.G?e.walk(e=>"data"in e)||e.walk():{},f=e instanceof J.wb?new q.Dk({functionName:s}):[3,et.XS.code].includes(c)&&(u||d||p)?new q.Lu({abi:t,data:"object"==typeof u?u.data:u,functionName:s,message:p??d}):e;return new q.uq(f,{abi:t,args:o,contractAddress:n,docsPath:i,functionName:s,sender:l})}function getAction_getAction(e,t,n){return o=>e[t.name||n]?.(o)??t(e,o)}var er=n(61376);async function readContract(e,t){let{abi:n,address:o,args:i,functionName:s,...l}=t,c=(0,$.R)({abi:n,args:i,functionName:s});try{let{data:t}=await getAction_getAction(e,er.RE,"call")({...l,data:c,to:o});return(0,Y.k)({abi:n,args:i,functionName:s,data:t||"0x"})}catch(e){throw getContractError(e,{abi:n,address:o,args:i,docsPath:"/docs/contract/readContract",functionName:s})}}async function multicall(e,t){let{allowFailure:n=!0,batchSize:o,blockNumber:i,blockTag:s,multicallAddress:l,stateOverride:c}=t,u=t.contracts,d=o??("object"==typeof e.batch?.multicall&&e.batch.multicall.batchSize||1024),p=l;if(!p){if(!e.chain)throw Error("client chain not configured. multicallAddress is required.");p=(0,ee.L)({blockNumber:i,chain:e.chain,contract:"multicall3"})}let f=[[]],m=0,b=0;for(let e=0;e0&&b>d&&f[m].length>0&&(m++,b=(e.length-2)/2,f[m]=[]),f[m]=[...f[m],{allowFailure:!0,callData:e,target:o}]}catch(l){let e=getContractError(l,{abi:t,address:o,args:i,docsPath:"/docs/contract/multicall",functionName:s});if(!n)throw e;f[m]=[...f[m],{allowFailure:!0,callData:"0x",target:o}]}}let g=await Promise.allSettled(f.map(t=>getAction_getAction(e,readContract,"readContract")({abi:Z.F8,address:p,args:[t],blockNumber:i,blockTag:s,functionName:"aggregate3",stateOverride:c}))),y=[];for(let e=0;e{let i=n.chainId??e.state.chainId;return{...t,[i]:[...t[i]||[],{contract:n,index:o}]}},{}),c=(await Promise.all(Object.entries(t).map(([t,l])=>multicall_multicall(e,{...s,allowFailure:n,blockNumber:o,blockTag:i,chainId:parseInt(t),contracts:l.map(({contract:e})=>e)})))).flat(),u=Object.values(t).flatMap(e=>e.map(({index:e})=>e));return c.reduce((e,t,n)=>(e&&(e[u[n]]=t),e),[])}catch(t){if(t instanceof q.uq)throw t;let promises=()=>l.map(t=>(function(e,t){let{chainId:n,...o}=t,i=e.getClient({chainId:n}),s=(0,K.s)(i,readContract,"readContract");return s(o)})(e,{...t,blockNumber:o,blockTag:i}));if(n)return(await Promise.allSettled(promises())).map(e=>"fulfilled"===e.status?{result:e.value,status:"success"}:{error:e.reason,result:void 0,status:"failure"});return await Promise.all(promises())}}async function getBalance_getBalance(e,t){let{address:n,blockNumber:o,blockTag:i,chainId:s,token:l,unit:c="ether"}=t;if(l)try{return getTokenBalance(e,{balanceAddress:n,chainId:s,symbolType:"string",tokenAddress:l})}catch(t){if(t instanceof q.uq){let t=await getTokenBalance(e,{balanceAddress:n,chainId:s,symbolType:"bytes32",tokenAddress:l}),o=(0,G.rR)((0,W.f)(t.symbol,{dir:"right"}));return{...t,symbol:o}}throw t}let u=e.getClient({chainId:s}),d=(0,K.s)(u,getBalance,"getBalance"),p=await d(o?{address:n,blockNumber:o}:{address:n,blockTag:i}),f=e.chains.find(e=>e.id===s)??u.chain;return{decimals:f.nativeCurrency.decimals,formatted:(0,H.b)(p,getUnit(c)),symbol:f.nativeCurrency.symbol,value:p}}async function getTokenBalance(e,t){let{balanceAddress:n,chainId:o,symbolType:i,tokenAddress:s,unit:l}=t,c={abi:[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{type:"address"}],outputs:[{type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{type:"uint8"}]},{type:"function",name:"symbol",stateMutability:"view",inputs:[],outputs:[{type:i}]}],address:s},[u,d,p]=await readContracts(e,{allowFailure:!1,contracts:[{...c,functionName:"balanceOf",args:[n],chainId:o},{...c,functionName:"decimals",chainId:o},{...c,functionName:"symbol",chainId:o}]}),f=(0,H.b)(u??"0",getUnit(l??d));return{decimals:d,formatted:f,symbol:p,value:u}}function utils_hashFn(e){return JSON.stringify(e,(e,t)=>!function(e){if(!hasObjectPrototype(e))return!1;let t=e.constructor;if(void 0===t)return!0;let n=t.prototype;return!!(hasObjectPrototype(n)&&n.hasOwnProperty("isPrototypeOf"))}(t)?"bigint"==typeof t?t.toString():t:Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}))}function hasObjectPrototype(e){return"[object Object]"===Object.prototype.toString.call(e)}function filterQueryOptions(e){let{_defaulted:t,behavior:n,gcTime:o,initialData:i,initialDataUpdatedAt:s,maxPages:l,meta:c,networkMode:u,queryFn:d,queryHash:p,queryKey:f,queryKeyHashFn:m,retry:b,retryDelay:g,structuralSharing:y,getPreviousPageParam:v,getNextPageParam:w,initialPageParam:C,_optimisticResults:E,enabled:x,notifyOnChangeProps:A,placeholderData:k,refetchInterval:B,refetchIntervalInBackground:S,refetchOnMount:I,refetchOnReconnect:j,refetchOnWindowFocus:T,retryOnMount:P,select:M,staleTime:O,suspense:R,throwOnError:U,config:F,connector:N,query:D,..._}=e;return _}var en=n(24139),ea=n(27037),eo=n(66474),ei=n(7506),es=n(56888),el=class extends ei.l{constructor(e,t){super(),this.options=t,this.#g=e,this.#y=null,this.bindMethods(),this.setOptions(t)}#g;#v=void 0;#w=void 0;#C=void 0;#E;#x;#y;#A;#k;#B;#S;#I;#j;#T=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){1===this.listeners.size&&(this.#v.addObserver(this),shouldFetchOnMount(this.#v,this.options)?this.#P():this.updateResult(),this.#M())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return shouldFetchOn(this.#v,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return shouldFetchOn(this.#v,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#O(),this.#R(),this.#v.removeObserver(this)}setOptions(e,t){let n=this.options,o=this.#v;if(this.options=this.#g.defaultQueryOptions(e),void 0!==this.options.enabled&&"boolean"!=typeof this.options.enabled)throw Error("Expected enabled to be a boolean");this.#U(),this.#v.setOptions(this.options),n._defaulted&&!(0,en.VS)(this.options,n)&&this.#g.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#v,observer:this});let i=this.hasListeners();i&&shouldFetchOptionally(this.#v,o,this.options,n)&&this.#P(),this.updateResult(t),i&&(this.#v!==o||this.options.enabled!==n.enabled||this.options.staleTime!==n.staleTime)&&this.#F();let s=this.#N();i&&(this.#v!==o||this.options.enabled!==n.enabled||s!==this.#j)&&this.#D(s)}getOptimisticResult(e){let t=this.#g.getQueryCache().build(this.#g,e),n=this.createResult(t,e);return(0,en.VS)(this.getCurrentResult(),n)||(this.#C=n,this.#x=this.options,this.#E=this.#v.state),n}getCurrentResult(){return this.#C}trackResult(e,t){let n={};return Object.keys(e).forEach(o=>{Object.defineProperty(n,o,{configurable:!1,enumerable:!0,get:()=>(this.trackProp(o),t?.(o),e[o])})}),n}trackProp(e){this.#T.add(e)}getCurrentQuery(){return this.#v}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#g.defaultQueryOptions(e),n=this.#g.getQueryCache().build(this.#g,t);return n.isFetchingOptimistic=!0,n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#P({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#C))}#P(e){this.#U();let t=this.#v.fetch(this.options,e);return e?.throwOnError||(t=t.catch(en.ZT)),t}#F(){if(this.#O(),en.sk||this.#C.isStale||!(0,en.PN)(this.options.staleTime))return;let e=(0,en.Kp)(this.#C.dataUpdatedAt,this.options.staleTime);this.#S=setTimeout(()=>{this.#C.isStale||this.updateResult()},e+1)}#N(){return("function"==typeof this.options.refetchInterval?this.options.refetchInterval(this.#v):this.options.refetchInterval)??!1}#D(e){this.#R(),this.#j=e,!en.sk&&!1!==this.options.enabled&&(0,en.PN)(this.#j)&&0!==this.#j&&(this.#I=setInterval(()=>{(this.options.refetchIntervalInBackground||eo.j.isFocused())&&this.#P()},this.#j))}#M(){this.#F(),this.#D(this.#N())}#O(){this.#S&&(clearTimeout(this.#S),this.#S=void 0)}#R(){this.#I&&(clearInterval(this.#I),this.#I=void 0)}createResult(e,t){let n;let o=this.#v,i=this.options,s=this.#C,l=this.#E,c=this.#x,u=e!==o,d=u?e.state:this.#w,{state:p}=e,f={...p},m=!1;if(t._optimisticResults){let n=this.hasListeners(),s=!n&&shouldFetchOnMount(e,t),l=n&&shouldFetchOptionally(e,o,t,i);(s||l)&&(f={...f,...(0,es.z)(p.data,e.options)}),"isRestoring"===t._optimisticResults&&(f.fetchStatus="idle")}let{error:b,errorUpdatedAt:g,status:y}=f;if(t.select&&void 0!==f.data){if(s&&f.data===l?.data&&t.select===this.#A)n=this.#k;else try{this.#A=t.select,n=t.select(f.data),n=(0,en.oE)(s?.data,n,t),this.#k=n,this.#y=null}catch(e){this.#y=e}}else n=f.data;if(void 0!==t.placeholderData&&void 0===n&&"pending"===y){let e;if(s?.isPlaceholderData&&t.placeholderData===c?.placeholderData)e=s.data;else if(e="function"==typeof t.placeholderData?t.placeholderData(this.#B?.state.data,this.#B):t.placeholderData,t.select&&void 0!==e)try{e=t.select(e),this.#y=null}catch(e){this.#y=e}void 0!==e&&(y="success",n=(0,en.oE)(s?.data,e,t),m=!0)}this.#y&&(b=this.#y,n=this.#k,g=Date.now(),y="error");let v="fetching"===f.fetchStatus,w="pending"===y,C="error"===y,E=w&&v,x=void 0!==n,A={status:y,fetchStatus:f.fetchStatus,isPending:w,isSuccess:"success"===y,isError:C,isInitialLoading:E,isLoading:E,data:n,dataUpdatedAt:f.dataUpdatedAt,error:b,errorUpdatedAt:g,failureCount:f.fetchFailureCount,failureReason:f.fetchFailureReason,errorUpdateCount:f.errorUpdateCount,isFetched:f.dataUpdateCount>0||f.errorUpdateCount>0,isFetchedAfterMount:f.dataUpdateCount>d.dataUpdateCount||f.errorUpdateCount>d.errorUpdateCount,isFetching:v,isRefetching:v&&!w,isLoadingError:C&&!x,isPaused:"paused"===f.fetchStatus,isPlaceholderData:m,isRefetchError:C&&x,isStale:isStale(e,t),refetch:this.refetch};return A}updateResult(e){let t=this.#C,n=this.createResult(this.#v,this.options);if(this.#E=this.#v.state,this.#x=this.options,void 0!==this.#E.data&&(this.#B=this.#v),(0,en.VS)(n,t))return;this.#C=n;let o={};e?.listeners!==!1&&(()=>{if(!t)return!0;let{notifyOnChangeProps:e}=this.options,n="function"==typeof e?e():e;if("all"===n||!n&&!this.#T.size)return!0;let o=new Set(n??this.#T);return this.options.throwOnError&&o.add("error"),Object.keys(this.#C).some(e=>{let n=this.#C[e]!==t[e];return n&&o.has(e)})})()&&(o.listeners=!0),this.#_({...o,...e})}#U(){let e=this.#g.getQueryCache().build(this.#g,this.options);if(e===this.#v)return;let t=this.#v;this.#v=e,this.#w=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#M()}#_(e){ea.V.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#C)}),this.#g.getQueryCache().notify({query:this.#v,type:"observerResultsUpdated"})})}};function shouldFetchOnMount(e,t){return!1!==t.enabled&&void 0===e.state.data&&!("error"===e.state.status&&!1===t.retryOnMount)||void 0!==e.state.data&&shouldFetchOn(e,t,t.refetchOnMount)}function shouldFetchOn(e,t,n){if(!1!==t.enabled){let o="function"==typeof n?n(e):n;return"always"===o||!1!==o&&isStale(e,t)}return!1}function shouldFetchOptionally(e,t,n,o){return(e!==t||!1===o.enabled)&&(!n.suspense||"error"!==e.state.status)&&isStale(e,n)}function isStale(e,t){return!1!==t.enabled&&e.isStaleByTime(t.staleTime)}n(85893);var ec=D.createContext((E=!1,{clearReset:()=>{E=!1},reset:()=>{E=!0},isReset:()=>E})),useQueryErrorResetBoundary=()=>D.useContext(ec),eu=n(30202),ed=D.createContext(!1),useIsRestoring=()=>D.useContext(ed);ed.Provider;var ep=n(86290),ensurePreventErrorBoundaryRetry=(e,t)=>{(e.suspense||e.throwOnError)&&!t.isReset()&&(e.retryOnMount=!1)},useClearResetErrorBoundary=e=>{D.useEffect(()=>{e.clearReset()},[e])},getHasError=({result:e,errorResetBoundary:t,throwOnError:n,query:o})=>e.isError&&!t.isReset()&&!e.isFetching&&o&&(0,ep.L)(n,[e.error,o]),ensureStaleTime=e=>{e.suspense&&"number"!=typeof e.staleTime&&(e.staleTime=1e3)},shouldSuspend=(e,t)=>e?.suspense&&t.isPending,fetchOptimistic=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function query_useQuery(e){let t=function(e,t,n){let o=(0,eu.NL)(n),i=useIsRestoring(),s=useQueryErrorResetBoundary(),l=o.defaultQueryOptions(e);l._optimisticResults=i?"isRestoring":"optimistic",ensureStaleTime(l),ensurePreventErrorBoundaryRetry(l,s),useClearResetErrorBoundary(s);let[c]=D.useState(()=>new t(o,l)),u=c.getOptimisticResult(l);if(D.useSyncExternalStore(D.useCallback(e=>{let t=i?()=>void 0:c.subscribe(ea.V.batchCalls(e));return c.updateResult(),t},[c,i]),()=>c.getCurrentResult(),()=>c.getCurrentResult()),D.useEffect(()=>{c.setOptions(l,{listeners:!1})},[l,c]),shouldSuspend(l,u))throw fetchOptimistic(l,c,s);if(getHasError({result:u,errorResetBoundary:s,throwOnError:l.throwOnError,query:o.getQueryCache().get(l.queryHash)}))throw u.error;return l.notifyOnChangeProps?u:c.trackResult(u)}({...e,queryKeyHashFn:utils_hashFn},el,void 0);return t.queryKey=e.queryKey,t}function getChainId(e){return e.state.chainId}function useChainId(e={}){let t=(0,z.Z)(e);return(0,D.useSyncExternalStore)(e=>(function(e,t){let{onChange:n}=t;return e.subscribe(e=>e.chainId,n)})(t,{onChange:e}),()=>getChainId(t),()=>getChainId(t))}function useBalance(e={}){let{address:t,query:n={}}=e,o=(0,z.Z)(e),i=useChainId(),s=function(e,t={}){return{async queryFn({queryKey:t}){let{address:n,scopeKey:o,...i}=t[1];if(!n)throw Error("address is required");let s=await getBalance_getBalance(e,{...i,address:n});return s??null},queryKey:function(e={}){return["balance",filterQueryOptions(e)]}(t)}}(o,{...e,chainId:e.chainId??i}),l=!!(t&&(n.enabled??!0));return query_useQuery({...n,...s,enabled:l})}let eh=new Map([[8217,"apostrophe"],[8260,"fraction slash"],[12539,"middle dot"]]);function read_compressed_payload(e){var t;let n;return t=function(e){let t=0;function u16(){return e[t++]<<8|e[t++]}let n=u16(),o=1,i=[0,1];for(let e=1;e>--c&1}let d=2147483648-1,p=0;for(let e=0;e<31;e++)p=p<<1|read_bit();let f=[],m=0,b=2147483648;for(;;){let e=Math.floor(((p-m+1)*o-1)/b),t=0,s=n;for(;s-t>1;){let n=t+s>>>1;e>>1|read_bit(),l=l<<1^1073741824,c=(1073741824^c)<<1|1073741825;m=l,b=1+c-l}let g=n-4;return f.map(t=>{switch(t-g){case 3:return g+65792+(e[l++]<<16|e[l++]<<8|e[l++]);case 2:return g+256+(e[l++]<<8|e[l++]);case 1:return g+e[l++];default:return t-1}})}(function(e){let t=[];[..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"].forEach((e,n)=>t[e.charCodeAt(0)]=n);let n=e.length,o=new Uint8Array(6*n>>3);for(let i=0,s=0,l=0,c=0;i=8&&(o[s++]=c>>(l-=8));return o}(e)),n=0,()=>t[n++]}function read_sorted(e,t=0){let n=[];for(;;){let o=e(),i=e();if(!i)break;t+=o;for(let e=0;e{let t=read_sorted(e);if(t.length)return t})}function read_mapped(e){let t=[];for(;;){let n=e();if(0==n)break;t.push(function(e,t){let n=1+t(),o=t(),i=read_array_while(t);return read_transposed(i.length,1+e,t).flatMap((e,t)=>{let[s,...l]=e;return Array(i[t]).fill().map((e,t)=>{let i=t*o;return[s+t*n,l.map(e=>e+i)]})})}(n,e))}for(;;){let n=e()-1;if(n<0)break;t.push(read_transposed(1+e(),1+n,e).map(e=>[e[0],e.slice(1)]))}return t.flat()}function read_array_while(e){let t=[];for(;;){let n=e(t.length);if(!n)break;t.push(n)}return t}function read_transposed(e,t,n){let o=Array(e).fill().map(()=>[]);for(let i=0;i>1:o>>1}return n})(e,n).forEach((e,t)=>o[t].push(e));return o}function quote_cp(e){return`{${e.toString(16).toUpperCase().padStart(2,"0")}}`}function str_from_cps(e){let t=e.length;if(t<4096)return String.fromCodePoint(...e);let n=[];for(let o=0;o>24&255}function unpack_cp(e){return 16777215&e}function is_hangul(e){return e>=44032&&e<55204}function decomposed(e){o||function(){let e=read_compressed_payload("AEUDTAHBCFQATQDRADAAcgAgADQAFAAsABQAHwAOACQADQARAAoAFwAHABIACAAPAAUACwAFAAwABAAQAAMABwAEAAoABQAIAAIACgABAAQAFAALAAIACwABAAIAAQAHAAMAAwAEAAsADAAMAAwACgANAA0AAwAKAAkABAAdAAYAZwDSAdsDJgC0CkMB8xhZAqfoC190UGcThgBurwf7PT09Pb09AjgJum8OjDllxHYUKXAPxzq6tABAxgK8ysUvWAgMPT09PT09PSs6LT2HcgWXWwFLoSMEEEl5RFVMKvO0XQ8ExDdJMnIgsj26PTQyy8FfEQ8AY8IPAGcEbwRwBHEEcgRzBHQEdQR2BHcEeAR6BHsEfAR+BIAEgfndBQoBYgULAWIFDAFiBNcE2ATZBRAFEQUvBdALFAsVDPcNBw13DYcOMA4xDjMB4BllHI0B2grbAMDpHLkQ7QHVAPRNQQFnGRUEg0yEB2uaJF8AJpIBpob5AERSMAKNoAXqaQLUBMCzEiACnwRZEkkVsS7tANAsBG0RuAQLEPABv9HICTUBXigPZwRBApMDOwAamhtaABqEAY8KvKx3LQ4ArAB8UhwEBAVSagD8AEFZADkBIadVj2UMUgx5Il4ANQC9AxIB1BlbEPMAs30CGxlXAhwZKQIECBc6EbsCoxngzv7UzRQA8M0BawL6ZwkN7wABAD33OQRcsgLJCjMCjqUChtw/km+NAsXPAoP2BT84PwURAK0RAvptb6cApQS/OMMey5HJS84UdxpxTPkCogVFITaTOwERAK5pAvkNBOVyA7q3BKlOJSALAgUIBRcEdASpBXqzABXFSWZOawLCOqw//AolCZdvv3dSBkEQGyelEPcMMwG1ATsN7UvYBPEGOwTJH30ZGQ/NlZwIpS3dDO0m4y6hgFoj9SqDBe1L9DzdC01RaA9ZC2UJ4zpjgU4DIQENIosK3Q05CG0Q8wrJaw3lEUUHOQPVSZoApQcBCxEdNRW1JhBirAsJOXcG+xr2C48mrxMpevwF0xohBk0BKRr/AM8u54WwWjFcHE9fBgMLJSPHFKhQIA0lQLd4SBobBxUlqQKRQ3BKh1E2HpMh9jw9DWYuE1F8B/U8BRlPC4E8nkarRQ4R0j6NPUgiSUwsBDV/LC8niwnPD4UMuXxyAVkJIQmxDHETMREXN8UIOQcZLZckJxUIIUaVYJoE958D8xPRAwsFPwlBBxMDtRwtEy4VKQUNgSTXAvM21S6zAo9WgAEXBcsPJR/fEFBH4A7pCJsCZQODJesALRUhABcimwhDYwBfj9hTBS7LCMdqbCN0A2cU52ERcweRDlcHpxwzFb8c4XDIXguGCCijrwlbAXUJmQFfBOMICTVbjKAgQWdTi1gYmyBhQT9d/AIxDGUVn0S9h3gCiw9rEhsBNQFzBzkNAQJ3Ee0RaxCVCOuGBDW1M/g6JQRPIYMgEQonA09szgsnJvkM+GkBoxJiAww0PXfuZ6tgtiQX/QcZMsVBYCHxC5JPzQycGsEYQlQuGeQHvwPzGvMn6kFXBf8DowMTOk0z7gS9C2kIiwk/AEkOoxcH1xhqCnGM0AExiwG3mQNXkYMCb48GNwcLAGcLhwV55QAdAqcIowAFAM8DVwA5Aq0HnQAZAIVBAT0DJy8BIeUCjwOTCDHLAZUvAfMpBBvDDBUA9zduSgLDsQKAamaiBd1YAo4CSTUBTSUEBU5HUQOvceEA2wBLBhPfRwEVq0rLGuNDAd9vKwDHAPsABTUHBUEBzQHzbQC3AV8LMQmis7UBTekpAIMAFWsB1wKJAN0ANQB/8QFTAE0FWfkF0wJPSQERMRgrV2EBuwMfATMBDQB5BsuNpckHHwRtB9MCEBsV4QLvLge1AQMi3xPNQsUCvd5VoWACZIECYkJbTa9bNyACofcCaJgCZgkCn4Q4GwsCZjsCZiYEbgR/A38TA36SOQY5dxc5gjojIwJsHQIyNjgKAm3HAm2u74ozZ0UrAWcA3gDhAEoFB5gMjQD+C8IADbUCdy8CdqI/AnlLQwJ4uh1c20WuRtcCfD8CesgCfQkCfPAFWQUgSABIfWMkAoFtAoAAAoAFAn+uSVhKWxUXSswC0QEC0MxLJwOITwOH5kTFkTIC8qFdAwMDrkvOTC0lA89NTE2vAos/AorYwRsHHUNnBbcCjjcCjlxAl4ECjtkCjlx4UbRTNQpS1FSFApP7ApMMAOkAHFUeVa9V0AYsGymVhjLheGZFOzkCl58C77JYIagAWSUClo8ClnycAKlZrFoJgU0AOwKWtQKWTlxEXNECmcsCmWRcyl0HGQKcmznCOp0CnBYCn5sCnriKAB0PMSoPAp3xAp6SALU9YTRh7wKe0wKgbgGpAp6fHwKeTqVjyGQnJSsCJ68CJn4CoPsCoEwCot0CocQCpi8Cpc4Cp/8AfQKn8mh8aLEAA0lqHGrRAqzjAqyuAq1nAq0CAlcdAlXcArHh1wMfTmyXArK9DQKy6Bds4G1jbUhfAyXNArZcOz9ukAMpRQK4XgK5RxUCuSp3cDZw4QK9GQK72nCWAzIRAr6IcgIDM3ECvhpzInNPAsPLAsMEc4J0SzVFdOADPKcDPJoDPb8CxXwCxkcCxhCJAshpUQLIRALJTwLJLgJknQLd0nh5YXiueSVL0AMYo2cCAmH0GfOVJHsLXpJeuxECz2sCz2wvS1PS8xOfAMatAs9zASnqA04SfksFAtwnAtuKAtJPA1JcA1NfAQEDVYyAiT8AyxbtYEWCHILTgs6DjQLaxwLZ3oQQhEmnPAOGpQAvA2QOhnFZ+QBVAt9lAt64c3cC4i/tFAHzMCcB9JsB8tKHAuvzAulweQLq+QLq5AD5RwG5Au6JAuuclqqXAwLuPwOF4Jh5cOBxoQLzAwBpA44WmZMC9xMDkW4DkocC95gC+dkC+GaaHJqruzebHgOdgwL++gEbADmfHJ+zAwWNA6ZqA6bZANHFAwZqoYiiBQkDDEkCwAA/AwDhQRdTARHzA2sHl2cFAJMtK7evvdsBiZkUfxEEOQH7KQUhDp0JnwCS/SlXxQL3AZ0AtwW5AG8LbUEuFCaNLgFDAYD8AbUmAHUDDgRtACwCFgyhAAAKAj0CagPdA34EkQEgRQUhfAoABQBEABMANhICdwEABdUDa+8KxQIA9wqfJ7+xt+UBkSFBQgHpFH8RNMCJAAQAGwBaAkUChIsABjpTOpSNbQC4Oo860ACNOME63AClAOgAywE6gTo7Ofw5+Tt2iTpbO56JOm85GAFWATMBbAUvNV01njWtNWY1dTW2NcU1gjWRNdI14TWeNa017jX9NbI1wTYCNhE1xjXVNhY2JzXeNe02LjY9Ni41LSE2OjY9Njw2yTcIBJA8VzY4Nt03IDcPNsogN4k3MAoEsDxnNiQ3GTdsOo03IULUQwdC4EMLHA8PCZsobShRVQYA6X8A6bABFCnXAukBowC9BbcAbwNzBL8MDAMMAQgDAAkKCwsLCQoGBAVVBI/DvwDz9b29kaUCb0QtsRTNLt4eGBcSHAMZFhYZEhYEARAEBUEcQRxBHEEcQRxBHEEaQRxBHEFCSTxBPElISUhBNkM2QTYbNklISVmBVIgBFLWZAu0BhQCjBcEAbykBvwGJAaQcEZ0ePCklMAAhMvAIMAL54gC7Bm8EescjzQMpARQpKgDUABavAj626xQAJP0A3etzuf4NNRA7efy2Z9NQrCnC0OSyANz5BBIbJ5IFDR6miIavYS6tprjjmuKebxm5C74Q225X1pkaYYPb6f1DK4k3xMEBb9S2WMjEibTNWhsRJIA+vwNVEiXTE5iXs/wezV66oFLfp9NZGYW+Gk19J2+bCT6Ye2w6LDYdgzKMUabk595eLBCXANz9HUpWbATq9vqXVx9XDg+Pc9Xp4+bsS005SVM/BJBM4687WUuf+Uj9dEi8aDNaPxtpbDxcG1THTImUMZq4UCaaNYpsVqraNyKLJXDYsFZ/5jl7bLRtO88t7P3xZaAxhb5OdPMXqsSkp1WCieG8jXm1U99+blvLlXzPCS+M93VnJCiK+09LfaSaBAVBomyDgJua8dfUzR7ga34IvR2Nvj+A9heJ6lsl1KG4NkI1032Cnff1m1wof2B9oHJK4bi6JkEdSqeNeiuo6QoZZincoc73/TH9SXF8sCE7XyuYyW8WSgbGFCjPV0ihLKhdPs08Tx82fYAkLLc4I2wdl4apY7GU5lHRFzRWJep7Ww3wbeA3qmd59/86P4xuNaqDpygXt6M85glSBHOCGgJDnt+pN9bK7HApMguX6+06RZNjzVmcZJ+wcUrJ9//bpRNxNuKpNl9uFds+S9tdx7LaM5ZkIrPj6nIU9mnbFtVbs9s/uLgl8MVczAwet+iOEzzBlYW7RCMgE6gyNLeq6+1tIx4dpgZnd0DksJS5f+JNDpwwcPNXaaVspq1fbQajOrJgK0ofKtJ1Ne90L6VO4MOl5S886p7u6xo7OLjG8TGL+HU1JXGJgppg4nNbNJ5nlzSpuPYy21JUEcUA94PoFiZfjZue+QnyQ80ekOuZVkxx4g+cvhJfHgNl4hy1/a6+RKcKlar/J29y//EztlbVPHVUeQ1zX86eQVAjR/M3dA9w4W8LfaXp4EgM85wOWasli837PzVMOnsLzR+k3o75/lRPAJSE1xAKQzEi5v10ke+VBvRt1cwQRMd+U5mLCTGVd6XiZtgBG5cDi0w22GKcVNvHiu5LQbZEDVtz0onn7k5+heuKXVsZtSzilkLRAUmjMXEMB3J9YC50XBxPiz53SC+EhnPl9WsKCv92SM/OFFIMJZYfl0WW8tIO3UxYcwdMAj7FSmgrsZ2aAZO03BOhP1bNNZItyXYQFTpC3SG1VuPDqH9GkiCDmE+JwxyIVSO5siDErAOpEXFgjy6PQtOVDj+s6e1r8heWVvmZnTciuf4EiNZzCAd7SOMhXERIOlsHIMG399i9aLTy3m2hRLZjJVDNLS53iGIK11dPqQt0zBDyg6qc7YqkDm2M5Ve6dCWCaCbTXX2rToaIgz6+zh4lYUi/+6nqcFMAkQJKHYLK0wYk5N9szV6xihDbDDFr45lN1K4aCXBq/FitPSud9gLt5ZVn+ZqGX7cwm2z5EGMgfFpIFyhGGuDPmso6TItTMwny+7uPnLCf4W6goFQFV0oQSsc9VfMmVLcLr6ZetDZbaSFTLqnSO/bIPjA3/zAUoqgGFAEQS4IhuMzEp2I3jJzbzkk/IEmyax+rhZTwd6f+CGtwPixu8IvzACquPWPREu9ZvGkUzpRwvRRuaNN6cr0W1wWits9ICdYJ7ltbgMiSL3sTPeufgNcVqMVWFkCPDH4jG2jA0XcVgQj62Cb29v9f/z/+2KbYvIv/zzjpQAPkliaVDzNrW57TZ/ZOyZD0nlfMmAIBIAGAI0D3k/mdN4xr9v85ZbZbbqfH2jGd5hUqNZWwl5SPfoGmfElmazUIeNL1j/mkF7VNAzTq4jNt8JoQ11NQOcmhprXoxSxfRGJ9LDEOAQ+dmxAQH90iti9e2u/MoeuaGcDTHoC+xsmEeWmxEKefQuIzHbpw5Tc5cEocboAD09oipWQhtTO1wivf/O+DRe2rpl/E9wlrzBorjJsOeG1B/XPW4EaJEFdNlECEZga5ZoGRHXgYouGRuVkm8tDESiEyFNo+3s5M5puSdTyUL2llnINVHEt91XUNW4ewdMgJ4boJfEyt/iY5WXqbA+A2Fkt5Z0lutiWhe9nZIyIUjyXDC3UsaG1t+eNx6z4W/OYoTB7A6x+dNSTOi9AInctbESqm5gvOLww7OWXPrmHwVZasrl4eD113pm+JtT7JVOvnCXqdzzdTRHgJ0PiGTFYW5Gvt9R9LD6Lzfs0v/TZZHSmyVNq7viIHE6DBK7Qp07Iz55EM8SYtQvZf/obBniTWi5C2/ovHfw4VndkE5XYdjOhCMRjDeOEfXeN/CwfGduiUIfsoFeUxXeQXba7c7972XNv8w+dTjjUM0QeNAReW+J014dKAD/McQYXT7c0GQPIkn3Ll6R7gGjuiQoZD0TEeEqQpKoZ15g/0OPQI17QiSv9AUROa/V/TQN3dvLArec3RrsYlvBm1b8LWzltdugsC50lNKYLEp2a+ZZYqPejULRlOJh5zj/LVMyTDvwKhMxxwuDkxJ1QpoNI0OTWLom4Z71SNzI9TV1iXJrIu9Wcnd+MCaAw8o1jSXd94YU/1gnkrC9BUEOtQvEIQ7g0i6h+KL2JKk8Ydl7HruvgWMSAmNe+LshGhV4qnWHhO9/RIPQzY1tHRj2VqOyNsDpK0cww+56AdDC4gsWwY0XxoucIWIqs/GcwnWqlaT0KPr8mbK5U94/301i1WLt4YINTVvCFBrFZbIbY8eycOdeJ2teD5IfPLCRg7jjcFTwlMFNl9zdh/o3E/hHPwj7BWg0MU09pPrBLbrCgm54A6H+I6v27+jL5gkjWg/iYdks9jbfVP5y/n0dlgWEMlKasl7JvFZd56LfybW1eeaVO0gxTfXZwD8G4SI116yx7UKVRgui6Ya1YpixqXeNLc8IxtAwCU5IhwQgn+NqHnRaDv61CxKhOq4pOX7M6pkA+Pmpd4j1vn6ACUALoLLc4vpXci8VidLxzm7qFBe7s+quuJs6ETYmnpgS3LwSZxPIltgBDXz8M1k/W2ySNv2f9/NPhxLGK2D21dkHeSGmenRT3Yqcdl0m/h3OYr8V+lXNYGf8aCCpd4bWjE4QIPj7vUKN4Nrfs7ML6Y2OyS830JCnofg/k7lpFpt4SqZc5HGg1HCOrHvOdC8bP6FGDbE/VV0mX4IakzbdS/op+Kt3G24/8QbBV7y86sGSQ/vZzU8FXs7u6jIvwchsEP2BpIhW3G8uWNwa3HmjfH/ZjhhCWvluAcF+nMf14ClKg5hGgtPLJ98ueNAkc5Hs2WZlk2QHvfreCK1CCGO6nMZVSb99VM/ajr8WHTte9JSmkXq/i/U943HEbdzW6Re/S88dKgg8pGOLlAeNiqrcLkUR3/aClFpMXcOUP3rmETcWSfMXZE3TUOi8i+fqRnTYLflVx/Vb/6GJ7eIRZUA6k3RYR3iFSK9c4iDdNwJuZL2FKz/IK5VimcNWEqdXjSoxSgmF0UPlDoUlNrPcM7ftmA8Y9gKiqKEHuWN+AZRIwtVSxye2Kf8rM3lhJ5XcBXU9n4v0Oy1RU2M+4qM8AQPVwse8ErNSob5oFPWxuqZnVzo1qB/IBxkM3EVUKFUUlO3e51259GgNcJbCmlvrdjtoTW7rChm1wyCKzpCTwozUUEOIcWLneRLgMXh+SjGSFkAllzbGS5HK7LlfCMRNRDSvbQPjcXaenNYxCvu2Qyznz6StuxVj66SgI0T8B6/sfHAJYZaZ78thjOSIFumNWLQbeZixDCCC+v0YBtkxiBB3jefHqZ/dFHU+crbj6OvS1x/JDD7vlm7zOVPwpUC01nhxZuY/63E7g");for(let[t,n]of(o=new Map(read_sorted_arrays(e).flatMap((e,t)=>e.map(e=>[e,t+1<<24]))),i=new Set(read_sorted(e)),s=new Map,l=new Map,read_mapped(e))){if(!i.has(t)&&2==n.length){let[e,o]=n,i=l.get(e);i||(i=new Map,l.set(e,i)),i.set(o,t)}s.set(t,n.reverse())}}();let t=[],n=[],c=!1;function add(e){let n=o.get(e);n&&(c=!0,e|=n),t.push(e)}for(let o of e)for(;;){if(o<128)t.push(o);else if(is_hangul(o)){let e=o-44032,t=e/588|0,n=e%588/28|0,i=e%28;add(4352+t),add(4449+n),i>0&&add(4519+i)}else{let e=s.get(o);e?n.push(...e):add(o)}if(!n.length)break;o=n.pop()}if(c&&t.length>1){let e=unpack_cc(t[0]);for(let n=1;n0&&i>=e)0==e?(t.push(o,...n),n.length=0,o=c):n.push(c),i=e;else{let s=function(e,t){if(e>=4352&&e<4371&&t>=4449&&t<4470)return 44032+(e-4352)*588+(t-4449)*28;if(is_hangul(e)&&t>4519&&t<4547&&(e-44032)%28==0)return e+(t-4519);{let n=l.get(e);return n&&(n=n.get(t))?n:-1}}(o,c);s>=0?o=s:0==i&&0==e?(t.push(o),o=c):(n.push(c),i=e)}}return o>=0&&t.push(o,...n),t}(decomposed(e))}let Array_from=e=>Array.from(e);function group_has_cp(e,t){return e.P.has(t)||e.Q.has(t)}let Emoji=class Emoji extends Array{get is_emoji(){return!0}};function init(){let e,t;if(c)return;let n=read_compressed_payload("AEEUdwmgDS8BxQKKAP4BOgDjATAAngDUAIMAoABoAOAAagCOAEQAhABMAHIAOwA9ACsANgAmAGIAHgAuACgAJwAXAC0AGgAjAB8ALwAUACkAEgAeAAkAGwARABkAFgA5ACgALQArADcAFQApABAAHgAiABAAGgAeABMAGAUhBe8BFxREN8sF2wC5AK5HAW8ArQkDzQCuhzc3NzcBP68NEfMABQdHBuw5BV8FYAA9MzkI9r4ZBg7QyQAWA9CeOwLNCjcCjqkChuA/lm+RAsXTAoP6ASfnEQDytQFJAjWVCkeXAOsA6godAB/cwdAUE0WlBCN/AQUCQRjFD/MRBjHxDQSJbw0jBzUAswBxme+tnIcAYwabAysG8QAjAEMMmxcDqgPKQyDXCMMxA7kUQwD3NXOrAKmFIAAfBC0D3x4BJQDBGdUFAhEgVD8JnwmQJiNWYUzrg0oAGwAUAB0AFnNcACkAFgBP9h3gPfsDOWDKneY2ChglX1UDYD30ABsAFAAdABZzIGRAnwDD8wAjAEEMzRbDqgMB2sAFYwXqAtCnAsS4AwpUJKRtFHsadUz9AMMVbwLpABM1NJEX0ZkCgYMBEyMAxRVvAukAEzUBUFAtmUwSAy4DBTER33EftQHfSwB5MxJ/AjkWKQLzL8E/cwBB6QH9LQDPDtO9ASNriQC5DQANAwCK21EFI91zHwCoL9kBqQcHBwcHKzUDowBvAQohPvU3fAQgHwCyAc8CKQMA5zMSezr7ULgFmDp/LzVQBgEGAi8FYQVgt8AFcTtlQhpCWEmfe5tmZ6IAExsDzQ8t+X8rBKtTAltbAn0jsy8Bl6utPWMDTR8Ei2kRANkDBrNHNysDBzECQWUAcwFpJ3kAiyUhAJ0BUb8AL3EfAbfNAz81KUsFWwF3YQZtAm0A+VEfAzEJDQBRSQCzAQBlAHsAM70GD/v3IZWHBwARKQAxALsjTwHZAeMPEzmXgIHwABIAGQA8AEUAQDt3gdvIEGcQZAkGTRFMdEIVEwK0D64L7REdDNkq09PgADSxB/MDWwfzA1sDWwfzB/MDWwfzA1sDWwNbA1scEvAi28gQZw9QBHUFlgWTBN4IiyZREYkHMAjaVBV0JhxPA00BBCMtSSQ7mzMTJUpMFE0LCAQ2SmyvfUADTzGzVP2QqgPTMlc5dAkGHnkSqAAyD3skNb1OhnpPcagKU0+2tYdJak5vAsY6sEAACikJm2/Dd1YGRRAfJ6kQ+ww3AbkBPw3xS9wE9QY/BM0fgRkdD9GVoAipLeEM8SbnLqWAXiP5KocF8Uv4POELUVFsD10LaQnnOmeBUgMlAREijwrhDT0IcRD3Cs1vDekRSQc9A9lJngCpBwULFR05FbkmFGKwCw05ewb/GvoLkyazEy17AAXXGiUGUQEtGwMA0y7rhbRaNVwgT2MGBwspI8sUrFAkDSlAu3hMGh8HGSWtApVDdEqLUToelyH6PEENai4XUYAH+TwJGVMLhTyiRq9FEhHWPpE9TCJNTDAEOYMsMyePCdMPiQy9fHYBXQklCbUMdRM1ERs3yQg9Bx0xlygnGQglRplgngT7owP3E9UDDwVDCUUHFwO5HDETMhUtBRGBKNsC9zbZLrcCk1aEARsFzw8pH+MQVEfkDu0InwJpA4cl7wAxFSUAGyKfCEdnAGOP3FMJLs8Iy2pwI3gDaxTrZRF3B5UOWwerHDcVwxzlcMxeD4YMKKezCV8BeQmdAWME5wgNNV+MpCBFZ1eLXBifIGVBQ14AAjUMaRWjRMGHfAKPD28SHwE5AXcHPQ0FAnsR8RFvEJkI74YINbkz/DopBFMhhyAVCisDU2zSCysm/Qz8bQGnEmYDEDRBd/Jnr2C6KBgBBx0yyUFkIfULlk/RDKAaxRhGVDIZ6AfDA/ca9yfuQVsGAwOnBxc6UTPyBMELbQiPCUMATQ6nGwfbGG4KdYzUATWPAbudA1uVhwJzkwY7Bw8Aaw+LBX3pACECqwinAAkA0wNbAD0CsQehAB0AiUUBQQMrMwEl6QKTA5cINc8BmTMB9y0EH8cMGQD7O25OAsO1AoBuZqYF4VwCkgJNOQFRKQQJUktVA7N15QDfAE8GF+NLARmvTs8e50cB43MvAMsA/wAJOQcJRQHRAfdxALsBYws1Caa3uQFR7S0AhwAZbwHbAo0A4QA5AIP1AVcAUQVd/QXXAlNNARU1HC9bZQG/AyMBNwERAH0Gz5GpzQsjBHEH1wIQHxXlAu8yB7kFAyLjE9FCyQK94lkAMhoKPAqrCqpgX2Q3CjV2PVQAEh+sPss/UgVVO1c7XDtXO1w7VztcO1c7XDtXO1wDm8Pmw+YKcF9JYe8Mqg3YRMw6TRPfYFVgNhPMLbsUxRXSJVoZQRrAJwkl6FUNDwgt12Y0CDA0eRfAAEMpbINFY4oeNApPHOtTlVT8LR8AtUumM7MNsBsZREQFS3XxYi4WEgomAmSFAmJGX1GzAV83JAKh+wJonAJmDQKfiDgfDwJmPwJmKgRyBIMDfxcDfpY5Cjl7GzmGOicnAmwhAjI6OA4CbcsCbbLzjgM3a0kvAWsA4gDlAE4JB5wMkQECD8YAEbkCdzMCdqZDAnlPRwJ4viFg30WyRvcCfEMCeswCfQ0CfPRIBEiBZygALxlJXEpfGRtK0ALRBQLQ0EsrA4hTA4fqRMmRNgLypV0HAwOyS9JMMSkH001QTbMCi0MCitzFHwshR2sJuwKOOwKOYESbhQKO3QKOYHxRuFM5AQ5S2FSJApP/ApMQAO0AIFUiVbNV1AosHymZijLleGpFPz0Cl6MC77ZYJawAXSkClpMCloCgAK1ZsFoNhVEAPwKWuQKWUlxIXNUCmc8CmWhczl0LHQKcnznGOqECnBoCn58CnryOACETNS4TAp31Ap6WALlBYThh8wKe1wKgcgGtAp6jIwKeUqljzGQrKS8CJ7MCJoICoP8CoFDbAqYzAqXSAqgDAIECp/ZogGi1AAdNaiBq1QKs5wKssgKtawKtBgJXIQJV4AKx5dsDH1JsmwKywRECsuwbbORtZ21MYwMl0QK2YD9DbpQDKUkCuGICuUsZArkue3A6cOUCvR0DLbYDMhUCvoxyBgMzdQK+HnMmc1MCw88CwwhzhnRPOUl05AM8qwEDPJ4DPcMCxYACxksCxhSNAshtVQLISALJUwLJMgJkoQLd1nh9ZXiyeSlL1AMYp2cGAmH4GfeVKHsPXpZevxUCz28Cz3AzT1fW9xejAMqxAs93AS3uA04Wfk8JAtwrAtuOAtJTA1JgA1NjAQUDVZCAjUMEzxrxZEl5A4LSg5EC2ssC2eKEFIRNp0ADhqkAMwNkEoZ1Xf0AWQLfaQLevHd7AuIz7RgB8zQrAfSfAfLWiwLr9wLpdH0DAur9AuroAP1LAb0C7o0C66CWrpcHAu5DA4XkmH1w5HGlAvMHAG0DjhqZlwL3FwORcgOSiwL3nAL53QL4apogmq+/O5siA52HAv7+AR8APZ8gAZ+3AwWRA6ZuA6bdANXJAwZuoYyiCQ0DDE0BEwEjB3EGZb1rCQC/BG/DFY8etxEAG3k9ACcDNxJRA42DAWcrJQCM8wAlAOanC6OVCLsGI6fJBgCvBRnDBvElRUYFFoAFcD9GSDNCKUK8X3kZX8QAls0FOgCQVCGbwTsuYDoZutcONxjOGJHJ/gVfBWAFXwVgBWsFYAVfBWAFXwVgBV8FYAVfBWBOHQjfjW8KCgoKbF7xMwTRA7kGN8PDAMMEr8MA70gxFroFTj5xPnhCR0K+X30/X/AAWBkzswCNBsxzzASm70aCRS4rDDMeLz49fnXfcsH5GcoscQFz13Y4HwVnBXLJycnACNdRYwgICAqEXoWTxgA7P4kACxbZBu21Kw0AjMsTAwkVAOVtJUUsJ1JCuULESUArXy9gPi9AKwnJRQYKTD9LPoA+iT54PnkCkULEUUpDX9NWV3JVEjQAc1w3A3IBE3YnX+g7QiMJb6MKaiszRCUuQrNCxDPMCcwEX9EWJzYREBEEBwIHKn6l33JCNVIfybPJtAltydPUCmhBZw/tEKsZAJOVJU1CLRuxbUHOQAo7P0s+eEJHHA8SJVRPdGM0NVrpvBoKhfUlM0JHHGUQUhEWO1xLSj8MO0ucNAqJIzVCRxv9EFsqKyA4OQgNj2nwZgp5ZNFgE2A1K3YHS2AhQQojJmC7DgpzGG1WYFUZCQYHZO9gHWCdYIVgu2BTYJlwFh8GvRbcXbG8YgtDHrMBwzPVyQonHQgkCyYBgQJ0Ajc4nVqIAwGSCsBPIgDsK3SWEtIVBa5N8gGjAo+kVwVIZwD/AEUSCDweX4ITrRQsJ8K3TwBXFDwEAB0TvzVcAtoTS20RIwDgVgZ9BBImYgA5AL4Coi8LFnezOkCnIQFjAY4KBAPh9RcGsgZSBsEAJctdsWIRu2kTkQstRw7DAcMBKgpPBGIGMDAwKCYnKTQaLg4AKRSVAFwCdl+YUZ0JdicFD3lPAdt1F9ZZKCGxuE3yBxkFVGcA/wBFEgiCBwAOLHQSjxOtQDg1z7deFRMAZ8QTAGtKb1ApIiPHADkAvgKiLy1DFtYCmBiDAlDDWNB0eo7fpaMO/aEVRRv0ATEQZBIODyMEAc8JQhCbDRgzFD4TAEMAu9YBCgCsAOkAm5I3ABwAYxvONnR+MhXJAxgKQyxL2+kkJhMbhQKDBMkSsvF0AD9BNQ6uQC7WqSQHwxEAEEIu1hkhAH2z4iQPwyJPHNWpdyYBRSpnJALzoBAEVPPsH20MxA0CCEQKRgAFyAtFAlMNwwjEDUQJRArELtapMg7DDZgJIw+TGukEIwvDFkMAqAtDEMMMBhioe+QAO3MMRAACrgnEBSPY9Q0FDnbSBoMAB8MSYxkSxAEJAPIJAAB8FWMOFtMc/HcXwxhDAC7DAvOowwAewwJdKDKHAAHDAALrFUQVwwAbwyvzpWMWv8wA/ABpAy++bcYDUKPD0KhDCwKmJ1MAAmMA5+UZwxAagwipBRL/eADfw6fDGOMCGsOjk3l6BwOpo4sAEsMOGxMAA5sAbcMOAAvDp0MJGkMDwgipnNIPAwfIqUMGAOGDAAPzABXDAAcDAAnDAGmTABrDAA7DChjDjnEWAwABYwAOcwAuUyYABsMAF8MIKQANUgC6wy4AA8MADqMq8wCyYgAcIwAB8wqpAAXOCx0V4wAHowBCwwEKAGnDAAuDAB3DAAjDCakABdIAbqcZ3QCZCCkABdIAAAFDAAfjAB2jCCkABqIACYMAGzMAbSMA5sOIAAhjAAhDABTDBAkpAAbSAOOTAAlDC6kOzPtnAAdDAG6kQFAATwAKwwwAA0MACbUDPwAHIwAZgwACE6cDAAojAApDAAoDp/MGwwAJIwADEwAQQwgAFEMAEXMAD5MADfMADcMAGRMOFiMAFUMAbqMWuwHDAMIAE0MLAGkzEgDhUwACQwAEWgAXgwUjAAbYABjDBSYBgzBaAEFNALcQBxUMegAwMngBrA0IZgJ0KxQHBREPd1N0ZzKRJwaIHAZqNT4DqQq8BwngAB4DAwt2AX56T1ocKQNXAh1GATQGC3tOxYNagkgAMQA5CQADAQEAWxLjAIOYNAEzAH7tFRk6TglSAF8NAAlYAQ+S1ACAQwQorQBiAN4dAJ1wPyeTANVzuQDX3AIeEMp9eyMgXiUAEdkBkJizKltbVVAaRMqRAAEAhyQ/SDEz6BmfVwB6ATEsOClKIRcDOF0E/832AFNt5AByAnkCRxGCOs94NjXdAwINGBonDBwPALW2AwICAgAAAAAAAAYDBQMDARrUAwAtAAAAAgEGBgYGBgYFBQUFBQUEBQYHCAkEBQUFBQQAAAICAAAAIgCNAJAAlT0A6gC7ANwApEQAwgCyAK0AqADuAKYA2gCjAOcBCAEDAMcAgQBiANIA1AEDAN4A8gCQAKkBMQDqAN8A3AsBCQ8yO9ra2tq8xuLT1tRJOB0BUgFcNU0BWgFpAWgBWwFMUUlLbhMBUxsNEAs6PhMOACcUKy0vMj5AQENDQ0RFFEYGJFdXV1dZWVhZL1pbXVxcI2NnZ2ZoZypsbnZ1eHh4eHh4enp6enp6enp6enp8fH18e2IARPIASQCaAHgAMgBm+ACOAFcAVwA3AnbvAIsABfj4AGQAk/IAnwBPAGIAZP//sACFAIUAaQBWALEAJAC2AIMCQAJDAPwA5wD+AP4A6AD/AOkA6QDoAOYALwJ7AVEBQAE+AVQBPgE+AT4BOQE4ATgBOAEcAVgXADEQCAEAUx8SHgsdHhYAjgCWAKYAUQBqIAIxAHYAbwCXAxUDJzIDIUlGTzEAkQJPAMcCVwKkAMAClgKWApYClgKWApYCiwKWApYClgKWApYClgKVApUCmAKgApcClgKWApQClAKUApQCkgKVAnUB1AKXAp8ClgKWApUeAIETBQD+DQOfAmECOh8BVBg9AuIZEjMbAU4/G1WZAXusRAFpYQEFA0FPAQYAmTEeIJdyADFoAHEANgCRA5zMk/C2jGINwjMWygIZCaXdfDILBCs5dAE7YnQBugDlhoiHhoiGiYqKhouOjIaNkI6Ij4qQipGGkoaThpSSlYaWhpeKmIaZhpqGm4aci52QnoqfhuIC4XTpAt90AIp0LHSoAIsAdHQEQwRABEIERQRDBEkERgRBBEcESQRIBEQERgRJAJ5udACrA490ALxuAQ10ANFZdHQA13QCFHQA/mJ0AP4BIQD+APwA/AD9APwDhGZ03ASMK23HAP4A/AD8AP0A/CR0dACRYnQA/gCRASEA/gCRAvQA/gCRA4RmdNwEjCttxyR0AP9idAEhAP4A/gD8APwA/QD8AP8A/AD8AP0A/AOEZnTcBIwrbcckdHQAkWJ0ASEA/gCRAP4AkQL0AP4AkQOEZnTcBIwrbcckdAJLAT50AlIBQXQCU8l0dAJfdHQDpgL0A6YDpgOnA6cDpwOnA4RmdNwEjCttxyR0dACRYnQBIQOmAJEDpgCRAvQDpgCRA4RmdNwEjCttxyR0BDh0AJEEOQCRDpU5dSgCADR03gV2CwArdAEFAM5iCnR0AF1iAAYcOgp0dACRCnQAXAEIwWZ0CnRmdHQAkWZ0CnRmdEXgAFF03gp0dEY0tlT2u3SOAQTwscwhjZZKrhYcBSfFp9XNbKiVDOD2b+cpe4/Z17mQnbtzzhaeQtE2GGj0IDNTjRUSyTxxw/RPHW/+vS7d1NfRt9z9QPZg4X7QFfhCnkvgNPIItOsC2eV6hPannZNHlZ9xrwZXIMOlu3jSoQSq78WEjwLjw1ELSlF1aBvfzwk5ZX7AUvQzjPQKbDuQ+sm4wNOp4A6AdVuRS0t1y/DZpg4R6m7FNjM9HgvW7Bi88zaMjOo6lM8wtBBdj8LP4ylv3zCXPhebMKJc066o9sF71oFW/8JXu86HJbwDID5lzw5GWLR/LhT0Qqnp2JQxNZNfcbLIzPy+YypqRm/lBmGmex+82+PisxUumSeJkALIT6rJezxMH+CTJmQtt5uwTVbL3ptmjDUQzlSIvWi8Tl7ng1NpuRn1Ng4n14Qc+3Iil7OwkvNWogLSPkn3pihIFytyIGmMhOe3n1tWsuMy9BdKyqF4Z3v2SgggTL9KVvMXPnCbRe+oOuFFP3HejBG/w9gvmfNYvg6JuWia2lcSSN1uIjBktzoIazOHPJZ7kKHPz8mRWVdW3lA8WGF9dQF6Bm673boov3BUWDU2JNcahR23GtfHKLOz/viZ+rYnZFaIznXO67CYEJ1fXuTRpZhYZkKe54xeoagkNGLs+NTZHE0rX45/XvQ2RGADX6vcAvdxIUBV27wxGm2zjZo4X3ILgAlrOFheuZ6wtsvaIj4yLY7qqawlliaIcrz2G+c3vscAnCkCuMzMmZvMfu9lLwTvfX+3cVSyPdN9ZwgDZhfjRgNJcLiJ67b9xx8JHswprbiE3v9UphotAPIgnXVIN5KmMc0piXhc6cChPnN+MRhG9adtdttQTTwSIpl8I4/j//d3sz1326qTBTpPRM/Hgh3kzqEXs8ZAk4ErQhNO8hzrQ0DLkWMA/N+91tn2MdOJnWC2FCZehkQrwzwbKOjhvZsbM95QoeL9skYyMf4srVPVJSgg7pOLUtr/n9eT99oe9nLtFRpjA9okV2Kj8h9k5HaC0oivRD8VyXkJ81tcd4fHNXPCfloIQasxsuO18/46dR2jgul/UIet2G0kRvnyONMKhHs6J26FEoqSqd+rfYjeEGwHWVDpX1fh1jBBcKGMqRepju9Y00mDVHC+Xdij/j44rKfvfjGinNs1jO/0F3jB83XCDINN/HB84axlP+3E/klktRo+vl3U/aiyMJbIodE1XSsDn6UAzIoMtUObY2+k/4gY/l+AkZJ5Sj2vQrkyLm3FoxjhDX+31UXBFf9XrAH31fFqoBmDEZvhvvpnZ87N+oZEu7U9O/nnk+QWj3x8uyoRbEnf+O5UMr9i0nHP38IF5AvzrBW8YWBUR0mIAzIvndQq9N3v/Jto3aPjPXUPl8ASdPPyAp7jENf8bk7VMM9ol9XGmlBmeDMuGqt+WzuL6CXAxXjIhCPM5vACchgMJ/8XBGLO/D1isVvGhwwHHr1DLaI5mn2Jr/b1pUD90uciDaS8cXNDzCWvNmT/PhQe5e8nTnnnkt8Ds/SIjibcum/fqDhKopxAY8AkSrPn+IGDEKOO+U3XOP6djFs2H5N9+orhOahiQk5KnEUWa+CzkVzhp8bMHRbg81qhjjXuIKbHjSLSIBKWqockGtKinY+z4/RdBUF6pcc3JmnlxVcNgrI4SEzKUZSwcD2QCyxzKve+gAmg6ZuSRkpPFa6mfThu7LJNu3H5K42uCpNvPAsoedolKV/LHe/eJ+BbaG5MG0NaSGVPRUmNFMFFSSpXEcXwbVh7UETOZZtoVNRGOIbbkig3McEtR68cG0RZAoJevWYo7Dg/lZ1CQzblWeUvVHmr8fY4Nqd9JJiH/zEX24mJviH60fAyFr0A3c4bC1j3yZU60VgJxXn8JgJXLUIsiBnmKmMYz+7yBQFBvqb2eYnuW59joZBf56/wXvWIR4R8wTmV80i1mZy+S4+BUES+hzjk0uXpC///z/IlqHZ1monzlXp8aCfhGKMti73FI1KbL1q6IKO4fuBuZ59gagjn5xU79muMpHXg6S+e+gDM/U9BKLHbl9l6o8czQKl4RUkJJiqftQG2i3BMg/TQlUYFkJDYBOOvAugYuzYSDnZbDDd/aSd9x0Oe6F+bJcHfl9+gp6L5/TgA+BdFFovbfCrQ40s5vMPw8866pNX8zyFGeFWdxIpPVp9Rg1UPOVFbFZrvaFq/YAzHQgqMWpahMYfqHpmwXfHL1/kpYmGuHFwT55mQu0dylfNuq2Oq0hTMCPwqfxnuBIPLXfci4Y1ANy+1CUipQxld/izVh16WyG2Q0CQQ9NqtAnx1HCHwDj7sYxOSB0wopZSnOzxQOcExmxrVTF2BkOthVpGfuhaGECfCJpJKpjnihY+xOT2QJxN61+9K6QSqtv2Shr82I3jgJrqBg0wELFZPjvHpvzTtaJnLK6Vb97Yn933koO/saN7fsjwNKzp4l2lJVx2orjCGzC/4ZL4zCver6aQYtC5sdoychuFE6ufOiog+VWi5UDkbmvmtah/3aArEBIi39s5ILUnlFLgilcGuz9CQshEY7fw2ouoILAYPVT/gyAIq3TFAIwVsl+ktkRz/qGfnCDGrm5gsl/l9QdvCWGsjPz3dU7XuqKfdUrr/6XIgjp4rey6AJBmCmUJMjITHVdFb5m1p+dLMCL8t55zD42cmftmLEJC0Da04YiRCVUBLLa8D071/N5UBNBXDh0LFsmhV/5B5ExOB4j3WVG/S3lfK5o+V6ELHvy6RR9n4ac+VsK4VE4yphPvV+kG9FegTBH4ZRXL2HytUHCduJazB/KykjfetYxOXTLws267aGOd+I+JhKP//+VnXmS90OD/jvLcVu0asyqcuYN1mSb6XTlCkqv1vigZPIYwNF/zpWcT1GR/6aEIRjkh0yhg4LXJfaGobYJTY4JI58KiAKgmmgAKWdl5nYCeLqavRJGQNuYuZtZFGx+IkI4w4NS2xwbetNMunOjBu/hmKCI/w7tfiiyUd//4rbTeWt4izBY8YvGIN6vyKYmP/8X8wHKCeN+WRcKM70+tXKNGyevU9H2Dg5BsljnTf8YbsJ1TmMs74Ce2XlHisleguhyeg44rQOHZuw/6HTkhnnurK2d62q6yS7210SsAIaR+jXMQA+svkrLpsUY+F30Uw89uOdGAR6vo4FIME0EfVVeHTu6eKicfhSqOeXJhbftcd08sWEnNUL1C9fnprTgd83IMut8onVUF0hvqzZfHduPjbjwEXIcoYmy+P6tcJZHmeOv6VrvEdkHDJecjHuHeWANe79VG662qTjA/HCvumVv3qL+LrOcpqGps2ZGwQdFJ7PU4iuyRlBrwfO+xnPyr47s2cXVbWzAyznDiBGjCM3ksxjjqM62GE9C8f5U38kB3VjtabKp/nRdvMESPGDG90bWRLAt1Qk5DyLuazRR1YzdC1c+hZXvAWV8xA72S4A8B67vjVhbba3MMop293FeEXpe7zItMWrJG/LOH9ByOXmYnNJfjmfuX9KbrpgLOba4nZ+fl8Gbdv/ihv+6wFGKHCYrVwmhFC0J3V2bn2tIB1wCc1CST3d3X2OyxhguXcs4sm679UngzofuSeBewMFJboIQHbUh/m2JhW2hG9DIvG2t7yZIzKBTz9wBtnNC+2pCRYhSIuQ1j8xsz5VvqnyUIthvuoyyu7fNIrg/KQUVmGQaqkqZk/Vx5b33/gsEs8yX7SC1J+NV4icz6bvIE7C5G6McBaI8rVg56q5QBJWxn/87Q1sPK4+sQa8fLU5gXo4paaq4cOcQ4wR0VBHPGjKh+UlPCbA1nLXyEUX45qZ8J7/Ln4FPJE2TdzD0Z8MLSNQiykMMmSyOCiFfy84Rq60emYB2vD09KjYwsoIpeDcBDTElBbXxND72yhd9pC/1CMid/5HUMvAL27OtcIJDzNKpRPNqPOpyt2aPGz9QWIs9hQ9LiX5s8m9hjTUu/f7MyIatjjd+tSfQ3ufZxPpmJhTaBtZtKLUcfOCUqADuO+QoH8B9v6U+P0HV1GLQmtoNFTb3s74ivZgjES0qfK+8RdGgBbcCMSy8eBvh98+et1KIFqSe1KQPyXULBMTsIYnysIwiZBJYdI20vseV+wuJkcqGemehKjaAb9L57xZm3g2zX0bZ2xk/fU+bCo7TlnbW7JuF1YdURo/2Gw7VclDG1W7LOtas2LX4upifZ/23rzpsnY/ALfRgrcWP5hYmV9VxVOQA1fZvp9F2UNU+7d7xRyVm5wiLp3/0dlV7vdw1PMiZrbDAYzIVqEjRY2YU03sJhPnlwIPcZUG5ltL6S8XCxU1eYS5cjr34veBmXAvy7yN4ZjArIG0dfD/5UpBNlX1ZPoxJOwyqRi3wQWtOzd4oNKh0LkoTm8cwqgIfKhqqGOhwo71I+zXnMemTv2B2AUzABWyFztGgGULjDDzWYwJUVBTjKCn5K2QGMK1CQT7SzziOjo+BhAmqBjzuc3xYym2eedGeOIRJVyTwDw37iCMe4g5Vbnsb5ZBdxOAnMT7HU4DHpxWGuQ7GeiY30Cpbvzss55+5Km1YsbD5ea3NI9QNYIXol5apgSu9dZ8f8xS5dtHpido5BclDuLWY4lhik0tbJa07yJhH0BOyEut/GRbYTS6RfiTYWGMCkNpfSHi7HvdiTglEVHKZXaVhezH4kkXiIvKopYAlPusftpE4a5IZwvw1x/eLvoDIh/zpo9FiQInsTb2SAkKHV42XYBjpJDg4374XiVb3ws4qM0s9eSQ5HzsMU4OZJKuopFjBM+dAZEl8RUMx5uU2N486Kr141tVsGQfGjORYMCJAMsxELeNT4RmWjRcpdTGBwcx6XN9drWqPmJzcrGrH4+DRc7+n1w3kPZwu0BkNr6hQrqgo7JTB9A5kdJ/H7P4cWBMwsmuixAzJB3yrQpnGIq90lxAXLzDCdn1LPibsRt7rHNjgQBklRgPZ8vTbjXdgXrTWQsK5MdrXXQVPp0Rinq3frzZKJ0qD6Qhc40VzAraUXlob1gvkhK3vpmHgI6FRlQZNx6eRqkp0zy4AQlX813fAPtL3jMRaitGFFjo0zmErloC+h+YYdVQ6k4F/epxAoF0BmqEoKNTt6j4vQZNQ2BoqF9Vj53TOIoNmDiu9Xp15RkIgQIGcoLpfoIbenzpGUAtqFJp5W+LLnx38jHeECTJ/navKY1NWfN0sY1T8/pB8kIH3DU3DX+u6W3YwpypBMYOhbSxGjq84RZ84fWJow8pyHqn4S/9J15EcCMsXqrfwyd9mhiu3+rEo9pPpoJkdZqHjra4NvzFwuThNKy6hao/SlLw3ZADUcUp3w3SRVfW2rhl80zOgTYnKE0Hs2qp1J6H3xqPqIkvUDRMFDYyRbsFI3M9MEyovPk8rlw7/0a81cDVLmBsR2ze2pBuKb23fbeZC0uXoIvDppfTwIDxk1Oq2dGesGc+oJXWJLGkOha3CX+DUnzgAp9HGH9RsPZN63Hn4RMA5eSVhPHO+9RcRb/IOgtW31V1Q5IPGtoxPjC+MEJbVlIMYADd9aHYWUIQKopuPOHmoqSkubnAKnzgKHqgIOfW5RdAgotN6BN+O2ZYHkuemLnvQ8U9THVrS1RtLmKbcC7PeeDsYznvqzeg6VCNwmr0Yyx1wnLjyT84BZz3EJyCptD3yeueAyDWIs0L2qs/VQ3HUyqfrja0V1LdDzqAikeWuV4sc7RLIB69jEIBjCkyZedoUHqCrOvShVzyd73OdrJW0hPOuQv2qOoHDc9xVb6Yu6uq3Xqp2ZaH46A7lzevbxQEmfrzvAYSJuZ4WDk1Hz3QX1LVdiUK0EvlAGAYlG3Md30r7dcPN63yqBCIj25prpvZP0nI4+EgWoFG95V596CurXpKRBGRjQlHCvy5Ib/iW8nZJWwrET3mgd6mEhfP4KCuaLjopWs7h+MdXFdIv8dHQJgg1xi1eYqB0uDYjxwVmri0Sv5XKut/onqapC+FQiC2C1lvYJ9MVco6yDYsS3AANUfMtvtbYI2hfwZatiSsnoUeMZd34GVjkMMKA+XnjJpXgRW2SHTZplVowPmJsvXy6w3cfO1AK2dvtZEKTkC/TY9LFiKHCG0DnrMQdGm2lzlBHM9iEYynH2UcVMhUEjsc0oDBTgo2ZSQ1gzkAHeWeBXYFjYLuuf8yzTCy7/RFR81WDjXMbq2BOH5dURnxo6oivmxL3cKzKInlZkD31nvpHB9Kk7GfcfE1t+1V64b9LtgeJGlpRFxQCAqWJ5DoY77ski8gsOEOr2uywZaoO/NGa0X0y1pNQHBi3b2SUGNpcZxDT7rLbBf1FSnQ8guxGW3W+36BW0gBje4DOz6Ba6SVk0xiKgt+q2JOFyr4SYfnu+Ic1QZYIuwHBrgzr6UvOcSCzPTOo7D6IC4ISeS7zkl4h+2VoeHpnG/uWR3+ysNgPcOIXQbv0n4mr3BwQcdKJxgPSeyuP/z1Jjg4e9nUvoXegqQVIE30EHx5GHv+FAVUNTowYDJgyFhf5IvlYmEqRif6+WN1MkEJmDcQITx9FX23a4mxy1AQRsOHO/+eImX9l8EMJI3oPWzVXxSOeHU1dUWYr2uAA7AMb+vAEZSbU3qob9ibCyXeypEMpZ6863o6QPqlqGHZkuWABSTVNd4cOh9hv3qEpSx2Zy/DJMP6cItEmiBJ5PFqQnDEIt3NrA3COlOSgz43D7gpNFNJ5MBh4oFzhDPiglC2ypsNU4ISywY2erkyb1NC3Qh/IfWj0eDgZI4/ln8WPfBsT3meTjq1Uqt1E7Zl/qftqkx6aM9KueMCekSnMrcHj1CqTWWzEzPsZGcDe3Ue4Ws+XFYVxNbOFF8ezkvQGR6ZOtOLU2lQEnMBStx47vE6Pb7AYMBRj2OOfZXfisjJnpTfSNjo6sZ6qSvNxZNmDeS7Gk3yYyCk1HtKN2UnhMIjOXUzAqDv90lx9O/q/AT1ZMnit5XQe9wmQxnE/WSH0CqZ9/2Hy+Sfmpeg8RwsHI5Z8kC8H293m/LHVVM/BA7HaTJYg5Enk7M/xWpq0192ACfBai2LA/qrCjCr6Dh1BIMzMXINBmX96MJ5Hn2nxln/RXPFhwHxUmSV0EV2V0jm86/dxxuYSU1W7sVkEbN9EzkG0QFwPhyHKyb3t+Fj5WoUUTErcazE/N6EW6Lvp0d//SDPj7EV9UdJN+Amnf3Wwk3A0SlJ9Z00yvXZ7n3z70G47Hfsow8Wq1JXcfwnA+Yxa5mFsgV464KKP4T31wqIgzFPd3eCe3j5ory5fBF2hgCFyVFrLzI9eetNXvM7oQqyFgDo4CTp/hDV9NMX9JDHQ/nyHTLvZLNLF6ftn2OxjGm8+PqOwhxnPHWipkE/8wbtyri80Sr7pMNkQGMfo4ZYK9OcCC4ESVFFbLMIvlxSoRqWie0wxqnLfcLSXMSpMMQEJYDVObYsXIQNv4TGNwjq1kvT1UOkicTrG3IaBZ3XdScS3u8sgeZPVpOLkbiF940FjbCeNRINNvDbd01EPBrTCPpm12m43ze1bBB59Ia6Ovhnur/Nvx3IxwSWol+3H2qfCJR8df6aQf4v6WiONxkK+IqT4pKQrZK/LplgDI/PJZbOep8dtbV7oCr6CgfpWa8NczOkPx81iSHbsNhVSJBOtrLIMrL31LK9TqHqAbAHe0RLmmV806kRLDLNEhUEJfm9u0sxpkL93Zgd6rw+tqBfTMi59xqXHLXSHwSbSBl0EK0+loECOPtrl+/nsaFe197di4yUgoe4jKoAJDXc6DGDjrQOoFDWZJ9HXwt8xDrQP+7aRwWKWI1GF8s8O4KzxWBBcwnl3vnl1Oez3oh6Ea1vjR7/z7DDTrFtqU2W/KAEzAuXDNZ7MY73MF216dzdSbWmUp4lcm7keJfWaMHgut9x5C9mj66Z0lJ+yhsjVvyiWrfk1lzPOTdhG15Y7gQlXtacvI7qv/XNSscDwqkgwHT/gUsD5yB7LdRRvJxQGYINn9hTpodKFVSTPrtGvyQw+HlRFXIkodErAGu9Iy1YpfSPc3jkFh5CX3lPxv7aqjE/JAfTIpEjGb/H7MO0e2vsViSW1qa/Lmi4/n4DEI3g7lYrcanspDfEpKkdV1OjSLOy0BCUqVoECaB55vs06rXl4jqmLsPsFM/7vYJ0vrBhDCm/00A/H81l1uekJ/6Lml3Hb9+NKiLqATJmDpyzfYZFHumEjC662L0Bwkxi7E9U4cQA0XMVDuMYAIeLMPgQaMVOd8fmt5SflFIfuBoszeAw7ow5gXPE2Y/yBc/7jExARUf/BxIHQBF5Sn3i61w4z5xJdCyO1F1X3+3ax+JSvMeZ7S6QSKp1Fp/sjYz6Z+VgCZzibGeEoujryfMulH7Rai5kAft9ebcW50DyJr2uo2z97mTWIu45YsSnNSMrrNUuG1XsYBtD9TDYzQffKB87vWbkM4EbPAFgoBV4GQS+vtFDUqOFAoi1nTtmIOvg38N4hT2Sn8r8clmBCXspBlMBYTnrqFJGBT3wZOzAyJDre9dHH7+x7qaaKDOB4UQALD5ecS0DE4obubQEiuJZ0EpBVpLuYcce8Aa4PYd/V4DLDAJBYKQPCWTcrEaZ5HYbJi11Gd6hjGom1ii18VHYnG28NKpkz2UKVPxlhYSp8uZr367iOmoy7zsxehW9wzcy2zG0a80PBMCRQMb32hnaHeOR8fnNDzZhaNYhkOdDsBUZ3loDMa1YP0uS0cjUP3b/6DBlqmZOeNABDsLl5BI5QJups8uxAuWJdkUB/pO6Zax6tsg7fN5mjjDgMGngO+DPcKqiHIDbFIGudxtPTIyDi9SFMKBDcfdGQRv41q1AqmxgkVfJMnP8w/Bc7N9/TR6C7mGObFqFkIEom8sKi2xYqJLTCHK7cxzaZvqODo22c3wisBCP4HeAgcRbNPAsBkNRhSmD48dHupdBRw4mIvtS5oeF6zeT1KMCyhMnmhpkFAGWnGscoNkwvQ8ZM5lE/vgTHFYL99OuNxdFBxTEDd5v2qLR8y9WkXsWgG6kZNndFG+pO/UAkOCipqIhL3hq7cRSdrCq7YhUsTocEcnaFa6nVkhnSeRYUA1YO0z5itF9Sly3VlxYDw239TJJH6f3EUfYO5lb7bcFcz8Bp7Oo8QmnsUHOz/fagVUBtKEw1iT88j+aKkv8cscKNkMxjYr8344D1kFoZ7/td1W6LCNYN594301tUGRmFjAzeRg5vyoM1F6+bJZ/Q54jN/k8SFd3DxPTYaAUsivsBfgTn7Mx8H2SpPt4GOdYRnEJOH6jHM2p6SgB0gzIRq6fHxGMmSmqaPCmlfwxiuloaVIitLGN8wie2CDWhkzLoCJcODh7KIOAqbHEvXdUxaS4TTTs07Clzj/6GmVs9kiZDerMxEnhUB6QQPlcfqkG9882RqHoLiHGBoHfQuXIsAG8GTAtao2KVwRnvvam8jo1e312GQAKWEa4sUVEAMG4G6ckcONDwRcg1e2D3+ohXgY4UAWF8wHKQMrSnzCgfFpsxh+aHXMGtPQroQasRY4U6UdG0rz1Vjbka0MekOGRZQEvqQFlxseFor8zWFgHek3v29+WqN6gaK5gZOTOMZzpQIC1201LkMCXild3vWXSc5UX9xcFYfbRPzGFa1FDcPfPB/jUEq/FeGt419CI3YmBlVoHsa4KdcwQP5ZSwHHhFJ7/Ph/Rap/4vmG91eDwPP0lDfCDRCLszTqfzM71xpmiKi2HwS4WlqvGNwtvwF5Dqpn6KTq8ax00UMPkxDcZrEEEsIvHiUXXEphdb4GB4FymlPwBz4Gperqq5pW7TQ6/yNRhW8VT5NhuP0udlxo4gILq5ZxAZk8ZGh3g4CqxJlPKY7AQxupfUcVpWT5VItp1+30UqoyP4wWsRo3olRRgkWZZ2ZN6VC3OZFeXB8NbnUrSdikNptD1QiGuKkr8EmSR/AK9Rw+FF3s5uwuPbvHGiPeFOViltMK7AUaOsq9+x9cndk3iJEE5LKZRlWJbKOZweROzmPNVPkjE3K/TyA57Rs68TkZ3MR8akKpm7cFjnjPd/DdkWjgYoKHSr5Wu5ssoBYU4acRs5g2DHxUmdq8VXOXRbunD8QN0LhgkssgahcdoYsNvuXGUK/KXD/7oFb+VGdhqIn02veuM5bLudJOc2Ky0GMaG4W/xWBxIJcL7yliJOXOpx0AkBqUgzlDczmLT4iILXDxxtRR1oZa2JWFgiAb43obrJnG/TZC2KSK2wqOzRZTXavZZFMb1f3bXvVaNaK828w9TO610gk8JNf3gMfETzXXsbcvRGCG9JWQZ6+cDPqc4466Yo2RcKH+PILeKOqtnlbInR3MmBeGG3FH10yzkybuqEC2HSQwpA0An7d9+73BkDUTm30bZmoP/RGbgFN+GrCOfADgqr0WbI1a1okpFms8iHYw9hm0zUvlEMivBRxModrbJJ+9/p3jUdQQ9BCtQdxnOGrT5dzRUmw0593/mbRSdBg0nRvRZM5/E16m7ZHmDEtWhwvfdZCZ8J8M12W0yRMszXamWfQTwIZ4ayYktrnscQuWr8idp3PjT2eF/jmtdhIfcpMnb+IfZY2FebW6UY/AK3jP4u3Tu4zE4qlnQgLFbM19EBIsNf7KhjdbqQ/D6yiDb+NlEi2SKD+ivXVUK8ib0oBo366gXkR8ZxGjpJIDcEgZPa9TcYe0TIbiPl/rPUQDu3XBJ9X/GNq3FAUsKsll57DzaGMrjcT+gctp+9MLYXCq+sqP81eVQ0r9lt+gcQfZbACRbEjvlMskztZG8gbC8Qn9tt26Q7y7nDrbZq/LEz7kR6Jc6pg3N9rVX8Y5MJrGlML9p9lU4jbTkKqCveeZUJjHB03m2KRKR2TytoFkTXOLg7keU1s1lrPMQJpoOKLuAAC+y1HlJucU6ysB5hsXhvSPPLq5J7JtnqHKZ4vYjC4Vy8153QY+6780xDuGARsGbOs1WqzH0QS765rnSKEbbKlkO8oI/VDwUd0is13tKpqILu1mDJFNy/iJAWcvDgjxvusIT+PGz3ST/J9r9Mtfd0jpaGeiLYIqXc7DiHSS8TcjFVksi66PEkxW1z6ujbLLUGNNYnzOWpH8BZGK4bCK7iR+MbIv8ncDAz1u4StN3vTTzewr9IQjk9wxFxn+6N1ddKs0vffJiS08N3a4G1SVrlZ97Q/M+8G9fe5AP6d9/Qq4WRnORVhofPIKEdCr3llspUfE0oKIIYoByBRPh+bX1HLS3JWGJRhIvE1aW4NTd8ePi4Z+kXb+Z8snYfSNcqijhAgVsx4RCM54cXUiYkjeBmmC4ajOHrChoELscJJC7+9jjMjw5BagZKlgRMiSNYz7h7vvZIoQqbtQmspc0cUk1G/73iXtSpROl5wtLgQi0mW2Ex8i3WULhcggx6E1LMVHUsdc9GHI1PH3U2Ko0PyGdn9KdVOLm7FPBui0i9a0HpA60MsewVE4z8CAt5d401Gv6zXlIT5Ybit1VIA0FCs7wtvYreru1fUyW3oLAZ/+aTnZrOcYRNVA8spoRtlRoWflsRClFcgzkqiHOrf0/SVw+EpVaFlJ0g4Kxq1MMOmiQdpMNpte8lMMQqm6cIFXlnGbfJllysKDi+0JJMotkqgIxOSQgU9dn/lWkeVf8nUm3iwX2Nl3WDw9i6AUK3vBAbZZrcJpDQ/N64AVwjT07Jef30GSSmtNu2WlW7YoyW2FlWfZFQUwk867EdLYKk9VG6JgEnBiBxkY7LMo4YLQJJlAo9l/oTvJkSARDF/XtyAzM8O2t3eT/iXa6wDN3WewNmQHdPfsxChU/KtLG2Mn8i4ZqKdSlIaBZadxJmRzVS/o4yA65RTSViq60oa395Lqw0pzY4SipwE0SXXsKV+GZraGSkr/RW08wPRvqvSUkYBMA9lPx4m24az+IHmCbXA+0faxTRE9wuGeO06DIXa6QlKJ3puIyiuAVfPr736vzo2pBirS+Vxel3TMm3JKhz9o2ZoRvaFVpIkykb0Hcm4oHFBMcNSNj7/4GJt43ogonY2Vg4nsDQIWxAcorpXACzgBqQPjYsE/VUpXpwNManEru4NwMCFPkXvMoqvoeLN3qyu/N1eWEHttMD65v19l/0kH2mR35iv/FI+yjoHJ9gPMz67af3Mq/BoWXqu3rphiWMXVkmnPSEkpGpUI2h1MThideGFEOK6YZHPwYzMBvpNC7+ZHxPb7epfefGyIB4JzO9DTNEYnDLVVHdQyvOEVefrk6Uv5kTQYVYWWdqrdcIl7yljwwIWdfQ/y+2QB3eR/qxYObuYyB4gTbo2in4PzarU1sO9nETkmj9/AoxDA+JM3GMqQtJR4jtduHtnoCLxd1gQUscHRB/MoRYIEsP2pDZ9KvHgtlk1iTbWWbHhohwFEYX7y51fUV2nuUmnoUcqnWIQAAgl9LTVX+Bc0QGNEhChxHR4YjfE51PUdGfsSFE6ck7BL3/hTf9jLq4G1IafINxOLKeAtO7quulYvH5YOBc+zX7CrMgWnW47/jfRsWnJjYYoE7xMfWV2HN2iyIqLI"),read_sorted_array=()=>read_sorted(n),read_sorted_set=()=>new Set(read_sorted_array());c=new Map(read_mapped(n)),u=read_sorted_set(),d=read_sorted_array(),p=new Set(read_sorted_array().map(e=>d[e])),d=new Set(d),f=read_sorted_set(),read_sorted_set();let o=read_sorted_arrays(n),i=n(),read_chunked=()=>new Set(read_sorted_array().flatMap(e=>o[e]).concat(read_sorted_array()));m=read_array_while(e=>{let t=read_array_while(n).map(e=>e+96);if(t.length){let o=e>=i;return t[0]-=32,t=str_from_cps(t),o&&(t=`Restricted[${t}]`),{N:t,P:read_chunked(),Q:read_chunked(),M:!n(),R:o}}}),b=read_sorted_set(),g=new Map;let s=read_sorted_array().concat(Array_from(b)).sort((e,t)=>e-t);for(let{V:e,M:t}of(s.forEach((e,t)=>{let o=n(),i=s[t]=o?s[t-o]:{V:[],M:new Map};i.V.push(e),b.has(e)||g.set(e,i)}),new Set(g.values()))){let n=[];for(let t of e){let e=m.filter(e=>group_has_cp(e,t)),o=n.find(({G:t})=>e.some(e=>t.has(e)));o||(o={G:new Set,V:[]},n.push(o)),o.V.push(t),e.forEach(e=>o.G.add(e))}let o=n.flatMap(e=>Array_from(e.G));for(let{G:e,V:i}of n){let n=new Set(o.filter(t=>!e.has(t)));for(let e of i)t.set(e,n)}}let l=new Set,C=new Set,add_to_union=e=>l.has(e)?C.add(e):l.add(e);for(let e of m){for(let t of e.P)add_to_union(t);for(let t of e.Q)add_to_union(t)}for(let e of l)g.has(e)||C.has(e)||g.set(e,1);for(let o of(y=new Set(Array_from(l).concat(Array_from(decomposed(l).map(unpack_cp)))),v=(e=[],t=read_sorted(n),function expand({S:t,B:n},o,i){if(!(4&t)||i!==o[o.length-1])for(let s of(2&t&&(i=o[o.length-1]),1&t&&e.push(o),n))for(let e of s.Q)expand(s,[...o,e],i)}(function decode(e){return{S:n(),B:read_array_while(()=>{let e=read_sorted(n).map(e=>t[e]);if(e.length)return decode(e)}),Q:e}}([]),[]),e).map(e=>Emoji.from(e)).sort(compare_arrays),w=new Map,v)){let e=[w];for(let t of o){let n=e.map(e=>{let n=e.get(t);return n||(n=new Map,e.set(t,n)),n});65039===t?e.push(...n):e=n}for(let t of e)t.V=o}}function quoted_cp(e){return(should_escape(e)?"":`${bidi_qq(safe_str_from_cps([e]))} `)+quote_cp(e)}function bidi_qq(e){return`"${e}"\u200E`}function safe_str_from_cps(e,t=quote_cp){var n;let o=[];n=e[0],init(),d.has(n)&&o.push("◌");let i=0,s=e.length;for(let n=0;ne.P.has(t));return o&&(n=`${o.N} ${n}`),Error(`illegal mixture: ${e.N} + ${n}`)}function error_placement(e){return Error(`illegal placement: ${e}`)}function filter_fe0f(e){return e.filter(e=>65039!=e)}let EnsAvatarInvalidMetadataError=class EnsAvatarInvalidMetadataError extends X.G{constructor({data:e}){super("Unable to extract image from metadata. The metadata may be malformed or invalid.",{metaMessages:["- Metadata must be a JSON object with at least an `image`, `image_url` or `image_data` property.","",`Provided data: ${JSON.stringify(e)}`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EnsAvatarInvalidMetadataError"})}};let EnsAvatarInvalidNftUriError=class EnsAvatarInvalidNftUriError extends X.G{constructor({reason:e}){super(`ENS NFT avatar URI is invalid. ${e}`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EnsAvatarInvalidNftUriError"})}};let EnsAvatarUriResolutionError=class EnsAvatarUriResolutionError extends X.G{constructor({uri:e}){super(`Unable to resolve ENS avatar URI "${e}". The URI may be malformed, invalid, or does not respond with a valid image.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EnsAvatarUriResolutionError"})}};let EnsAvatarUnsupportedNamespaceError=class EnsAvatarUnsupportedNamespaceError extends X.G{constructor({namespace:e}){super(`ENS NFT avatar namespace "${e}" is not supported. Must be "erc721" or "erc1155".`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EnsAvatarUnsupportedNamespaceError"})}};let ef=/(?https?:\/\/[^\/]*|ipfs:\/|ipns:\/|ar:\/)?(?\/)?(?ipfs\/|ipns\/)?(?[\w\-.]+)(?\/.*)?/,em=/^(Qm[1-9A-HJ-NP-Za-km-z]{44,}|b[A-Za-z2-7]{58,}|B[A-Z2-7]{58,}|z[1-9A-HJ-NP-Za-km-z]{48,}|F[0-9A-F]{50,})(\/(?[\w\-.]+))?(?\/.*)?$/,eb=/^data:([a-zA-Z\-/+]*);base64,([^"].*)/,eg=/^data:([a-zA-Z\-/+]*)?(;[a-zA-Z0-9].*?)?(,)/;async function isImageUri(e){try{let t=await fetch(e,{method:"HEAD"});if(200===t.status){let e=t.headers.get("content-type");return e?.startsWith("image/")}return!1}catch(t){if("object"==typeof t&&void 0!==t.response||!globalThis.hasOwnProperty("Image"))return!1;return new Promise(t=>{let n=new Image;n.onload=()=>{t(!0)},n.onerror=()=>{t(!1)},n.src=e})}}function getGateway(e,t){return e?e.endsWith("/")?e.slice(0,-1):e:t}function resolveAvatarUri({uri:e,gatewayUrls:t}){let n=eb.test(e);if(n)return{uri:e,isOnChain:!0,isEncoded:n};let o=getGateway(t?.ipfs,"https://ipfs.io"),i=getGateway(t?.arweave,"https://arweave.net"),s=e.match(ef),{protocol:l,subpath:c,target:u,subtarget:d=""}=s?.groups||{},p="ipns:/"===l||"ipns/"===c,f="ipfs:/"===l||"ipfs/"===c||em.test(e);if(e.startsWith("http")&&!p&&!f){let n=e;return t?.arweave&&(n=e.replace(/https:\/\/arweave.net/g,t?.arweave)),{uri:n,isOnChain:!1,isEncoded:!1}}if((p||f)&&u)return{uri:`${o}/${p?"ipns":"ipfs"}/${u}${d}`,isOnChain:!1,isEncoded:!1};if("ar:/"===l&&u)return{uri:`${i}/${u}${d||""}`,isOnChain:!1,isEncoded:!1};let m=e.replace(eg,"");if(m.startsWith("e.json()),o=await parseAvatarUri({gatewayUrls:e,uri:getJsonImage(n)});return o}catch{throw new EnsAvatarUriResolutionError({uri:t})}}async function parseAvatarUri({gatewayUrls:e,uri:t}){let{uri:n,isOnChain:o}=resolveAvatarUri({uri:t,gatewayUrls:e});if(o)return n;let i=await isImageUri(n);if(i)return n;throw new EnsAvatarUriResolutionError({uri:t})}async function getNftTokenUri(e,{nft:t}){if("erc721"===t.namespace)return readContract(e,{address:t.contractAddress,abi:[{name:"tokenURI",type:"function",stateMutability:"view",inputs:[{name:"tokenId",type:"uint256"}],outputs:[{name:"",type:"string"}]}],functionName:"tokenURI",args:[BigInt(t.tokenID)]});if("erc1155"===t.namespace)return readContract(e,{address:t.contractAddress,abi:[{name:"uri",type:"function",stateMutability:"view",inputs:[{name:"_id",type:"uint256"}],outputs:[{name:"",type:"string"}]}],functionName:"uri",args:[BigInt(t.tokenID)]});throw new EnsAvatarUnsupportedNamespaceError({namespace:t.namespace})}async function parseAvatarRecord(e,{gatewayUrls:t,record:n}){return/eip155:/i.test(n)?parseNftAvatarUri(e,{gatewayUrls:t,record:n}):parseAvatarUri({uri:n,gatewayUrls:t})}async function parseNftAvatarUri(e,{gatewayUrls:t,record:n}){let o=function(e){let t=e;t.startsWith("did:nft:")&&(t=t.replace("did:nft:","").replace(/_/g,"/"));let[n,o,i]=t.split("/"),[s,l]=n.split(":"),[c,u]=o.split(":");if(!s||"eip155"!==s.toLowerCase())throw new EnsAvatarInvalidNftUriError({reason:"Only EIP-155 supported"});if(!l)throw new EnsAvatarInvalidNftUriError({reason:"Chain ID not found"});if(!u)throw new EnsAvatarInvalidNftUriError({reason:"Contract address not found"});if(!i)throw new EnsAvatarInvalidNftUriError({reason:"Token ID not found"});if(!c)throw new EnsAvatarInvalidNftUriError({reason:"ERC namespace not found"});return{chainID:parseInt(l),namespace:c.toLowerCase(),contractAddress:u,tokenID:i}}(n),i=await getNftTokenUri(e,{nft:o}),{uri:s,isOnChain:l,isEncoded:c}=resolveAvatarUri({uri:i,gatewayUrls:t});if(l&&(s.includes("data:application/json;base64,")||s.startsWith("{"))){let e=c?atob(s.replace("data:application/json;base64,","")):s,n=JSON.parse(e);return parseAvatarUri({uri:getJsonImage(n),gatewayUrls:t})}let u=o.tokenID;return"erc1155"===o.namespace&&(u=u.replace("0x","").padStart(64,"0")),getMetadataAvatarUri({gatewayUrls:t,uri:s.replace(/(?:0x)?{id}/,u)})}var ey=n(21746);function isNullUniversalResolverError(e,t){if(!(e instanceof X.G))return!1;let n=e.walk(e=>e instanceof q.Lu);return n instanceof q.Lu&&(!!(n.data?.errorName==="ResolverNotFound"||n.data?.errorName==="ResolverWildcardNotSupported"||n.data?.errorName==="ResolverNotContract"||n.data?.errorName==="ResolverError"||n.data?.errorName==="HttpError"||n.reason?.includes("Wildcard on non-extended resolvers is not supported"))||"reverse"===t&&n.reason===ey.$[50])}var ev=n(57040),ew=n(11187),eC=n(49550),eE=n(15102);function encodedLabelToLabelhash(e){if(66!==e.length||0!==e.indexOf("[")||65!==e.indexOf("]"))return null;let t=`0x${e.slice(1,65)}`;return(0,eE.v)(t)?t:null}function namehash(e){let t=new Uint8Array(32).fill(0);if(!e)return(0,Q.ci)(t);let n=e.split(".");for(let e=n.length-1;e>=0;e-=1){let o=encodedLabelToLabelhash(n[e]),i=o?(0,ew.O0)(o):(0,eC.w)((0,ew.qX)(n[e]),"bytes");t=(0,eC.w)((0,ev.zo)([t,i]),"bytes")}return(0,Q.ci)(t)}function packetToBytes(e){let t=e.replace(/^\.|\.$/gm,"");if(0===t.length)return new Uint8Array(1);let n=new Uint8Array((0,ew.qX)(t).byteLength+2),o=0,i=t.split(".");for(let e=0;e255){var s;t=(0,ew.qX)((s=function(e){let t=new Uint8Array(32).fill(0);return e?encodedLabelToLabelhash(e)||(0,eC.w)((0,ew.qX)(e)):(0,Q.ci)(t)}(i[e]),`[${s.slice(2)}]`))}n[o]=t.length,n.set(t,o+1),o+=t.length+1}return n.byteLength!==o+1?n.slice(0,o+1):n}async function getEnsText(e,{blockNumber:t,blockTag:n,name:o,key:i,gatewayUrls:s,strict:l,universalResolverAddress:c}){let u=c;if(!u){if(!e.chain)throw Error("client chain not configured. universalResolverAddress is required.");u=(0,ee.L)({blockNumber:t,chain:e.chain,contract:"ensUniversalResolver"})}try{let l={address:u,abi:Z.k3,functionName:"resolve",args:[(0,Q.NC)(packetToBytes(o)),(0,$.R)({abi:Z.nZ,functionName:"text",args:[namehash(o),i]})],blockNumber:t,blockTag:n},c=getAction_getAction(e,readContract,"readContract"),d=s?await c({...l,args:[...l.args,s]}):await c(l);if("0x"===d[0])return null;let p=(0,Y.k)({abi:Z.nZ,functionName:"text",data:d[0]});return""===p?null:p}catch(e){if(l)throw e;if(isNullUniversalResolverError(e,"resolve"))return null;throw e}}async function getEnsAvatar(e,{blockNumber:t,blockTag:n,assetGatewayUrls:o,name:i,gatewayUrls:s,strict:l,universalResolverAddress:c}){let u=await getAction_getAction(e,getEnsText,"getEnsText")({blockNumber:t,blockTag:n,key:"avatar",name:i,universalResolverAddress:c,gatewayUrls:s,strict:l});if(!u)return null;try{return await parseAvatarRecord(e,{record:u,gatewayUrls:o})}catch{return null}}var ex=n(66403);async function getEnsName(e,{address:t,blockNumber:n,blockTag:o,gatewayUrls:i,strict:s,universalResolverAddress:l}){let c=l;if(!c){if(!e.chain)throw Error("client chain not configured. universalResolverAddress is required.");c=(0,ee.L)({blockNumber:n,chain:e.chain,contract:"ensUniversalResolver"})}let u=`${t.toLowerCase().substring(2)}.addr.reverse`;try{let s={address:c,abi:Z.du,functionName:"reverse",args:[(0,Q.NC)(packetToBytes(u))],blockNumber:n,blockTag:o},l=getAction_getAction(e,readContract,"readContract"),[d,p]=i?await l({...s,args:[...s.args,i]}):await l(s);if(t.toLowerCase()!==p.toLowerCase())return null;return d}catch(e){if(s)throw e;if(isNullUniversalResolverError(e,"reverse"))return null;throw e}}async function getEnsAddress(e,{blockNumber:t,blockTag:n,coinType:o,name:i,gatewayUrls:s,strict:l,universalResolverAddress:c}){let u=c;if(!u){if(!e.chain)throw Error("client chain not configured. universalResolverAddress is required.");u=(0,ee.L)({blockNumber:t,chain:e.chain,contract:"ensUniversalResolver"})}try{let l=(0,$.R)({abi:Z.X$,functionName:"addr",...null!=o?{args:[namehash(i),BigInt(o)]}:{args:[namehash(i)]}}),c={address:u,abi:Z.k3,functionName:"resolve",args:[(0,Q.NC)(packetToBytes(i)),l],blockNumber:t,blockTag:n},d=getAction_getAction(e,readContract,"readContract"),p=s?await d({...c,args:[...c.args,s]}):await d(c);if("0x"===p[0])return null;let f=(0,Y.k)({abi:Z.X$,args:null!=o?[namehash(i),BigInt(o)]:void 0,functionName:"addr",data:p[0]});if("0x"===f||"0x00"===(0,W.f)(f))return null;return f}catch(e){if(l)throw e;if(isNullUniversalResolverError(e,"resolve"))return null;throw e}}async function getEnsResolver(e,{blockNumber:t,blockTag:n,name:o,universalResolverAddress:i}){let s=i;if(!s){if(!e.chain)throw Error("client chain not configured. universalResolverAddress is required.");s=(0,ee.L)({blockNumber:t,chain:e.chain,contract:"ensUniversalResolver"})}let[l]=await getAction_getAction(e,readContract,"readContract")({address:s,abi:[{inputs:[{type:"bytes"}],name:"findResolver",outputs:[{type:"address"},{type:"bytes32"}],stateMutability:"view",type:"function"}],functionName:"findResolver",args:[(0,Q.NC)(packetToBytes(o))],blockNumber:t,blockTag:n});return l}function createFilterRequestScope(e,{method:t}){let n={};return"fallback"===e.transport.type&&e.transport.onResponse?.(({method:e,response:o,status:i,transport:s})=>{"success"===i&&t===e&&(n[o]=s.request)}),t=>n[t]||e.request}async function createBlockFilter(e){let t=createFilterRequestScope(e,{method:"eth_newBlockFilter"}),n=await e.request({method:"eth_newBlockFilter"});return{id:n,request:t(n),type:"block"}}let FilterTypeNotSupportedError=class FilterTypeNotSupportedError extends X.G{constructor(e){super(`Filter type "${e}" is not supported.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"FilterTypeNotSupportedError"})}};var eA=n(96005),ek=n(45444),eB=n(80522),eS=n(40840);let eI="/docs/contract/encodeEventTopics";function encodeEventTopics(e){let{abi:t,eventName:n,args:o}=e,i=t[0];if(n){let e=(0,eS.mE)({abi:t,name:n});if(!e)throw new J.mv(n,{docsPath:eI});i=e}if("event"!==i.type)throw new J.mv(void 0,{docsPath:eI});let s=(0,eB.t)(i),l=(0,eA.n)(s),c=[];if(o&&"inputs"in i){let e=i.inputs?.filter(e=>"indexed"in e&&e.indexed),t=Array.isArray(o)?o:Object.values(o).length>0?e?.map(e=>o[e.name])??[]:[];t.length>0&&(c=e?.map((e,n)=>Array.isArray(t[n])?t[n].map((o,i)=>encodeArg({param:e,value:t[n][i]})):t[n]?encodeArg({param:e,value:t[n]}):null)??[])}return[l,...c]}function encodeArg({param:e,value:t}){if("string"===e.type||"bytes"===e.type)return(0,eC.w)((0,ew.O0)(t));if("tuple"===e.type||e.type.match(/^(.*)\[(\d+)?\]$/))throw new FilterTypeNotSupportedError(e.type);return(0,ek.E)([e],[t])}async function createContractEventFilter(e,t){let{address:n,abi:o,args:i,eventName:s,fromBlock:l,strict:c,toBlock:u}=t,d=createFilterRequestScope(e,{method:"eth_newFilter"}),p=s?encodeEventTopics({abi:o,args:i,eventName:s}):void 0,f=await e.request({method:"eth_newFilter",params:[{address:n,fromBlock:"bigint"==typeof l?(0,Q.eC)(l):l,toBlock:"bigint"==typeof u?(0,Q.eC)(u):u,topics:p}]});return{abi:o,args:i,eventName:s,id:f,request:d(f),strict:!!c,type:"event"}}async function createEventFilter(e,{address:t,args:n,event:o,events:i,fromBlock:s,strict:l,toBlock:c}={}){let u=i??(o?[o]:void 0),d=createFilterRequestScope(e,{method:"eth_newFilter"}),p=[];u&&(p=[u.flatMap(e=>encodeEventTopics({abi:[e],eventName:e.name,args:n}))],o&&(p=p[0]));let f=await e.request({method:"eth_newFilter",params:[{address:t,fromBlock:"bigint"==typeof s?(0,Q.eC)(s):s,toBlock:"bigint"==typeof c?(0,Q.eC)(c):c,...p.length?{topics:p}:{}}]});return{abi:u,args:n,eventName:o?o.name:void 0,fromBlock:s,id:f,request:d(f),strict:!!l,toBlock:c,type:"event"}}async function createPendingTransactionFilter(e){let t=createFilterRequestScope(e,{method:"eth_newPendingTransactionFilter"}),n=await e.request({method:"eth_newPendingTransactionFilter"});return{id:n,request:t(n),type:"transaction"}}var ej=n(14503),eT=n(39625),eP=n(67795),eM=n(33639);let EstimateGasExecutionError=class EstimateGasExecutionError extends X.G{constructor(e,{account:t,docsPath:n,chain:o,data:i,gas:s,gasPrice:l,maxFeePerGas:c,maxPriorityFeePerGas:u,nonce:d,to:p,value:f}){let m=(0,eM.xr)({from:t?.address,to:p,value:void 0!==f&&`${(0,eT.d)(f)} ${o?.nativeCurrency?.symbol||"ETH"}`,data:i,gas:s,gasPrice:void 0!==l&&`${(0,eP.o)(l)} gwei`,maxFeePerGas:void 0!==c&&`${(0,eP.o)(c)} gwei`,maxPriorityFeePerGas:void 0!==u&&`${(0,eP.o)(u)} gwei`,nonce:d});super(e.shortMessage,{cause:e,docsPath:n,metaMessages:[...e.metaMessages?[...e.metaMessages," "]:[],"Estimate Gas Arguments:",m].filter(Boolean)}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EstimateGasExecutionError"}),this.cause=e}};var eO=n(26445),eR=n(87469),eU=n(61163),eF=n(74688),eN=n(47531);let BaseFeeScalarError=class BaseFeeScalarError extends X.G{constructor(){super("`baseFeeMultiplier` must be greater than 1."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BaseFeeScalarError"})}};let Eip1559FeesNotSupportedError=class Eip1559FeesNotSupportedError extends X.G{constructor(){super("Chain does not support EIP-1559 fees."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Eip1559FeesNotSupportedError"})}};let MaxFeePerGasTooLowError=class MaxFeePerGasTooLowError extends X.G{constructor({maxPriorityFeePerGas:e}){super(`\`maxFeePerGas\` cannot be less than the \`maxPriorityFeePerGas\` (${(0,eP.o)(e)} gwei).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"MaxFeePerGasTooLowError"})}};let BlockNotFoundError=class BlockNotFoundError extends X.G{constructor({blockHash:e,blockNumber:t}){let n="Block";e&&(n=`Block at hash "${e}"`),t&&(n=`Block at number "${t}"`),super(`${n} could not be found.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BlockNotFoundError"})}};var eD=n(43310);async function getBlock(e,{blockHash:t,blockNumber:n,blockTag:o,includeTransactions:i}={}){let s=i??!1,l=void 0!==n?(0,Q.eC)(n):void 0,c=null;if(!(c=t?await e.request({method:"eth_getBlockByHash",params:[t,s]}):await e.request({method:"eth_getBlockByNumber",params:[l||(o??"latest"),s]})))throw new BlockNotFoundError({blockHash:t,blockNumber:n});let u=e.chain?.formatters?.block?.format||eD.Z;return u(c)}async function getGasPrice(e){let t=await e.request({method:"eth_gasPrice"});return BigInt(t)}async function estimateMaxPriorityFeePerGas(e,t){return internal_estimateMaxPriorityFeePerGas(e,t)}async function internal_estimateMaxPriorityFeePerGas(e,t){let{block:n,chain:o=e.chain,request:i}=t||{};if("function"==typeof o?.fees?.defaultPriorityFee){let t=n||await getAction_getAction(e,getBlock,"getBlock")({});return o.fees.defaultPriorityFee({block:t,client:e,request:i})}if(void 0!==o?.fees?.defaultPriorityFee)return o?.fees?.defaultPriorityFee;try{let t=await e.request({method:"eth_maxPriorityFeePerGas"});return(0,G.y_)(t)}catch{let[t,o]=await Promise.all([n?Promise.resolve(n):getAction_getAction(e,getBlock,"getBlock")({}),getAction_getAction(e,getGasPrice,"getGasPrice")({})]);if("bigint"!=typeof t.baseFeePerGas)throw new Eip1559FeesNotSupportedError;let i=o-t.baseFeePerGas;if(i<0n)return 0n;return i}}async function estimateFeesPerGas(e,t){return internal_estimateFeesPerGas(e,t)}async function internal_estimateFeesPerGas(e,t){let{block:n,chain:o=e.chain,request:i,type:s="eip1559"}=t||{},l=await (async()=>"function"==typeof o?.fees?.baseFeeMultiplier?o.fees.baseFeeMultiplier({block:n,client:e,request:i}):o?.fees?.baseFeeMultiplier??1.2)();if(l<1)throw new BaseFeeScalarError;let c=l.toString().split(".")[1]?.length??0,u=10**c,multiply=e=>e*BigInt(Math.ceil(l*u))/BigInt(u),d=n||await getAction_getAction(e,getBlock,"getBlock")({});if("function"==typeof o?.fees?.estimateFeesPerGas)return o.fees.estimateFeesPerGas({block:n,client:e,multiply,request:i,type:s});if("eip1559"===s){if("bigint"!=typeof d.baseFeePerGas)throw new Eip1559FeesNotSupportedError;let t="bigint"==typeof i?.maxPriorityFeePerGas?i.maxPriorityFeePerGas:await internal_estimateMaxPriorityFeePerGas(e,{block:d,chain:o,request:i}),n=multiply(d.baseFeePerGas),s=i?.maxFeePerGas??n+t;return{maxFeePerGas:s,maxPriorityFeePerGas:t}}let p=i?.gasPrice??multiply(await getAction_getAction(e,getGasPrice,"getGasPrice")({}));return{gasPrice:p}}async function getTransactionCount(e,{address:t,blockTag:n="latest",blockNumber:o}){let i=await e.request({method:"eth_getTransactionCount",params:[t,o?(0,Q.eC)(o):n]});return(0,G.ly)(i)}var e_=n(82994);async function getChainId_getChainId(e){let t=await e.request({method:"eth_chainId"});return(0,G.ly)(t)}async function prepareTransactionRequest(e,t){let{account:n=e.account,chain:o,chainId:i,gas:s,nonce:l,parameters:c=["chainId","fees","gas","nonce","type"],type:u}=t,d=n?(0,ej.T)(n):void 0,p=await getAction_getAction(e,getBlock,"getBlock")({blockTag:"latest"}),f={...t,...d?{from:d?.address}:{}};if(c.includes("chainId")&&(o?f.chainId=o.id:void 0!==i?f.chainId=i:f.chainId=await getAction_getAction(e,getChainId_getChainId,"getChainId")({})),c.includes("nonce")&&void 0===l&&d&&(f.nonce=await getAction_getAction(e,getTransactionCount,"getTransactionCount")({address:d.address,blockTag:"pending"})),(c.includes("fees")||c.includes("type"))&&void 0===u)try{f.type=(0,e_.l)(f)}catch{f.type="bigint"==typeof p.baseFeePerGas?"eip1559":"legacy"}if(c.includes("fees")){if("eip1559"===f.type||"eip4844"===f.type){let{maxFeePerGas:n,maxPriorityFeePerGas:i}=await internal_estimateFeesPerGas(e,{block:p,chain:o,request:f});if(void 0===t.maxPriorityFeePerGas&&t.maxFeePerGas&&t.maxFeePerGas{let t=(0,eR.k)(e,n);return t instanceof eO.cj?e:t})();return new EstimateGasExecutionError(o,{docsPath:t,...n})}(n,{...t,account:o,chain:e.chain})}}async function estimateContractGas(e,t){let{abi:n,address:o,args:i,functionName:s,...l}=t,c=(0,$.R)({abi:n,args:i,functionName:s});try{let t=await getAction_getAction(e,estimateGas,"estimateGas")({data:c,to:o,...l});return t}catch(t){let e=l.account?(0,ej.T)(l.account):void 0;throw getContractError(t,{abi:n,address:o,args:i,docsPath:"/docs/contract/estimateContractGas",functionName:s,sender:e?.address})}}async function getBlobBaseFee(e){let t=await e.request({method:"eth_blobBaseFee"});return BigInt(t)}let eL=new Map,ez=new Map;async function withCache(e,{cacheKey:t,cacheTime:n=1/0}){let o=function(e){let buildCache=(e,t)=>({clear:()=>t.delete(e),get:()=>t.get(e),set:n=>t.set(e,n)}),t=buildCache(e,eL),n=buildCache(e,ez);return{clear:()=>{t.clear(),n.clear()},promise:t,response:n}}(t),i=o.response.get();if(i&&n>0){let e=new Date().getTime()-i.created.getTime();if(e`blockNumber.${e}`;async function getBlockNumber(e,{cacheTime:t=e.cacheTime}={}){let n=await withCache(()=>e.request({method:"eth_blockNumber"}),{cacheKey:cacheKey(e.uid),cacheTime:t});return BigInt(n)}async function getBlockTransactionCount(e,{blockHash:t,blockNumber:n,blockTag:o="latest"}={}){let i;let s=void 0!==n?(0,Q.eC)(n):void 0;return i=t?await e.request({method:"eth_getBlockTransactionCountByHash",params:[t]}):await e.request({method:"eth_getBlockTransactionCountByNumber",params:[s||o]}),(0,G.ly)(i)}async function getBytecode(e,{address:t,blockNumber:n,blockTag:o="latest"}){let i=void 0!==n?(0,Q.eC)(n):void 0,s=await e.request({method:"eth_getCode",params:[t,i||o]});if("0x"!==s)return s}var eq=n(39135),eG=n(66238),eW=n(78398);let eH="/docs/contract/decodeEventLog";function decodeEventLog(e){let{abi:t,data:n,strict:o,topics:i}=e,s=o??!0,[l,...c]=i;if(!l)throw new J.FM({docsPath:eH});let u=t.find(e=>"event"===e.type&&l===(0,eA.n)((0,eB.t)(e)));if(!(u&&"name"in u)||"event"!==u.type)throw new J.lC(l,{docsPath:eH});let{name:d,inputs:p}=u,f=p?.some(e=>!("name"in e&&e.name)),m=f?[]:{},b=p.filter(e=>"indexed"in e&&e.indexed);for(let e=0;e!("indexed"in e&&e.indexed));if(g.length>0){if(n&&"0x"!==n)try{let e=(0,eW.r)(g,n);if(e){if(f)m=[...m,...e];else for(let t=0;t0?m:void 0}}function parseEventLogs({abi:e,eventName:t,logs:n,strict:o=!0}){return n.map(n=>{try{let i=decodeEventLog({...n,abi:e,strict:o});if(t&&!t.includes(i.eventName))return null;return{...i,...n}}catch(i){let e,t;if(i instanceof J.lC)return null;if(i instanceof J.SM||i instanceof J.Gy){if(o)return null;e=i.abiItem.name,t=i.abiItem.inputs?.some(e=>!("name"in e&&e.name))}return{...n,args:t?[]:{},eventName:e}}}).filter(Boolean)}var eQ=n(53992);async function getLogs(e,{address:t,blockHash:n,fromBlock:o,toBlock:i,event:s,events:l,args:c,strict:u}={}){let d;let p=u??!1,f=l??(s?[s]:void 0),m=[];f&&(m=[f.flatMap(e=>encodeEventTopics({abi:[e],eventName:e.name,args:c}))],s&&(m=m[0])),d=n?await e.request({method:"eth_getLogs",params:[{address:t,topics:m,blockHash:n}]}):await e.request({method:"eth_getLogs",params:[{address:t,topics:m,fromBlock:"bigint"==typeof o?(0,Q.eC)(o):o,toBlock:"bigint"==typeof i?(0,Q.eC)(i):i}]});let b=d.map(e=>(0,eQ.U)(e));return f?parseEventLogs({abi:f,logs:b,strict:p}):b}async function getContractEvents(e,t){let{abi:n,address:o,args:i,blockHash:s,eventName:l,fromBlock:c,toBlock:u,strict:d}=t,p=l?(0,eS.mE)({abi:n,name:l}):void 0,f=p?void 0:n.filter(e=>"event"===e.type);return getAction_getAction(e,getLogs,"getLogs")({address:o,args:i,blockHash:s,event:p,events:f,fromBlock:c,toBlock:u,strict:d})}async function getFeeHistory(e,{blockCount:t,blockNumber:n,blockTag:o="latest",rewardPercentiles:i}){let s=n?(0,Q.eC)(n):void 0,l=await e.request({method:"eth_feeHistory",params:[(0,Q.eC)(t),s||o,i]});return{baseFeePerGas:l.baseFeePerGas.map(e=>BigInt(e)),gasUsedRatio:l.gasUsedRatio,oldestBlock:BigInt(l.oldestBlock),reward:l.reward?.map(e=>e.map(e=>BigInt(e)))}}async function getFilterChanges(e,{filter:t}){let n="strict"in t&&t.strict,o=await t.request({method:"eth_getFilterChanges",params:[t.id]});if("string"==typeof o[0])return o;let i=o.map(e=>(0,eQ.U)(e));return"abi"in t&&t.abi?parseEventLogs({abi:t.abi,logs:i,strict:n}):i}async function getFilterLogs(e,{filter:t}){let n=t.strict??!1,o=await t.request({method:"eth_getFilterLogs",params:[t.id]}),i=o.map(e=>(0,eQ.U)(e));return t.abi?parseEventLogs({abi:t.abi,logs:i,strict:n}):i}async function getProof(e,{address:t,blockNumber:n,blockTag:o,storageKeys:i}){let s=void 0!==n?(0,Q.eC)(n):void 0,l=await e.request({method:"eth_getProof",params:[t,i,s||(o??"latest")]});return{...l,balance:l.balance?BigInt(l.balance):void 0,nonce:l.nonce?(0,G.ly)(l.nonce):void 0,storageProof:l.storageProof?l.storageProof.map(e=>({...e,value:BigInt(e.value)})):void 0}}async function getStorageAt(e,{address:t,blockNumber:n,blockTag:o="latest",slot:i}){let s=void 0!==n?(0,Q.eC)(n):void 0,l=await e.request({method:"eth_getStorageAt",params:[t,i,s||o]});return l}var eK=n(6073);async function getTransaction(e,{blockHash:t,blockNumber:n,blockTag:o,hash:i,index:s}){let l=o||"latest",c=void 0!==n?(0,Q.eC)(n):void 0,u=null;if(i?u=await e.request({method:"eth_getTransactionByHash",params:[i]}):t?u=await e.request({method:"eth_getTransactionByBlockHashAndIndex",params:[t,(0,Q.eC)(s)]}):(c||l)&&(u=await e.request({method:"eth_getTransactionByBlockNumberAndIndex",params:[c||l,(0,Q.eC)(s)]})),!u)throw new eM.Bh({blockHash:t,blockNumber:n,blockTag:l,hash:i,index:s});let d=e.chain?.formatters?.transaction?.format||eK.Tr;return d(u)}async function getTransactionConfirmations(e,{hash:t,transactionReceipt:n}){let[o,i]=await Promise.all([getAction_getAction(e,getBlockNumber,"getBlockNumber")({}),t?getAction_getAction(e,getTransaction,"getBlockNumber")({hash:t}):void 0]),s=n?.blockNumber||i?.blockNumber;return s?o-s+1n:0n}var eV=n(30866);async function getTransactionReceipt(e,{hash:t}){let n=await e.request({method:"eth_getTransactionReceipt",params:[t]});if(!n)throw new eM.Yb({hash:t});let o=e.chain?.formatters?.transactionReceipt?.format||eV.f;return o(n)}async function simulateContract(e,t){let{abi:n,address:o,args:i,dataSuffix:s,functionName:l,...c}=t,u=c.account?(0,ej.T)(c.account):e.account,d=(0,$.R)({abi:n,args:i,functionName:l});try{let{data:p}=await getAction_getAction(e,er.RE,"call")({batch:!1,data:`${d}${s?s.replace("0x",""):""}`,to:o,...c,account:u}),f=(0,Y.k)({abi:n,args:i,functionName:l,data:p||"0x"}),m=n.filter(e=>"name"in e&&e.name===t.functionName);return{result:f,request:{abi:m,address:o,args:i,dataSuffix:s,functionName:l,...c,account:u}}}catch(e){throw getContractError(e,{abi:n,address:o,args:i,docsPath:"/docs/contract/simulateContract",functionName:l,sender:u?.address})}}async function uninstallFilter(e,{filter:t}){return t.request({method:"eth_uninstallFilter",params:[t.id]})}var eZ=n(27499);let eJ="/docs/contract/encodeDeployData";async function verifyHash(e,{address:t,hash:n,signature:o,...i}){let s=(0,eE.v)(o)?o:(0,Q.NC)(o);try{let{data:o}=await getAction_getAction(e,er.RE,"call")({data:function(e){let{abi:t,args:n,bytecode:o}=e;if(!n||0===n.length)return o;let i=t.find(e=>"type"in e&&"constructor"===e.type);if(!i)throw new J.fM({docsPath:eJ});if(!("inputs"in i)||!i.inputs||0===i.inputs.length)throw new J.cO({docsPath:eJ});let s=(0,ek.E)(i.inputs,n);return(0,ev.SM)([o,s])}({abi:Z.$o,args:[t,n,s],bytecode:"0x60806040523480156200001157600080fd5b50604051620007003803806200070083398101604081905262000034916200056f565b6000620000438484846200004f565b9050806000526001601ff35b600080846001600160a01b0316803b806020016040519081016040528181526000908060200190933c90507f6492649264926492649264926492649264926492649264926492649264926492620000a68462000451565b036200021f57600060608085806020019051810190620000c79190620005ce565b8651929550909350915060000362000192576000836001600160a01b031683604051620000f5919062000643565b6000604051808303816000865af19150503d806000811462000134576040519150601f19603f3d011682016040523d82523d6000602084013e62000139565b606091505b5050905080620001905760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b505b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90620001c4908b90869060040162000661565b602060405180830381865afa158015620001e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020891906200069d565b6001600160e01b031916149450505050506200044a565b805115620002b157604051630b135d3f60e11b808252906001600160a01b03871690631626ba7e9062000259908890889060040162000661565b602060405180830381865afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d91906200069d565b6001600160e01b031916149150506200044a565b8251604114620003195760405162461bcd60e51b815260206004820152603a6024820152600080516020620006e083398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000606482015260840162000187565b620003236200046b565b506020830151604080850151855186939260009185919081106200034b576200034b620006c9565b016020015160f81c9050601b81148015906200036b57508060ff16601c14155b15620003cf5760405162461bcd60e51b815260206004820152603b6024820152600080516020620006e083398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c75650000000000606482015260840162000187565b6040805160008152602081018083528a905260ff83169181019190915260608101849052608081018390526001600160a01b038a169060019060a0016020604051602081039080840390855afa1580156200042e573d6000803e3d6000fd5b505050602060405103516001600160a01b031614955050505050505b9392505050565b60006020825110156200046357600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b03811681146200049f57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004d5578181015183820152602001620004bb565b50506000910152565b600082601f830112620004f057600080fd5b81516001600160401b03808211156200050d576200050d620004a2565b604051601f8301601f19908116603f01168101908282118183101715620005385762000538620004a2565b816040528381528660208588010111156200055257600080fd5b62000565846020830160208901620004b8565b9695505050505050565b6000806000606084860312156200058557600080fd5b8351620005928162000489565b6020850151604086015191945092506001600160401b03811115620005b657600080fd5b620005c486828701620004de565b9150509250925092565b600080600060608486031215620005e457600080fd5b8351620005f18162000489565b60208501519093506001600160401b03808211156200060f57600080fd5b6200061d87838801620004de565b935060408601519150808211156200063457600080fd5b50620005c486828701620004de565b6000825162000657818460208701620004b8565b9190910192915050565b828152604060208201526000825180604084015262000688816060850160208701620004b8565b601f01601f1916919091016060019392505050565b600060208284031215620006b057600080fd5b81516001600160e01b0319811681146200044a57600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572"}),...i});return function(e,t){let n=(0,eE.v)(e)?(0,ew.O0)(e):e,o=(0,eE.v)(t)?(0,ew.O0)(t):t;return(0,eZ.Wd)(n,o)}(o??"0x0","0x1")}catch(e){if(e instanceof q.cg)return!1;throw e}}async function verifyMessage(e,{address:t,message:n,signature:o,...i}){let s=function(e,t){let n="string"==typeof e?(0,ew.qX)(e):e.raw instanceof Uint8Array?e.raw:(0,ew.O0)(e.raw),o=(0,ew.qX)(`Ethereum Signed Message: -${n.length}`);return(0,eC.w)((0,ev.zo)([o,n]),void 0)}(n);return verifyHash(e,{address:t,hash:s,signature:o,...i})}var eX=n(26087),eY=n(60480);let e$=/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/,e0=/^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/;function hashStruct({data:e,primaryType:t,types:n}){let o=function encodeData({data:e,primaryType:t,types:n}){let o=[{type:"bytes32"}],i=[function({primaryType:e,types:t}){let n=(0,Q.NC)(function({primaryType:e,types:t}){let n="",o=function findTypeDependencies({primaryType:e,types:t},n=new Set){let o=e.match(/^\w*/u),i=o?.[0];if(n.has(i)||void 0===t[i])return n;for(let e of(n.add(i),t[i]))findTypeDependencies({primaryType:e.type,types:t},n);return n}({primaryType:e,types:t});o.delete(e);let i=[e,...Array.from(o).sort()];for(let e of i)n+=`${e}(${t[e].map(({name:e,type:t})=>`${t} ${e}`).join(",")})`;return n}({primaryType:e,types:t}));return(0,eC.w)(n)}({primaryType:t,types:n})];for(let s of n[t]){let[t,l]=function encodeField({types:e,name:t,type:n,value:o}){if(void 0!==e[n])return[{type:"bytes32"},(0,eC.w)(encodeData({data:o,primaryType:n,types:e}))];if("bytes"===n){let e=o.length%2?"0":"";return o=`0x${e+o.slice(2)}`,[{type:"bytes32"},(0,eC.w)(o)]}if("string"===n)return[{type:"bytes32"},(0,eC.w)((0,Q.NC)(o))];if(n.lastIndexOf("]")===n.length-1){let i=n.slice(0,n.lastIndexOf("[")),s=o.map(n=>encodeField({name:t,type:i,types:e,value:n}));return[{type:"bytes32"},(0,eC.w)((0,ek.E)(s.map(([e])=>e),s.map(([,e])=>e)))]}return[{type:n},o]}({types:n,name:s.name,type:s.type,value:e[s.name]});o.push(t),i.push(l)}return(0,ek.E)(o,i)}({data:e,primaryType:t,types:n});return(0,eC.w)(o)}async function verifyTypedData(e,t){let{address:n,signature:o,message:i,primaryType:s,types:l,domain:c,...u}=t,d=function(e){let{domain:t={},message:n,primaryType:o}=e,i={EIP712Domain:function({domain:e}){return["string"==typeof e?.name&&{name:"name",type:"string"},e?.version&&{name:"version",type:"string"},"number"==typeof e?.chainId&&{name:"chainId",type:"uint256"},e?.verifyingContract&&{name:"verifyingContract",type:"address"},e?.salt&&{name:"salt",type:"bytes32"}].filter(Boolean)}({domain:t}),...e.types};!function(e){let{domain:t,message:n,primaryType:o,types:i}=e,validateData=(e,t)=>{for(let n of e){let{name:e,type:o}=n,s=t[e],l=o.match(e0);if(l&&("number"==typeof s||"bigint"==typeof s)){let[e,t,n]=l;(0,Q.eC)(s,{signed:"int"===t,size:parseInt(n)/8})}if("address"===o&&"string"==typeof s&&!(0,eY.U)(s))throw new eX.b({address:s});let c=o.match(e$);if(c){let[e,t]=c;if(t&&(0,eq.d)(s)!==parseInt(t))throw new J.KY({expectedSize:parseInt(t),givenSize:(0,eq.d)(s)})}let u=i[o];u&&validateData(u,s)}};if(i.EIP712Domain&&t&&validateData(i.EIP712Domain,t),"EIP712Domain"!==o){let e=i[o];validateData(e,n)}}({domain:t,message:n,primaryType:o,types:i});let s=["0x1901"];return t&&s.push(function({domain:e,types:t}){return hashStruct({data:e,primaryType:"EIP712Domain",types:t})}({domain:t,types:i})),"EIP712Domain"!==o&&s.push(hashStruct({data:n,primaryType:o,types:i})),(0,eC.w)((0,ev.zo)(s))}({message:i,primaryType:s,types:l,domain:c});return verifyHash(e,{address:n,hash:d,signature:o,...u})}let e1=new Map,e6=new Map,e3=0;function observe(e,t,n){let o=++e3,getListeners=()=>e1.get(e)||[],unsubscribe=()=>{let t=getListeners();e1.set(e,t.filter(e=>e.id!==o))},unwatch=()=>{let t=e6.get(e);1===getListeners().length&&t&&t(),unsubscribe()},i=getListeners();if(e1.set(e,[...i,{id:o,fns:t}]),i&&i.length>0)return unwatch;let s={};for(let e in t)s[e]=(...t)=>{let n=getListeners();if(0!==n.length)for(let o of n)o.fns[e]?.(...t)};let l=n(s);return"function"==typeof l&&e6.set(e,l),unwatch}var e2=n(7760),e7=n(96070),e8=n(62914);function poll(e,{emitOnBegin:t,initialWaitTime:n,interval:o}){let i=!0,unwatch=()=>i=!1,watch=async()=>{let s;t&&(s=await e({unpoll:unwatch}));let l=await n?.(s)??o;await (0,e8.D)(l);let poll=async()=>{i&&(await e({unpoll:unwatch}),await (0,e8.D)(o),poll())};poll()};return watch(),unwatch}function watchBlockNumber(e,{emitOnBegin:t=!1,emitMissed:n=!1,onBlockNumber:o,onError:i,poll:s,pollingInterval:l=e.pollingInterval}){let c;let u=void 0!==s?s:"webSocket"!==e.transport.type;return u?(()=>{let s=(0,e7.P)(["watchBlockNumber",e.uid,t,n,l]);return observe(s,{onBlockNumber:o,onError:i},o=>poll(async()=>{try{let t=await getAction_getAction(e,getBlockNumber,"getBlockNumber")({cacheTime:0});if(c){if(t===c)return;if(t-c>1&&n)for(let e=c+1n;ec)&&(o.onBlockNumber(t,c),c=t)}catch(e){o.onError?.(e)}},{emitOnBegin:t,interval:l}))})():(()=>{let s=(0,e7.P)(["watchBlockNumber",e.uid,t,n]);return observe(s,{onBlockNumber:o,onError:i},t=>{let n=!0,unsubscribe=()=>n=!1;return(async()=>{try{let{unsubscribe:o}=await e.transport.subscribe({params:["newHeads"],onData(e){if(!n)return;let o=(0,G.y_)(e.result?.number);t.onBlockNumber(o,c),c=o},onError(e){t.onError?.(e)}});unsubscribe=o,n||unsubscribe()}catch(e){i?.(e)}})(),()=>unsubscribe()})})()}async function waitForTransactionReceipt(e,{confirmations:t=1,hash:n,onReplaced:o,pollingInterval:i=e.pollingInterval,retryCount:s=6,retryDelay:l=({count:e})=>200*~~(1<{c&&setTimeout(()=>g(new eM.mc({hash:n})),c);let y=observe(f,{onReplaced:o,resolve:b,reject:g},o=>{let c=getAction_getAction(e,watchBlockNumber,"watchBlockNumber")({emitMissed:!0,emitOnBegin:!0,poll:!0,pollingInterval:i,async onBlockNumber(i){if(m)return;let f=i,done=e=>{c(),e(),y()};try{if(p){if(t>1&&(!p.blockNumber||f-p.blockNumber+1no.resolve(p));return}if(u||(m=!0,await (0,e2.J)(async()=>{(u=await getAction_getAction(e,getTransaction,"getTransaction")({hash:n})).blockNumber&&(f=u.blockNumber)},{delay:l,retryCount:s}),m=!1),p=await getAction_getAction(e,getTransactionReceipt,"getTransactionReceipt")({hash:n}),t>1&&(!p.blockNumber||f-p.blockNumber+1no.resolve(p))}catch(n){if(n instanceof eM.Bh||n instanceof eM.Yb){if(!u){m=!1;return}try{d=u,m=!0;let n=await (0,e2.J)(()=>getAction_getAction(e,getBlock,"getBlock")({blockNumber:f,includeTransactions:!0}),{delay:l,retryCount:s,shouldRetry:({error:e})=>e instanceof BlockNotFoundError});m=!1;let i=n.transactions.find(({from:e,nonce:t})=>e===d.from&&t===d.nonce);if(!i||(p=await getAction_getAction(e,getTransactionReceipt,"getTransactionReceipt")({hash:i.hash}),t>1&&(!p.blockNumber||f-p.blockNumber+1n{o.onReplaced?.({reason:c,replacedTransaction:d,transaction:i,transactionReceipt:p}),o.resolve(p)})}catch(e){done(()=>o.reject(e))}}else done(()=>o.reject(n))}}})})})}async function sendRawTransaction(e,{serializedTransaction:t}){return e.request({method:"eth_sendRawTransaction",params:[t]},{retryCount:0})}function publicActions(e){return{call:t=>(0,er.RE)(e,t),createBlockFilter:()=>createBlockFilter(e),createContractEventFilter:t=>createContractEventFilter(e,t),createEventFilter:t=>createEventFilter(e,t),createPendingTransactionFilter:()=>createPendingTransactionFilter(e),estimateContractGas:t=>estimateContractGas(e,t),estimateGas:t=>estimateGas(e,t),getBalance:t=>getBalance(e,t),getBlobBaseFee:()=>getBlobBaseFee(e),getBlock:t=>getBlock(e,t),getBlockNumber:t=>getBlockNumber(e,t),getBlockTransactionCount:t=>getBlockTransactionCount(e,t),getBytecode:t=>getBytecode(e,t),getChainId:()=>getChainId_getChainId(e),getContractEvents:t=>getContractEvents(e,t),getEnsAddress:t=>getEnsAddress(e,t),getEnsAvatar:t=>getEnsAvatar(e,t),getEnsName:t=>getEnsName(e,t),getEnsResolver:t=>getEnsResolver(e,t),getEnsText:t=>getEnsText(e,t),getFeeHistory:t=>getFeeHistory(e,t),estimateFeesPerGas:t=>estimateFeesPerGas(e,t),getFilterChanges:t=>getFilterChanges(e,t),getFilterLogs:t=>getFilterLogs(e,t),getGasPrice:()=>getGasPrice(e),getLogs:t=>getLogs(e,t),getProof:t=>getProof(e,t),estimateMaxPriorityFeePerGas:t=>estimateMaxPriorityFeePerGas(e,t),getStorageAt:t=>getStorageAt(e,t),getTransaction:t=>getTransaction(e,t),getTransactionConfirmations:t=>getTransactionConfirmations(e,t),getTransactionCount:t=>getTransactionCount(e,t),getTransactionReceipt:t=>getTransactionReceipt(e,t),multicall:t=>multicall(e,t),prepareTransactionRequest:t=>prepareTransactionRequest(e,t),readContract:t=>readContract(e,t),sendRawTransaction:t=>sendRawTransaction(e,t),simulateContract:t=>simulateContract(e,t),verifyMessage:t=>verifyMessage(e,t),verifyTypedData:t=>verifyTypedData(e,t),uninstallFilter:t=>uninstallFilter(e,t),waitForTransactionReceipt:t=>waitForTransactionReceipt(e,t),watchBlocks:t=>(function(e,{blockTag:t="latest",emitMissed:n=!1,emitOnBegin:o=!1,onBlock:i,onError:s,includeTransactions:l,poll:c,pollingInterval:u=e.pollingInterval}){let d,p,f;let m=void 0!==c?c:"webSocket"!==e.transport.type,b=l??!1;return m?(()=>{let l=(0,e7.P)(["watchBlocks",e.uid,n,o,b,u]);return observe(l,{onBlock:i,onError:s},i=>poll(async()=>{try{let o=await getAction_getAction(e,getBlock,"getBlock")({blockTag:t,includeTransactions:b});if(o.number&&d?.number){if(o.number===d.number)return;if(o.number-d.number>1&&n)for(let t=d?.number+1n;td.number)&&(i.onBlock(o,d),d=o)}catch(e){i.onError?.(e)}},{emitOnBegin:o,interval:u}))})():(p=!0,f=()=>p=!1,(async()=>{try{let{unsubscribe:t}=await e.transport.subscribe({params:["newHeads"],onData(t){if(!p)return;let n=e.chain?.formatters?.block?.format||eD.Z,o=n(t.result);i(o,d),d=o},onError(e){s?.(e)}});f=t,p||f()}catch(e){s?.(e)}})(),()=>f())})(e,t),watchBlockNumber:t=>watchBlockNumber(e,t),watchContractEvent:t=>(function(e,t){let{abi:n,address:o,args:i,batch:s=!0,eventName:l,onError:c,onLogs:u,poll:d,pollingInterval:p=e.pollingInterval,strict:f}=t,m=void 0!==d?d:"webSocket"!==e.transport.type;return m?(()=>{let t=f??!1,d=(0,e7.P)(["watchContractEvent",o,i,s,e.uid,l,p,t]);return observe(d,{onLogs:u,onError:c},c=>{let u,d;let f=!1,m=poll(async()=>{if(!f){try{d=await getAction_getAction(e,createContractEventFilter,"createContractEventFilter")({abi:n,address:o,args:i,eventName:l,strict:t})}catch{}f=!0;return}try{let p;if(d)p=await getAction_getAction(e,getFilterChanges,"getFilterChanges")({filter:d});else{let s=await getAction_getAction(e,getBlockNumber,"getBlockNumber")({});p=u&&u!==s?await getAction_getAction(e,getContractEvents,"getContractEvents")({abi:n,address:o,args:i,eventName:l,fromBlock:u+1n,toBlock:s,strict:t}):[],u=s}if(0===p.length)return;if(s)c.onLogs(p);else for(let e of p)c.onLogs([e])}catch(e){d&&e instanceof et.yR&&(f=!1),c.onError?.(e)}},{emitOnBegin:!0,interval:p});return async()=>{d&&await getAction_getAction(e,uninstallFilter,"uninstallFilter")({filter:d}),m()}})})():(()=>{let t=(0,e7.P)(["watchContractEvent",o,i,s,e.uid,l,p,f??!1]),d=!0,unsubscribe=()=>d=!1;return observe(t,{onLogs:u,onError:c},t=>((async()=>{try{let s=l?encodeEventTopics({abi:n,eventName:l,args:i}):[],{unsubscribe:c}=await e.transport.subscribe({params:["logs",{address:o,topics:s}],onData(e){if(!d)return;let o=e.result;try{let{eventName:e,args:i}=decodeEventLog({abi:n,data:o.data,topics:o.topics,strict:f}),s=(0,eQ.U)(o,{args:i,eventName:e});t.onLogs([s])}catch(s){let e,n;if(s instanceof J.SM||s instanceof J.Gy){if(f)return;e=s.abiItem.name,n=s.abiItem.inputs?.some(e=>!("name"in e&&e.name))}let i=(0,eQ.U)(o,{args:n?[]:{},eventName:e});t.onLogs([i])}},onError(e){t.onError?.(e)}});unsubscribe=c,d||unsubscribe()}catch(e){c?.(e)}})(),()=>unsubscribe()))})()})(e,t),watchEvent:t=>(function(e,{address:t,args:n,batch:o=!0,event:i,events:s,onError:l,onLogs:c,poll:u,pollingInterval:d=e.pollingInterval,strict:p}){let f,m;let b=void 0!==u?u:"webSocket"!==e.transport.type,g=p??!1;return b?(()=>{let u=(0,e7.P)(["watchEvent",t,n,o,e.uid,i,d]);return observe(u,{onLogs:c,onError:l},l=>{let c,u;let p=!1,f=poll(async()=>{if(!p){try{u=await getAction_getAction(e,createEventFilter,"createEventFilter")({address:t,args:n,event:i,events:s,strict:g})}catch{}p=!0;return}try{let d;if(u)d=await getAction_getAction(e,getFilterChanges,"getFilterChanges")({filter:u});else{let o=await getAction_getAction(e,getBlockNumber,"getBlockNumber")({});d=c&&c!==o?await getAction_getAction(e,getLogs,"getLogs")({address:t,args:n,event:i,events:s,fromBlock:c+1n,toBlock:o}):[],c=o}if(0===d.length)return;if(o)l.onLogs(d);else for(let e of d)l.onLogs([e])}catch(e){u&&e instanceof et.yR&&(p=!1),l.onError?.(e)}},{emitOnBegin:!0,interval:d});return async()=>{u&&await getAction_getAction(e,uninstallFilter,"uninstallFilter")({filter:u}),f()}})})():(f=!0,m=()=>f=!1,(async()=>{try{let o=s??(i?[i]:void 0),u=[];o&&(u=[o.flatMap(e=>encodeEventTopics({abi:[e],eventName:e.name,args:n}))],i&&(u=u[0]));let{unsubscribe:d}=await e.transport.subscribe({params:["logs",{address:t,topics:u}],onData(e){if(!f)return;let t=e.result;try{let{eventName:e,args:n}=decodeEventLog({abi:o??[],data:t.data,topics:t.topics,strict:g}),i=(0,eQ.U)(t,{args:n,eventName:e});c([i])}catch(i){let e,n;if(i instanceof J.SM||i instanceof J.Gy){if(p)return;e=i.abiItem.name,n=i.abiItem.inputs?.some(e=>!("name"in e&&e.name))}let o=(0,eQ.U)(t,{args:n?[]:{},eventName:e});c([o])}},onError(e){l?.(e)}});m=d,f||m()}catch(e){l?.(e)}})(),()=>m())})(e,t),watchPendingTransactions:t=>(function(e,{batch:t=!0,onError:n,onTransactions:o,poll:i,pollingInterval:s=e.pollingInterval}){let l,c;let u=void 0!==i?i:"webSocket"!==e.transport.type;return u?(()=>{let i=(0,e7.P)(["watchPendingTransactions",e.uid,t,s]);return observe(i,{onTransactions:o,onError:n},n=>{let o;let i=poll(async()=>{try{if(!o)try{o=await getAction_getAction(e,createPendingTransactionFilter,"createPendingTransactionFilter")({});return}catch(e){throw i(),e}let s=await getAction_getAction(e,getFilterChanges,"getFilterChanges")({filter:o});if(0===s.length)return;if(t)n.onTransactions(s);else for(let e of s)n.onTransactions([e])}catch(e){n.onError?.(e)}},{emitOnBegin:!0,interval:s});return async()=>{o&&await getAction_getAction(e,uninstallFilter,"uninstallFilter")({filter:o}),i()}})})():(l=!0,c=()=>l=!1,(async()=>{try{let{unsubscribe:t}=await e.transport.subscribe({params:["newPendingTransactions"],onData(e){if(!l)return;let t=e.result;o([t])},onError(e){n?.(e)}});c=t,l||c()}catch(e){n?.(e)}})(),()=>c())})(e,t)}}function getPublicClient(e,t={}){let n=function(e,t={}){let n;try{n=e.getClient(t)}catch{}return n}(e,t);return n?.extend(publicActions)}var e5=n(52798),e4=n(33397);function useAccountEffect_useAccountEffect(e={}){let{onConnect:t,onDisconnect:n}=e,o=(0,z.Z)(e);(0,D.useEffect)(()=>(0,e4.u)(o,{onChange(e,o){if(("reconnecting"===o.status||"connecting"===o.status&&void 0===o.address)&&"connected"===e.status){let{address:n,addresses:i,chain:s,chainId:l,connector:c}=e,u="reconnecting"===o.status||void 0===o.status;t?.({address:n,addresses:i,chain:s,chainId:l,connector:c,isReconnected:u})}else"connected"===o.status&&"disconnected"===e.status&&n?.()}}),[o,t,n])}var e9=n(98029);async function disconnect(e,t={}){let n;if(t.connector)n=t.connector;else{let{connections:t,current:o}=e.state,i=t.get(o);n=i?.connector}let o=e.state.connections;n&&(await n.disconnect(),n.emitter.off("change",e._internal.events.change),n.emitter.off("disconnect",e._internal.events.disconnect),n.emitter.on("connect",e._internal.events.connect),o.delete(n.uid)),e.setState(e=>{if(0===o.size)return{...e,connections:new Map,current:void 0,status:"disconnected"};let t=o.values().next().value;return{...e,connections:new Map(o),current:t.connector.uid}});{let t=e.state.current;if(!t)return;let n=e.state.connections.get(t)?.connector;if(!n)return;await e.storage?.setItem("recentConnectorId",n.id)}}var te=n(74751);let tt=[];function getConnections(e){let t=[...e.state.connections.values()];return"reconnecting"===e.state.status||(0,te.v)(tt,t)?tt:(tt=t,t)}function useDisconnect(e={}){let{mutation:t}=e,n=(0,z.Z)(e),{mutate:o,mutateAsync:i,...s}=(0,e9.D)({...t,mutationFn:e=>disconnect(n,e),mutationKey:["disconnect"]});return{...s,connectors:(function(e={}){let t=(0,z.Z)(e);return(0,D.useSyncExternalStore)(e=>(function(e,t){let{onChange:n}=t;return e.subscribe(()=>getConnections(e),n,{equalityFn:te.v})})(t,{onChange:e}),()=>getConnections(t),()=>getConnections(t))})({config:n}).map(e=>e.connector),disconnect:o,disconnectAsync:i}}var tr=n(73935),tn=n(70655),ta="right-scroll-bar-position",to="width-before-scroll-bar";function assignRef(e,t){return"function"==typeof e?e(t):e&&(e.current=t),e}var ti="undefined"!=typeof window?D.useLayoutEffect:D.useEffect,ts=new WeakMap,tl=(void 0===x&&(x={}),(void 0===A&&(A=function(e){return e}),k=[],B=!1,S={read:function(){if(B)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return k.length?k[k.length-1]:null},useMedium:function(e){var t=A(e,B);return k.push(t),function(){k=k.filter(function(e){return e!==t})}},assignSyncMedium:function(e){for(B=!0;k.length;){var t=k;k=[],t.forEach(e)}k={push:function(t){return e(t)},filter:function(){return k}}},assignMedium:function(e){B=!0;var t=[];if(k.length){var n=k;k=[],n.forEach(e),t=k}var executeQueue=function(){var n=t;t=[],n.forEach(e)},cycle=function(){return Promise.resolve().then(executeQueue)};cycle(),k={push:function(e){t.push(e),cycle()},filter:function(e){return t=t.filter(e),k}}}}).options=(0,tn.__assign)({async:!0,ssr:!1},x),S),nothing=function(){},tc=D.forwardRef(function(e,t){var n,o,i,s,l=D.useRef(null),c=D.useState({onScrollCapture:nothing,onWheelCapture:nothing,onTouchMoveCapture:nothing}),u=c[0],d=c[1],p=e.forwardProps,f=e.children,m=e.className,b=e.removeScrollBar,g=e.enabled,y=e.shards,v=e.sideCar,w=e.noIsolation,C=e.inert,E=e.allowPinchZoom,x=e.as,A=void 0===x?"div":x,k=e.gapMode,B=(0,tn.__rest)(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),S=(n=[l,t],o=function(e){return n.forEach(function(t){return assignRef(t,e)})},(i=(0,D.useState)(function(){return{value:null,callback:o,facade:{get current(){return i.value},set current(value){var e=i.value;e!==value&&(i.value=value,i.callback(value,e))}}}})[0]).callback=o,s=i.facade,ti(function(){var e=ts.get(s);if(e){var t=new Set(e),o=new Set(n),i=s.current;t.forEach(function(e){o.has(e)||assignRef(e,null)}),o.forEach(function(e){t.has(e)||assignRef(e,i)})}ts.set(s,n)},[n]),s),I=(0,tn.__assign)((0,tn.__assign)({},B),u);return D.createElement(D.Fragment,null,g&&D.createElement(v,{sideCar:tl,removeScrollBar:b,shards:y,noIsolation:w,inert:C,setCallbacks:d,allowPinchZoom:!!E,lockRef:l,gapMode:k}),p?D.cloneElement(D.Children.only(f),(0,tn.__assign)((0,tn.__assign)({},I),{ref:S})):D.createElement(A,(0,tn.__assign)({},I,{className:m,ref:S}),f))});tc.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},tc.classNames={fullWidth:to,zeroRight:ta};var SideCar=function(e){var t=e.sideCar,n=(0,tn.__rest)(e,["sideCar"]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var o=t.read();if(!o)throw Error("Sidecar medium not found");return D.createElement(o,(0,tn.__assign)({},n))};SideCar.isSideCarExport=!0;var stylesheetSingleton=function(){var e=0,t=null;return{add:function(o){if(0==e&&(t=function(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=I||n.nc;return t&&e.setAttribute("nonce",t),e}())){var i,s;(i=t).styleSheet?i.styleSheet.cssText=o:i.appendChild(document.createTextNode(o)),s=t,(document.head||document.getElementsByTagName("head")[0]).appendChild(s)}e++},remove:function(){--e||!t||(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},styleHookSingleton=function(){var e=stylesheetSingleton();return function(t,n){D.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},styleSingleton=function(){var e=styleHookSingleton();return function(t){return e(t.styles,t.dynamic),null}},tu={left:0,top:0,right:0,gap:0},parse=function(e){return parseInt(e||"",10)||0},getOffset=function(e){var t=window.getComputedStyle(document.body),n=t["padding"===e?"paddingLeft":"marginLeft"],o=t["padding"===e?"paddingTop":"marginTop"],i=t["padding"===e?"paddingRight":"marginRight"];return[parse(n),parse(o),parse(i)]},getGapWidth=function(e){if(void 0===e&&(e="margin"),"undefined"==typeof window)return tu;var t=getOffset(e),n=document.documentElement.clientWidth,o=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,o-n+t[2]-t[0])}},td=styleSingleton(),tp="data-scroll-locked",getStyles=function(e,t,n,o){var i=e.left,s=e.top,l=e.right,c=e.gap;return void 0===n&&(n="margin"),"\n .".concat("with-scroll-bars-hidden"," {\n overflow: hidden ").concat(o,";\n padding-right: ").concat(c,"px ").concat(o,";\n }\n body[").concat(tp,"] {\n overflow: hidden ").concat(o,";\n overscroll-behavior: contain;\n ").concat([t&&"position: relative ".concat(o,";"),"margin"===n&&"\n padding-left: ".concat(i,"px;\n padding-top: ").concat(s,"px;\n padding-right: ").concat(l,"px;\n margin-left:0;\n margin-top:0;\n margin-right: ").concat(c,"px ").concat(o,";\n "),"padding"===n&&"padding-right: ".concat(c,"px ").concat(o,";")].filter(Boolean).join(""),"\n }\n \n .").concat(ta," {\n right: ").concat(c,"px ").concat(o,";\n }\n \n .").concat(to," {\n margin-right: ").concat(c,"px ").concat(o,";\n }\n \n .").concat(ta," .").concat(ta," {\n right: 0 ").concat(o,";\n }\n \n .").concat(to," .").concat(to," {\n margin-right: 0 ").concat(o,";\n }\n \n body[").concat(tp,"] {\n ").concat("--removed-body-scroll-bar-size",": ").concat(c,"px;\n }\n")},getCurrentUseCounter=function(){var e=parseInt(document.body.getAttribute(tp)||"0",10);return isFinite(e)?e:0},useLockAttribute=function(){D.useEffect(function(){return document.body.setAttribute(tp,(getCurrentUseCounter()+1).toString()),function(){var e=getCurrentUseCounter()-1;e<=0?document.body.removeAttribute(tp):document.body.setAttribute(tp,e.toString())}},[])},RemoveScrollBar=function(e){var t=e.noRelative,n=e.noImportant,o=e.gapMode,i=void 0===o?"margin":o;useLockAttribute();var s=D.useMemo(function(){return getGapWidth(i)},[i]);return D.createElement(td,{styles:getStyles(s,!t,i,n?"":"!important")})},th=!1;if("undefined"!=typeof window)try{var tf=Object.defineProperty({},"passive",{get:function(){return th=!0,!0}});window.addEventListener("test",tf,tf),window.removeEventListener("test",tf,tf)}catch(e){th=!1}var tm=!!th&&{passive:!1},elementCanBeScrolled=function(e,t){var n=window.getComputedStyle(e);return"hidden"!==n[t]&&!(n.overflowY===n.overflowX&&"TEXTAREA"!==e.tagName&&"visible"===n[t])},locationCouldBeScrolled=function(e,t){var n=t.ownerDocument,o=t;do{if("undefined"!=typeof ShadowRoot&&o instanceof ShadowRoot&&(o=o.host),elementCouldBeScrolled(e,o)){var i=getScrollVariables(e,o);if(i[1]>i[2])return!0}o=o.parentNode}while(o&&o!==n.body);return!1},elementCouldBeScrolled=function(e,t){return"v"===e?elementCanBeScrolled(t,"overflowY"):elementCanBeScrolled(t,"overflowX")},getScrollVariables=function(e,t){return"v"===e?[t.scrollTop,t.scrollHeight,t.clientHeight]:[t.scrollLeft,t.scrollWidth,t.clientWidth]},handleScroll=function(e,t,n,o,i){var s,l=(s=window.getComputedStyle(t).direction,"h"===e&&"rtl"===s?-1:1),c=l*o,u=n.target,d=t.contains(u),p=!1,f=c>0,m=0,b=0;do{var g=getScrollVariables(e,u),y=g[0],v=g[1]-g[2]-l*y;(y||v)&&elementCouldBeScrolled(e,u)&&(m+=v,b+=y),u=u instanceof ShadowRoot?u.host:u.parentNode}while(!d&&u!==document.body||d&&(t.contains(u)||t===u));return f&&(i&&1>Math.abs(m)||!i&&c>m)?p=!0:!f&&(i&&1>Math.abs(b)||!i&&-c>b)&&(p=!0),p},getTouchXY=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},getDeltaXY=function(e){return[e.deltaX,e.deltaY]},extractRef=function(e){return e&&"current"in e?e.current:e},tb=0,tg=[],ty=(tl.useMedium(function(e){var t=D.useRef([]),n=D.useRef([0,0]),o=D.useRef(),i=D.useState(tb++)[0],s=D.useState(styleSingleton)[0],l=D.useRef(e);D.useEffect(function(){l.current=e},[e]),D.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(i));var t=(0,tn.__spreadArray)([e.lockRef.current],(e.shards||[]).map(extractRef),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),t.forEach(function(e){return e.classList.remove("allow-interactivity-".concat(i))})}}},[e.inert,e.lockRef.current,e.shards]);var c=D.useCallback(function(e,t){if("touches"in e&&2===e.touches.length)return!l.current.allowPinchZoom;var i,s=getTouchXY(e),c=n.current,u="deltaX"in e?e.deltaX:c[0]-s[0],d="deltaY"in e?e.deltaY:c[1]-s[1],p=e.target,f=Math.abs(u)>Math.abs(d)?"h":"v";if("touches"in e&&"h"===f&&"range"===p.type)return!1;var m=locationCouldBeScrolled(f,p);if(!m)return!0;if(m?i=f:(i="v"===f?"h":"v",m=locationCouldBeScrolled(f,p)),!m)return!1;if(!o.current&&"changedTouches"in e&&(u||d)&&(o.current=i),!i)return!0;var b=o.current||i;return handleScroll(b,t,e,"h"===b?u:d,!0)},[]),u=D.useCallback(function(e){if(tg.length&&tg[tg.length-1]===s){var n="deltaY"in e?getDeltaXY(e):getTouchXY(e),o=t.current.filter(function(t){var o;return t.name===e.type&&(t.target===e.target||e.target===t.shadowParent)&&(o=t.delta)[0]===n[0]&&o[1]===n[1]})[0];if(o&&o.should){e.cancelable&&e.preventDefault();return}if(!o){var i=(l.current.shards||[]).map(extractRef).filter(Boolean).filter(function(t){return t.contains(e.target)});(i.length>0?c(e,i[0]):!l.current.noIsolation)&&e.cancelable&&e.preventDefault()}}},[]),d=D.useCallback(function(e,n,o,i){var s={name:e,delta:n,target:o,should:i,shadowParent:function(e){for(var t=null;null!==e;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}(o)};t.current.push(s),setTimeout(function(){t.current=t.current.filter(function(e){return e!==s})},1)},[]),p=D.useCallback(function(e){n.current=getTouchXY(e),o.current=void 0},[]),f=D.useCallback(function(t){d(t.type,getDeltaXY(t),t.target,c(t,e.lockRef.current))},[]),m=D.useCallback(function(t){d(t.type,getTouchXY(t),t.target,c(t,e.lockRef.current))},[]);D.useEffect(function(){return tg.push(s),e.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:m}),document.addEventListener("wheel",u,tm),document.addEventListener("touchmove",u,tm),document.addEventListener("touchstart",p,tm),function(){tg=tg.filter(function(e){return e!==s}),document.removeEventListener("wheel",u,tm),document.removeEventListener("touchmove",u,tm),document.removeEventListener("touchstart",p,tm)}},[]);var b=e.removeScrollBar,g=e.inert;return D.createElement(D.Fragment,null,g?D.createElement(s,{styles:"\n .block-interactivity-".concat(i," {pointer-events: none;}\n .allow-interactivity-").concat(i," {pointer-events: all;}\n")}):null,b?D.createElement(RemoveScrollBar,{gapMode:e.gapMode}):null)}),SideCar),tv=D.forwardRef(function(e,t){return D.createElement(tc,(0,tn.__assign)({},e,{ref:t,sideCar:ty}))});function vanilla_extract_private_esm_getVarName(e){var t=e.match(/^var\((.*)\)$/);return t?t[1]:e}function assignInlineVars(e,t){var n={};if("object"==typeof t)!function vanilla_extract_private_esm_walkObject(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=e.constructor();for(var i in e){var s=e[i],l=[...n,i];"string"==typeof s||"number"==typeof s||null==s?o[i]=t(s,l):"object"!=typeof s||Array.isArray(s)?console.warn('Skipping invalid key "'.concat(l.join("."),'". Should be a string, number, null or object. Received: "').concat(Array.isArray(s)?"Array":typeof s,'"')):o[i]=vanilla_extract_private_esm_walkObject(s,t,l)}return o}(t,(t,o)=>{null!=t&&(n[vanilla_extract_private_esm_getVarName(function(e,t){var n=e;for(var o of t){if(!(o in n))throw Error("Path ".concat(t.join(" -> ")," does not exist in object"));n=n[o]}return n}(e,o))]=String(t))});else for(var o in e){var i=e[o];null!=i&&(n[vanilla_extract_private_esm_getVarName(o)]=i)}return Object.defineProperty(n,"toString",{value:function(){return Object.keys(this).map(e=>"".concat(e,":").concat(this[e])).join(";")},writable:!1}),n}tv.classNames=tc.classNames;var tw=n(87675);async function connect(e,t){let n;if((n="function"==typeof t.connector?e._internal.connectors.setup(t.connector):t.connector).uid===e.state.current)throw new tw.wi;try{e.setState(e=>({...e,status:"connecting"})),n.emitter.emit("message",{type:"connecting"});let o=await n.connect({chainId:t.chainId}),i=o.accounts;return n.emitter.off("connect",e._internal.events.connect),n.emitter.on("change",e._internal.events.change),n.emitter.on("disconnect",e._internal.events.disconnect),await e.storage?.setItem("recentConnectorId",n.id),e.setState(e=>({...e,connections:new Map(e.connections).set(n.uid,{accounts:i,chainId:o.chainId,connector:n}),current:n.uid,status:"connected"})),{accounts:i,chainId:o.chainId}}catch(t){throw e.setState(e=>({...e,status:e.current?"connected":"disconnected"})),t}}let tC=[];function getConnectors(e){let t=e.connectors;return(0,te.v)(tC,t)?tC:(tC=t,t)}var tE=n(42238),tx=n(55585),tA=n(7066);let ProviderNotFoundError=class ProviderNotFoundError extends tA.G{constructor(){super("Provider not found."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ProviderNotFoundError"})}};let SwitchChainNotSupportedError=class SwitchChainNotSupportedError extends tA.G{constructor({connector:e}){super(`"${e.name}" does not support programmatic chain switching.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SwitchChainNotSupportedError"})}};async function switchChain(e,t){let{chainId:n}=t,o=e.state.connections.get(t.connector?.uid??e.state.current);if(o){let e=o.connector;if(!e.switchChain)throw new SwitchChainNotSupportedError({connector:e});let t=await e.switchChain({chainId:n});return t}let i=e.chains.find(e=>e.id===n);if(!i)throw new tw.X4;return e.setState(e=>({...e,chainId:n})),i}let tk=[];function getChains(e){let t=e.chains;return(0,te.v)(tk,t)?tk:(tk=t,t)}var tB=n(92592),tS=n(78863);let UrlRequiredError=class UrlRequiredError extends X.G{constructor(){super("No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.",{docsPath:"/docs/clients/intro"})}};var tI=n(32357);function withTimeout(e,{errorInstance:t=Error("timed out"),timeout:n,signal:o}){return new Promise((i,s)=>{(async()=>{let l;try{let c=new AbortController;n>0&&(l=setTimeout(()=>{o?c.abort():s(t)},n)),i(await e({signal:c?.signal||null}))}catch(e){"AbortError"===e.name&&s(t),s(e)}finally{clearTimeout(l)}})()})}let tj={current:0,take(){return this.current++},reset(){this.current=0}};var tT=n(91628),tP=n(16189);let subscribeWithSelector=e=>(t,n,o)=>{let i=o.subscribe;o.subscribe=(e,t,n)=>{let s=e;if(t){let i=(null==n?void 0:n.equalityFn)||Object.is,l=e(o.getState());s=n=>{let o=e(n);if(!i(l,o)){let e=l;t(l=o,e)}},(null==n?void 0:n.fireImmediately)&&t(l,l)}return i(s)};let s=e(t,n,o);return s},toThenable=e=>t=>{try{let n=e(t);if(n instanceof Promise)return n;return{then:e=>toThenable(e)(n),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>toThenable(t)(e)}}},oldImpl=(e,t)=>(n,o,i)=>{let s,l,c={getStorage:()=>localStorage,serialize:JSON.stringify,deserialize:JSON.parse,partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},u=!1,d=new Set,p=new Set;try{s=c.getStorage()}catch(e){}if(!s)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${c.name}', the given storage is currently unavailable.`),n(...e)},o,i);let f=toThenable(c.serialize),setItem=()=>{let e;let t=c.partialize({...o()}),n=f({state:t,version:c.version}).then(e=>s.setItem(c.name,e)).catch(t=>{e=t});if(e)throw e;return n},m=i.setState;i.setState=(e,t)=>{m(e,t),setItem()};let b=e((...e)=>{n(...e),setItem()},o,i),hydrate=()=>{var e;if(!s)return;u=!1,d.forEach(e=>e(o()));let t=(null==(e=c.onRehydrateStorage)?void 0:e.call(c,o()))||void 0;return toThenable(s.getItem.bind(s))(c.name).then(e=>{if(e)return c.deserialize(e)}).then(e=>{if(e){if("number"!=typeof e.version||e.version===c.version)return e.state;if(c.migrate)return c.migrate(e.state,e.version);console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}}).then(e=>{var t;return n(l=c.merge(e,null!=(t=o())?t:b),!0),setItem()}).then(()=>{null==t||t(l,void 0),u=!0,p.forEach(e=>e(l))}).catch(e=>{null==t||t(void 0,e)})};return i.persist={setOptions:e=>{c={...c,...e},e.getStorage&&(s=e.getStorage())},clearStorage:()=>{null==s||s.removeItem(c.name)},getOptions:()=>c,rehydrate:()=>hydrate(),hasHydrated:()=>u,onHydrate:e=>(d.add(e),()=>{d.delete(e)}),onFinishHydration:e=>(p.add(e),()=>{p.delete(e)})},hydrate(),l||b},newImpl=(e,t)=>(n,o,i)=>{let s,l={storage:function(e,t){let n;try{n=e()}catch(e){return}return{getItem:e=>{var o;let parse=e=>null===e?null:JSON.parse(e,null==t?void 0:t.reviver),i=null!=(o=n.getItem(e))?o:null;return i instanceof Promise?i.then(parse):parse(i)},setItem:(e,o)=>n.setItem(e,JSON.stringify(o,null==t?void 0:t.replacer)),removeItem:e=>n.removeItem(e)}}(()=>localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},c=!1,u=new Set,d=new Set,p=l.storage;if(!p)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${l.name}', the given storage is currently unavailable.`),n(...e)},o,i);let setItem=()=>{let e=l.partialize({...o()});return p.setItem(l.name,{state:e,version:l.version})},f=i.setState;i.setState=(e,t)=>{f(e,t),setItem()};let m=e((...e)=>{n(...e),setItem()},o,i),hydrate=()=>{var e,t;if(!p)return;c=!1,u.forEach(e=>{var t;return e(null!=(t=o())?t:m)});let i=(null==(t=l.onRehydrateStorage)?void 0:t.call(l,null!=(e=o())?e:m))||void 0;return toThenable(p.getItem.bind(p))(l.name).then(e=>{if(e){if("number"!=typeof e.version||e.version===l.version)return e.state;if(l.migrate)return l.migrate(e.state,e.version);console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}}).then(e=>{var t;return n(s=l.merge(e,null!=(t=o())?t:m),!0),setItem()}).then(()=>{null==i||i(s,void 0),s=o(),c=!0,d.forEach(e=>e(s))}).catch(e=>{null==i||i(void 0,e)})};return i.persist={setOptions:e=>{l={...l,...e},e.storage&&(p=e.storage)},clearStorage:()=>{null==p||p.removeItem(l.name)},getOptions:()=>l,rehydrate:()=>hydrate(),hasHydrated:()=>c,onHydrate:e=>(u.add(e),()=>{u.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},l.skipHydration||hydrate(),s||m},persist=(e,t)=>"getStorage"in t||"serialize"in t||"deserialize"in t?(console.warn("[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead."),oldImpl(e,t)):newImpl(e,t),createStoreImpl=e=>{let t;let n=new Set,setState=(e,o)=>{let i="function"==typeof e?e(t):e;if(!Object.is(i,t)){let e=t;t=(null!=o?o:"object"!=typeof i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},getState=()=>t,o={setState,getState,subscribe:e=>(n.add(e),()=>n.delete(e)),destroy:()=>{console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}};return t=e(setState,getState,o),o},vanilla_createStore=e=>e?createStoreImpl(e):createStoreImpl;var tM=n(45775);function normalizeChainId(e){if("string"==typeof e)return Number.parseInt(e,"0x"===e.trim().substring(0,2)?16:10);if("bigint"==typeof e)return Number(e);if("number"==typeof e)return e;throw Error(`Cannot normalize chainId "${e}" of type "${typeof e}"`)}let tO={coinbaseWallet:{id:"coinbaseWallet",name:"Coinbase Wallet",provider:e=>e?.coinbaseWalletExtension?e.coinbaseWalletExtension:findProvider(e,"isCoinbaseWallet")},metaMask:{id:"metaMask",name:"MetaMask",provider:e=>findProvider(e,e=>{if(!e.isMetaMask||e.isBraveWallet&&!e._events&&!e._state)return!1;for(let t of["isApexWallet","isAvalanche","isBitKeep","isBlockWallet","isKuCoinWallet","isMathWallet","isOkxWallet","isOKExWallet","isOneInchIOSWallet","isOneInchAndroidWallet","isOpera","isPortal","isRabby","isTokenPocket","isTokenary","isZerion"])if(e[t])return!1;return!0})},phantom:{id:"phantom",name:"Phantom",provider:e=>e?.phantom?.ethereum?e.phantom?.ethereum:findProvider(e,"isPhantom")}};function injected(e={}){let{shimDisconnect:t=!0,unstable_shimAsyncInject:n}=e;function getTarget(){let t=e.target;if("function"==typeof t){let e=t();if(e)return e}return"object"==typeof t?t:"string"==typeof t?{...tO[t]??{id:t,name:`${t[0].toUpperCase()}${t.slice(1)}`,provider:`is${t[0].toUpperCase()}${t.slice(1)}`}}:{id:"injected",name:"Injected",provider:e=>e?.ethereum}}return o=>({get icon(){return getTarget().icon},get id(){return getTarget().id},get name(){return getTarget().name},type:injected.type,async setup(){let t=await this.getProvider();t&&e.target&&t.on("connect",this.onConnect.bind(this))},async connect({chainId:n,isReconnecting:i}={}){let s=await this.getProvider();if(!s)throw new ProviderNotFoundError;let l=null;if(!i){l=await this.getAccounts().catch(()=>null);let e=!!l?.length;if(e)try{let e=await s.request({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]});l=e[0]?.caveats?.[0]?.value?.map(e=>tM.K(e))}catch(e){if(e.code===et.ab.code)throw new et.ab(e);if(e.code===et.pT.code)throw e}}try{if(!l?.length){let e=await s.request({method:"eth_requestAccounts"});l=e.map(e=>(0,tM.K)(e))}s.removeListener("connect",this.onConnect.bind(this)),s.on("accountsChanged",this.onAccountsChanged.bind(this)),s.on("chainChanged",this.onChainChanged),s.on("disconnect",this.onDisconnect.bind(this));let i=await this.getChainId();if(n&&i!==n){let e=await this.switchChain({chainId:n}).catch(e=>{if(e.code===et.ab.code)throw e;return{id:i}});i=e?.id??i}return t&&(await o.storage?.removeItem(`${this.id}.disconnected`),e.target||await o.storage?.setItem("injected.connected",!0)),{accounts:l,chainId:i}}catch(e){if(e.code===et.ab.code)throw new et.ab(e);if(e.code===et.pT.code)throw new et.pT(e);throw e}},async disconnect(){let n=await this.getProvider();if(!n)throw new ProviderNotFoundError;n.removeListener("accountsChanged",this.onAccountsChanged.bind(this)),n.removeListener("chainChanged",this.onChainChanged),n.removeListener("disconnect",this.onDisconnect.bind(this)),n.on("connect",this.onConnect.bind(this)),t&&(await o.storage?.setItem(`${this.id}.disconnected`,!0),e.target||await o.storage?.removeItem("injected.connected"))},async getAccounts(){let e=await this.getProvider();if(!e)throw new ProviderNotFoundError;let t=await e.request({method:"eth_accounts"});return t.map(e=>(0,tM.K)(e))},async getChainId(){let e=await this.getProvider();if(!e)throw new ProviderNotFoundError;let t=await e.request({method:"eth_chainId"});return normalizeChainId(t)},async getProvider(){let e;if("undefined"==typeof window)return;let t=getTarget();return(e="function"==typeof t.provider?t.provider(window):"string"==typeof t.provider?findProvider(window,t.provider):t.provider)&&!e.removeListener&&("off"in e&&"function"==typeof e.off?e.removeListener=e.off:e.removeListener=()=>{}),e},async isAuthorized(){try{let i=t&&await o.storage?.getItem(`${this.id}.disconnected`);if(i)return!1;if(!e.target){let e=await o.storage?.getItem("injected.connected");if(!e)return!1}let s=await this.getProvider();if(!s){if(void 0!==n&&!1!==n){let handleEthereum=async()=>{"undefined"!=typeof window&&window.removeEventListener("ethereum#initialized",handleEthereum);let e=await this.getProvider();return!!e},e="number"==typeof n?n:1e3,t=await Promise.race([..."undefined"!=typeof window?[new Promise(e=>window.addEventListener("ethereum#initialized",()=>e(handleEthereum()),{once:!0}))]:[],new Promise(t=>setTimeout(()=>t(handleEthereum()),e))]);if(t)return!0}throw new ProviderNotFoundError}let l=await (0,e2.J)(()=>withTimeout(()=>this.getAccounts(),{timeout:100}));return!!l.length}catch{return!1}},async switchChain({chainId:e}){let t=await this.getProvider();if(!t)throw new ProviderNotFoundError;let n=o.chains.find(t=>t.id===e);if(!n)throw new et.x3(new tw.X4);try{return await Promise.all([t.request({method:"wallet_switchEthereumChain",params:[{chainId:(0,Q.eC)(e)}]}),new Promise(t=>o.emitter.once("change",({chainId:n})=>{n===e&&t()}))]),n}catch(o){if(4902===o.code||o?.data?.originalError?.code===4902)try{let o;let{default:i,...s}=n.blockExplorers??{};i&&(o=[i.url,...Object.values(s).map(e=>e.url)]),await t.request({method:"wallet_addEthereumChain",params:[{chainId:(0,Q.eC)(e),chainName:n.name,nativeCurrency:n.nativeCurrency,rpcUrls:[n.rpcUrls.default?.http[0]??""],blockExplorerUrls:o}]});let l=await this.getChainId();if(l!==e)throw new et.ab(Error("User rejected switch after adding network."));return n}catch(e){throw new et.ab(e)}if(o.code===et.ab.code)throw new et.ab(o);throw new et.x3(o)}},async onAccountsChanged(e){if(0===e.length)this.onDisconnect();else if(o.emitter.listenerCount("connect")){let e=(await this.getChainId()).toString();this.onConnect({chainId:e}),t&&await o.storage?.removeItem(`${this.id}.disconnected`)}else o.emitter.emit("change",{accounts:e.map(e=>(0,tM.K)(e))})},onChainChanged(e){let t=normalizeChainId(e);o.emitter.emit("change",{chainId:t})},async onConnect(e){let t=await this.getAccounts();if(0===t.length)return;let n=normalizeChainId(e.chainId);o.emitter.emit("connect",{accounts:t,chainId:n});let i=await this.getProvider();i&&(i.removeListener("connect",this.onConnect.bind(this)),i.on("accountsChanged",this.onAccountsChanged.bind(this)),i.on("chainChanged",this.onChainChanged),i.on("disconnect",this.onDisconnect.bind(this)))},async onDisconnect(e){let t=await this.getProvider();e&&1013===e.code&&t&&(await this.getAccounts()).length||(o.emitter.emit("disconnect"),t&&(t.removeListener("accountsChanged",this.onAccountsChanged.bind(this)),t.removeListener("chainChanged",this.onChainChanged),t.removeListener("disconnect",this.onDisconnect.bind(this)),t.on("connect",this.onConnect.bind(this))))}})}function findProvider(e,t){function isProvider(e){return"function"==typeof t?t(e):"string"!=typeof t||e[t]}let n=e.ethereum;return n?.providers?n.providers.find(e=>isProvider(e)):n&&isProvider(n)?n:void 0}injected.type="injected";var tR=n(26729),__classPrivateFieldGet=function(e,t,n,o){if("a"===n&&!o)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(e):o?o.value:t.get(e)};let Emitter=class Emitter{constructor(e){Object.defineProperty(this,"uid",{enumerable:!0,configurable:!0,writable:!0,value:e}),j.set(this,new tR)}on(e,t){__classPrivateFieldGet(this,j,"f").on(e,t)}once(e,t){__classPrivateFieldGet(this,j,"f").once(e,t)}off(e,t){__classPrivateFieldGet(this,j,"f").off(e,t)}emit(e,...t){let n=t[0];__classPrivateFieldGet(this,j,"f").emit(e,{uid:this.uid,...n})}listenerCount(e){return __classPrivateFieldGet(this,j,"f").listenerCount(e)}};function deserialize_deserialize(e,t){return JSON.parse(e,(e,n)=>{let o=n;return o?.__type==="bigint"&&(o=BigInt(o.value)),o?.__type==="Map"&&(o=new Map(o.value)),t?.(e,o)??o})}function getReferenceKey(e,t){return e.slice(0,t).join(".")||"."}function getCutoff(e,t){let{length:n}=e;for(let o=0;o{let o=n;return"bigint"==typeof o&&(o={__type:"bigint",value:n.toString()}),o instanceof Map&&(o={__type:"Map",value:Array.from(n.entries())}),t?.(e,o)??o},o),n??void 0)}j=new WeakMap;let tU={getItem:()=>null,setItem:()=>{},removeItem:()=>{}},tF=256;var tN=n(79983);function walletConnect(e){let t,o;let i=e.isNewChainsStale??!0,s="eip155";return l=>({id:"walletConnect",name:"WalletConnect",type:walletConnect.type,async setup(){let e=await this.getProvider().catch(()=>null);e&&(e.on("connect",this.onConnect.bind(this)),e.on("session_delete",this.onSessionDelete.bind(this)))},async connect({chainId:e,...t}={}){try{let n=await this.getProvider();if(!n)throw new ProviderNotFoundError;n.on("display_uri",this.onDisplayUri);let o=e;if(!o){let e=await l.storage?.getItem("state")??{},t=l.chains.some(t=>t.id===e.chainId);o=t?e.chainId:l.chains[0]?.id}if(!o)throw Error("No chains found on connector.");let i=await this.isChainsStale();if(n.session&&i&&await n.disconnect(),!n.session||i){let e=l.chains.filter(e=>e.id!==o).map(e=>e.id);await n.connect({optionalChains:[o,...e],..."pairingTopic"in t?{pairingTopic:t.pairingTopic}:{}}),this.setRequestedChainsIds(l.chains.map(e=>e.id))}let s=(await n.enable()).map(e=>(0,tM.K)(e)),c=await this.getChainId();return n.removeListener("display_uri",this.onDisplayUri),n.removeListener("connect",this.onConnect.bind(this)),n.on("accountsChanged",this.onAccountsChanged.bind(this)),n.on("chainChanged",this.onChainChanged),n.on("disconnect",this.onDisconnect.bind(this)),n.on("session_delete",this.onSessionDelete.bind(this)),{accounts:s,chainId:c}}catch(e){if(/(user rejected|connection request reset)/i.test(e?.message))throw new et.ab(e);throw e}},async disconnect(){let e=await this.getProvider();try{await e?.disconnect()}catch(e){if(!/No matching key/i.test(e.message))throw e}finally{e?.removeListener("accountsChanged",this.onAccountsChanged.bind(this)),e?.removeListener("chainChanged",this.onChainChanged),e?.removeListener("disconnect",this.onDisconnect.bind(this)),e?.removeListener("session_delete",this.onSessionDelete.bind(this)),e?.on("connect",this.onConnect.bind(this)),this.setRequestedChainsIds([])}},async getAccounts(){let e=await this.getProvider();return e.accounts.map(e=>(0,tM.K)(e))},async getProvider({chainId:i}={}){async function initProvider(){let t=l.chains.map(e=>e.id);if(!t.length)return;let{EthereumProvider:o}=await Promise.all([n.e(1194),n.e(3138),n.e(5883)]).then(n.bind(n,33138));return await o.init({...e,disableProviderPing:!0,optionalChains:t,projectId:e.projectId,rpcMap:Object.fromEntries(l.chains.map(e=>[e.id,e.rpcUrls.default.http[0]])),showQrModal:e.showQrModal??!0})}return t||(o||(o=initProvider()),t=await o,t?.events.setMaxListeners(1/0)),i&&await this.switchChain?.({chainId:i}),t},async getChainId(){let e=await this.getProvider();return e.chainId},async isAuthorized(){try{let[e,t]=await Promise.all([this.getAccounts(),this.getProvider()]);if(!e.length)return!1;let n=await this.isChainsStale();if(n&&t.session)return await t.disconnect().catch(()=>{}),!1;return!0}catch{return!1}},async switchChain({chainId:e}){let t=l.chains.find(t=>t.id===e);if(!t)throw new et.x3(new tw.X4);try{let n=await this.getProvider(),o=this.getNamespaceChainsIds(),i=this.getNamespaceMethods(),s=o.includes(e);if(!s&&i.includes("wallet_addEthereumChain")){await n.request({method:"wallet_addEthereumChain",params:[{chainId:(0,Q.eC)(t.id),blockExplorerUrls:[t.blockExplorers?.default.url],chainName:t.name,nativeCurrency:t.nativeCurrency,rpcUrls:[...t.rpcUrls.default.http]}]});let o=await this.getRequestedChainsIds();this.setRequestedChainsIds([...o,e])}return await n.request({method:"wallet_switchEthereumChain",params:[{chainId:(0,Q.eC)(e)}]}),t}catch(t){let e="string"==typeof t?t:t?.message;if(/user rejected request/i.test(e))throw new et.ab(t);throw new et.x3(t)}},onAccountsChanged(e){0===e.length?this.onDisconnect():l.emitter.emit("change",{accounts:e.map(e=>(0,tM.K)(e))})},onChainChanged(e){let t=normalizeChainId(e);l.emitter.emit("change",{chainId:t})},async onConnect(e){let t=normalizeChainId(e.chainId),n=await this.getAccounts();l.emitter.emit("connect",{accounts:n,chainId:t})},async onDisconnect(e){this.setRequestedChainsIds([]),l.emitter.emit("disconnect");let t=await this.getProvider();t.removeListener("accountsChanged",this.onAccountsChanged.bind(this)),t.removeListener("chainChanged",this.onChainChanged),t.removeListener("disconnect",this.onDisconnect.bind(this)),t.removeListener("session_delete",this.onSessionDelete.bind(this)),t.on("connect",this.onConnect.bind(this))},onDisplayUri(e){l.emitter.emit("message",{type:"display_uri",data:e})},onSessionDelete(){this.onDisconnect()},getNamespaceChainsIds(){if(!t)return[];let e=t.session?.namespaces[s]?.chains?.map(e=>parseInt(e.split(":")[1]||""));return e??[]},getNamespaceMethods(){if(!t)return[];let e=t.session?.namespaces[s]?.methods;return e??[]},async getRequestedChainsIds(){return await l.storage?.getItem(this.requestedChainsStorageKey)??[]},async isChainsStale(){let e=this.getNamespaceMethods();if(e.includes("wallet_addEthereumChain")||!i)return!1;let t=l.chains.map(e=>e.id),n=this.getNamespaceChainsIds();if(n.length&&!n.some(e=>t.includes(e)))return!1;let o=await this.getRequestedChainsIds();return!t.every(e=>o.includes(e))},async setRequestedChainsIds(e){await l.storage?.setItem(this.requestedChainsStorageKey,e)},get requestedChainsStorageKey(){return`${this.id}.requestedChains`}})}function coinbaseWallet(e){let t,o;return i=>({id:"coinbaseWalletSDK",name:"Coinbase Wallet",type:coinbaseWallet.type,async connect({chainId:e}={}){try{let t=await this.getProvider(),n=(await t.request({method:"eth_requestAccounts"})).map(e=>(0,tM.K)(e));t.on("accountsChanged",this.onAccountsChanged),t.on("chainChanged",this.onChainChanged),t.on("disconnect",this.onDisconnect.bind(this));let o=await this.getChainId();if(e&&o!==e){let t=await this.switchChain({chainId:e}).catch(e=>{if(e.code===et.ab.code)throw e;return{id:o}});o=t?.id??o}return{accounts:n,chainId:o}}catch(e){if(/(user closed modal|accounts received is empty|user denied account)/i.test(e.message))throw new et.ab(e);throw e}},async disconnect(){let e=await this.getProvider();e.removeListener("accountsChanged",this.onAccountsChanged),e.removeListener("chainChanged",this.onChainChanged),e.removeListener("disconnect",this.onDisconnect.bind(this)),e.disconnect(),e.close()},async getAccounts(){let e=await this.getProvider();return(await e.request({method:"eth_accounts"})).map(e=>(0,tM.K)(e))},async getChainId(){let e=await this.getProvider(),t=await e.request({method:"eth_chainId"});return normalizeChainId(t)},async getProvider(){if(!o){let{default:s}=await Promise.all([n.e(1194),n.e(5811),n.e(6878)]).then(n.t.bind(n,45811,19));t=new("function"!=typeof s&&"function"==typeof s.default?s.default:s)({reloadOnDisconnect:!1,...e});let l=t.walletExtension?.getChainId(),c=i.chains.find(t=>e.chainId?t.id===e.chainId:t.id===l)||i.chains[0],u=e.chainId||c?.id,d=e.jsonRpcUrl||c?.rpcUrls.default.http[0];o=t.makeWeb3Provider(d,u)}return o},async isAuthorized(){try{let e=await this.getAccounts();return!!e.length}catch{return!1}},async switchChain({chainId:e}){let t=i.chains.find(t=>t.id===e);if(!t)throw new et.x3(new tw.X4);let n=await this.getProvider(),o=(0,Q.eC)(t.id);try{return await n.request({method:"wallet_switchEthereumChain",params:[{chainId:o}]}),t}catch(e){if(4902===e.code)try{return await n.request({method:"wallet_addEthereumChain",params:[{chainId:o,chainName:t.name,nativeCurrency:t.nativeCurrency,rpcUrls:[t.rpcUrls.default?.http[0]??""],blockExplorerUrls:[t.blockExplorers?.default.url]}]}),t}catch(e){throw new et.ab(e)}throw new et.x3(e)}},onAccountsChanged(e){0===e.length?i.emitter.emit("disconnect"):i.emitter.emit("change",{accounts:e.map(e=>(0,tM.K)(e))})},onChainChanged(e){let t=normalizeChainId(e);i.emitter.emit("change",{chainId:t})},async onDisconnect(e){i.emitter.emit("disconnect");let t=await this.getProvider();t.removeListener("accountsChanged",this.onAccountsChanged),t.removeListener("chainChanged",this.onChainChanged),t.removeListener("disconnect",this.onDisconnect.bind(this))}})}walletConnect.type="walletConnect",coinbaseWallet.type="coinbaseWallet";var tD=function(e){var{conditions:t}=e;if(!t)throw Error("Styles have no conditions");var n=createNormalizeValueFn(e);return addRecipe(function(e,o){if("string"==typeof e||"number"==typeof e||"boolean"==typeof e){if(!t.defaultCondition)throw Error("No default condition");return o(e,t.defaultCondition)}var i=Array.isArray(e)?n(e):e,s={};for(var l in i)null!=i[l]&&(s[l]=o(i[l],l));return s},{importPath:"@vanilla-extract/sprinkles/createUtils",importName:"createMapValueFn",args:[{conditions:e.conditions}]})}({conditions:{defaultCondition:"smallScreen",conditionNames:["smallScreen","largeScreen"],responsiveArray:void 0}}),t_=createNormalizeValueFn({conditions:{defaultCondition:"smallScreen",conditionNames:["smallScreen","largeScreen"],responsiveArray:void 0}}),tL=function(){return createSprinkles_c8550e00_esm_createSprinkles(composeStyles)(...arguments)}({conditions:{defaultCondition:"base",conditionNames:["base","hover","active"],responsiveArray:void 0},styles:{background:{values:{accentColor:{conditions:{base:"ju367v9i",hover:"ju367v9j",active:"ju367v9k"},defaultClass:"ju367v9i"},accentColorForeground:{conditions:{base:"ju367v9l",hover:"ju367v9m",active:"ju367v9n"},defaultClass:"ju367v9l"},actionButtonBorder:{conditions:{base:"ju367v9o",hover:"ju367v9p",active:"ju367v9q"},defaultClass:"ju367v9o"},actionButtonBorderMobile:{conditions:{base:"ju367v9r",hover:"ju367v9s",active:"ju367v9t"},defaultClass:"ju367v9r"},actionButtonSecondaryBackground:{conditions:{base:"ju367v9u",hover:"ju367v9v",active:"ju367v9w"},defaultClass:"ju367v9u"},closeButton:{conditions:{base:"ju367v9x",hover:"ju367v9y",active:"ju367v9z"},defaultClass:"ju367v9x"},closeButtonBackground:{conditions:{base:"ju367va0",hover:"ju367va1",active:"ju367va2"},defaultClass:"ju367va0"},connectButtonBackground:{conditions:{base:"ju367va3",hover:"ju367va4",active:"ju367va5"},defaultClass:"ju367va3"},connectButtonBackgroundError:{conditions:{base:"ju367va6",hover:"ju367va7",active:"ju367va8"},defaultClass:"ju367va6"},connectButtonInnerBackground:{conditions:{base:"ju367va9",hover:"ju367vaa",active:"ju367vab"},defaultClass:"ju367va9"},connectButtonText:{conditions:{base:"ju367vac",hover:"ju367vad",active:"ju367vae"},defaultClass:"ju367vac"},connectButtonTextError:{conditions:{base:"ju367vaf",hover:"ju367vag",active:"ju367vah"},defaultClass:"ju367vaf"},connectionIndicator:{conditions:{base:"ju367vai",hover:"ju367vaj",active:"ju367vak"},defaultClass:"ju367vai"},downloadBottomCardBackground:{conditions:{base:"ju367val",hover:"ju367vam",active:"ju367van"},defaultClass:"ju367val"},downloadTopCardBackground:{conditions:{base:"ju367vao",hover:"ju367vap",active:"ju367vaq"},defaultClass:"ju367vao"},error:{conditions:{base:"ju367var",hover:"ju367vas",active:"ju367vat"},defaultClass:"ju367var"},generalBorder:{conditions:{base:"ju367vau",hover:"ju367vav",active:"ju367vaw"},defaultClass:"ju367vau"},generalBorderDim:{conditions:{base:"ju367vax",hover:"ju367vay",active:"ju367vaz"},defaultClass:"ju367vax"},menuItemBackground:{conditions:{base:"ju367vb0",hover:"ju367vb1",active:"ju367vb2"},defaultClass:"ju367vb0"},modalBackdrop:{conditions:{base:"ju367vb3",hover:"ju367vb4",active:"ju367vb5"},defaultClass:"ju367vb3"},modalBackground:{conditions:{base:"ju367vb6",hover:"ju367vb7",active:"ju367vb8"},defaultClass:"ju367vb6"},modalBorder:{conditions:{base:"ju367vb9",hover:"ju367vba",active:"ju367vbb"},defaultClass:"ju367vb9"},modalText:{conditions:{base:"ju367vbc",hover:"ju367vbd",active:"ju367vbe"},defaultClass:"ju367vbc"},modalTextDim:{conditions:{base:"ju367vbf",hover:"ju367vbg",active:"ju367vbh"},defaultClass:"ju367vbf"},modalTextSecondary:{conditions:{base:"ju367vbi",hover:"ju367vbj",active:"ju367vbk"},defaultClass:"ju367vbi"},profileAction:{conditions:{base:"ju367vbl",hover:"ju367vbm",active:"ju367vbn"},defaultClass:"ju367vbl"},profileActionHover:{conditions:{base:"ju367vbo",hover:"ju367vbp",active:"ju367vbq"},defaultClass:"ju367vbo"},profileForeground:{conditions:{base:"ju367vbr",hover:"ju367vbs",active:"ju367vbt"},defaultClass:"ju367vbr"},selectedOptionBorder:{conditions:{base:"ju367vbu",hover:"ju367vbv",active:"ju367vbw"},defaultClass:"ju367vbu"},standby:{conditions:{base:"ju367vbx",hover:"ju367vby",active:"ju367vbz"},defaultClass:"ju367vbx"}}},borderColor:{values:{accentColor:{conditions:{base:"ju367vc0",hover:"ju367vc1",active:"ju367vc2"},defaultClass:"ju367vc0"},accentColorForeground:{conditions:{base:"ju367vc3",hover:"ju367vc4",active:"ju367vc5"},defaultClass:"ju367vc3"},actionButtonBorder:{conditions:{base:"ju367vc6",hover:"ju367vc7",active:"ju367vc8"},defaultClass:"ju367vc6"},actionButtonBorderMobile:{conditions:{base:"ju367vc9",hover:"ju367vca",active:"ju367vcb"},defaultClass:"ju367vc9"},actionButtonSecondaryBackground:{conditions:{base:"ju367vcc",hover:"ju367vcd",active:"ju367vce"},defaultClass:"ju367vcc"},closeButton:{conditions:{base:"ju367vcf",hover:"ju367vcg",active:"ju367vch"},defaultClass:"ju367vcf"},closeButtonBackground:{conditions:{base:"ju367vci",hover:"ju367vcj",active:"ju367vck"},defaultClass:"ju367vci"},connectButtonBackground:{conditions:{base:"ju367vcl",hover:"ju367vcm",active:"ju367vcn"},defaultClass:"ju367vcl"},connectButtonBackgroundError:{conditions:{base:"ju367vco",hover:"ju367vcp",active:"ju367vcq"},defaultClass:"ju367vco"},connectButtonInnerBackground:{conditions:{base:"ju367vcr",hover:"ju367vcs",active:"ju367vct"},defaultClass:"ju367vcr"},connectButtonText:{conditions:{base:"ju367vcu",hover:"ju367vcv",active:"ju367vcw"},defaultClass:"ju367vcu"},connectButtonTextError:{conditions:{base:"ju367vcx",hover:"ju367vcy",active:"ju367vcz"},defaultClass:"ju367vcx"},connectionIndicator:{conditions:{base:"ju367vd0",hover:"ju367vd1",active:"ju367vd2"},defaultClass:"ju367vd0"},downloadBottomCardBackground:{conditions:{base:"ju367vd3",hover:"ju367vd4",active:"ju367vd5"},defaultClass:"ju367vd3"},downloadTopCardBackground:{conditions:{base:"ju367vd6",hover:"ju367vd7",active:"ju367vd8"},defaultClass:"ju367vd6"},error:{conditions:{base:"ju367vd9",hover:"ju367vda",active:"ju367vdb"},defaultClass:"ju367vd9"},generalBorder:{conditions:{base:"ju367vdc",hover:"ju367vdd",active:"ju367vde"},defaultClass:"ju367vdc"},generalBorderDim:{conditions:{base:"ju367vdf",hover:"ju367vdg",active:"ju367vdh"},defaultClass:"ju367vdf"},menuItemBackground:{conditions:{base:"ju367vdi",hover:"ju367vdj",active:"ju367vdk"},defaultClass:"ju367vdi"},modalBackdrop:{conditions:{base:"ju367vdl",hover:"ju367vdm",active:"ju367vdn"},defaultClass:"ju367vdl"},modalBackground:{conditions:{base:"ju367vdo",hover:"ju367vdp",active:"ju367vdq"},defaultClass:"ju367vdo"},modalBorder:{conditions:{base:"ju367vdr",hover:"ju367vds",active:"ju367vdt"},defaultClass:"ju367vdr"},modalText:{conditions:{base:"ju367vdu",hover:"ju367vdv",active:"ju367vdw"},defaultClass:"ju367vdu"},modalTextDim:{conditions:{base:"ju367vdx",hover:"ju367vdy",active:"ju367vdz"},defaultClass:"ju367vdx"},modalTextSecondary:{conditions:{base:"ju367ve0",hover:"ju367ve1",active:"ju367ve2"},defaultClass:"ju367ve0"},profileAction:{conditions:{base:"ju367ve3",hover:"ju367ve4",active:"ju367ve5"},defaultClass:"ju367ve3"},profileActionHover:{conditions:{base:"ju367ve6",hover:"ju367ve7",active:"ju367ve8"},defaultClass:"ju367ve6"},profileForeground:{conditions:{base:"ju367ve9",hover:"ju367vea",active:"ju367veb"},defaultClass:"ju367ve9"},selectedOptionBorder:{conditions:{base:"ju367vec",hover:"ju367ved",active:"ju367vee"},defaultClass:"ju367vec"},standby:{conditions:{base:"ju367vef",hover:"ju367veg",active:"ju367veh"},defaultClass:"ju367vef"}}},boxShadow:{values:{connectButton:{conditions:{base:"ju367vei",hover:"ju367vej",active:"ju367vek"},defaultClass:"ju367vei"},dialog:{conditions:{base:"ju367vel",hover:"ju367vem",active:"ju367ven"},defaultClass:"ju367vel"},profileDetailsAction:{conditions:{base:"ju367veo",hover:"ju367vep",active:"ju367veq"},defaultClass:"ju367veo"},selectedOption:{conditions:{base:"ju367ver",hover:"ju367ves",active:"ju367vet"},defaultClass:"ju367ver"},selectedWallet:{conditions:{base:"ju367veu",hover:"ju367vev",active:"ju367vew"},defaultClass:"ju367veu"},walletLogo:{conditions:{base:"ju367vex",hover:"ju367vey",active:"ju367vez"},defaultClass:"ju367vex"}}},color:{values:{accentColor:{conditions:{base:"ju367vf0",hover:"ju367vf1",active:"ju367vf2"},defaultClass:"ju367vf0"},accentColorForeground:{conditions:{base:"ju367vf3",hover:"ju367vf4",active:"ju367vf5"},defaultClass:"ju367vf3"},actionButtonBorder:{conditions:{base:"ju367vf6",hover:"ju367vf7",active:"ju367vf8"},defaultClass:"ju367vf6"},actionButtonBorderMobile:{conditions:{base:"ju367vf9",hover:"ju367vfa",active:"ju367vfb"},defaultClass:"ju367vf9"},actionButtonSecondaryBackground:{conditions:{base:"ju367vfc",hover:"ju367vfd",active:"ju367vfe"},defaultClass:"ju367vfc"},closeButton:{conditions:{base:"ju367vff",hover:"ju367vfg",active:"ju367vfh"},defaultClass:"ju367vff"},closeButtonBackground:{conditions:{base:"ju367vfi",hover:"ju367vfj",active:"ju367vfk"},defaultClass:"ju367vfi"},connectButtonBackground:{conditions:{base:"ju367vfl",hover:"ju367vfm",active:"ju367vfn"},defaultClass:"ju367vfl"},connectButtonBackgroundError:{conditions:{base:"ju367vfo",hover:"ju367vfp",active:"ju367vfq"},defaultClass:"ju367vfo"},connectButtonInnerBackground:{conditions:{base:"ju367vfr",hover:"ju367vfs",active:"ju367vft"},defaultClass:"ju367vfr"},connectButtonText:{conditions:{base:"ju367vfu",hover:"ju367vfv",active:"ju367vfw"},defaultClass:"ju367vfu"},connectButtonTextError:{conditions:{base:"ju367vfx",hover:"ju367vfy",active:"ju367vfz"},defaultClass:"ju367vfx"},connectionIndicator:{conditions:{base:"ju367vg0",hover:"ju367vg1",active:"ju367vg2"},defaultClass:"ju367vg0"},downloadBottomCardBackground:{conditions:{base:"ju367vg3",hover:"ju367vg4",active:"ju367vg5"},defaultClass:"ju367vg3"},downloadTopCardBackground:{conditions:{base:"ju367vg6",hover:"ju367vg7",active:"ju367vg8"},defaultClass:"ju367vg6"},error:{conditions:{base:"ju367vg9",hover:"ju367vga",active:"ju367vgb"},defaultClass:"ju367vg9"},generalBorder:{conditions:{base:"ju367vgc",hover:"ju367vgd",active:"ju367vge"},defaultClass:"ju367vgc"},generalBorderDim:{conditions:{base:"ju367vgf",hover:"ju367vgg",active:"ju367vgh"},defaultClass:"ju367vgf"},menuItemBackground:{conditions:{base:"ju367vgi",hover:"ju367vgj",active:"ju367vgk"},defaultClass:"ju367vgi"},modalBackdrop:{conditions:{base:"ju367vgl",hover:"ju367vgm",active:"ju367vgn"},defaultClass:"ju367vgl"},modalBackground:{conditions:{base:"ju367vgo",hover:"ju367vgp",active:"ju367vgq"},defaultClass:"ju367vgo"},modalBorder:{conditions:{base:"ju367vgr",hover:"ju367vgs",active:"ju367vgt"},defaultClass:"ju367vgr"},modalText:{conditions:{base:"ju367vgu",hover:"ju367vgv",active:"ju367vgw"},defaultClass:"ju367vgu"},modalTextDim:{conditions:{base:"ju367vgx",hover:"ju367vgy",active:"ju367vgz"},defaultClass:"ju367vgx"},modalTextSecondary:{conditions:{base:"ju367vh0",hover:"ju367vh1",active:"ju367vh2"},defaultClass:"ju367vh0"},profileAction:{conditions:{base:"ju367vh3",hover:"ju367vh4",active:"ju367vh5"},defaultClass:"ju367vh3"},profileActionHover:{conditions:{base:"ju367vh6",hover:"ju367vh7",active:"ju367vh8"},defaultClass:"ju367vh6"},profileForeground:{conditions:{base:"ju367vh9",hover:"ju367vha",active:"ju367vhb"},defaultClass:"ju367vh9"},selectedOptionBorder:{conditions:{base:"ju367vhc",hover:"ju367vhd",active:"ju367vhe"},defaultClass:"ju367vhc"},standby:{conditions:{base:"ju367vhf",hover:"ju367vhg",active:"ju367vhh"},defaultClass:"ju367vhf"}}}}},{conditions:{defaultCondition:"smallScreen",conditionNames:["smallScreen","largeScreen"],responsiveArray:void 0},styles:{alignItems:{values:{"flex-start":{conditions:{smallScreen:"ju367v0",largeScreen:"ju367v1"},defaultClass:"ju367v0"},"flex-end":{conditions:{smallScreen:"ju367v2",largeScreen:"ju367v3"},defaultClass:"ju367v2"},center:{conditions:{smallScreen:"ju367v4",largeScreen:"ju367v5"},defaultClass:"ju367v4"}}},display:{values:{none:{conditions:{smallScreen:"ju367v6",largeScreen:"ju367v7"},defaultClass:"ju367v6"},block:{conditions:{smallScreen:"ju367v8",largeScreen:"ju367v9"},defaultClass:"ju367v8"},flex:{conditions:{smallScreen:"ju367va",largeScreen:"ju367vb"},defaultClass:"ju367va"},inline:{conditions:{smallScreen:"ju367vc",largeScreen:"ju367vd"},defaultClass:"ju367vc"}}}}},{conditions:void 0,styles:{margin:{mappings:["marginTop","marginBottom","marginLeft","marginRight"]},marginX:{mappings:["marginLeft","marginRight"]},marginY:{mappings:["marginTop","marginBottom"]},padding:{mappings:["paddingTop","paddingBottom","paddingLeft","paddingRight"]},paddingX:{mappings:["paddingLeft","paddingRight"]},paddingY:{mappings:["paddingTop","paddingBottom"]},alignSelf:{values:{"flex-start":{defaultClass:"ju367ve"},"flex-end":{defaultClass:"ju367vf"},center:{defaultClass:"ju367vg"}}},backgroundSize:{values:{cover:{defaultClass:"ju367vh"}}},borderRadius:{values:{1:{defaultClass:"ju367vi"},6:{defaultClass:"ju367vj"},10:{defaultClass:"ju367vk"},13:{defaultClass:"ju367vl"},actionButton:{defaultClass:"ju367vm"},connectButton:{defaultClass:"ju367vn"},menuButton:{defaultClass:"ju367vo"},modal:{defaultClass:"ju367vp"},modalMobile:{defaultClass:"ju367vq"},"25%":{defaultClass:"ju367vr"},full:{defaultClass:"ju367vs"}}},borderStyle:{values:{solid:{defaultClass:"ju367vt"}}},borderWidth:{values:{0:{defaultClass:"ju367vu"},1:{defaultClass:"ju367vv"},2:{defaultClass:"ju367vw"},4:{defaultClass:"ju367vx"}}},cursor:{values:{pointer:{defaultClass:"ju367vy"},none:{defaultClass:"ju367vz"}}},pointerEvents:{values:{none:{defaultClass:"ju367v10"},all:{defaultClass:"ju367v11"}}},minHeight:{values:{8:{defaultClass:"ju367v12"},44:{defaultClass:"ju367v13"}}},flexDirection:{values:{row:{defaultClass:"ju367v14"},column:{defaultClass:"ju367v15"}}},fontFamily:{values:{body:{defaultClass:"ju367v16"}}},fontSize:{values:{12:{defaultClass:"ju367v17"},13:{defaultClass:"ju367v18"},14:{defaultClass:"ju367v19"},16:{defaultClass:"ju367v1a"},18:{defaultClass:"ju367v1b"},20:{defaultClass:"ju367v1c"},23:{defaultClass:"ju367v1d"}}},fontWeight:{values:{regular:{defaultClass:"ju367v1e"},medium:{defaultClass:"ju367v1f"},semibold:{defaultClass:"ju367v1g"},bold:{defaultClass:"ju367v1h"},heavy:{defaultClass:"ju367v1i"}}},gap:{values:{0:{defaultClass:"ju367v1j"},1:{defaultClass:"ju367v1k"},2:{defaultClass:"ju367v1l"},3:{defaultClass:"ju367v1m"},4:{defaultClass:"ju367v1n"},5:{defaultClass:"ju367v1o"},6:{defaultClass:"ju367v1p"},8:{defaultClass:"ju367v1q"},10:{defaultClass:"ju367v1r"},12:{defaultClass:"ju367v1s"},14:{defaultClass:"ju367v1t"},16:{defaultClass:"ju367v1u"},18:{defaultClass:"ju367v1v"},20:{defaultClass:"ju367v1w"},24:{defaultClass:"ju367v1x"},28:{defaultClass:"ju367v1y"},32:{defaultClass:"ju367v1z"},36:{defaultClass:"ju367v20"},44:{defaultClass:"ju367v21"},64:{defaultClass:"ju367v22"},"-1":{defaultClass:"ju367v23"}}},height:{values:{1:{defaultClass:"ju367v24"},2:{defaultClass:"ju367v25"},4:{defaultClass:"ju367v26"},8:{defaultClass:"ju367v27"},12:{defaultClass:"ju367v28"},20:{defaultClass:"ju367v29"},24:{defaultClass:"ju367v2a"},28:{defaultClass:"ju367v2b"},30:{defaultClass:"ju367v2c"},32:{defaultClass:"ju367v2d"},34:{defaultClass:"ju367v2e"},36:{defaultClass:"ju367v2f"},40:{defaultClass:"ju367v2g"},44:{defaultClass:"ju367v2h"},48:{defaultClass:"ju367v2i"},54:{defaultClass:"ju367v2j"},60:{defaultClass:"ju367v2k"},200:{defaultClass:"ju367v2l"},full:{defaultClass:"ju367v2m"},max:{defaultClass:"ju367v2n"}}},justifyContent:{values:{"flex-start":{defaultClass:"ju367v2o"},"flex-end":{defaultClass:"ju367v2p"},center:{defaultClass:"ju367v2q"},"space-between":{defaultClass:"ju367v2r"},"space-around":{defaultClass:"ju367v2s"}}},textAlign:{values:{left:{defaultClass:"ju367v2t"},center:{defaultClass:"ju367v2u"},inherit:{defaultClass:"ju367v2v"}}},marginBottom:{values:{0:{defaultClass:"ju367v2w"},1:{defaultClass:"ju367v2x"},2:{defaultClass:"ju367v2y"},3:{defaultClass:"ju367v2z"},4:{defaultClass:"ju367v30"},5:{defaultClass:"ju367v31"},6:{defaultClass:"ju367v32"},8:{defaultClass:"ju367v33"},10:{defaultClass:"ju367v34"},12:{defaultClass:"ju367v35"},14:{defaultClass:"ju367v36"},16:{defaultClass:"ju367v37"},18:{defaultClass:"ju367v38"},20:{defaultClass:"ju367v39"},24:{defaultClass:"ju367v3a"},28:{defaultClass:"ju367v3b"},32:{defaultClass:"ju367v3c"},36:{defaultClass:"ju367v3d"},44:{defaultClass:"ju367v3e"},64:{defaultClass:"ju367v3f"},"-1":{defaultClass:"ju367v3g"}}},marginLeft:{values:{0:{defaultClass:"ju367v3h"},1:{defaultClass:"ju367v3i"},2:{defaultClass:"ju367v3j"},3:{defaultClass:"ju367v3k"},4:{defaultClass:"ju367v3l"},5:{defaultClass:"ju367v3m"},6:{defaultClass:"ju367v3n"},8:{defaultClass:"ju367v3o"},10:{defaultClass:"ju367v3p"},12:{defaultClass:"ju367v3q"},14:{defaultClass:"ju367v3r"},16:{defaultClass:"ju367v3s"},18:{defaultClass:"ju367v3t"},20:{defaultClass:"ju367v3u"},24:{defaultClass:"ju367v3v"},28:{defaultClass:"ju367v3w"},32:{defaultClass:"ju367v3x"},36:{defaultClass:"ju367v3y"},44:{defaultClass:"ju367v3z"},64:{defaultClass:"ju367v40"},"-1":{defaultClass:"ju367v41"}}},marginRight:{values:{0:{defaultClass:"ju367v42"},1:{defaultClass:"ju367v43"},2:{defaultClass:"ju367v44"},3:{defaultClass:"ju367v45"},4:{defaultClass:"ju367v46"},5:{defaultClass:"ju367v47"},6:{defaultClass:"ju367v48"},8:{defaultClass:"ju367v49"},10:{defaultClass:"ju367v4a"},12:{defaultClass:"ju367v4b"},14:{defaultClass:"ju367v4c"},16:{defaultClass:"ju367v4d"},18:{defaultClass:"ju367v4e"},20:{defaultClass:"ju367v4f"},24:{defaultClass:"ju367v4g"},28:{defaultClass:"ju367v4h"},32:{defaultClass:"ju367v4i"},36:{defaultClass:"ju367v4j"},44:{defaultClass:"ju367v4k"},64:{defaultClass:"ju367v4l"},"-1":{defaultClass:"ju367v4m"}}},marginTop:{values:{0:{defaultClass:"ju367v4n"},1:{defaultClass:"ju367v4o"},2:{defaultClass:"ju367v4p"},3:{defaultClass:"ju367v4q"},4:{defaultClass:"ju367v4r"},5:{defaultClass:"ju367v4s"},6:{defaultClass:"ju367v4t"},8:{defaultClass:"ju367v4u"},10:{defaultClass:"ju367v4v"},12:{defaultClass:"ju367v4w"},14:{defaultClass:"ju367v4x"},16:{defaultClass:"ju367v4y"},18:{defaultClass:"ju367v4z"},20:{defaultClass:"ju367v50"},24:{defaultClass:"ju367v51"},28:{defaultClass:"ju367v52"},32:{defaultClass:"ju367v53"},36:{defaultClass:"ju367v54"},44:{defaultClass:"ju367v55"},64:{defaultClass:"ju367v56"},"-1":{defaultClass:"ju367v57"}}},maxWidth:{values:{1:{defaultClass:"ju367v58"},2:{defaultClass:"ju367v59"},4:{defaultClass:"ju367v5a"},8:{defaultClass:"ju367v5b"},12:{defaultClass:"ju367v5c"},20:{defaultClass:"ju367v5d"},24:{defaultClass:"ju367v5e"},28:{defaultClass:"ju367v5f"},30:{defaultClass:"ju367v5g"},32:{defaultClass:"ju367v5h"},34:{defaultClass:"ju367v5i"},36:{defaultClass:"ju367v5j"},40:{defaultClass:"ju367v5k"},44:{defaultClass:"ju367v5l"},48:{defaultClass:"ju367v5m"},54:{defaultClass:"ju367v5n"},60:{defaultClass:"ju367v5o"},200:{defaultClass:"ju367v5p"},full:{defaultClass:"ju367v5q"},max:{defaultClass:"ju367v5r"}}},minWidth:{values:{1:{defaultClass:"ju367v5s"},2:{defaultClass:"ju367v5t"},4:{defaultClass:"ju367v5u"},8:{defaultClass:"ju367v5v"},12:{defaultClass:"ju367v5w"},20:{defaultClass:"ju367v5x"},24:{defaultClass:"ju367v5y"},28:{defaultClass:"ju367v5z"},30:{defaultClass:"ju367v60"},32:{defaultClass:"ju367v61"},34:{defaultClass:"ju367v62"},36:{defaultClass:"ju367v63"},40:{defaultClass:"ju367v64"},44:{defaultClass:"ju367v65"},48:{defaultClass:"ju367v66"},54:{defaultClass:"ju367v67"},60:{defaultClass:"ju367v68"},200:{defaultClass:"ju367v69"},full:{defaultClass:"ju367v6a"},max:{defaultClass:"ju367v6b"}}},overflow:{values:{hidden:{defaultClass:"ju367v6c"}}},paddingBottom:{values:{0:{defaultClass:"ju367v6d"},1:{defaultClass:"ju367v6e"},2:{defaultClass:"ju367v6f"},3:{defaultClass:"ju367v6g"},4:{defaultClass:"ju367v6h"},5:{defaultClass:"ju367v6i"},6:{defaultClass:"ju367v6j"},8:{defaultClass:"ju367v6k"},10:{defaultClass:"ju367v6l"},12:{defaultClass:"ju367v6m"},14:{defaultClass:"ju367v6n"},16:{defaultClass:"ju367v6o"},18:{defaultClass:"ju367v6p"},20:{defaultClass:"ju367v6q"},24:{defaultClass:"ju367v6r"},28:{defaultClass:"ju367v6s"},32:{defaultClass:"ju367v6t"},36:{defaultClass:"ju367v6u"},44:{defaultClass:"ju367v6v"},64:{defaultClass:"ju367v6w"},"-1":{defaultClass:"ju367v6x"}}},paddingLeft:{values:{0:{defaultClass:"ju367v6y"},1:{defaultClass:"ju367v6z"},2:{defaultClass:"ju367v70"},3:{defaultClass:"ju367v71"},4:{defaultClass:"ju367v72"},5:{defaultClass:"ju367v73"},6:{defaultClass:"ju367v74"},8:{defaultClass:"ju367v75"},10:{defaultClass:"ju367v76"},12:{defaultClass:"ju367v77"},14:{defaultClass:"ju367v78"},16:{defaultClass:"ju367v79"},18:{defaultClass:"ju367v7a"},20:{defaultClass:"ju367v7b"},24:{defaultClass:"ju367v7c"},28:{defaultClass:"ju367v7d"},32:{defaultClass:"ju367v7e"},36:{defaultClass:"ju367v7f"},44:{defaultClass:"ju367v7g"},64:{defaultClass:"ju367v7h"},"-1":{defaultClass:"ju367v7i"}}},paddingRight:{values:{0:{defaultClass:"ju367v7j"},1:{defaultClass:"ju367v7k"},2:{defaultClass:"ju367v7l"},3:{defaultClass:"ju367v7m"},4:{defaultClass:"ju367v7n"},5:{defaultClass:"ju367v7o"},6:{defaultClass:"ju367v7p"},8:{defaultClass:"ju367v7q"},10:{defaultClass:"ju367v7r"},12:{defaultClass:"ju367v7s"},14:{defaultClass:"ju367v7t"},16:{defaultClass:"ju367v7u"},18:{defaultClass:"ju367v7v"},20:{defaultClass:"ju367v7w"},24:{defaultClass:"ju367v7x"},28:{defaultClass:"ju367v7y"},32:{defaultClass:"ju367v7z"},36:{defaultClass:"ju367v80"},44:{defaultClass:"ju367v81"},64:{defaultClass:"ju367v82"},"-1":{defaultClass:"ju367v83"}}},paddingTop:{values:{0:{defaultClass:"ju367v84"},1:{defaultClass:"ju367v85"},2:{defaultClass:"ju367v86"},3:{defaultClass:"ju367v87"},4:{defaultClass:"ju367v88"},5:{defaultClass:"ju367v89"},6:{defaultClass:"ju367v8a"},8:{defaultClass:"ju367v8b"},10:{defaultClass:"ju367v8c"},12:{defaultClass:"ju367v8d"},14:{defaultClass:"ju367v8e"},16:{defaultClass:"ju367v8f"},18:{defaultClass:"ju367v8g"},20:{defaultClass:"ju367v8h"},24:{defaultClass:"ju367v8i"},28:{defaultClass:"ju367v8j"},32:{defaultClass:"ju367v8k"},36:{defaultClass:"ju367v8l"},44:{defaultClass:"ju367v8m"},64:{defaultClass:"ju367v8n"},"-1":{defaultClass:"ju367v8o"}}},position:{values:{absolute:{defaultClass:"ju367v8p"},fixed:{defaultClass:"ju367v8q"},relative:{defaultClass:"ju367v8r"}}},WebkitUserSelect:{values:{none:{defaultClass:"ju367v8s"}}},right:{values:{0:{defaultClass:"ju367v8t"}}},transition:{values:{default:{defaultClass:"ju367v8u"},transform:{defaultClass:"ju367v8v"}}},userSelect:{values:{none:{defaultClass:"ju367v8w"}}},width:{values:{1:{defaultClass:"ju367v8x"},2:{defaultClass:"ju367v8y"},4:{defaultClass:"ju367v8z"},8:{defaultClass:"ju367v90"},12:{defaultClass:"ju367v91"},20:{defaultClass:"ju367v92"},24:{defaultClass:"ju367v93"},28:{defaultClass:"ju367v94"},30:{defaultClass:"ju367v95"},32:{defaultClass:"ju367v96"},34:{defaultClass:"ju367v97"},36:{defaultClass:"ju367v98"},40:{defaultClass:"ju367v99"},44:{defaultClass:"ju367v9a"},48:{defaultClass:"ju367v9b"},54:{defaultClass:"ju367v9c"},60:{defaultClass:"ju367v9d"},200:{defaultClass:"ju367v9e"},full:{defaultClass:"ju367v9f"},max:{defaultClass:"ju367v9g"}}},backdropFilter:{values:{modalOverlay:{defaultClass:"ju367v9h"}}}}}),tz={colors:{accentColor:"var(--rk-colors-accentColor)",accentColorForeground:"var(--rk-colors-accentColorForeground)",actionButtonBorder:"var(--rk-colors-actionButtonBorder)",actionButtonBorderMobile:"var(--rk-colors-actionButtonBorderMobile)",actionButtonSecondaryBackground:"var(--rk-colors-actionButtonSecondaryBackground)",closeButton:"var(--rk-colors-closeButton)",closeButtonBackground:"var(--rk-colors-closeButtonBackground)",connectButtonBackground:"var(--rk-colors-connectButtonBackground)",connectButtonBackgroundError:"var(--rk-colors-connectButtonBackgroundError)",connectButtonInnerBackground:"var(--rk-colors-connectButtonInnerBackground)",connectButtonText:"var(--rk-colors-connectButtonText)",connectButtonTextError:"var(--rk-colors-connectButtonTextError)",connectionIndicator:"var(--rk-colors-connectionIndicator)",downloadBottomCardBackground:"var(--rk-colors-downloadBottomCardBackground)",downloadTopCardBackground:"var(--rk-colors-downloadTopCardBackground)",error:"var(--rk-colors-error)",generalBorder:"var(--rk-colors-generalBorder)",generalBorderDim:"var(--rk-colors-generalBorderDim)",menuItemBackground:"var(--rk-colors-menuItemBackground)",modalBackdrop:"var(--rk-colors-modalBackdrop)",modalBackground:"var(--rk-colors-modalBackground)",modalBorder:"var(--rk-colors-modalBorder)",modalText:"var(--rk-colors-modalText)",modalTextDim:"var(--rk-colors-modalTextDim)",modalTextSecondary:"var(--rk-colors-modalTextSecondary)",profileAction:"var(--rk-colors-profileAction)",profileActionHover:"var(--rk-colors-profileActionHover)",profileForeground:"var(--rk-colors-profileForeground)",selectedOptionBorder:"var(--rk-colors-selectedOptionBorder)",standby:"var(--rk-colors-standby)"},fonts:{body:"var(--rk-fonts-body)"},radii:{actionButton:"var(--rk-radii-actionButton)",connectButton:"var(--rk-radii-connectButton)",menuButton:"var(--rk-radii-menuButton)",modal:"var(--rk-radii-modal)",modalMobile:"var(--rk-radii-modalMobile)"},shadows:{connectButton:"var(--rk-shadows-connectButton)",dialog:"var(--rk-shadows-dialog)",profileDetailsAction:"var(--rk-shadows-profileDetailsAction)",selectedOption:"var(--rk-shadows-selectedOption)",selectedWallet:"var(--rk-shadows-selectedWallet)",walletLogo:"var(--rk-shadows-walletLogo)"},blurs:{modalOverlay:"var(--rk-blurs-modalOverlay)"}},tq={shrink:"_12cbo8i6",shrinkSm:"_12cbo8i7"},tG={grow:"_12cbo8i4",growLg:"_12cbo8i5"};function touchableStyles({active:e,hover:t}){return["_12cbo8i3 ju367v8r",t&&tG[t],tq[e]]}var tW=(0,D.createContext)(null);function useAuthenticationStatus(){var e;let t=(0,D.useContext)(tW);return null!=(e=null==t?void 0:t.status)?e:null}function useConnectionStatus(){let e=useAuthenticationStatus(),{isConnected:t}=(0,_.m)();return t?e&&("loading"===e||"unauthenticated"===e)?e:"connected":"disconnected"}function isAndroid(){return"undefined"!=typeof navigator&&/android/i.test(navigator.userAgent)}function isIOS(){return"undefined"!=typeof navigator&&/iPhone|iPod/.test(navigator.userAgent)||"undefined"!=typeof navigator&&(/iPad/.test(navigator.userAgent)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)}function isMobile(){return isAndroid()||isIOS()}var tH={a:"iekbcca",blockquote:"iekbcc2",button:"iekbcc9",input:"iekbcc8 iekbcc5 iekbcc4",mark:"iekbcc6",ol:"iekbcc1",q:"iekbcc2",select:"iekbcc7 iekbcc5 iekbcc4",table:"iekbcc3",textarea:"iekbcc5 iekbcc4",ul:"iekbcc1"},atoms=({reset:e,...t})=>{if(!e)return tL(t);let n=tH[e],o=tL(t);return(0,L.Z)("iekbcc0",n,o)},tQ=D.forwardRef(({as:e="div",className:t,testId:n,...o},i)=>{let s={},l={};for(let e in o)tL.properties.has(e)?s[e]=o[e]:l[e]=o[e];let c=atoms({reset:"string"==typeof e?e:"div",...s});return D.createElement(e,{className:(0,L.Z)(c,t),...l,"data-testid":n?`rk-${n.replace(/^rk-/,"")}`:void 0,ref:i})});tQ.displayName="Box";var tK=new Map,tV=new Map;async function loadAsyncImage(e){let t=tV.get(e);if(t)return t;let load=async()=>e().then(async t=>(tK.set(e,t),t)),n=load().catch(t=>load().catch(t=>{tV.delete(e)}));return tV.set(e,n),n}async function loadImages(...e){return await Promise.all(e.map(e=>"function"==typeof e?loadAsyncImage(e):e))}function useAsyncImage(e){let t="function"==typeof e?tK.get(e):void 0,n=function(){let[,e]=(0,D.useReducer)(e=>e+1,0);return e}();return(0,D.useEffect)(()=>{"function"!=typeof e||t||loadAsyncImage(e).then(n)},[e,t,n]),"function"==typeof e?t:e}function AsyncImage({alt:e,background:t,borderColor:n,borderRadius:o,useAsImage:i,boxShadow:s,height:l,src:c,width:u,testId:d}){let p=isIOS(),f=useAsyncImage(c),m=f&&/^http/.test(f),[b,g]=(0,D.useReducer)(()=>!0,!1);return D.createElement(tQ,{"aria-label":e,borderRadius:o,boxShadow:s,height:"string"==typeof l?l:void 0,overflow:"hidden",position:"relative",role:"img",style:{background:t,height:"number"==typeof l?l:void 0,width:"number"==typeof u?u:void 0},width:"string"==typeof u?u:void 0,testId:d},D.createElement(tQ,{...i?{"aria-hidden":!0,as:"img",src:f}:m?{"aria-hidden":!0,as:"img",onLoad:g,src:f}:{backgroundSize:"cover"},height:"full",position:"absolute",...p?{WebkitUserSelect:"none"}:{},style:{WebkitTouchCallout:"none",transition:"opacity .15s linear",userSelect:"none",...i?{}:m?{opacity:b?1:0}:{backgroundImage:f?`url(${f})`:void 0,backgroundRepeat:"no-repeat",opacity:f?1:0}},width:"full"}),n?D.createElement(tQ,{..."object"==typeof n&&"custom"in n?{style:{borderColor:n.custom}}:{borderColor:n},borderRadius:o,borderStyle:"solid",borderWidth:"1",height:"full",position:"relative",width:"full"}):null)}var useRandomId=e=>(0,D.useMemo)(()=>`${e}_${Math.round(1e9*Math.random())}`,[e]),SpinnerIcon=({height:e=21,width:t=21})=>{let n=useRandomId("spinner");return D.createElement("svg",{className:"_1luule42",fill:"none",height:e,viewBox:"0 0 21 21",width:t,xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Loading"),D.createElement("clipPath",{id:n},D.createElement("path",{d:"M10.5 3C6.35786 3 3 6.35786 3 10.5C3 14.6421 6.35786 18 10.5 18C11.3284 18 12 18.6716 12 19.5C12 20.3284 11.3284 21 10.5 21C4.70101 21 0 16.299 0 10.5C0 4.70101 4.70101 0 10.5 0C16.299 0 21 4.70101 21 10.5C21 11.3284 20.3284 12 19.5 12C18.6716 12 18 11.3284 18 10.5C18 6.35786 14.6421 3 10.5 3Z"})),D.createElement("foreignObject",{clipPath:`url(#${n})`,height:"21",width:"21",x:"0",y:"0"},D.createElement("div",{className:"_1luule43"})))},tZ=[{color:"#FC5C54",emoji:"\uD83C\uDF36"},{color:"#FFD95A",emoji:"\uD83E\uDD11"},{color:"#E95D72",emoji:"\uD83D\uDC19"},{color:"#6A87C8",emoji:"\uD83E\uDED0"},{color:"#5FD0F3",emoji:"\uD83D\uDC33"},{color:"#FC5C54",emoji:"\uD83E\uDD36"},{color:"#75C06B",emoji:"\uD83C\uDF32"},{color:"#FFDD86",emoji:"\uD83C\uDF1E"},{color:"#5FC6D4",emoji:"\uD83D\uDC12"},{color:"#FF949A",emoji:"\uD83D\uDC35"},{color:"#FF8024",emoji:"\uD83E\uDD8A"},{color:"#9BA1A4",emoji:"\uD83D\uDC3C"},{color:"#EC66FF",emoji:"\uD83E\uDD84"},{color:"#FF8CBC",emoji:"\uD83D\uDC37"},{color:"#FF9A23",emoji:"\uD83D\uDC27"},{color:"#FF949A",emoji:"\uD83E\uDDA9"},{color:"#C5DADB",emoji:"\uD83D\uDC7D"},{color:"#FC5C54",emoji:"\uD83C\uDF88"},{color:"#FF949A",emoji:"\uD83C\uDF49"},{color:"#FFD95A",emoji:"\uD83C\uDF89"},{color:"#A8CE63",emoji:"\uD83D\uDC32"},{color:"#71ABFF",emoji:"\uD83C\uDF0E"},{color:"#FFE279",emoji:"\uD83C\uDF4A"},{color:"#B6B1B6",emoji:"\uD83D\uDC2D"},{color:"#FF6780",emoji:"\uD83C\uDF63"},{color:"#FFD95A",emoji:"\uD83D\uDC25"},{color:"#A575FF",emoji:"\uD83D\uDC7E"},{color:"#A8CE63",emoji:"\uD83E\uDD66"},{color:"#FC5C54",emoji:"\uD83D\uDC79"},{color:"#FFE279",emoji:"\uD83D\uDE40"},{color:"#5FD0F3",emoji:"⛱"},{color:"#4D82FF",emoji:"⛵️"},{color:"#FFE279",emoji:"\uD83E\uDD73"},{color:"#FF949A",emoji:"\uD83E\uDD2F"},{color:"#FFB35A",emoji:"\uD83E\uDD20"}],defaultAvatar=({address:e,ensImage:t,size:n})=>{let[o,i]=(0,D.useState)(!1);(0,D.useEffect)(()=>{if(t){let e=new Image;e.src=t,e.onload=()=>i(!0)}},[t]);let{color:s,emoji:l}=(0,D.useMemo)(()=>(function(e){let t=Math.abs(function(e){let t=0;if(0===e.length)return t;for(let n=0;nD.createElement("svg",{fill:"none",height:"7",width:"14",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Dropdown"),D.createElement("path",{d:"M12.75 1.54001L8.51647 5.0038C7.77974 5.60658 6.72026 5.60658 5.98352 5.0038L1.75 1.54001",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2.5",xmlns:"http://www.w3.org/2000/svg"})),tX=new class{constructor(e){for(let[t,n]of(this.listeners=new Set,this.defaultLocale="en",this.enableFallback=!1,this.locale="en",this.cachedLocales=[],this.translations={},Object.entries(e)))this.cachedLocales=[...this.cachedLocales,t],this.translations={...this.translations,...this.flattenTranslation(n,t)}}missingMessage(e){return`[missing: "${this.locale}.${e}" translation]`}flattenTranslation(e,t){let n={},flatten=(e,t)=>{for(let o of Object.keys(e)){let i=`${t}.${o}`,s=e[o];"object"==typeof s&&null!==s?flatten(s,i):n[i]=s}};return flatten(e,t),n}translateWithReplacements(e,t={}){let n=e;for(let e in t){let o=t[e];n=n.replace(`%{${e}}`,o)}return n}t(e,t,n){let o=`${this.locale}.${e}`,i=this.translations[o];if(!i){if(this.enableFallback){let n=`${this.defaultLocale}.${e}`,o=this.translations[n];if(o)return this.translateWithReplacements(o,t)}return(null==n?void 0:n.rawKeyIfTranslationMissing)?e:this.missingMessage(e)}return this.translateWithReplacements(i,t)}isLocaleCached(e){return this.cachedLocales.includes(e)}updateLocale(e){this.locale=e,this.notifyListeners()}setTranslations(e,t){let n=this.isLocaleCached(e);n||(this.cachedLocales=[...this.cachedLocales,e],this.translations={...this.translations,...this.flattenTranslation(t,e)}),this.locale=e,this.notifyListeners()}notifyListeners(){for(let e of this.listeners)e()}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}}({en:JSON.parse(N.I),"en-US":JSON.parse(N.I)});tX.defaultLocale="en-US",tX.locale="en-US",tX.enableFallback=!0;var fetchTranslations=async e=>{switch(e){case"ar":case"ar-AR":return(await n.e(4507).then(n.bind(n,24507))).default;case"en":case"en-US":default:return(await n.e(3688).then(n.bind(n,93688))).default;case"es":case"es-419":return(await n.e(2499).then(n.bind(n,32499))).default;case"fr":case"fr-FR":return(await n.e(8989).then(n.bind(n,78989))).default;case"hi":case"hi-IN":return(await n.e(9212).then(n.bind(n,19212))).default;case"id":case"id-ID":return(await n.e(2840).then(n.bind(n,52840))).default;case"ja":case"ja-JP":return(await n.e(6210).then(n.bind(n,96210))).default;case"ko":case"ko-KR":return(await n.e(1961).then(n.bind(n,61961))).default;case"pt":case"pt-BR":return(await n.e(5850).then(n.bind(n,75850))).default;case"ru":case"ru-RU":return(await n.e(6626).then(n.bind(n,46626))).default;case"th":case"th-TH":return(await n.e(5515).then(n.bind(n,25515))).default;case"tr":case"tr-TR":return(await n.e(499).then(n.bind(n,60499))).default;case"ua":case"uk-UA":return(await n.e(3760).then(n.bind(n,3760))).default;case"zh":case"zh-CN":return(await n.e(2896).then(n.bind(n,72896))).default}};async function setLocale(e){let t=tX.isLocaleCached(e);if(t){tX.updateLocale(e);return}let n=await fetchTranslations(e);tX.setTranslations(e,JSON.parse(n))}var detectedBrowserLocale=()=>{var e;if("undefined"!=typeof window&&"undefined"!=typeof navigator){if(null==(e=navigator.languages)?void 0:e.length)return navigator.languages[0];if(navigator.language)return navigator.language}},tY=(0,D.createContext)({i18n:tX}),I18nProvider=({children:e,locale:t})=>{let[n,o]=(0,D.useState)(0),i=(0,D.useMemo)(()=>detectedBrowserLocale(),[]);(0,D.useEffect)(()=>{let e=tX.onChange(()=>{o(e=>e+1)});return e},[]),(0,D.useEffect)(()=>{t&&t!==tX.locale?setLocale(t):!t&&i&&i!==tX.locale&&setLocale(i)},[t,i]);let s=(0,D.useMemo)(()=>({t:(e,t)=>tX.t(e,t),i18n:tX}),[n]);return D.createElement(tY.Provider,{value:s},e)};function isNotNullish(e){return null!=e}var t$={iconBackground:"#96bedc",iconUrl:async()=>(await n.e(1727).then(n.bind(n,1727))).default},t0={iconBackground:"#e84141",iconUrl:async()=>(await n.e(6237).then(n.bind(n,36237))).default},t1={iconBackground:"#0052ff",iconUrl:async()=>(await n.e(1711).then(n.bind(n,41711))).default},t6={iconBackground:"#ebac0e",iconUrl:async()=>(await n.e(4253).then(n.bind(n,84253))).default},t3={iconBackground:"#002D74",iconUrl:async()=>(await n.e(5939).then(n.bind(n,95939))).default},t2={iconBackground:"#484c50",iconUrl:async()=>(await n.e(5488).then(n.bind(n,85488))).default},t7={iconBackground:"#ff5a57",iconUrl:async()=>(await n.e(704).then(n.bind(n,60704))).default},t8={iconBackground:"#9f71ec",iconUrl:async()=>(await n.e(8881).then(n.bind(n,48881))).default},t5={iconBackground:"#f9f7ec",iconUrl:async()=>(await n.e(135).then(n.bind(n,70135))).default},t4={iconBackground:"#f9f7ec",iconUrl:async()=>(await n.e(4583).then(n.bind(n,94583))).default},t9={iconBackground:"#000000",iconUrl:async()=>(await n.e(5119).then(n.bind(n,65119))).default},re=Object.fromEntries(Object.values({arbitrum:{chainId:42161,name:"Arbitrum",...t$},arbitrumGoerli:{chainId:421613,...t$},arbitrumSepolia:{chainId:421614,...t$},avalanche:{chainId:43114,...t0},avalancheFuji:{chainId:43113,...t0},base:{chainId:8453,name:"Base",...t1},baseGoerli:{chainId:84531,...t1},baseSepolia:{chainId:84532,...t1},bsc:{chainId:56,name:"BSC",...t6},bscTestnet:{chainId:97,...t6},cronos:{chainId:25,...t3},cronosTestnet:{chainId:338,...t3},goerli:{chainId:5,...t2},hardhat:{chainId:31337,iconBackground:"#f9f7ec",iconUrl:async()=>(await n.e(6253).then(n.bind(n,26253))).default},holesky:{chainId:17e3,...t2},kovan:{chainId:42,...t2},localhost:{chainId:1337,...t2},mainnet:{chainId:1,name:"Ethereum",...t2},optimism:{chainId:10,name:"Optimism",...t7},optimismGoerli:{chainId:420,...t7},optimismKovan:{chainId:69,...t7},optimismSepolia:{chainId:11155420,...t7},polygon:{chainId:137,name:"Polygon",...t8},polygonMumbai:{chainId:80001,...t8},rinkeby:{chainId:4,...t2},ropsten:{chainId:3,...t2},ronin:{chainId:2020,iconBackground:"#1273EA",iconUrl:async()=>(await n.e(1424).then(n.bind(n,81424))).default},sepolia:{chainId:11155111,...t2},xdc:{chainId:50,name:"XinFin",...t5},xdcTestnet:{chainId:51,...t5},zkSync:{chainId:324,name:"zkSync",...t4},zkSyncTestnet:{chainId:280,...t4},zora:{chainId:7777777,name:"Zora",...t9},zoraSepolia:{chainId:999999999,...t9},zoraTestnet:{chainId:999,...t9}}).filter(isNotNullish).map(({chainId:e,...t})=>[e,t])),provideRainbowKitChains=e=>e.map(e=>{var t,n,o,i;let s=null!=(t=re[e.id])?t:{};return{...e,name:null!=(n=s.name)?n:e.name,iconUrl:null!=(o=e.iconUrl)?o:s.iconUrl,iconBackground:null!=(i=e.iconBackground)?i:s.iconBackground}}),rt=(0,D.createContext)({chains:[]});function RainbowKitChainProvider({children:e,initialChain:t}){let{chains:n}=(0,z.Z)();return D.createElement(rt.Provider,{value:(0,D.useMemo)(()=>({chains:provideRainbowKitChains(n),initialChainId:"number"==typeof t?t:null==t?void 0:t.id}),[n,t])},e)}var useRainbowKitChains=()=>(0,D.useContext)(rt).chains,useInitialChainId=()=>(0,D.useContext)(rt).initialChainId,useRainbowKitChainsById=()=>{let e=useRainbowKitChains();return(0,D.useMemo)(()=>{let t={};for(let n of e)t[n.id]=n;return t},[e])},rr=(0,D.createContext)({showBalance:void 0,setShowBalance:()=>{}});function ShowBalanceProvider({children:e}){let[t,n]=(0,D.useState)();return D.createElement(rr.Provider,{value:{showBalance:t,setShowBalance:n}},e)}var useShowBalance=()=>(0,D.useContext)(rr);function useIsMainnetConfigured(){let e=useRainbowKitChains(),t=ex.R.id,n=e.some(e=>e.id===t);return n}function useMainnetEnsAvatar(e){var t;let n=useIsMainnetConfigured(),{data:o}=function(e={}){let{name:t,query:n={}}=e,o=(0,z.Z)(e),i=useChainId(),s=function(e,t={}){return{async queryFn({queryKey:t}){let{name:n,scopeKey:o,...i}=t[1];if(!n)throw Error("name is required");return function(e,t){let{chainId:n,...o}=t,i=e.getClient({chainId:n}),s=(0,K.s)(i,getEnsAvatar,"getEnsAvatar");return s(o)}(e,{...i,name:n})},queryKey:function(e={}){return["ensAvatar",filterQueryOptions(e)]}(t)}}(o,{...e,chainId:e.chainId??i}),l=!!(t&&(n.enabled??!0));return query_useQuery({...n,...s,enabled:l})}({chainId:ex.R.id,name:e?(t=function(e,t,n){if(!e)return[];init();let o=0;return e.split(".").map(e=>{let i=function(e){let t=[];for(let n=0,o=e.length;n0;)if(95!==e[--t])throw Error("underscore allowed only at start")}(f),!(s.emoji=l>1||o[0].is_emoji)&&f.every(e=>e<128))!function(e){if(e.length>=4&&45==e[2]&&45==e[3])throw Error(`invalid label extension: "${str_from_cps(e.slice(0,4))}"`)}(f),e="ASCII";else{let t=o.flatMap(e=>e.is_emoji?[]:e);if(t.length){if(d.has(f[0]))throw error_placement("leading combining mark");for(let e=1;egroup_has_cp(e,n));if(!e.length){if(m.some(e=>group_has_cp(e,n)))throw error_group_member(t[0],n);throw error_disallowed(n)}if(t=e,1==e.length)break}return t}(n);(function(e,t){for(let n of t)if(!group_has_cp(e,n))throw error_group_member(e,n);if(e.M){let e=decomposed(t).map(unpack_cp);for(let t=1,n=e.length;t4)throw Error(`excessive non-spacing marks: ${bidi_qq(safe_str_from_cps(e.slice(t-1,o)))} (${o-t}/4)`);t=o}}})(i,t),function(e,t){let n;let o=[];for(let e of t){let t=g.get(e);if(1===t)return;if(t){let o=t.M.get(e);if(!(n=n?n.filter(e=>o.has(e)):Array_from(o)).length)return}else o.push(e)}if(n){for(let t of n)if(o.every(e=>group_has_cp(t,e)))throw Error(`whole-script confusable: ${e.N}/${t.N}`)}}(i,n),e=i.N}else e="Emoji"}s.type=e}catch(e){s.error=e}return s})}(e,nfc,filter_fe0f)).map(({input:e,error:n,output:o})=>{if(n){let o=n.message;throw Error(1==t.length?o:`Invalid label ${bidi_qq(safe_str_from_cps(e))}: ${o}`)}return str_from_cps(o)}).join("."):void 0,query:{enabled:n}});return o}function useMainnetEnsName(e){let t=useIsMainnetConfigured(),{data:n}=function(e={}){let{address:t,query:n={}}=e,o=(0,z.Z)(e),i=useChainId(),s=function(e,t={}){return{async queryFn({queryKey:t}){let{address:n,scopeKey:o,...i}=t[1];if(!n)throw Error("address is required");return function(e,t){let{chainId:n,...o}=t,i=e.getClient({chainId:n}),s=(0,K.s)(i,getEnsName,"getEnsName");return s(o)}(e,{...i,address:n})},queryKey:function(e={}){return["ensName",filterQueryOptions(e)]}(t)}}(o,{...e,chainId:e.chainId??i}),l=!!(t&&(n.enabled??!0));return query_useQuery({...n,...s,enabled:l})}({chainId:ex.R.id,address:e,query:{enabled:t}});return n}function dist_useChainId(){var e;let{chain:t}=(0,_.m)();return null!=(e=null==t?void 0:t.id)?e:null}var rn="rk-transactions";function loadData(){return function(e){try{let t=e?JSON.parse(e):{};return"object"==typeof t?t:{}}catch{return{}}}("undefined"!=typeof localStorage?localStorage.getItem(rn):null)}var ra=/^0x([A-Fa-f0-9]{64})$/,ro=(0,D.createContext)(null);function TransactionStoreProvider({children:e}){let t=function(e={}){let t=(0,z.Z)(e);return(0,e5.useSyncExternalStoreWithSelector)(e=>(function(e,t){let{onChange:n}=t;return e.subscribe(()=>getPublicClient(e),n,{equalityFn:(e,t)=>e?.uid===t?.uid})})(t,{onChange:e}),()=>getPublicClient(t,e),()=>getPublicClient(t,e),e=>e,(e,t)=>e?.uid===t?.uid)}(),{address:n}=(0,_.m)(),o=dist_useChainId(),[i]=(0,D.useState)(()=>null!=T?T:T=function({provider:e}){let t=loadData(),n=e,o=new Set,i=new Map;function getTransactions(e,n){var o,i;return null!=(i=null==(o=t[e])?void 0:o[n])?i:[]}function setTransactionStatus(e,t,n,o){updateTransactions(e,t,e=>e.map(e=>e.hash===n?{...e,status:o}:e))}async function waitForPendingTransactions(e,t){await Promise.all(getTransactions(e,t).filter(e=>"pending"===e.status).map(async o=>{let{confirmations:s,hash:l}=o,c=i.get(l);if(c)return await c;let u=n.waitForTransactionReceipt({confirmations:s,hash:l,timeout:3e5}).then(({status:n})=>{i.delete(l),void 0!==n&&setTransactionStatus(e,t,l,0===n||"reverted"===n?"failed":"confirmed")}).catch(()=>{setTransactionStatus(e,t,l,"failed")});return i.set(l,u),await u}))}function updateTransactions(e,n,i){var s,l;(t=loadData())[e]=null!=(s=t[e])?s:{};let c=0,u=i(null!=(l=t[e][n])?l:[]).filter(({status:e})=>"pending"===e||c++<=10);t[e][n]=u.length>0?u:void 0,localStorage.setItem(rn,JSON.stringify(t)),function(){for(let e of o)e()}(),waitForPendingTransactions(e,n)}return{addTransaction:function(e,t,n){let o=function(e){let t=[];return ra.test(e.hash)||t.push("Invalid transaction hash"),"string"!=typeof e.description&&t.push("Transaction must have a description"),void 0!==e.confirmations&&(!Number.isInteger(e.confirmations)||e.confirmations<1)&&t.push("Transaction confirmations must be a positiver integer"),t}(n);if(o.length>0)throw Error(["Unable to add transaction",...o].join("\n"));updateTransactions(e,t,e=>[{...n,status:"pending"},...e.filter(({hash:e})=>e!==n.hash)])},clearTransactions:function(e,t){updateTransactions(e,t,()=>[])},getTransactions,onChange:function(e){return o.add(e),()=>{o.delete(e)}},setProvider:function(e){n=e},waitForPendingTransactions}}({provider:t}));return(0,D.useEffect)(()=>{i.setProvider(t)},[i,t]),(0,D.useEffect)(()=>{n&&o&&i.waitForPendingTransactions(n,o)},[i,n,o]),D.createElement(ro.Provider,{value:i},e)}function useTransactionStore(){let e=(0,D.useContext)(ro);if(!e)throw Error("Transaction hooks must be used within RainbowKitProvider");return e}function useRecentTransactions(){let e=useTransactionStore(),{address:t}=(0,_.m)(),n=dist_useChainId(),[o,i]=(0,D.useState)(()=>e&&t&&n?e.getTransactions(t,n):[]);return(0,D.useEffect)(()=>{if(e&&t&&n)return i(e.getTransactions(t,n)),e.onChange(()=>{i(e.getTransactions(t,n))})},[e,t,n]),o}var resolveThemeVars=e=>"function"==typeof e?e():e;function cssStringFromTheme(e,t={}){return Object.entries(function(e,{extends:t}={}){let n={...assignInlineVars(tz,resolveThemeVars(e))};if(!t)return n;let o=assignInlineVars(tz,resolveThemeVars(t)),i=Object.fromEntries(Object.entries(n).filter(([e,t])=>t!==o[e]));return i}(e,t)).map(([e,t])=>`${e}:${t.replace(/[:;{}]/g,"")};`).join("")}var ri={appName:void 0,disclaimer:void 0,learnMoreUrl:"https://learn.rainbow.me/understanding-web3?utm_source=rainbowkit&utm_campaign=learnmore"},rs=(0,D.createContext)(ri),rl=(0,D.createContext)(!1),useWindowSize=()=>{let[e,t]=(0,D.useState)({height:void 0,width:void 0});return(0,D.useEffect)(()=>{var e;let n;let o=(e=()=>{t({height:window.innerHeight,width:window.innerWidth})},()=>{n&&clearTimeout(n),n=setTimeout(()=>{n=null,e()},500)});return window.addEventListener("resize",o),o(),()=>window.removeEventListener("resize",o)},[]),e},rc=(0,D.createContext)({connector:null,setConnector:()=>{}});function WalletButtonProvider({children:e}){let[t,n]=(0,D.useState)(null);return D.createElement(rc.Provider,{value:(0,D.useMemo)(()=>({connector:t,setConnector:n}),[t])},e)}var ru={COMPACT:"compact",WIDE:"wide"},rd=(0,D.createContext)(ru.WIDE);function ModalSizeProvider({children:e,modalSize:t}){let{width:n}=useWindowSize(),{connector:o}=(0,D.useContext)(rc);return D.createElement(rd.Provider,{value:n&&n<768||o?ru.COMPACT:t},e)}var rp=(0,D.createContext)(!1);function isSafari(){return"undefined"!=typeof navigator&&/Version\/([0-9._]+).*Safari/.test(navigator.userAgent)}function getBrowser(){var e;if("undefined"==typeof navigator)return"Browser";let t=navigator.userAgent.toLowerCase();return(null==(e=navigator.brave)?void 0:e.isBrave)?"Brave":t.indexOf("edg/")>-1?"Edge":t.indexOf("op")>-1?"Opera":"undefined"!=typeof document&&""!==getComputedStyle(document.body).getPropertyValue("--arc-palette-focus")?"Arc":t.indexOf("chrome")>-1?"Chrome":t.indexOf("firefox")>-1?"Firefox":isSafari()?"Safari":"Browser"}var{os:rh}=(0,tE.UAParser)();function getPlatform(){return"Windows"===rh.name?"Windows":"Mac OS"===rh.name?"macOS":["Ubuntu","Mint","Fedora","Debian","Arch","Linux"].includes(rh.name)?"Linux":"Desktop"}var getExtensionDownloadUrl=e=>{var t,n,o,i,s,l,c,u,d,p,f,m;let b=getBrowser();return null!=(m=({Arc:null==(t=null==e?void 0:e.downloadUrls)?void 0:t.chrome,Brave:null==(n=null==e?void 0:e.downloadUrls)?void 0:n.chrome,Chrome:null==(o=null==e?void 0:e.downloadUrls)?void 0:o.chrome,Edge:(null==(i=null==e?void 0:e.downloadUrls)?void 0:i.edge)||(null==(s=null==e?void 0:e.downloadUrls)?void 0:s.chrome),Firefox:null==(l=null==e?void 0:e.downloadUrls)?void 0:l.firefox,Opera:(null==(c=null==e?void 0:e.downloadUrls)?void 0:c.opera)||(null==(u=null==e?void 0:e.downloadUrls)?void 0:u.chrome),Safari:null==(d=null==e?void 0:e.downloadUrls)?void 0:d.safari,Browser:null==(p=null==e?void 0:e.downloadUrls)?void 0:p.browserExtension})[b])?m:null==(f=null==e?void 0:e.downloadUrls)?void 0:f.browserExtension},getMobileDownloadUrl=e=>{var t,n,o,i;let s=isIOS();return null!=(i=s?null==(t=null==e?void 0:e.downloadUrls)?void 0:t.ios:null==(n=null==e?void 0:e.downloadUrls)?void 0:n.android)?i:null==(o=null==e?void 0:e.downloadUrls)?void 0:o.mobile},getDesktopDownloadUrl=e=>{var t,n,o,i,s,l;let c=getPlatform();return null!=(l=({Windows:null==(t=null==e?void 0:e.downloadUrls)?void 0:t.windows,macOS:null==(n=null==e?void 0:e.downloadUrls)?void 0:n.macos,Linux:null==(o=null==e?void 0:e.downloadUrls)?void 0:o.linux,Desktop:null==(i=null==e?void 0:e.downloadUrls)?void 0:i.desktop})[c])?l:null==(s=null==e?void 0:e.downloadUrls)?void 0:s.desktop},isRecentWallet=(e,t)=>e.some(e=>e.id===t),isRainbowKitConnector=e=>!!e.isRainbowKitConnector,isEIP6963Connector=e=>{var t;return!!(!e.isRainbowKitConnector&&(null==(t=e.icon)?void 0:t.startsWith("data:image"))&&e.uid&&e.name)},rainbowKitConnectorWithWalletConnect=(e,t)=>{let n="walletConnect"===e.id&&t;return n?{...e,walletConnectModalConnector:t}:e},connectorsWithRecentWallets=({wallets:e,recentWallets:t})=>[...t,...e.filter(e=>!isRecentWallet(t,e.id))],rf="rk-recent";function getRecentWalletIds(){return"undefined"!=typeof localStorage?function(e){try{let t=e?JSON.parse(e):[];return Array.isArray(t)?t:[]}catch{return[]}}(localStorage.getItem(rf)):[]}function useWalletConnectors(e=!1){var t,n,o,i;let s=useRainbowKitChains(),l=useInitialChainId(),{connectAsync:c,connectors:u}=function(e={}){let{mutation:t}=e,n=(0,z.Z)(e),o=function(e={}){let t=(0,z.Z)(e);return(0,D.useSyncExternalStore)(e=>(function(e,t){let{onChange:n}=t;return e._internal.connectors.subscribe((e,t)=>{n(Object.values(e),t)})})(t,{onChange:e}),()=>getConnectors(t),()=>getConnectors(t))}({config:n}),{mutate:i,mutateAsync:s,...l}=(0,e9.D)({...t,mutationFn:e=>connect(n,e),mutationKey:["connect"]});return(0,D.useEffect)(()=>n.subscribe(({status:e})=>e,(e,t)=>{"connected"===t&&"disconnected"===e&&l.reset()}),[n,l]),{...l,connect:i,connectAsync:s,connectors:o}}(),{setIsWalletConnectModalOpen:d}=useWalletConnectOpenState(),p=u.map(e=>({...e,...e.rkDetails||{}}));async function connectWallet(e){var t,n,o;let i=await e.getChainId(),u=await c({chainId:null!=(o=null!=l?l:null==(t=s.find(({id:e})=>e===i))?void 0:t.id)?o:null==(n=s[0])?void 0:n.id,connector:e});return u&&function(e){var t;let n=(t=[e,...getRecentWalletIds()],[...new Set(t)]);localStorage.setItem(rf,JSON.stringify(n))}(e.id),u}async function connectToWalletConnectModal(e){try{d(!0),await connectWallet(e),d(!1)}catch(t){let e="UserRejectedRequestError"===t.name||"Connection request reset. Please try again."===t.message;if(d(!1),!e)throw t}}let getWalletConnectUri=async(e,t)=>{let n=await e.getProvider();return"coinbase"===e.id?n.qrUrl:new Promise(e=>n.once("display_uri",n=>{e(t(n))}))},f=p.find(e=>"walletConnect"===e.id&&e.isWalletConnectModalConnector),m=p.filter(isEIP6963Connector).map(e=>({...e,groupIndex:0})),b=p.filter(isRainbowKitConnector).filter(e=>!e.isWalletConnectModalConnector).filter(t=>{if(!e)return!0;let n=m.some(e=>e.id===t.rdns);return!n}).map(e=>rainbowKitConnectorWithWalletConnect(e,f)),g=[...m,...b],y=function(e,t){let n={};for(let o of e){let e=t(o);e&&(n[e]=o)}return n}(g,e=>e.id),v=getRecentWalletIds().map(e=>y[e]).filter(Boolean).slice(0,3),w=[],C=connectorsWithRecentWallets({wallets:g,recentWallets:v});for(let e of C){if(!e)continue;let s=isEIP6963Connector(e),l=isRecentWallet(v,e.id);if(s){w.push({...e,iconUrl:e.icon,ready:!0,connect:()=>connectWallet(e),groupName:"Installed",recent:l});continue}w.push({...e,ready:null==(t=e.installed)||t,connect:()=>connectWallet(e),desktopDownloadUrl:getDesktopDownloadUrl(e),extensionDownloadUrl:getExtensionDownloadUrl(e),groupName:e.groupName,mobileDownloadUrl:getMobileDownloadUrl(e),getQrCodeUri:(null==(n=e.qrCode)?void 0:n.getUri)?()=>getWalletConnectUri(e,e.qrCode.getUri):void 0,getDesktopUri:(null==(o=e.desktop)?void 0:o.getUri)?()=>getWalletConnectUri(e,e.desktop.getUri):void 0,getMobileUri:(null==(i=e.mobile)?void 0:i.getUri)?()=>{var t;return getWalletConnectUri(e,null==(t=e.mobile)?void 0:t.getUri)}:void 0,recent:l,showWalletConnectModal:e.walletConnectModalConnector?()=>connectToWalletConnectModal(e.walletConnectModalConnector):void 0})}return w}var src=async()=>(await n.e(794).then(n.bind(n,20794))).default,preloadAssetsIcon=()=>loadImages(src),AssetsIcon=()=>D.createElement(AsyncImage,{background:"#d0d5de",borderRadius:"10",height:"48",src,width:"48"}),src2=async()=>(await n.e(3200).then(n.bind(n,3200))).default,preloadLoginIcon=()=>loadImages(src2),LoginIcon=()=>D.createElement(AsyncImage,{background:"#d0d5de",borderRadius:"10",height:"48",src:src2,width:"48"}),rm=D.forwardRef(({as:e="div",children:t,className:n,color:o,display:i,font:s="body",id:l,size:c="16",style:u,tabIndex:d,textAlign:p="inherit",weight:f="regular",testId:m},b)=>D.createElement(tQ,{as:e,className:n,color:o,display:i,fontFamily:s,fontSize:c,fontWeight:f,id:l,ref:b,style:u,tabIndex:d,textAlign:p,testId:m},t));rm.displayName="Text";var rb={large:{fontSize:"16",paddingX:"24",paddingY:"10"},medium:{fontSize:"14",height:"28",paddingX:"12",paddingY:"4"},small:{fontSize:"14",paddingX:"10",paddingY:"5"}};function ActionButton({disabled:e=!1,href:t,label:n,onClick:o,rel:i="noreferrer noopener",size:s="medium",target:l="_blank",testId:c,type:u="primary"}){let d="primary"===u,p="large"!==s,f=isMobile(),m=e?"actionButtonSecondaryBackground":d?"accentColor":p?"actionButtonSecondaryBackground":null,{fontSize:b,height:g,paddingX:y,paddingY:v}=rb[s];return D.createElement(tQ,{...t?e?{}:{as:"a",href:t,rel:i,target:l}:{as:"button",type:"button"},onClick:e?void 0:o,...f&&p?{}:{borderColor:!f||p||d?"actionButtonBorder":"actionButtonBorderMobile",borderStyle:"solid",borderWidth:"1"},borderRadius:"actionButton",className:!e&&touchableStyles({active:"shrinkSm",hover:"grow"}),display:"block",paddingX:y,paddingY:v,style:{willChange:"transform"},testId:c,textAlign:"center",transition:"transform",...m?{background:m}:{},...g?{height:g}:{}},D.createElement(rm,{color:e?"modalTextSecondary":d?"accentColorForeground":"accentColor",size:b,weight:"bold"},n))}var CloseIcon=()=>isMobile()?D.createElement("svg",{"aria-hidden":!0,fill:"none",height:"11.5",viewBox:"0 0 11.5 11.5",width:"11.5",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Close"),D.createElement("path",{d:"M2.13388 0.366117C1.64573 -0.122039 0.854272 -0.122039 0.366117 0.366117C-0.122039 0.854272 -0.122039 1.64573 0.366117 2.13388L3.98223 5.75L0.366117 9.36612C-0.122039 9.85427 -0.122039 10.6457 0.366117 11.1339C0.854272 11.622 1.64573 11.622 2.13388 11.1339L5.75 7.51777L9.36612 11.1339C9.85427 11.622 10.6457 11.622 11.1339 11.1339C11.622 10.6457 11.622 9.85427 11.1339 9.36612L7.51777 5.75L11.1339 2.13388C11.622 1.64573 11.622 0.854272 11.1339 0.366117C10.6457 -0.122039 9.85427 -0.122039 9.36612 0.366117L5.75 3.98223L2.13388 0.366117Z",fill:"currentColor"})):D.createElement("svg",{"aria-hidden":!0,fill:"none",height:"10",viewBox:"0 0 10 10",width:"10",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Close"),D.createElement("path",{d:"M1.70711 0.292893C1.31658 -0.0976311 0.683417 -0.0976311 0.292893 0.292893C-0.0976311 0.683417 -0.0976311 1.31658 0.292893 1.70711L3.58579 5L0.292893 8.29289C-0.0976311 8.68342 -0.0976311 9.31658 0.292893 9.70711C0.683417 10.0976 1.31658 10.0976 1.70711 9.70711L5 6.41421L8.29289 9.70711C8.68342 10.0976 9.31658 10.0976 9.70711 9.70711C10.0976 9.31658 10.0976 8.68342 9.70711 8.29289L6.41421 5L9.70711 1.70711C10.0976 1.31658 10.0976 0.683417 9.70711 0.292893C9.31658 -0.0976311 8.68342 -0.0976311 8.29289 0.292893L5 3.58579L1.70711 0.292893Z",fill:"currentColor"})),CloseButton=({"aria-label":e="Close",onClose:t})=>{let n=isMobile();return D.createElement(tQ,{alignItems:"center","aria-label":e,as:"button",background:"closeButtonBackground",borderColor:"actionButtonBorder",borderRadius:"full",borderStyle:"solid",borderWidth:n?"0":"1",className:touchableStyles({active:"shrinkSm",hover:"growLg"}),color:"closeButton",display:"flex",height:n?"30":"28",justifyContent:"center",onClick:t,style:{willChange:"transform"},transition:"default",type:"button",width:n?"30":"28"},D.createElement(CloseIcon,null))},signInIcon=async()=>(await n.e(2898).then(n.bind(n,92898))).default;function SignIn({onClose:e,onCloseModal:t}){let{i18n:n}=(0,D.useContext)(tY),[{status:o,...i},s]=D.useState({status:"idle"}),l=function(){var e;let{adapter:t}=null!=(e=(0,D.useContext)(tW))?e:{};if(!t)throw Error("No authentication adapter found");return t}(),c=(0,D.useCallback)(async()=>{try{let e=await l.getNonce();s(t=>({...t,nonce:e}))}catch{s(e=>({...e,errorMessage:n.t("sign_in.message.preparing_error"),status:"idle"}))}},[l,n.t]),u=(0,D.useRef)(!1);D.useEffect(()=>{u.current||(u.current=!0,c())},[c]);let d=isMobile(),{address:p,chain:f}=(0,_.m)(),{signMessageAsync:m}=(0,tx.Q)(),signIn=async()=>{try{let e;let o=null==f?void 0:f.id,{nonce:c}=i;if(!p||!o||!c)return;s(e=>({...e,errorMessage:void 0,status:"signing"}));let u=l.createMessage({address:p,chainId:o,nonce:c});try{e=await m({message:l.getMessageBody({message:u})})}catch(e){if(e instanceof et.ab)return s(e=>({...e,status:"idle"}));return s(e=>({...e,errorMessage:n.t("sign_in.signature.signing_error"),status:"idle"}))}s(e=>({...e,status:"verifying"}));try{let n=await l.verify({message:u,signature:e});if(n){t();return}throw Error()}catch{return s(e=>({...e,errorMessage:n.t("sign_in.signature.verifying_error"),status:"idle"}))}}catch{s({errorMessage:n.t("sign_in.signature.oops_error"),status:"idle"})}};return D.createElement(tQ,{position:"relative"},D.createElement(tQ,{display:"flex",paddingRight:"16",paddingTop:"16",position:"absolute",right:"0"},D.createElement(CloseButton,{onClose:e})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:d?"32":"24",padding:"24",paddingX:"18",style:{paddingTop:d?"60px":"36px"}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:d?"6":"4",style:{maxWidth:d?320:280}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:d?"32":"16"},D.createElement(AsyncImage,{height:40,src:signInIcon,width:40}),D.createElement(rm,{color:"modalText",size:d?"20":"18",textAlign:"center",weight:"heavy"},n.t("sign_in.label"))),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:d?"16":"12"},D.createElement(rm,{color:"modalTextSecondary",size:d?"16":"14",textAlign:"center"},n.t("sign_in.description")),"idle"===o&&i.errorMessage?D.createElement(rm,{color:"error",size:d?"16":"14",textAlign:"center",weight:"bold"},i.errorMessage):null)),D.createElement(tQ,{alignItems:d?void 0:"center",display:"flex",flexDirection:"column",gap:"8",width:"full"},D.createElement(ActionButton,{disabled:!i.nonce||"signing"===o||"verifying"===o,label:i.nonce?"signing"===o?n.t("sign_in.signature.waiting"):"verifying"===o?n.t("sign_in.signature.verifying"):n.t("sign_in.message.send"):n.t("sign_in.message.preparing"),onClick:signIn,size:d?"large":"medium",testId:"auth-message-button"}),d?D.createElement(ActionButton,{label:"Cancel",onClick:e,size:"large",type:"secondary"}):D.createElement(tQ,{as:"button",borderRadius:"full",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",onClick:e,paddingX:"10",paddingY:"5",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"closeButton",size:d?"16":"14",weight:"bold"},n.t("sign_in.message.cancel"))))))}var rg="WALLETCONNECT_DEEPLINK_CHOICE";function clearWalletConnectDeepLink(){localStorage.removeItem(rg)}var ry=(0,D.createContext)(void 0),rv="data-rk",createThemeRootProps=e=>({[rv]:e||""}),createThemeRootSelector=e=>{if(e&&!/^[a-zA-Z0-9_]+$/.test(e))throw Error(`Invalid ID: ${e}`);return e?`[${rv}="${e}"]`:`[${rv}]`},useThemeRootProps=()=>{let e=(0,D.useContext)(ry);return createThemeRootProps(e)},rw=lightTheme();function RainbowKitProvider({appInfo:e,avatar:t,children:n,coolMode:o=!1,id:i,initialChain:s,locale:l,modalSize:c=ru.WIDE,showRecentTransactions:u=!1,theme:d=rw}){if(!function(){let e=useRainbowKitChains(),t=useWalletConnectors(),n="unauthenticated"===useAuthenticationStatus(),o=(0,D.useCallback)(()=>{loadImages(...t.map(e=>e.iconUrl),...e.map(e=>e.iconUrl).filter(isNotNullish)),isMobile()||(preloadAssetsIcon(),preloadLoginIcon()),n&&loadImages(signInIcon)},[t,e,n]);(0,D.useEffect)(()=>{o()},[o])}(),!function(){let e=(0,D.useCallback)(()=>{!function({version:e}){localStorage.setItem("rk-version",e)}({version:"2.0.2"})},[]);(0,D.useEffect)(()=>{e()},[e])}(),useAccountEffect_useAccountEffect({onDisconnect:clearWalletConnectDeepLink}),"function"==typeof d)throw Error('A theme function was provided to the "theme" prop instead of a theme object. You must execute this function to get the resulting theme object.');let p=createThemeRootSelector(i),f={...ri,...e},m=null!=t?t:defaultAvatar;return D.createElement(RainbowKitChainProvider,{initialChain:s},D.createElement(WalletButtonProvider,null,D.createElement(I18nProvider,{locale:l},D.createElement(rl.Provider,{value:o},D.createElement(ModalSizeProvider,{modalSize:c},D.createElement(rp.Provider,{value:u},D.createElement(TransactionStoreProvider,null,D.createElement(tJ.Provider,{value:m},D.createElement(rs.Provider,{value:f},D.createElement(ry.Provider,{value:i},D.createElement(ShowBalanceProvider,null,D.createElement(ModalProvider,null,d?D.createElement("div",{...createThemeRootProps(i)},D.createElement("style",{dangerouslySetInnerHTML:{__html:[`${p}{${cssStringFromTheme("lightMode"in d?d.lightMode:d)}}`,"darkMode"in d?`@media(prefers-color-scheme:dark){${p}{${cssStringFromTheme(d.darkMode,{extends:d.lightMode})}}}`:null].join("")}}),n):n))))))))))))}var moveFocusWithin=(e,t)=>{let n=e.querySelectorAll("button:not(:disabled), a[href]");0!==n.length&&n["end"===t?n.length-1:0].focus()};function FocusTrap(e){let t=(0,D.useRef)(null);return(0,D.useEffect)(()=>{let e=document.activeElement;return()=>{var t;null==(t=e.focus)||t.call(e)}},[]),(0,D.useEffect)(()=>{if(t.current){let e=t.current.querySelector("[data-auto-focus]");e?e.focus():t.current.focus()}},[]),D.createElement(D.Fragment,null,D.createElement("div",{onFocus:(0,D.useCallback)(()=>t.current&&moveFocusWithin(t.current,"end"),[]),tabIndex:0}),D.createElement("div",{ref:t,style:{outline:"none"},tabIndex:-1,...e}),D.createElement("div",{onFocus:(0,D.useCallback)(()=>t.current&&moveFocusWithin(t.current,"start"),[]),tabIndex:0}))}var stopPropagation=e=>e.stopPropagation();function Dialog({children:e,onClose:t,open:n,titleId:o}){(0,D.useEffect)(()=>{let handleEscape=e=>n&&"Escape"===e.key&&t();return document.addEventListener("keydown",handleEscape),()=>document.removeEventListener("keydown",handleEscape)},[n,t]);let[i,s]=(0,D.useState)(!0);(0,D.useEffect)(()=>{s("hidden"!==getComputedStyle(window.document.body).overflow)},[]);let l=(0,D.useCallback)(()=>t(),[t]),c=useThemeRootProps(),u=isMobile();return D.createElement(D.Fragment,null,n?(0,tr.createPortal)(D.createElement(tv,{enabled:i},D.createElement(tQ,{...c},D.createElement(tQ,{...c,alignItems:u?"flex-end":"center","aria-labelledby":o,"aria-modal":!0,className:"_9pm4ki3 ju367v9h ju367vb3 ju367va ju367v2q ju367v8q",onClick:l,position:"fixed",role:"dialog"},D.createElement(FocusTrap,{className:"_9pm4ki5 ju367va ju367v15 ju367v8r",onClick:stopPropagation,role:"document"},e)))),document.body):null)}function DialogContent({bottomSheetOnMobile:e=!1,children:t,marginTop:n,padding:o="16",paddingBottom:i,wide:s=!1}){let l=isMobile(),c=(0,D.useContext)(rd),u=c===ru.COMPACT;return D.createElement(tQ,{marginTop:n},D.createElement(tQ,{className:[s?l?"_1ckjpok2 _1ckjpok1 ju367vb6 ju367vdr ju367vp ju367vt ju367vv ju367vel ju367va ju367v15 ju367v6c ju367v8r":u?"_1ckjpok4 _1ckjpok1 ju367vb6 ju367vdr ju367vp ju367vt ju367vv ju367vel ju367va ju367v15 ju367v6c ju367v8r":"_1ckjpok3 _1ckjpok1 ju367vb6 ju367vdr ju367vp ju367vt ju367vv ju367vel ju367va ju367v15 ju367v6c ju367v8r":"_1ckjpok1 ju367vb6 ju367vdr ju367vp ju367vt ju367vv ju367vel ju367va ju367v15 ju367v6c ju367v8r",l?"_1ckjpok6 ju367vq":null,l&&e?"_1ckjpok7":null].join(" ")},D.createElement(tQ,{padding:o,paddingBottom:null!=i?i:o},t)))}var rC=["k","m","b","t"];function toPrecision(e,t=1){return e.toString().replace(RegExp(`(.+\\.\\d{${t}})\\d+`),"$1").replace(/(\.[1-9]*)0+$/,"$1").replace(/\.$/,"")}function abbreviateETHBalance(e){if(e<1)return toPrecision(e,3);if(e<100)return toPrecision(e,2);if(e<1e4)return new Intl.NumberFormat().format(parseFloat(toPrecision(e,1)));let t=String(e);for(let n=rC.length-1;n>=0;n--){let o=10**((n+1)*3);if(o<=e){t=toPrecision(e=10*e/o/10,1)+rC[n];break}}return t}function formatAddress(e){return e.length<8?e:`${e.substring(0,4)}\u2026${e.substring(e.length-4)}`}function formatENS(e){if(!e)return"";let t=e.split("."),n=t.pop();return t.join(".").length>24?`${t.join(".").substring(0,24)}...`:`${t.join(".")}.${n}`}var CopiedIcon=()=>D.createElement("svg",{fill:"none",height:"13",viewBox:"0 0 13 13",width:"13",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Copied"),D.createElement("path",{d:"M4.94568 12.2646C5.41052 12.2646 5.77283 12.0869 6.01892 11.7109L12.39 1.96973C12.5677 1.69629 12.6429 1.44336 12.6429 1.2041C12.6429 0.561523 12.1644 0.0966797 11.5082 0.0966797C11.057 0.0966797 10.7767 0.260742 10.5033 0.691406L4.9115 9.50977L2.07458 5.98926C1.82166 5.68848 1.54822 5.55176 1.16541 5.55176C0.502319 5.55176 0.0238037 6.02344 0.0238037 6.66602C0.0238037 6.95312 0.112671 7.20605 0.358765 7.48633L3.88611 11.7588C4.18005 12.1074 4.50818 12.2646 4.94568 12.2646Z",fill:"currentColor"})),CopyIcon=()=>D.createElement("svg",{fill:"none",height:"16",viewBox:"0 0 17 16",width:"17",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Copy"),D.createElement("path",{d:"M3.04236 12.3027H4.18396V13.3008C4.18396 14.8525 5.03845 15.7002 6.59705 15.7002H13.6244C15.183 15.7002 16.0375 14.8525 16.0375 13.3008V6.24609C16.0375 4.69434 15.183 3.84668 13.6244 3.84668H12.4828V2.8418C12.4828 1.29688 11.6283 0.442383 10.0697 0.442383H3.04236C1.48376 0.442383 0.629272 1.29004 0.629272 2.8418V9.90332C0.629272 11.4551 1.48376 12.3027 3.04236 12.3027ZM3.23376 10.5391C2.68689 10.5391 2.39294 10.2656 2.39294 9.68457V3.06055C2.39294 2.47949 2.68689 2.21289 3.23376 2.21289H9.8783C10.4252 2.21289 10.7191 2.47949 10.7191 3.06055V3.84668H6.59705C5.03845 3.84668 4.18396 4.69434 4.18396 6.24609V10.5391H3.23376ZM6.78845 13.9365C6.24158 13.9365 5.94763 13.6699 5.94763 13.0889V6.45801C5.94763 5.87695 6.24158 5.61035 6.78845 5.61035H13.433C13.9799 5.61035 14.2738 5.87695 14.2738 6.45801V13.0889C14.2738 13.6699 13.9799 13.9365 13.433 13.9365H6.78845Z",fill:"currentColor"})),DisconnectIcon=()=>D.createElement("svg",{fill:"none",height:"16",viewBox:"0 0 18 16",width:"18",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Disconnect"),D.createElement("path",{d:"M2.67834 15.5908H9.99963C11.5514 15.5908 12.399 14.7432 12.399 13.1777V10.2656H10.6354V12.9863C10.6354 13.5332 10.3688 13.8271 9.78772 13.8271H2.89026C2.3092 13.8271 2.0426 13.5332 2.0426 12.9863V3.15625C2.0426 2.60254 2.3092 2.30859 2.89026 2.30859H9.78772C10.3688 2.30859 10.6354 2.60254 10.6354 3.15625V5.89746H12.399V2.95801C12.399 1.39941 11.5514 0.544922 9.99963 0.544922H2.67834C1.12659 0.544922 0.278931 1.39941 0.278931 2.95801V13.1777C0.278931 14.7432 1.12659 15.5908 2.67834 15.5908ZM7.43616 8.85059H14.0875L15.0924 8.78906L14.566 9.14453L13.6842 9.96484C13.5406 10.1016 13.4586 10.2861 13.4586 10.4844C13.4586 10.8398 13.7321 11.168 14.1217 11.168C14.3199 11.168 14.4635 11.0928 14.6002 10.9561L16.7809 8.68652C16.986 8.48145 17.0543 8.27637 17.0543 8.06445C17.0543 7.85254 16.986 7.64746 16.7809 7.43555L14.6002 5.17285C14.4635 5.03613 14.3199 4.9541 14.1217 4.9541C13.7321 4.9541 13.4586 5.27539 13.4586 5.6377C13.4586 5.83594 13.5406 6.02734 13.6842 6.15723L14.566 6.98438L15.0924 7.33984L14.0875 7.27148H7.43616C7.01917 7.27148 6.65686 7.62012 6.65686 8.06445C6.65686 8.50195 7.01917 8.85059 7.43616 8.85059Z",fill:"currentColor"})),chainToExplorerUrl=e=>{var t,n;return null==(n=null==(t=null==e?void 0:e.blockExplorers)?void 0:t.default)?void 0:n.url},ExternalLinkIcon=()=>D.createElement("svg",{fill:"none",height:"19",viewBox:"0 0 20 19",width:"20",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Link"),D.createElement("path",{d:"M10 18.9443C15.0977 18.9443 19.2812 14.752 19.2812 9.6543C19.2812 4.56543 15.0889 0.373047 10 0.373047C4.90234 0.373047 0.71875 4.56543 0.71875 9.6543C0.71875 14.752 4.91113 18.9443 10 18.9443ZM10 16.6328C6.1416 16.6328 3.03906 13.5215 3.03906 9.6543C3.03906 5.7959 6.13281 2.68457 10 2.68457C13.8584 2.68457 16.9697 5.7959 16.9697 9.6543C16.9785 13.5215 13.8672 16.6328 10 16.6328ZM12.7158 12.1416C13.2432 12.1416 13.5684 11.7549 13.5684 11.1836V7.19336C13.5684 6.44629 13.1377 6.05957 12.417 6.05957H8.40918C7.8291 6.05957 7.45117 6.38477 7.45117 6.91211C7.45117 7.43945 7.8291 7.77344 8.40918 7.77344H9.69238L10.7207 7.63281L9.53418 8.67871L6.73047 11.4912C6.53711 11.6758 6.41406 11.9395 6.41406 12.2031C6.41406 12.7832 6.85352 13.1699 7.39844 13.1699C7.68848 13.1699 7.92578 13.0732 8.1543 12.8623L10.9316 10.0762L11.9775 8.89844L11.8545 9.98828V11.1836C11.8545 11.7725 12.1885 12.1416 12.7158 12.1416Z",fill:"currentColor"})),CancelIcon=()=>D.createElement("svg",{fill:"none",height:"19",viewBox:"0 0 20 19",width:"20",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Cancel"),D.createElement("path",{d:"M10 18.9443C15.0977 18.9443 19.2812 14.752 19.2812 9.6543C19.2812 4.56543 15.0889 0.373047 10 0.373047C4.90234 0.373047 0.71875 4.56543 0.71875 9.6543C0.71875 14.752 4.91113 18.9443 10 18.9443ZM10 16.6328C6.1416 16.6328 3.03906 13.5215 3.03906 9.6543C3.03906 5.7959 6.13281 2.68457 10 2.68457C13.8584 2.68457 16.9697 5.7959 16.9697 9.6543C16.9785 13.5215 13.8672 16.6328 10 16.6328ZM7.29297 13.3018C7.58301 13.3018 7.81152 13.2139 7.99609 13.0205L10 11.0166L12.0127 13.0205C12.1973 13.2051 12.4258 13.3018 12.707 13.3018C13.2432 13.3018 13.6562 12.8887 13.6562 12.3525C13.6562 12.0977 13.5508 11.8691 13.3662 11.6934L11.3535 9.67188L13.375 7.6416C13.5596 7.44824 13.6562 7.22852 13.6562 6.98242C13.6562 6.44629 13.2432 6.0332 12.7158 6.0332C12.4346 6.0332 12.2148 6.12109 12.0215 6.31445L10 8.32715L7.9873 6.32324C7.80273 6.12988 7.58301 6.04199 7.29297 6.04199C6.76562 6.04199 6.35254 6.45508 6.35254 6.99121C6.35254 7.2373 6.44922 7.46582 6.63379 7.6416L8.65527 9.67188L6.63379 11.6934C6.44922 11.8691 6.35254 12.1064 6.35254 12.3525C6.35254 12.8887 6.76562 13.3018 7.29297 13.3018Z",fill:"currentColor"})),SuccessIcon=()=>D.createElement("svg",{fill:"none",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Success"),D.createElement("path",{d:"M10 19.4443C15.0977 19.4443 19.2812 15.252 19.2812 10.1543C19.2812 5.06543 15.0889 0.873047 10 0.873047C4.90234 0.873047 0.71875 5.06543 0.71875 10.1543C0.71875 15.252 4.91113 19.4443 10 19.4443ZM10 17.1328C6.1416 17.1328 3.03906 14.0215 3.03906 10.1543C3.03906 6.2959 6.13281 3.18457 10 3.18457C13.8584 3.18457 16.9697 6.2959 16.9697 10.1543C16.9785 14.0215 13.8672 17.1328 10 17.1328ZM9.07715 14.3379C9.4375 14.3379 9.7627 14.1533 9.97363 13.8369L13.7441 8.00977C13.8848 7.79883 13.9814 7.5791 13.9814 7.36816C13.9814 6.84961 13.5244 6.48926 13.0322 6.48926C12.707 6.48926 12.4258 6.66504 12.2148 7.0166L9.05957 12.0967L7.5918 10.2949C7.37207 10.0225 7.13477 9.9082 6.84473 9.9082C6.33496 9.9082 5.92188 10.3125 5.92188 10.8223C5.92188 11.0684 6.00098 11.2793 6.18555 11.5078L8.1543 13.8545C8.40918 14.1709 8.70801 14.3379 9.07715 14.3379Z",fill:"currentColor"})),getTxStatusIcon=e=>{switch(e){case"pending":default:return SpinnerIcon;case"confirmed":return SuccessIcon;case"failed":return CancelIcon}};function TxItem({tx:e}){let t=isMobile(),n=getTxStatusIcon(e.status),o="failed"===e.status?"error":"accentColor",{chain:i}=(0,_.m)(),s="confirmed"===e.status?"Confirmed":"failed"===e.status?"Failed":"Pending",l=chainToExplorerUrl(i);return D.createElement(D.Fragment,null,D.createElement(tQ,{...l?{as:"a",background:{hover:"profileForeground"},borderRadius:"menuButton",className:touchableStyles({active:"shrink"}),href:`${l}/tx/${e.hash}`,rel:"noreferrer noopener",target:"_blank",transition:"default"}:{},color:"modalText",display:"flex",flexDirection:"row",justifyContent:"space-between",padding:"8",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:t?"16":"14"},D.createElement(tQ,{color:o},D.createElement(n,null)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:t?"3":"1"},D.createElement(tQ,null,D.createElement(rm,{color:"modalText",font:"body",size:t?"16":"14",weight:"bold"},null==e?void 0:e.description)),D.createElement(tQ,null,D.createElement(rm,{color:"pending"===e.status?"modalTextSecondary":o,font:"body",size:"14",weight:t?"medium":"regular"},s)))),l&&D.createElement(tQ,{alignItems:"center",color:"modalTextDim",display:"flex"},D.createElement(ExternalLinkIcon,null))))}function TxList({address:e}){let t=useRecentTransactions(),n=function(){let e=useTransactionStore(),{address:t}=(0,_.m)(),n=dist_useChainId();return(0,D.useCallback)(()=>{if(!t||!n)throw Error("No address or chain ID found");e.clearTransactions(t,n)},[e,t,n])}(),{chain:o}=(0,_.m)(),i=chainToExplorerUrl(o),s=t.slice(0,3),l=s.length>0,c=isMobile(),{appName:u}=(0,D.useContext)(rs),{i18n:d}=(0,D.useContext)(tY);return D.createElement(D.Fragment,null,D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"10",paddingBottom:"2",paddingTop:"16",paddingX:c?"8":"18"},l&&D.createElement(tQ,{paddingBottom:c?"4":"0",paddingTop:"8",paddingX:c?"12":"6"},D.createElement(tQ,{display:"flex",justifyContent:"space-between"},D.createElement(rm,{color:"modalTextSecondary",size:c?"16":"14",weight:"semibold"},d.t("profile.transactions.recent.title")),D.createElement(tQ,{style:{marginBottom:-6,marginLeft:-10,marginRight:-10,marginTop:-6}},D.createElement(tQ,{as:"button",background:{hover:"profileForeground"},borderRadius:"actionButton",className:touchableStyles({active:"shrink"}),onClick:n,paddingX:c?"8":"12",paddingY:c?"4":"5",transition:"default",type:"button"},D.createElement(rm,{color:"modalTextSecondary",size:c?"16":"14",weight:"semibold"},d.t("profile.transactions.clear.label")))))),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},l?s.map(e=>D.createElement(TxItem,{key:e.hash,tx:e})):D.createElement(D.Fragment,null,D.createElement(tQ,{padding:c?"12":"8"},D.createElement(rm,{color:"modalTextDim",size:c?"16":"14",weight:c?"medium":"bold"},u?d.t("profile.transactions.description",{appName:u}):d.t("profile.transactions.description_fallback"))),c&&D.createElement(tQ,{background:"generalBorderDim",height:"1",marginX:"12",marginY:"8"})))),i&&D.createElement(tQ,{paddingBottom:"18",paddingX:c?"8":"18"},D.createElement(tQ,{alignItems:"center",as:"a",background:{hover:"profileForeground"},borderRadius:"menuButton",className:touchableStyles({active:"shrink"}),color:"modalTextDim",display:"flex",flexDirection:"row",href:`${i}/address/${e}`,justifyContent:"space-between",paddingX:"8",paddingY:"12",rel:"noreferrer noopener",style:{willChange:"transform"},target:"_blank",transition:"default",width:"full",...c?{paddingLeft:"12"}:{}},D.createElement(rm,{color:"modalText",font:"body",size:c?"16":"14",weight:c?"semibold":"bold"},d.t("profile.explorer.label")),D.createElement(ExternalLinkIcon,null))))}function ProfileDetailsAction({action:e,icon:t,label:n,testId:o,url:i}){let s=isMobile();return D.createElement(tQ,{...i?{as:"a",href:i,rel:"noreferrer noopener",target:"_blank"}:{as:"button",type:"button"},background:{base:"profileAction",...s?{}:{hover:"profileActionHover"}},borderRadius:"menuButton",boxShadow:"profileDetailsAction",className:touchableStyles({active:"shrinkSm",hover:s?void 0:"grow"}),display:"flex",onClick:e,padding:s?"6":"8",style:{willChange:"transform"},testId:o,transition:"default",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"1",justifyContent:"center",paddingTop:"2",width:"full"},D.createElement(tQ,{color:"modalText",height:"max"},t),D.createElement(tQ,null,D.createElement(rm,{color:"modalText",size:s?"12":"13",weight:"semibold"},n))))}function ProfileDetails({address:e,ensAvatar:t,ensName:n,onClose:o,onDisconnect:i}){let s=(0,D.useContext)(rp),{data:l}=useBalance({address:e}),[c,u]=(0,D.useState)(!1),d=(0,D.useCallback)(()=>{e&&(navigator.clipboard.writeText(e),u(!0))},[e]);if((0,D.useEffect)(()=>{if(c){let e=setTimeout(()=>{u(!1)},1500);return()=>clearTimeout(e)}},[c]),!e)return null;let p=n?formatENS(n):formatAddress(e),f=null==l?void 0:l.formatted,m=f?abbreviateETHBalance(parseFloat(f)):void 0,b="rk_profile_title",g=isMobile(),{i18n:y}=(0,D.useContext)(tY);return D.createElement(D.Fragment,null,D.createElement(tQ,{display:"flex",flexDirection:"column"},D.createElement(tQ,{background:"profileForeground",padding:"16"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:g?"16":"12",justifyContent:"center",margin:"8",style:{textAlign:"center"}},D.createElement(tQ,{style:{position:"absolute",right:16,top:16,willChange:"transform"}},D.createElement(CloseButton,{onClose:o}))," ",D.createElement(tQ,{marginTop:g?"24":"0"},D.createElement(Avatar,{address:e,imageUrl:t,size:g?82:74})),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:g?"4":"0",textAlign:"center"},D.createElement(tQ,{textAlign:"center"},D.createElement(rm,{as:"h1",color:"modalText",id:b,size:g?"20":"18",weight:"heavy"},p)),!!l&&D.createElement(tQ,{textAlign:"center"},D.createElement(rm,{as:"h1",color:"modalTextSecondary",id:b,size:g?"16":"14",weight:"semibold"},m," ",l.symbol)))),D.createElement(tQ,{display:"flex",flexDirection:"row",gap:"8",margin:"2",marginTop:"16"},D.createElement(ProfileDetailsAction,{action:d,icon:c?D.createElement(CopiedIcon,null):D.createElement(CopyIcon,null),label:c?y.t("profile.copy_address.copied"):y.t("profile.copy_address.label")}),D.createElement(ProfileDetailsAction,{action:i,icon:D.createElement(DisconnectIcon,null),label:y.t("profile.disconnect.label"),testId:"disconnect-button"}))),s&&D.createElement(D.Fragment,null,D.createElement(tQ,{background:"generalBorder",height:"1",marginTop:"-1"}),D.createElement(tQ,null,D.createElement(TxList,{address:e})))))}function AccountModal({onClose:e,open:t}){let{address:n}=(0,_.m)(),o=useMainnetEnsName(n),i=useMainnetEnsAvatar(o),{disconnect:s}=useDisconnect();return n?D.createElement(D.Fragment,null,n&&D.createElement(Dialog,{onClose:e,open:t,titleId:"rk_account_modal_title"},D.createElement(DialogContent,{bottomSheetOnMobile:!0,padding:"0"},D.createElement(ProfileDetails,{address:n,ensAvatar:i,ensName:o,onClose:e,onDisconnect:s})))):null}var DisconnectSqIcon=({size:e})=>D.createElement("svg",{fill:"none",height:e,viewBox:"0 0 28 28",width:e,xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Disconnect"),D.createElement("path",{d:"M6.742 22.195h8.367c1.774 0 2.743-.968 2.743-2.758V16.11h-2.016v3.11c0 .625-.305.96-.969.96H6.984c-.664 0-.968-.335-.968-.96V7.984c0-.632.304-.968.968-.968h7.883c.664 0 .969.336.969.968v3.133h2.016v-3.36c0-1.78-.97-2.757-2.743-2.757H6.742C4.97 5 4 5.977 4 7.758v11.68c0 1.789.969 2.757 2.742 2.757Zm5.438-7.703h7.601l1.149-.07-.602.406-1.008.938a.816.816 0 0 0-.258.593c0 .407.313.782.758.782.227 0 .39-.086.547-.243l2.492-2.593c.235-.235.313-.47.313-.711 0-.242-.078-.477-.313-.719l-2.492-2.586c-.156-.156-.32-.25-.547-.25-.445 0-.758.367-.758.781 0 .227.094.446.258.594l1.008.945.602.407-1.149-.079H12.18a.904.904 0 0 0 0 1.805Z",fill:"currentColor"})),rE=D.forwardRef(({children:e,currentlySelected:t=!1,onClick:n,testId:o,...i},s)=>{let l=isMobile();return D.createElement(tQ,{as:"button",borderRadius:"menuButton",disabled:t,display:"flex",onClick:n,ref:s,testId:o,type:"button"},D.createElement(tQ,{borderRadius:"menuButton",className:[l?"v9horb0":void 0,!t&&touchableStyles({active:"shrink"})],padding:l?"8":"6",transition:"default",width:"full",...t?{background:"accentColor",borderColor:"selectedOptionBorder",borderStyle:"solid",borderWidth:"1",boxShadow:"selectedOption",color:"accentColorForeground"}:{background:{hover:"menuItemBackground"},color:"modalText",transition:"default"},...i},e))});rE.displayName="MenuButton";var Chain_default=({chainId:e,currentChainId:t,switchChain:n,chainIconSize:o,isLoading:i,src:s,name:l,iconBackground:c,idx:u})=>{let d=isMobile(),{i18n:p}=(0,D.useContext)(tY),f=useRainbowKitChains(),m=t===e;return D.createElement(D.Fragment,null,D.createElement(rE,{currentlySelected:m,onClick:m?void 0:()=>n({chainId:e}),testId:`chain-option-${e}`},D.createElement(tQ,{fontFamily:"body",fontSize:"16",fontWeight:"bold"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",justifyContent:"space-between"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"4",height:o},s&&D.createElement(tQ,{height:"full",marginRight:"8"},D.createElement(AsyncImage,{alt:l,background:c,borderRadius:"full",height:o,src:s,width:o,testId:`chain-option-${e}-icon`})),D.createElement("div",null,l)),m&&D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",marginRight:"6"},D.createElement(rm,{color:"accentColorForeground",size:"14",weight:"medium"},p.t("chains.connected")),D.createElement(tQ,{background:"connectionIndicator",borderColor:"selectedOptionBorder",borderRadius:"full",borderStyle:"solid",borderWidth:"1",height:"8",marginLeft:"8",width:"8"})),i&&D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",marginRight:"6"},D.createElement(rm,{color:"modalText",size:"14",weight:"medium"},p.t("chains.confirm")),D.createElement(tQ,{background:"standby",borderRadius:"full",height:"8",marginLeft:"8",width:"8"}))))),d&&uswitchChain(n,e),mutationKey:["switchChain"]});return{...s,chains:function(e={}){let t=(0,z.Z)(e);return(0,D.useSyncExternalStore)(e=>(function(e,t){let{onChange:n}=t;return e._internal.chains.subscribe((e,t)=>{n(e,t)})})(t,{onChange:e}),()=>getChains(t),()=>getChains(t))}({config:n}),switchChain:o,switchChainAsync:i}}({mutation:{onMutate:({chainId:e})=>{s(e)},onSuccess:()=>{i&&s(null)},onError:()=>{i&&s(null)},onSettled:()=>{e()}}}),{i18n:c}=(0,D.useContext)(tY),{disconnect:u}=useDisconnect(),d="rk_chain_modal_title",p=isMobile(),f=o.some(e=>e.id===n),m=p?"36":"28",b=useRainbowKitChains();return n?D.createElement(Dialog,{onClose:e,open:t,titleId:d},D.createElement(DialogContent,{bottomSheetOnMobile:!0,paddingBottom:"0"},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"14"},D.createElement(tQ,{display:"flex",flexDirection:"row",justifyContent:"space-between"},p&&D.createElement(tQ,{width:"30"}),D.createElement(tQ,{paddingBottom:"0",paddingLeft:"8",paddingTop:"4"},D.createElement(rm,{as:"h1",color:"modalText",id:d,size:p?"20":"18",weight:"heavy"},c.t("chains.title"))),D.createElement(CloseButton,{onClose:e})),!f&&D.createElement(tQ,{marginX:"8",textAlign:p?"center":"left"},D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},c.t("chains.wrong_network"))),D.createElement(tQ,{className:p?"_18dqw9x1":"_18dqw9x0",display:"flex",flexDirection:"column",gap:"4",padding:"2",paddingBottom:"16"},b.map(({iconBackground:e,iconUrl:t,id:o,name:s},c)=>D.createElement(Chain_default,{key:o,chainId:o,currentChainId:n,switchChain:l,chainIconSize:m,isLoading:i===o,src:t,name:s,iconBackground:e,idx:c})),!f&&D.createElement(D.Fragment,null,D.createElement(tQ,{background:"generalBorderDim",height:"1",marginX:"8"}),D.createElement(rE,{onClick:()=>u(),testId:"chain-option-disconnect"},D.createElement(tQ,{color:"error",fontFamily:"body",fontSize:"16",fontWeight:"bold"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",justifyContent:"space-between"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"4",height:m},D.createElement(tQ,{alignItems:"center",color:"error",height:m,justifyContent:"center",marginRight:"8"},D.createElement(DisconnectSqIcon,{size:Number(m)})),D.createElement("div",null,c.t("chains.disconnect"))))))))))):null}var DisclaimerLink=({children:e,href:t})=>D.createElement(tQ,{as:"a",color:"accentColor",href:t,rel:"noreferrer",target:"_blank"},e),DisclaimerText=({children:e})=>D.createElement(rm,{color:"modalTextSecondary",size:"12",weight:"medium"},e);function ConnectModalIntro({compactModeEnabled:e=!1,getWallet:t}){let{disclaimer:n,learnMoreUrl:o}=(0,D.useContext)(rs),{i18n:i}=(0,D.useContext)(tY);return D.createElement(D.Fragment,null,D.createElement(tQ,{alignItems:"center",color:"accentColor",display:"flex",flexDirection:"column",height:"full",justifyContent:"space-around"},D.createElement(tQ,{marginBottom:"10"},!e&&D.createElement(rm,{color:"modalText",size:"18",weight:"heavy"},i.t("intro.title"))),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"32",justifyContent:"center",marginY:"20",style:{maxWidth:312}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16"},D.createElement(tQ,{borderRadius:"6",height:"48",minWidth:"48",width:"48"},D.createElement(AssetsIcon,null)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},i.t("intro.digital_asset.title")),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},i.t("intro.digital_asset.description")))),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16"},D.createElement(tQ,{borderRadius:"6",height:"48",minWidth:"48",width:"48"},D.createElement(LoginIcon,null)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},i.t("intro.login.title")),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},i.t("intro.login.description"))))),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"12",justifyContent:"center",margin:"10"},D.createElement(ActionButton,{label:i.t("intro.get.label"),onClick:t}),D.createElement(tQ,{as:"a",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",href:o,paddingX:"12",paddingY:"4",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},i.t("intro.learn_more.label")))),n&&!e&&D.createElement(tQ,{marginBottom:"8",marginTop:"12",textAlign:"center"},D.createElement(n,{Link:DisclaimerLink,Text:DisclaimerText}))))}var BackIcon=()=>D.createElement("svg",{fill:"none",height:"17",viewBox:"0 0 11 17",width:"11",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Back"),D.createElement("path",{d:"M0.99707 8.6543C0.99707 9.08496 1.15527 9.44531 1.51562 9.79688L8.16016 16.3096C8.43262 16.5732 8.74902 16.7051 9.13574 16.7051C9.90918 16.7051 10.5508 16.0811 10.5508 15.3076C10.5508 14.9121 10.3838 14.5605 10.0938 14.2705L4.30176 8.64551L10.0938 3.0293C10.3838 2.74805 10.5508 2.3877 10.5508 2.00098C10.5508 1.23633 9.90918 0.603516 9.13574 0.603516C8.74902 0.603516 8.43262 0.735352 8.16016 0.999023L1.51562 7.51172C1.15527 7.85449 1.00586 8.21484 0.99707 8.6543Z",fill:"currentColor"})),InfoIcon=()=>D.createElement("svg",{fill:"none",height:"12",viewBox:"0 0 8 12",width:"8",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Info"),D.createElement("path",{d:"M3.64258 7.99609C4.19336 7.99609 4.5625 7.73828 4.68555 7.24609C4.69141 7.21094 4.70312 7.16406 4.70898 7.13477C4.80859 6.60742 5.05469 6.35547 6.04492 5.76367C7.14648 5.10156 7.67969 4.3457 7.67969 3.24414C7.67969 1.39844 6.17383 0.255859 3.95898 0.255859C2.32422 0.255859 1.05859 0.894531 0.548828 1.86719C0.396484 2.14844 0.320312 2.44727 0.320312 2.74023C0.314453 3.37305 0.742188 3.79492 1.42188 3.79492C1.91406 3.79492 2.33594 3.54883 2.53516 3.11523C2.78711 2.47656 3.23242 2.21289 3.83594 2.21289C4.55664 2.21289 5.10742 2.65234 5.10742 3.29102C5.10742 3.9707 4.7793 4.29883 3.81836 4.87891C3.02148 5.36523 2.50586 5.92773 2.50586 6.76562V6.90039C2.50586 7.55664 2.96289 7.99609 3.64258 7.99609ZM3.67188 11.4473C4.42773 11.4473 5.04297 10.8672 5.04297 10.1406C5.04297 9.41406 4.42773 8.83984 3.67188 8.83984C2.91602 8.83984 2.30664 9.41406 2.30664 10.1406C2.30664 10.8672 2.91602 11.4473 3.67188 11.4473Z",fill:"currentColor"})),InfoButton=({"aria-label":e="Info",onClick:t})=>{let n=isMobile();return D.createElement(tQ,{alignItems:"center","aria-label":e,as:"button",background:"closeButtonBackground",borderColor:"actionButtonBorder",borderRadius:"full",borderStyle:"solid",borderWidth:n?"0":"1",className:touchableStyles({active:"shrinkSm",hover:"growLg"}),color:"closeButton",display:"flex",height:n?"30":"28",justifyContent:"center",onClick:t,style:{willChange:"transform"},transition:"default",type:"button",width:n?"30":"28"},D.createElement(InfoIcon,null))},useCoolMode=e=>{let t=(0,D.useRef)(null),n=(0,D.useContext)(rl),o=useAsyncImage(e);return(0,D.useEffect)(()=>{if(n&&t.current&&o)return function(e,t){let n;rx++;let o=[15,20,25,35,45],i=[],s=!1,l=0,c=0,u=getContainer();!function loop(){s&&i.length<35&&function(){let e=o[Math.floor(Math.random()*o.length)],n=360*Math.random(),s=c-e/2,d=l-e/2,p=document.createElement("div");p.innerHTML=``,p.setAttribute("style",`position:absolute;will-change:transform;top:${s}px;left:${d}px;transform:rotate(${n}deg)`),u.appendChild(p),i.push({direction:.5>=Math.random()?-1:1,element:p,left:d,size:e,speedHorz:10*Math.random(),speedUp:25*Math.random(),spinSpeed:35*Math.random()*(.5>=Math.random()?-1:1),spinVal:n,top:s})}(),function(){for(let e of i)e.left=e.left-e.speedHorz*e.direction,e.top=e.top-e.speedUp,e.speedUp=Math.min(e.size,e.speedUp-1),e.spinVal=e.spinVal+e.spinSpeed,e.top>=Math.max(window.innerHeight,document.body.clientHeight)+e.size&&(i=i.filter(t=>t!==e),e.element.remove()),e.element.setAttribute("style",`position:absolute;will-change:transform;top:${e.top}px;left:${e.left}px;transform:rotate(${e.spinVal}deg)`)}(),n=requestAnimationFrame(loop)}();let d="ontouchstart"in window||navigator.msMaxTouchPoints,p=d?"touchstart":"mousedown",f=d?"touchend":"mouseup",m=d?"touchmove":"mousemove",updateMousePosition=e=>{var t,n;"touches"in e?(l=null==(t=e.touches)?void 0:t[0].clientX,c=null==(n=e.touches)?void 0:n[0].clientY):(l=e.clientX,c=e.clientY)},tapHandler=e=>{updateMousePosition(e),s=!0},disableAutoAddParticle=()=>{s=!1};return e.addEventListener(m,updateMousePosition,{passive:!1}),e.addEventListener(p,tapHandler),e.addEventListener(f,disableAutoAddParticle),e.addEventListener("mouseleave",disableAutoAddParticle),()=>{e.removeEventListener(m,updateMousePosition),e.removeEventListener(p,tapHandler),e.removeEventListener(f,disableAutoAddParticle),e.removeEventListener("mouseleave",disableAutoAddParticle);let t=setInterval(()=>{n&&0===i.length&&(cancelAnimationFrame(n),clearInterval(t),0==--rx&&u.remove())},500)}}(t.current,o)},[n,o]),t},getContainer=()=>{let e="_rk_coolMode",t=document.getElementById(e);if(t)return t;let n=document.createElement("div");return n.setAttribute("id",e),n.setAttribute("style","overflow:hidden;position:fixed;height:100%;top:0;left:0;right:0;bottom:0;pointer-events:none;z-index:2147483647"),document.body.appendChild(n),n},rx=0,ModalSelection=({as:e="button",currentlySelected:t=!1,iconBackground:n,iconUrl:o,name:i,onClick:s,ready:l,recent:c,testId:u,isRainbowKitConnector:d,...p})=>{let f=useCoolMode(o),[m,b]=(0,D.useState)(!1),{i18n:g}=(0,D.useContext)(tY);return D.createElement(tQ,{display:"flex",flexDirection:"column",onMouseEnter:()=>b(!0),onMouseLeave:()=>b(!1),ref:f},D.createElement(tQ,{as:e,borderRadius:"menuButton",borderStyle:"solid",borderWidth:"1",className:t?void 0:["g5kl0l0",touchableStyles({active:"shrink"})],disabled:t,onClick:s,padding:"5",style:{willChange:"transform"},testId:u,transition:"default",width:"full",...t?{background:"accentColor",borderColor:"selectedOptionBorder",boxShadow:"selectedWallet"}:{background:{hover:"menuItemBackground"}},...p},D.createElement(tQ,{color:t?"accentColorForeground":"modalText",disabled:!l,fontFamily:"body",fontSize:"16",fontWeight:"bold",transition:"default"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"12"},D.createElement(AsyncImage,{background:n,...!m&&d?{borderColor:"actionButtonBorder"}:{},useAsImage:!d,borderRadius:"6",height:"28",src:o,width:"28"}),D.createElement(tQ,null,D.createElement(tQ,{style:{marginTop:c?-2:void 0},maxWidth:"200"},i),c&&D.createElement(rm,{color:t?"accentColorForeground":"accentColor",size:"12",style:{lineHeight:1,marginTop:-1},weight:"medium"},g.t("connect.recent")))))))};ModalSelection.displayName="ModalSelection";var rA="rk-latest-id",convertHexToRGBA=(e,t=1)=>{let n=e.replace("#","");3===n.length&&(n=`${n[0]}${n[0]}${n[1]}${n[1]}${n[2]}${n[2]}`);let o=parseInt(n.substring(0,2),16),i=parseInt(n.substring(2,4),16),s=parseInt(n.substring(4,6),16);return t>1&&t<=100&&(t/=100),`rgba(${o},${i},${s},${t})`},getGradientRGBAs=e=>e?[convertHexToRGBA(e,.2),convertHexToRGBA(e,.14),convertHexToRGBA(e,.1)]:null,isHexString=e=>/^#([0-9a-f]{3}){1,2}$/i.test(e),src3=async()=>(await n.e(9600).then(n.bind(n,99600))).default,preloadConnectIcon=()=>loadImages(src3),ConnectIcon=()=>D.createElement(AsyncImage,{background:"#515a70",borderColor:"generalBorder",borderRadius:"10",height:"48",src:src3,width:"48"}),src4=async()=>(await n.e(8137).then(n.bind(n,68137))).default,preloadCreateIcon=()=>loadImages(src4),CreateIcon=()=>D.createElement(AsyncImage,{background:"#e3a5e8",borderColor:"generalBorder",borderRadius:"10",height:"48",src:src4,width:"48"}),src5=async()=>(await n.e(1748).then(n.bind(n,31748))).default,preloadRefreshIcon=()=>loadImages(src5),RefreshIcon=()=>D.createElement(AsyncImage,{background:"#515a70",borderColor:"generalBorder",borderRadius:"10",height:"48",src:src5,width:"48"}),src6=async()=>(await n.e(5806).then(n.bind(n,75806))).default,preloadScanIcon=()=>loadImages(src6),ScanIcon=()=>D.createElement(AsyncImage,{background:"#515a70",borderColor:"generalBorder",borderRadius:"10",height:"48",src:src6,width:"48"}),generateMatrix=(e,t)=>{let n=Array.prototype.slice.call(tB.create(e,{errorCorrectionLevel:t}).modules.data,0),o=Math.sqrt(n.length);return n.reduce((e,t,n)=>(n%o==0?e.push([t]):e[e.length-1].push(t))&&e,[])};function QRCode({ecl:e="M",logoBackground:t,logoMargin:n=10,logoSize:o=50,logoUrl:i,size:s=200,uri:l}){let c=s-2*parseInt("20",10),u=(0,D.useMemo)(()=>{let t=[],n=generateMatrix(l,e),i=c/n.length;[{x:0,y:0},{x:1,y:0},{x:0,y:1}].forEach(({x:e,y:o})=>{let s=(n.length-7)*i*e,l=(n.length-7)*i*o;for(let n=0;n<3;n++)t.push(D.createElement("rect",{fill:n%2!=0?"white":"black",height:i*(7-2*n),key:`${n}-${e}-${o}`,rx:-((n-2)*5)+(0===n?2:0),ry:-((n-2)*5)+(0===n?2:0),width:i*(7-2*n),x:s+i*n,y:l+i*n}))});let s=Math.floor((o+25)/i),u=n.length/2-s/2,d=n.length/2+s/2-1;return n.forEach((e,o)=>{e.forEach((e,s)=>{!n[o][s]||o<7&&s<7||o>n.length-8&&s<7||o<7&&s>n.length-8||o>u&&ou&&s{let e=getBrowser();switch(e){case"Arc":return(await n.e(6328).then(n.bind(n,76328))).default;case"Brave":return(await n.e(6551).then(n.bind(n,86551))).default;case"Chrome":return(await n.e(7682).then(n.bind(n,57682))).default;case"Edge":return(await n.e(934).then(n.bind(n,60934))).default;case"Firefox":return(await n.e(9223).then(n.bind(n,99223))).default;case"Opera":return(await n.e(9941).then(n.bind(n,89941))).default;case"Safari":return(await n.e(2604).then(n.bind(n,62604))).default;default:return(await n.e(2746).then(n.bind(n,92746))).default}},preloadBrowserIcon=()=>loadImages(getBrowserSrc),getPlatformSrc=async()=>{let e=getPlatform();switch(e){case"Windows":return(await n.e(5710).then(n.bind(n,35710))).default;case"macOS":return(await n.e(8906).then(n.bind(n,8906))).default;default:return(await n.e(8366).then(n.bind(n,78366))).default}},preloadPlatformIcon=()=>loadImages(getPlatformSrc);function GetDetail({getWalletDownload:e,compactModeEnabled:t}){let n=useWalletConnectors().filter(e=>e.isRainbowKitConnector),o=n.splice(0,5),{i18n:i}=(0,D.useContext)(tY);return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",marginTop:"18",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"28",height:"full",width:"full"},null==o?void 0:o.filter(e=>{var t;return e.extensionDownloadUrl||e.desktopDownloadUrl||e.qrCode&&(null==(t=e.downloadUrls)?void 0:t.qrCode)}).map(t=>{let{downloadUrls:n,iconBackground:o,iconUrl:s,id:l,name:c,qrCode:u}=t,d=(null==n?void 0:n.qrCode)&&u,p=!!t.extensionDownloadUrl,f=(null==n?void 0:n.qrCode)&&p,m=(null==n?void 0:n.qrCode)&&!!t.desktopDownloadUrl;return D.createElement(tQ,{alignItems:"center",display:"flex",gap:"16",justifyContent:"space-between",key:t.id,width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16"},D.createElement(AsyncImage,{background:o,borderColor:"actionButtonBorder",borderRadius:"10",height:"48",src:s,width:"48"}),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"2"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},c),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},f?i.t("get.mobile_and_extension.description"):m?i.t("get.mobile_and_desktop.description"):d?i.t("get.mobile.description"):p?i.t("get.extension.description"):null))),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(ActionButton,{label:i.t("get.action.label"),onClick:()=>e(l),type:"secondary"})))})),D.createElement(tQ,{alignItems:"center",borderRadius:"10",display:"flex",flexDirection:"column",gap:"8",justifyContent:"space-between",marginBottom:"4",paddingY:"8",style:{maxWidth:275,textAlign:"center"}},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},i.t("get.looking_for.title")),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},t?i.t("get.looking_for.desktop.compact_description"):i.t("get.looking_for.desktop.wide_description"))))}function ConnectDetail({changeWalletStep:e,compactModeEnabled:t,connectionError:n,onClose:o,qrCodeUri:i,reconnect:s,wallet:l}){let{downloadUrls:c,iconBackground:u,iconUrl:d,name:p,qrCode:f,ready:m,showWalletConnectModal:b,getDesktopUri:g}=l,y=!!g,v=isSafari(),{i18n:w}=(0,D.useContext)(tY),C=!!l.extensionDownloadUrl,E=(null==c?void 0:c.qrCode)&&C,x=(null==c?void 0:c.qrCode)&&!!l.desktopDownloadUrl,A=f&&i,onDesktopUri=async()=>{let e=await (null==g?void 0:g());window.open(e,v?"_blank":"_self")},k=b?{description:t?w.t("connect.walletconnect.description.compact"):w.t("connect.walletconnect.description.full"),label:w.t("connect.walletconnect.open.label"),onClick:()=>{o(),b()}}:A?{description:w.t("connect.secondary_action.get.description",{wallet:p}),label:w.t("connect.secondary_action.get.label"),onClick:()=>e(E||x?"DOWNLOAD_OPTIONS":"DOWNLOAD")}:null,{width:B}=useWindowSize();return(0,D.useEffect)(()=>{preloadBrowserIcon(),preloadPlatformIcon()},[]),D.createElement(tQ,{display:"flex",flexDirection:"column",height:"full",width:"full"},A?D.createElement(tQ,{alignItems:"center",display:"flex",height:"full",justifyContent:"center"},D.createElement(QRCode,{logoBackground:u,logoSize:t?60:72,logoUrl:d,size:t?318:B&&B<768?Math.max(280,Math.min(B-308,382)):382,uri:i})):D.createElement(tQ,{alignItems:"center",display:"flex",justifyContent:"center",style:{flexGrow:1}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"8"},D.createElement(tQ,{borderRadius:"10",height:"44",overflow:"hidden"},D.createElement(AsyncImage,{useAsImage:!l.isRainbowKitConnector,height:"44",src:d,width:"44"})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"4",paddingX:"32",style:{textAlign:"center"}},D.createElement(rm,{color:"modalText",size:"18",weight:"bold"},m?w.t("connect.status.opening",{wallet:p}):C?w.t("connect.status.not_installed",{wallet:p}):w.t("connect.status.not_available",{wallet:p})),!m&&C?D.createElement(tQ,{paddingTop:"20"},D.createElement(ActionButton,{href:l.extensionDownloadUrl,label:w.t("connect.secondary_action.install.label"),type:"secondary"})):null,m&&!A&&D.createElement(D.Fragment,null,D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",justifyContent:"center"},D.createElement(rm,{color:"modalTextSecondary",size:"14",textAlign:"center",weight:"medium"},w.t("connect.status.confirm"))),D.createElement(tQ,{alignItems:"center",color:"modalText",display:"flex",flexDirection:"row",height:"32",marginTop:"8"},n?D.createElement(ActionButton,{label:w.t("connect.secondary_action.retry.label"),onClick:async()=>{y&&onDesktopUri(),s(l)}}):D.createElement(tQ,{color:"modalTextSecondary"},D.createElement(SpinnerIcon,null))))))),D.createElement(tQ,{alignItems:"center",borderRadius:"10",display:"flex",flexDirection:"row",gap:"8",height:"28",justifyContent:"space-between",marginTop:"12"},m&&k&&D.createElement(D.Fragment,null,D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},k.description),D.createElement(ActionButton,{label:k.label,onClick:k.onClick,type:"secondary"}))))}var DownloadOptionsBox=({actionLabel:e,description:t,iconAccent:n,iconBackground:o,iconUrl:i,isCompact:s,onAction:l,title:c,url:u,variant:d})=>{let p="browser"===d,f=!p&&n&&getGradientRGBAs(n);return D.createElement(tQ,{alignItems:"center",borderRadius:"13",display:"flex",justifyContent:"center",overflow:"hidden",paddingX:s?"18":"44",position:"relative",style:{flex:1,isolation:"isolate"},width:"full"},D.createElement(tQ,{borderColor:"actionButtonBorder",borderRadius:"13",borderStyle:"solid",borderWidth:"1",style:{bottom:"0",left:"0",position:"absolute",right:"0",top:"0",zIndex:1}}),p&&D.createElement(tQ,{background:"downloadTopCardBackground",height:"full",position:"absolute",style:{zIndex:0},width:"full"},D.createElement(tQ,{display:"flex",flexDirection:"row",justifyContent:"space-between",style:{bottom:"0",filter:"blur(20px)",left:"0",position:"absolute",right:"0",top:"0",transform:"translate3d(0, 0, 0)"}},D.createElement(tQ,{style:{filter:"blur(100px)",marginLeft:-27,marginTop:-20,opacity:.6,transform:"translate3d(0, 0, 0)"}},D.createElement(AsyncImage,{borderRadius:"full",height:"200",src:i,width:"200"})),D.createElement(tQ,{style:{filter:"blur(100px)",marginRight:0,marginTop:105,opacity:.6,overflow:"auto",transform:"translate3d(0, 0, 0)"}},D.createElement(AsyncImage,{borderRadius:"full",height:"200",src:i,width:"200"})))),!p&&f&&D.createElement(tQ,{background:"downloadBottomCardBackground",style:{bottom:"0",left:"0",position:"absolute",right:"0",top:"0"}},D.createElement(tQ,{position:"absolute",style:{background:`radial-gradient(50% 50% at 50% 50%, ${f[0]} 0%, ${f[1]} 25%, rgba(0,0,0,0) 100%)`,height:564,left:-215,top:-197,transform:"translate3d(0, 0, 0)",width:564}}),D.createElement(tQ,{position:"absolute",style:{background:`radial-gradient(50% 50% at 50% 50%, ${f[2]} 0%, rgba(0, 0, 0, 0) 100%)`,height:564,left:-1,top:-76,transform:"translate3d(0, 0, 0)",width:564}})),D.createElement(tQ,{alignItems:"flex-start",display:"flex",flexDirection:"row",gap:"24",height:"max",justifyContent:"center",style:{zIndex:1}},D.createElement(tQ,null,D.createElement(AsyncImage,{height:"60",src:i,width:"60",...o?{background:o,borderColor:"generalBorder",borderRadius:"10"}:null})),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4",style:{flex:1},width:"full"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},c),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},t),D.createElement(tQ,{marginTop:"14",width:"max"},D.createElement(ActionButton,{href:u,label:e,onClick:l,size:"medium"})))))};function DownloadOptionsDetail({changeWalletStep:e,wallet:t}){let n=getBrowser(),o=getPlatform(),i=(0,D.useContext)(rd),s="compact"===i,{desktop:l,desktopDownloadUrl:c,extension:u,extensionDownloadUrl:d,mobileDownloadUrl:p}=t,{i18n:f}=(0,D.useContext)(tY);return(0,D.useEffect)(()=>{preloadCreateIcon(),preloadScanIcon(),preloadRefreshIcon(),preloadConnectIcon()},[]),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"24",height:"full",marginBottom:"8",marginTop:"4",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"8",height:"full",justifyContent:"center",width:"full"},d&&D.createElement(DownloadOptionsBox,{actionLabel:f.t("get_options.extension.download.label",{browser:n}),description:f.t("get_options.extension.description"),iconUrl:getBrowserSrc,isCompact:s,onAction:()=>e((null==u?void 0:u.instructions)?"INSTRUCTIONS_EXTENSION":"CONNECT"),title:f.t("get_options.extension.title",{wallet:t.name,browser:n}),url:d,variant:"browser"}),c&&D.createElement(DownloadOptionsBox,{actionLabel:f.t("get_options.desktop.download.label",{platform:o}),description:f.t("get_options.desktop.description"),iconUrl:getPlatformSrc,isCompact:s,onAction:()=>e((null==l?void 0:l.instructions)?"INSTRUCTIONS_DESKTOP":"CONNECT"),title:f.t("get_options.desktop.title",{wallet:t.name,platform:o}),url:c,variant:"desktop"}),p&&D.createElement(DownloadOptionsBox,{actionLabel:f.t("get_options.mobile.download.label",{wallet:t.name}),description:f.t("get_options.mobile.description"),iconAccent:t.iconAccent,iconBackground:t.iconBackground,iconUrl:t.iconUrl,isCompact:s,onAction:()=>{e("DOWNLOAD")},title:f.t("get_options.mobile.title",{wallet:t.name}),variant:"app"})))}function DownloadDetail({changeWalletStep:e,wallet:t}){let{downloadUrls:n,qrCode:o}=t,{i18n:i}=(0,D.useContext)(tY);return(0,D.useEffect)(()=>{preloadCreateIcon(),preloadScanIcon()},[]),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"24",height:"full",width:"full"},D.createElement(tQ,{style:{maxWidth:220,textAlign:"center"}},D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"semibold"},i.t("get_mobile.description"))),D.createElement(tQ,{height:"full"},(null==n?void 0:n.qrCode)?D.createElement(QRCode,{logoSize:0,size:268,uri:n.qrCode}):null),D.createElement(tQ,{alignItems:"center",borderRadius:"10",display:"flex",flexDirection:"row",gap:"8",height:"34",justifyContent:"space-between",marginBottom:"12",paddingY:"8"},D.createElement(ActionButton,{label:i.t("get_mobile.continue.label"),onClick:()=>e((null==o?void 0:o.instructions)?"INSTRUCTIONS_MOBILE":"CONNECT")})))}var rk={connect:()=>D.createElement(ConnectIcon,null),create:()=>D.createElement(CreateIcon,null),install:e=>D.createElement(AsyncImage,{background:e.iconBackground,borderColor:"generalBorder",borderRadius:"10",height:"48",src:e.iconUrl,width:"48"}),refresh:()=>D.createElement(RefreshIcon,null),scan:()=>D.createElement(ScanIcon,null)};function InstructionMobileDetail({connectWallet:e,wallet:t}){var n,o,i,s;let{i18n:l}=(0,D.useContext)(tY);return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",width:"full"},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"28",height:"full",justifyContent:"center",paddingY:"32",style:{maxWidth:320}},null==(o=null==(n=null==t?void 0:t.qrCode)?void 0:n.instructions)?void 0:o.steps.map((e,n)=>{var o;return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16",key:n},D.createElement(tQ,{borderRadius:"10",height:"48",minWidth:"48",overflow:"hidden",position:"relative",width:"48"},null==(o=rk[e.step])?void 0:o.call(rk,t)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},l.t(e.title,void 0,{rawKeyIfTranslationMissing:!0})),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},l.t(e.description,void 0,{rawKeyIfTranslationMissing:!0}))))})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"12",justifyContent:"center",marginBottom:"16"},D.createElement(ActionButton,{label:l.t("get_instructions.mobile.connect.label"),onClick:()=>e(t)}),D.createElement(tQ,{as:"a",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",href:null==(s=null==(i=null==t?void 0:t.qrCode)?void 0:i.instructions)?void 0:s.learnMoreUrl,paddingX:"12",paddingY:"4",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},l.t("get_instructions.mobile.learn_more.label")))))}function InstructionExtensionDetail({wallet:e}){var t,n,o,i;let{i18n:s}=(0,D.useContext)(tY);return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",width:"full"},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"28",height:"full",justifyContent:"center",paddingY:"32",style:{maxWidth:320}},null==(n=null==(t=null==e?void 0:e.extension)?void 0:t.instructions)?void 0:n.steps.map((t,n)=>{var o;return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16",key:n},D.createElement(tQ,{borderRadius:"10",height:"48",minWidth:"48",overflow:"hidden",position:"relative",width:"48"},null==(o=rk[t.step])?void 0:o.call(rk,e)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},s.t(t.title,void 0,{rawKeyIfTranslationMissing:!0})),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},s.t(t.description,void 0,{rawKeyIfTranslationMissing:!0}))))})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"12",justifyContent:"center",marginBottom:"16"},D.createElement(ActionButton,{label:s.t("get_instructions.extension.refresh.label"),onClick:window.location.reload.bind(window.location)}),D.createElement(tQ,{as:"a",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",href:null==(i=null==(o=null==e?void 0:e.extension)?void 0:o.instructions)?void 0:i.learnMoreUrl,paddingX:"12",paddingY:"4",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},s.t("get_instructions.extension.learn_more.label")))))}function InstructionDesktopDetail({connectWallet:e,wallet:t}){var n,o,i,s;let{i18n:l}=(0,D.useContext)(tY);return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",width:"full"},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"28",height:"full",justifyContent:"center",paddingY:"32",style:{maxWidth:320}},null==(o=null==(n=null==t?void 0:t.desktop)?void 0:n.instructions)?void 0:o.steps.map((e,n)=>{var o;return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16",key:n},D.createElement(tQ,{borderRadius:"10",height:"48",minWidth:"48",overflow:"hidden",position:"relative",width:"48"},null==(o=rk[e.step])?void 0:o.call(rk,t)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},l.t(e.title,void 0,{rawKeyIfTranslationMissing:!0})),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},l.t(e.description,void 0,{rawKeyIfTranslationMissing:!0}))))})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"12",justifyContent:"center",marginBottom:"16"},D.createElement(ActionButton,{label:l.t("get_instructions.desktop.connect.label"),onClick:()=>e(t)}),D.createElement(tQ,{as:"a",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",href:null==(s=null==(i=null==t?void 0:t.desktop)?void 0:i.instructions)?void 0:s.learnMoreUrl,paddingX:"12",paddingY:"4",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},l.t("get_instructions.desktop.learn_more.label")))))}function DesktopOptions({onClose:e}){let t;let[n,o]=(0,D.useState)(),[i,s]=(0,D.useState)(),[l,c]=(0,D.useState)(),u=!!(null==i?void 0:i.qrCode)&&l,[d,p]=(0,D.useState)(!1),f=(0,D.useContext)(rd),m=f===ru.COMPACT,{disclaimer:b}=(0,D.useContext)(rs),{i18n:g}=(0,D.useContext)(tY),y=isSafari(),v=(0,D.useRef)(!1),{connector:w}=(0,D.useContext)(rc),C=!w,E=useWalletConnectors(C).filter(e=>e.ready||!!e.extensionDownloadUrl).sort((e,t)=>e.groupIndex-t.groupIndex),x=function(e,t){let n={};for(let o of e){let e=t(o);e&&(n[e]||(n[e]=[]),n[e].push(o))}return n}(E,e=>e.groupName),A=["Recommended","Other","Popular","More","Others","Installed"];(0,D.useEffect)(()=>{w&&!v.current&&(changeWalletStep("CONNECT"),selectWallet(w),v.current=!0)},[w]);let connectToWallet=e=>{var t,n;p(!1),e.ready&&(null==(n=null==(t=null==e?void 0:e.connect)?void 0:t.call(e))||n.catch(()=>{p(!0)}))},onDesktopUri=async e=>{let t=E.find(t=>e.id===t.id);(null==t?void 0:t.getDesktopUri)&&setTimeout(async()=>{var e;let n=await (null==(e=null==t?void 0:t.getDesktopUri)?void 0:e.call(t));n&&window.open(n,y?"_blank":"_self")},0)},onQrCode=async e=>{var t;let n=E.find(t=>e.id===t.id),o=await (null==(t=null==n?void 0:n.getQrCodeUri)?void 0:t.call(n));c(o),setTimeout(()=>{s(n),changeWalletStep("CONNECT")},o?0:50)},selectWallet=async e=>{var t;t=e.id,localStorage.setItem(rA,t),e.ready&&(onQrCode(e),onDesktopUri(e)),connectToWallet(e),o(e.id),e.ready||(s(e),changeWalletStep((null==e?void 0:e.extensionDownloadUrl)?"DOWNLOAD_OPTIONS":"CONNECT"))},clearSelectedWallet=()=>{o(void 0),s(void 0),c(void 0)},changeWalletStep=(e,t=!1)=>{t&&"GET"===e&&"GET"===k?clearSelectedWallet():t||"GET"!==e?t||"CONNECT"!==e||B("CONNECT"):B("GET"),I(e)},[k,B]=(0,D.useState)("NONE"),[S,I]=(0,D.useState)("NONE"),j=null,T=null,P=null;(0,D.useEffect)(()=>{p(!1)},[S,i]);let M=!!(null==i?void 0:i.extensionDownloadUrl),O=!!(M&&(null==i?void 0:i.mobileDownloadUrl));switch(S){case"NONE":j=D.createElement(ConnectModalIntro,{getWallet:()=>changeWalletStep("GET")});break;case"LEARN_COMPACT":j=D.createElement(ConnectModalIntro,{compactModeEnabled:m,getWallet:()=>changeWalletStep("GET")}),T=g.t("intro.title"),P="NONE";break;case"GET":j=D.createElement(GetDetail,{getWalletDownload:e=>{var t;o(e);let n=E.find(t=>e===t.id),i=null==(t=null==n?void 0:n.downloadUrls)?void 0:t.qrCode,l=!!(null==n?void 0:n.desktopDownloadUrl),c=!!(null==n?void 0:n.extensionDownloadUrl);s(n),i&&(c||l)?changeWalletStep("DOWNLOAD_OPTIONS"):i?changeWalletStep("DOWNLOAD"):l?changeWalletStep("INSTRUCTIONS_DESKTOP"):changeWalletStep("INSTRUCTIONS_EXTENSION")},compactModeEnabled:m}),T=g.t("get.title"),P=m?"LEARN_COMPACT":"NONE";break;case"CONNECT":j=i&&D.createElement(ConnectDetail,{changeWalletStep,compactModeEnabled:m,connectionError:d,onClose:e,qrCodeUri:l,reconnect:connectToWallet,wallet:i}),T=u&&("WalletConnect"===i.name?g.t("connect_scan.fallback_title"):g.t("connect_scan.title",{wallet:i.name})),P=m?w?null:"NONE":null,t=m?w?()=>{}:clearSelectedWallet:()=>{};break;case"DOWNLOAD_OPTIONS":j=i&&D.createElement(DownloadOptionsDetail,{changeWalletStep,wallet:i}),T=i&&g.t("get_options.short_title",{wallet:i.name}),P=w?"CONNECT":m?"NONE":null;break;case"DOWNLOAD":j=i&&D.createElement(DownloadDetail,{changeWalletStep,wallet:i}),T=i&&g.t("get_mobile.title",{wallet:i.name}),P=O?"DOWNLOAD_OPTIONS":k;break;case"INSTRUCTIONS_MOBILE":j=i&&D.createElement(InstructionMobileDetail,{connectWallet:selectWallet,wallet:i}),T=i&&g.t("get_options.title",{wallet:m&&i.shortName||i.name}),P="DOWNLOAD";break;case"INSTRUCTIONS_EXTENSION":j=i&&D.createElement(InstructionExtensionDetail,{wallet:i}),T=i&&g.t("get_options.title",{wallet:m&&i.shortName||i.name}),P="DOWNLOAD_OPTIONS";break;case"INSTRUCTIONS_DESKTOP":j=i&&D.createElement(InstructionDesktopDetail,{connectWallet:selectWallet,wallet:i}),T=i&&g.t("get_options.title",{wallet:m&&i.shortName||i.name}),P="DOWNLOAD_OPTIONS"}return D.createElement(tQ,{display:"flex",flexDirection:"row",style:{maxHeight:m?468:504}},(!m||"NONE"===S)&&D.createElement(tQ,{className:m?"_1vwt0cg4":"_1vwt0cg3",display:"flex",flexDirection:"column",marginTop:"16"},D.createElement(tQ,{display:"flex",justifyContent:"space-between"},m&&b&&D.createElement(tQ,{marginLeft:"16",width:"28"},D.createElement(InfoButton,{onClick:()=>changeWalletStep("LEARN_COMPACT")})),m&&!b&&D.createElement(tQ,{marginLeft:"16",width:"28"}),D.createElement(tQ,{marginLeft:m?"0":"6",paddingBottom:"8",paddingTop:"2",paddingX:"18"},D.createElement(rm,{as:"h1",color:"modalText",id:"rk_connect_title",size:"18",weight:"heavy",testId:"connect-header-label"},g.t("connect.title"))),m&&D.createElement(tQ,{marginRight:"16"},D.createElement(CloseButton,{onClose:e}))),D.createElement(tQ,{className:"_1vwt0cg2 ju367v7a ju367v7v",paddingBottom:"18"},Object.entries(x).map(([e,t],o)=>t.length>0&&D.createElement(D.Fragment,{key:o},e?D.createElement(tQ,{marginBottom:"8",marginTop:"16",marginX:"6"},D.createElement(rm,{color:"Installed"===e?"accentColor":"modalTextSecondary",size:"14",weight:"bold"},A.includes(e)?g.t(`connector_group.${e.toLowerCase()}`):e)):null,D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},t.map(e=>D.createElement(ModalSelection,{currentlySelected:e.id===n,iconBackground:e.iconBackground,iconUrl:e.iconUrl,key:e.id,name:e.name,onClick:()=>selectWallet(e),ready:e.ready,recent:e.recent,testId:`wallet-option-${e.id}`,isRainbowKitConnector:e.isRainbowKitConnector})))))),m&&D.createElement(D.Fragment,null,D.createElement(tQ,{background:"generalBorder",height:"1",marginTop:"-1"}),b?D.createElement(tQ,{paddingX:"24",paddingY:"16",textAlign:"center"},D.createElement(b,{Link:DisclaimerLink,Text:DisclaimerText})):D.createElement(tQ,{alignItems:"center",display:"flex",justifyContent:"space-between",paddingX:"24",paddingY:"16"},D.createElement(tQ,{paddingY:"4"},D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},g.t("connect.new_to_ethereum.description"))),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"4",justifyContent:"center"},D.createElement(tQ,{className:touchableStyles({active:"shrink",hover:"grow"}),cursor:"pointer",onClick:()=>changeWalletStep("LEARN_COMPACT"),paddingY:"4",style:{willChange:"transform"},transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},g.t("connect.new_to_ethereum.learn_more.label"))))))),(!m||"NONE"!==S)&&D.createElement(D.Fragment,null,!m&&D.createElement(tQ,{background:"generalBorder",minWidth:"1",width:"1"}),D.createElement(tQ,{display:"flex",flexDirection:"column",margin:"16",style:{flexGrow:1}},D.createElement(tQ,{alignItems:"center",display:"flex",justifyContent:"space-between",marginBottom:"12"},D.createElement(tQ,{width:"28"},P&&D.createElement(tQ,{as:"button",className:touchableStyles({active:"shrinkSm",hover:"growLg"}),color:"accentColor",onClick:()=>{P&&changeWalletStep(P,!0),null==t||t()},paddingX:"8",paddingY:"4",style:{boxSizing:"content-box",height:17,willChange:"transform"},transition:"default",type:"button"},D.createElement(BackIcon,null))),D.createElement(tQ,{display:"flex",justifyContent:"center",style:{flexGrow:1}},T&&D.createElement(rm,{color:"modalText",size:"18",textAlign:"center",weight:"heavy"},T)),D.createElement(CloseButton,{onClose:e})),D.createElement(tQ,{display:"flex",flexDirection:"column",style:{minHeight:m?396:432}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"6",height:"full",justifyContent:"center",marginX:"8"},j)))))}var LoadingSpinner=({wallet:e})=>D.createElement("svg",{className:"_1am14413",viewBox:"0 0 86 86",width:"86",height:"86"},D.createElement("title",null,"Loading"),D.createElement("rect",{x:"3",y:"3",width:80,height:80,rx:20,ry:20,strokeDasharray:"53.333333333333336 "+320/3,strokeDashoffset:160,className:"_1am14412",style:{stroke:(null==e?void 0:e.iconAccent)||"#0D3887"}}));function WalletButton({onClose:e,wallet:t,connecting:n}){let{connect:o,iconBackground:i,iconUrl:s,id:l,name:c,getMobileUri:u,ready:d,shortName:p,showWalletConnectModal:f}=t,m=useCoolMode(s),b=(0,D.useRef)(!1),{i18n:g}=(0,D.useContext)(tY),y=(0,D.useCallback)(async()=>{let onMobileUri=async()=>{let e=await (null==u?void 0:u());if(e){if(e&&function({mobileUri:e,name:t}){localStorage.setItem(rg,JSON.stringify({href:e.split("?")[0],name:t}))}({mobileUri:e,name:c}),e.startsWith("http")){let t=document.createElement("a");t.href=e,t.target="_blank",t.rel="noreferrer noopener",t.click()}else window.location.href=e}};if("walletConnect"!==l&&onMobileUri(),f){f(),null==e||e();return}null==o||o()},[o,u,f,e,c,l]);return(0,D.useEffect)(()=>{n&&!b.current&&(y(),b.current=!0)},[n,y]),D.createElement(tQ,{as:"button",color:d?"modalText":"modalTextSecondary",disabled:!d,fontFamily:"body",key:l,onClick:y,ref:m,style:{overflow:"visible",textAlign:"center"},testId:`wallet-option-${l}`,type:"button",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",justifyContent:"center"},D.createElement(tQ,{display:"flex",alignItems:"center",justifyContent:"center",paddingBottom:"8",paddingTop:"10",position:"relative"},n?D.createElement(LoadingSpinner,{wallet:t}):null,D.createElement(AsyncImage,{background:i,borderRadius:"13",boxShadow:"walletLogo",height:"60",src:s,width:"60"})),n?null:D.createElement(tQ,{display:"flex",flexDirection:"column",textAlign:"center"},D.createElement(rm,{as:"h2",color:t.ready?"modalText":"modalTextSecondary",size:"13",weight:"medium"},D.createElement(tQ,{as:"span",position:"relative"},null!=p?p:c,!t.ready&&" (unsupported)")),t.recent&&D.createElement(rm,{color:"accentColor",size:"12",weight:"medium"},g.t("connect.recent")))))}function MobileOptions({onClose:e}){var t;let n=useWalletConnectors().filter(e=>e.isRainbowKitConnector),{disclaimer:o,learnMoreUrl:i}=(0,D.useContext)(rs),s=null,l=null,c=!1,u=null,[d,p]=(0,D.useState)("CONNECT"),{i18n:f}=(0,D.useContext)(tY),m=isIOS();switch(d){case"CONNECT":s=f.t("connect.title"),c=!0,l=D.createElement(tQ,null,D.createElement(tQ,{background:"profileForeground",className:"_1am14410",display:"flex",paddingBottom:"20",paddingTop:"6"},D.createElement(tQ,{display:"flex",style:{margin:"0 auto"}},n.filter(e=>e.ready).map(t=>D.createElement(tQ,{key:t.id,paddingX:"20"},D.createElement(tQ,{width:"60"},D.createElement(WalletButton,{onClose:e,wallet:t})))))),D.createElement(tQ,{background:"generalBorder",height:"1",marginBottom:"32",marginTop:"-1"}),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"32",paddingX:"32",style:{textAlign:"center"}},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"8",textAlign:"center"},D.createElement(rm,{color:"modalText",size:"16",weight:"bold"},f.t("intro.title")),D.createElement(rm,{color:"modalTextSecondary",size:"16"},f.t("intro.description")))),D.createElement(tQ,{paddingTop:"32",paddingX:"20"},D.createElement(tQ,{display:"flex",gap:"14",justifyContent:"center"},D.createElement(ActionButton,{label:f.t("intro.get.label"),onClick:()=>p("GET"),size:"large",type:"secondary"}),D.createElement(ActionButton,{href:i,label:f.t("intro.learn_more.label"),size:"large",type:"secondary"}))),o&&D.createElement(tQ,{marginTop:"28",marginX:"32",textAlign:"center"},D.createElement(o,{Link:DisclaimerLink,Text:DisclaimerText})));break;case"GET":{s=f.t("get.title"),u="CONNECT";let e=null==(t=null==n?void 0:n.filter(e=>{var t,n,o;return(null==(t=e.downloadUrls)?void 0:t.ios)||(null==(n=e.downloadUrls)?void 0:n.android)||(null==(o=e.downloadUrls)?void 0:o.mobile)}))?void 0:t.splice(0,3);l=D.createElement(tQ,null,D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",marginBottom:"36",marginTop:"5",paddingTop:"12",width:"full"},e.map((t,n)=>{let{downloadUrls:o,iconBackground:i,iconUrl:s,name:l}=t;return(null==o?void 0:o.ios)||(null==o?void 0:o.android)||(null==o?void 0:o.mobile)?D.createElement(tQ,{display:"flex",gap:"16",key:t.id,paddingX:"20",width:"full"},D.createElement(tQ,{style:{minHeight:48,minWidth:48}},D.createElement(AsyncImage,{background:i,borderColor:"generalBorder",borderRadius:"10",height:"48",src:s,width:"48"})),D.createElement(tQ,{display:"flex",flexDirection:"column",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",height:"48"},D.createElement(tQ,{width:"full"},D.createElement(rm,{color:"modalText",size:"18",weight:"bold"},l)),D.createElement(ActionButton,{href:(m?null==o?void 0:o.ios:null==o?void 0:o.android)||(null==o?void 0:o.mobile),label:f.t("get.action.label"),size:"small",type:"secondary"})),np(u),padding:"16",style:{height:17,willChange:"transform"},transition:"default",type:"button"},D.createElement(BackIcon,null))),D.createElement(tQ,{marginTop:"4",textAlign:"center",width:"full"},D.createElement(rm,{as:"h1",color:"modalText",id:"rk_connect_title",size:"20",weight:"bold"},s)),D.createElement(tQ,{alignItems:"center",display:"flex",height:"32",paddingRight:"14",position:"absolute",right:"0"},D.createElement(tQ,{style:{marginBottom:-20,marginTop:-20}},D.createElement(CloseButton,{onClose:e}))))),D.createElement(tQ,{display:"flex",flexDirection:"column"},l))}var MobileStatus=({onClose:e})=>{let{connector:t}=(0,D.useContext)(rc),{i18n:n}=(0,D.useContext)(tY),o=(null==t?void 0:t.name)||"";return D.createElement(tQ,null,D.createElement(tQ,{display:"flex",paddingBottom:"32",justifyContent:"center",alignItems:"center",background:"profileForeground",flexDirection:"column"},D.createElement(tQ,{width:"full",display:"flex",justifyContent:"flex-end",marginTop:"18",marginRight:"24"},D.createElement(CloseButton,{onClose:e})),D.createElement(tQ,{width:"60"},D.createElement(WalletButton,{onClose:e,wallet:t,connecting:!0})),D.createElement(tQ,{marginTop:"20"},D.createElement(rm,{textAlign:"center",color:"modalText",size:"18",weight:"semibold"},n.t("connect.status.connect_mobile",{wallet:o}))),D.createElement(tQ,{maxWidth:"full",marginTop:"8"},D.createElement(rm,{textAlign:"center",color:"modalText",size:"16",weight:"medium"},n.t("connect.status.confirm_mobile",{wallet:o})))))};function ConnectOptions({onClose:e}){let{connector:t}=(0,D.useContext)(rc);return isMobile()?t?D.createElement(MobileStatus,{onClose:e}):D.createElement(MobileOptions,{onClose:e}):D.createElement(DesktopOptions,{onClose:e})}function ConnectModal({onClose:e,open:t}){let n="rk_connect_title",o=useConnectionStatus(),{disconnect:i}=useDisconnect(),{isConnecting:s}=(0,_.m)(),l=D.useCallback(()=>{e(),i()},[e,i]),c=D.useCallback(()=>{s&&i(),e()},[e,i,s]);return"disconnected"===o?D.createElement(Dialog,{onClose:c,open:t,titleId:n},D.createElement(DialogContent,{bottomSheetOnMobile:!0,padding:"0",wide:!0},D.createElement(ConnectOptions,{onClose:c}))):"unauthenticated"===o?D.createElement(Dialog,{onClose:l,open:t,titleId:n},D.createElement(DialogContent,{bottomSheetOnMobile:!0,padding:"0"},D.createElement(SignIn,{onClose:l,onCloseModal:e}))):null}function useModalStateValue(){let[e,t]=(0,D.useState)(!1);return{closeModal:(0,D.useCallback)(()=>t(!1),[]),isModalOpen:e,openModal:(0,D.useCallback)(()=>t(!0),[])}}var rB=(0,D.createContext)({accountModalOpen:!1,chainModalOpen:!1,connectModalOpen:!1,isWalletConnectModalOpen:!1,setIsWalletConnectModalOpen:()=>{}});function ModalProvider({children:e}){let{closeModal:t,isModalOpen:n,openModal:o}=useModalStateValue(),{closeModal:i,isModalOpen:s,openModal:l}=useModalStateValue(),{closeModal:c,isModalOpen:u,openModal:d}=useModalStateValue(),[p,f]=(0,D.useState)(!1),m=useConnectionStatus(),{chainId:b}=(0,_.m)(),{chains:g}=(0,z.Z)(),y=g.some(e=>e.id===b);function closeModals({keepConnectModalOpen:e=!1}={}){e||t(),i(),c()}let v="unauthenticated"===useAuthenticationStatus();return useAccountEffect_useAccountEffect({onConnect:()=>closeModals({keepConnectModalOpen:v}),onDisconnect:()=>closeModals()}),(0,D.useEffect)(()=>{v&&closeModals()},[v]),D.createElement(rB.Provider,{value:(0,D.useMemo)(()=>({accountModalOpen:s,chainModalOpen:u,connectModalOpen:n,isWalletConnectModalOpen:p,openAccountModal:y&&"connected"===m?l:void 0,openChainModal:"connected"===m?d:void 0,openConnectModal:"disconnected"===m||"unauthenticated"===m?o:void 0,setIsWalletConnectModalOpen:f}),[m,s,u,n,l,d,o,y,p])},e,D.createElement(ConnectModal,{onClose:t,open:n}),D.createElement(AccountModal,{onClose:i,open:s}),D.createElement(ChainModal,{onClose:c,open:u}))}function useWalletConnectOpenState(){let{isWalletConnectModalOpen:e,setIsWalletConnectModalOpen:t}=(0,D.useContext)(rB);return{isWalletConnectModalOpen:e,setIsWalletConnectModalOpen:t}}var noop=()=>{};function ConnectButtonRenderer({children:e}){var t,n,o,i;let s=function(){let[e,t]=(0,D.useState)(!1);return(0,D.useEffect)(()=>(t(!0),()=>{t(!1)}),[]),(0,D.useCallback)(()=>e,[e])}(),{address:l}=(0,_.m)(),c=useMainnetEnsName(l),u=useMainnetEnsAvatar(c),{chainId:d}=(0,_.m)(),{chains:p}=(0,z.Z)(),f=p.some(e=>e.id===d),m=useRainbowKitChainsById(),b=null!=(t=useAuthenticationStatus())?t:void 0,g=d?m[d]:void 0,y=null!=(n=null==g?void 0:g.name)?n:void 0,v=null!=(o=null==g?void 0:g.iconUrl)?o:void 0,w=null!=(i=null==g?void 0:g.iconBackground)?i:void 0,C=useAsyncImage(v),E=(0,D.useContext)(rp),x=useRecentTransactions().some(({status:e})=>"pending"===e)&&E,{showBalance:A}=useShowBalance(),k="boolean"==typeof A?A:!A||t_(A)[isMobile()?"smallScreen":"largeScreen"],{data:B}=useBalance({address:k?l:void 0}),S=B?`${abbreviateETHBalance(parseFloat(B.formatted))} ${B.symbol}`:void 0,{openConnectModal:I}=function(){let{connectModalOpen:e,openConnectModal:t}=(0,D.useContext)(rB),{isWalletConnectModalOpen:n}=useWalletConnectOpenState();return{connectModalOpen:e||n,openConnectModal:t}}(),{openChainModal:j}=function(){let{chainModalOpen:e,openChainModal:t}=(0,D.useContext)(rB);return{chainModalOpen:e,openChainModal:t}}(),{openAccountModal:T}=function(){let{accountModalOpen:e,openAccountModal:t}=(0,D.useContext)(rB);return{accountModalOpen:e,openAccountModal:t}}(),{accountModalOpen:P,chainModalOpen:M,connectModalOpen:O}=function(){let{accountModalOpen:e,chainModalOpen:t,connectModalOpen:n}=(0,D.useContext)(rB);return{accountModalOpen:e,chainModalOpen:t,connectModalOpen:n}}();return D.createElement(D.Fragment,null,e({account:l?{address:l,balanceDecimals:null==B?void 0:B.decimals,balanceFormatted:null==B?void 0:B.formatted,balanceSymbol:null==B?void 0:B.symbol,displayBalance:S,displayName:c?formatENS(c):formatAddress(l),ensAvatar:null!=u?u:void 0,ensName:null!=c?c:void 0,hasPendingTransactions:x}:void 0,accountModalOpen:P,authenticationStatus:b,chain:d?{hasIcon:!!v,iconBackground:w,iconUrl:C,id:d,name:y,unsupported:!f}:void 0,chainModalOpen:M,connectModalOpen:O,mounted:s(),openAccountModal:null!=T?T:noop,openChainModal:null!=j?j:noop,openConnectModal:null!=I?I:noop}))}ConnectButtonRenderer.displayName="ConnectButton.Custom";var rS={accountStatus:"full",chainStatus:{largeScreen:"full",smallScreen:"icon"},label:"Connect Wallet",showBalance:{largeScreen:!0,smallScreen:!1}};function ConnectButton({accountStatus:e=rS.accountStatus,chainStatus:t=rS.chainStatus,label:n=rS.label,showBalance:o=rS.showBalance}){let i=useRainbowKitChains(),s=useConnectionStatus(),{setShowBalance:l}=useShowBalance(),[c,u]=(0,D.useState)(!1),{i18n:d}=(0,D.useContext)(tY);return(0,D.useEffect)(()=>{l(o),c||u(!0)},[o,l]),c?D.createElement(ConnectButtonRenderer,null,({account:l,chain:c,mounted:u,openAccountModal:p,openChainModal:f,openConnectModal:m})=>{var b,g,y;let v=u&&"loading"!==s,w=null!=(b=null==c?void 0:c.unsupported)&&b;return D.createElement(tQ,{display:"flex",gap:"12",...!v&&{"aria-hidden":!0,style:{opacity:0,pointerEvents:"none",userSelect:"none"}}},v&&l&&"connected"===s?D.createElement(D.Fragment,null,c&&(i.length>1||w)&&D.createElement(tQ,{alignItems:"center","aria-label":"Chain Selector",as:"button",background:w?"connectButtonBackgroundError":"connectButtonBackground",borderRadius:"connectButton",boxShadow:"connectButton",className:touchableStyles({active:"shrink",hover:"grow"}),color:w?"connectButtonTextError":"connectButtonText",display:tD(t,e=>"none"===e?"none":"flex"),fontFamily:"body",fontWeight:"bold",gap:"6",key:w?"unsupported":"supported",onClick:f,paddingX:"10",paddingY:"8",testId:w?"wrong-network-button":"chain-button",transition:"default",type:"button"},w?D.createElement(tQ,{alignItems:"center",display:"flex",height:"24",paddingX:"4"},d.t("connect_wallet.wrong_network.label")):D.createElement(tQ,{alignItems:"center",display:"flex",gap:"6"},c.hasIcon?D.createElement(tQ,{display:tD(t,e=>"full"===e||"icon"===e?"block":"none"),height:"24",width:"24"},D.createElement(AsyncImage,{alt:null!=(g=c.name)?g:"Chain icon",background:c.iconBackground,borderRadius:"full",height:"24",src:c.iconUrl,width:"24"})):null,D.createElement(tQ,{display:tD(t,e=>"icon"!==e||c.iconUrl?"full"===e||"name"===e?"block":"none":"block")},null!=(y=c.name)?y:c.id)),D.createElement(DropdownIcon,null)),!w&&D.createElement(tQ,{alignItems:"center",as:"button",background:"connectButtonBackground",borderRadius:"connectButton",boxShadow:"connectButton",className:touchableStyles({active:"shrink",hover:"grow"}),color:"connectButtonText",display:"flex",fontFamily:"body",fontWeight:"bold",onClick:p,testId:"account-button",transition:"default",type:"button"},l.displayBalance&&D.createElement(tQ,{display:tD(o,e=>e?"block":"none"),padding:"8",paddingLeft:"12"},l.displayBalance),D.createElement(tQ,{background:t_(o)[isMobile()?"smallScreen":"largeScreen"]?"connectButtonInnerBackground":"connectButtonBackground",borderColor:"connectButtonBackground",borderRadius:"connectButton",borderStyle:"solid",borderWidth:"2",color:"connectButtonText",fontFamily:"body",fontWeight:"bold",paddingX:"8",paddingY:"6",transition:"default"},D.createElement(tQ,{alignItems:"center",display:"flex",gap:"6",height:"24"},D.createElement(tQ,{display:tD(e,e=>"full"===e||"avatar"===e?"block":"none")},D.createElement(Avatar,{address:l.address,imageUrl:l.ensAvatar,loading:l.hasPendingTransactions,size:24})),D.createElement(tQ,{alignItems:"center",display:"flex",gap:"6"},D.createElement(tQ,{display:tD(e,e=>"full"===e||"address"===e?"block":"none")},l.displayName),D.createElement(DropdownIcon,null)))))):D.createElement(tQ,{as:"button",background:"accentColor",borderRadius:"connectButton",boxShadow:"connectButton",className:touchableStyles({active:"shrink",hover:"grow"}),color:"accentColorForeground",fontFamily:"body",fontWeight:"bold",height:"40",key:"connect",onClick:m,paddingX:"14",testId:"connect-button",transition:"default",type:"button"},u&&"Connect Wallet"===n?d.t("connect_wallet.label"):n))}):D.createElement(D.Fragment,null)}ConnectButton.__defaultProps=rS,ConnectButton.Custom=ConnectButtonRenderer;var computeWalletConnectMetaData=({appName:e,appDescription:t,appUrl:n,appIcon:o})=>({name:e,description:null!=t?t:e,url:null!=n?n:"undefined"!=typeof window?window.location.href:"",icons:[...o?[o]:[]]}),connectorsForWallets=(e,{projectId:t,walletConnectParameters:n,appName:o,appDescription:i,appUrl:s,appIcon:l})=>{let c=-1,u=[],d=[],p=[],f=computeWalletConnectMetaData({appName:o,appDescription:i,appUrl:s,appIcon:l});e.forEach(({groupName:e,wallets:i},s)=>{i.forEach(i=>{c++;let u=i({projectId:t,appName:o,appIcon:l,options:{metadata:f,...n},walletConnectParameters:{metadata:f,...n}});if((null==u?void 0:u.iconAccent)&&!isHexString(null==u?void 0:u.iconAccent))throw Error(`Property \`iconAccent\` is not a hex value for wallet: ${u.name}`);let m={...u,groupIndex:s+1,groupName:e,index:c};"function"==typeof u.hidden?p.push(m):d.push(m)})});let m=[...d,...p];for(let{createConnector:e,groupIndex:t,groupName:n,hidden:o,...i}of m){if("function"==typeof o){let e=o();if(e)continue}let walletMetaData=e=>({rkDetails:Object.fromEntries(Object.entries({...i,groupIndex:t,groupName:n,isRainbowKitConnector:!0,...e||{}}).filter(([e,t])=>void 0!==t))}),s="walletConnect"===i.id;s&&u.push(e(walletMetaData({isWalletConnectModalConnector:!0,showQrModal:!0})));let l=e(walletMetaData());u.push(l)}return u},rI=new Map,getOrCreateWalletConnectInstance=({projectId:e,walletConnectParameters:t,rkDetailsShowQrModal:n})=>{let o={...t||{},projectId:e,showQrModal:!1};n&&(o={...o,showQrModal:!0});let i=JSON.stringify(o),s=rI.get(i);if(s)return s;let l=walletConnect(o);return rI.set(i,l),l};function getWalletConnectConnector({projectId:e,walletConnectParameters:t}){if(!e||""===e)throw Error("No projectId found. Every dApp must now provide a WalletConnect Cloud projectId to enable WalletConnect v2 https://www.rainbowkit.com/docs/installation#configure");return"YOUR_PROJECT_ID"===e&&(e="21fef48091f12692cad574a6f7753643"),n=>(function({projectId:e,walletDetails:t,walletConnectParameters:n}){return o=>({...getOrCreateWalletConnectInstance({projectId:e,walletConnectParameters:n,rkDetailsShowQrModal:t.rkDetails.showQrModal})(o),...t})})({projectId:e,walletDetails:n,walletConnectParameters:t})}function getExplicitInjectedProvider(e){if("undefined"==typeof window||void 0===window.ethereum)return;let t=window.ethereum.providers;return t?t.find(t=>t[e]):window.ethereum[e]?window.ethereum:void 0}function getWindowProviderNamespace(e){let providerSearch=(e,t)=>{let[n,...o]=t.split("."),i=e[n];if(i)return 0===o.length?i:providerSearch(i,o.join("."))};if("undefined"!=typeof window)return providerSearch(window,e)}function hasInjectedProvider({flag:e,namespace:t}){return!!t&&void 0!==getWindowProviderNamespace(t)||!!e&&void 0!==getExplicitInjectedProvider(e)}function getInjectedConnector({flag:e,namespace:t,target:n}){let o=n||function({flag:e,namespace:t}){var n;if("undefined"==typeof window)return;if(t){let e=getWindowProviderNamespace(t);if(e)return e}let o=null==(n=window.ethereum)?void 0:n.providers;if(e){let t=getExplicitInjectedProvider(e);if(t)return t}return void 0!==o&&o.length>0?o[0]:window.ethereum}({flag:e,namespace:t});return e=>{let t=o?{target:()=>({id:e.rkDetails.id,name:e.rkDetails.name,provider:o})}:{};return n=>({...injected(t)(n),...e})}}var dist_coinbaseWallet=({appName:e,appIcon:t})=>{let o=hasInjectedProvider({flag:"isCoinbaseWallet"}),i=isIOS();return{id:"coinbase",name:"Coinbase Wallet",shortName:"Coinbase",rdns:"com.coinbase.wallet",iconUrl:async()=>(await n.e(1950).then(n.bind(n,41950))).default,iconAccent:"#2c5ff6",iconBackground:"#2c5ff6",installed:o||void 0,downloadUrls:{android:"https://play.google.com/store/apps/details?id=org.toshi",ios:"https://apps.apple.com/us/app/coinbase-wallet-store-crypto/id1278383455",mobile:"https://coinbase.com/wallet/downloads",qrCode:"https://coinbase-wallet.onelink.me/q5Sx/fdb9b250",chrome:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad",browserExtension:"https://coinbase.com/wallet"},...i?{}:{qrCode:{getUri:e=>e,instructions:{learnMoreUrl:"https://coinbase.com/wallet/articles/getting-started-mobile",steps:[{description:"wallet_connectors.coinbase.qr_code.step1.description",step:"install",title:"wallet_connectors.coinbase.qr_code.step1.title"},{description:"wallet_connectors.coinbase.qr_code.step2.description",step:"create",title:"wallet_connectors.coinbase.qr_code.step2.title"},{description:"wallet_connectors.coinbase.qr_code.step3.description",step:"scan",title:"wallet_connectors.coinbase.qr_code.step3.title"}]}},extension:{instructions:{learnMoreUrl:"https://coinbase.com/wallet/articles/getting-started-extension",steps:[{description:"wallet_connectors.coinbase.extension.step1.description",step:"install",title:"wallet_connectors.coinbase.extension.step1.title"},{description:"wallet_connectors.coinbase.extension.step2.description",step:"create",title:"wallet_connectors.coinbase.extension.step2.title"},{description:"wallet_connectors.coinbase.extension.step3.description",step:"refresh",title:"wallet_connectors.coinbase.extension.step3.title"}]}}},createConnector:n=>o=>({...coinbaseWallet({appName:e,appLogoUrl:t,headlessMode:!0})(o),...n})}};function isMetaMask(e){return!!(null==e?void 0:e.isMetaMask)&&(!e.isBraveWallet||!!e._events||!!e._state)&&!e.isApexWallet&&!e.isAvalanche&&!e.isBackpack&&!e.isBifrost&&!e.isBitKeep&&!e.isBitski&&!e.isBlockWallet&&!e.isCoinbaseWallet&&!e.isDawn&&!e.isEnkrypt&&!e.isExodus&&!e.isFrame&&!e.isFrontier&&!e.isGamestop&&!e.isHyperPay&&!e.isImToken&&!e.isKuCoinWallet&&!e.isMathWallet&&!e.isOkxWallet&&!e.isOKExWallet&&!e.isOneInchIOSWallet&&!e.isOneInchAndroidWallet&&!e.isOpera&&!e.isPhantom&&!e.isPortal&&!e.isRabby&&!e.isRainbow&&!e.isStatus&&!e.isTalisman&&!e.isTally&&!e.isTokenPocket&&!e.isTokenary&&!e.isTrust&&!e.isTrustWallet&&!e.isXDEFI&&!e.isZeal&&!e.isZerion}var metaMaskWallet=({projectId:e,walletConnectParameters:t})=>{var o,i,s;let l=hasInjectedProvider({flag:"isMetaMask"}),c=!l,getUri=e=>isAndroid()?e:isIOS()?`metamask://wc?uri=${encodeURIComponent(e)}`:`https://metamask.app.link/wc?uri=${encodeURIComponent(e)}`;return{id:"metaMask",name:"MetaMask",rdns:"io.metamask",iconUrl:async()=>(await n.e(4419).then(n.bind(n,84419))).default,iconAccent:"#f6851a",iconBackground:"#fff",installed:c?void 0:l,downloadUrls:{android:"https://play.google.com/store/apps/details?id=io.metamask",ios:"https://apps.apple.com/us/app/metamask/id1438144202",mobile:"https://metamask.io/download",qrCode:"https://metamask.io/download",chrome:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn",edge:"https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm",firefox:"https://addons.mozilla.org/firefox/addon/ether-metamask",opera:"https://addons.opera.com/extensions/details/metamask-10",browserExtension:"https://metamask.io/download"},mobile:{getUri:c?getUri:void 0},qrCode:c?{getUri,instructions:{learnMoreUrl:"https://metamask.io/faqs/",steps:[{description:"wallet_connectors.metamask.qr_code.step1.description",step:"install",title:"wallet_connectors.metamask.qr_code.step1.title"},{description:"wallet_connectors.metamask.qr_code.step2.description",step:"create",title:"wallet_connectors.metamask.qr_code.step2.title"},{description:"wallet_connectors.metamask.qr_code.step3.description",step:"refresh",title:"wallet_connectors.metamask.qr_code.step3.title"}]}}:void 0,extension:{instructions:{learnMoreUrl:"https://metamask.io/faqs/",steps:[{description:"wallet_connectors.metamask.extension.step1.description",step:"install",title:"wallet_connectors.metamask.extension.step1.title"},{description:"wallet_connectors.metamask.extension.step2.description",step:"create",title:"wallet_connectors.metamask.extension.step2.title"},{description:"wallet_connectors.metamask.extension.step3.description",step:"refresh",title:"wallet_connectors.metamask.extension.step3.title"}]}},createConnector:c?getWalletConnectConnector({projectId:e,walletConnectParameters:t}):getInjectedConnector({target:"undefined"!=typeof window?null!=(s=null==(i=null==(o=window.ethereum)?void 0:o.providers)?void 0:i.find(isMetaMask))?s:window.ethereum:void 0})}},rainbowWallet=({projectId:e,walletConnectParameters:t})=>{let o=hasInjectedProvider({flag:"isRainbow"}),i=!o,getUri=e=>isAndroid()?e:isIOS()?`rainbow://wc?uri=${encodeURIComponent(e)}&connector=rainbowkit`:`https://rnbwapp.com/wc?uri=${encodeURIComponent(e)}&connector=rainbowkit`;return{id:"rainbow",name:"Rainbow",rdns:"me.rainbow",iconUrl:async()=>(await n.e(1608).then(n.bind(n,31608))).default,iconBackground:"#0c2f78",installed:i?void 0:o,downloadUrls:{android:"https://play.google.com/store/apps/details?id=me.rainbow&referrer=utm_source%3Drainbowkit&utm_source=rainbowkit",ios:"https://apps.apple.com/app/apple-store/id1457119021?pt=119997837&ct=rainbowkit&mt=8",mobile:"https://rainbow.download?utm_source=rainbowkit",qrCode:"https://rainbow.download?utm_source=rainbowkit&utm_medium=qrcode",browserExtension:"https://rainbow.me/extension?utm_source=rainbowkit"},mobile:{getUri:i?getUri:void 0},qrCode:i?{getUri,instructions:{learnMoreUrl:"https://learn.rainbow.me/connect-to-a-website-or-app?utm_source=rainbowkit&utm_medium=connector&utm_campaign=learnmore",steps:[{description:"wallet_connectors.rainbow.qr_code.step1.description",step:"install",title:"wallet_connectors.rainbow.qr_code.step1.title"},{description:"wallet_connectors.rainbow.qr_code.step2.description",step:"create",title:"wallet_connectors.rainbow.qr_code.step2.title"},{description:"wallet_connectors.rainbow.qr_code.step3.description",step:"scan",title:"wallet_connectors.rainbow.qr_code.step3.title"}]}}:void 0,createConnector:i?getWalletConnectConnector({projectId:e,walletConnectParameters:t}):getInjectedConnector({flag:"isRainbow"})}},walletConnectWallet=({projectId:e,options:t})=>({id:"walletConnect",name:"WalletConnect",installed:void 0,iconUrl:async()=>(await n.e(3525).then(n.bind(n,33525))).default,iconBackground:"#3b99fc",qrCode:{getUri:e=>e},createConnector:getWalletConnectConnector({projectId:e,walletConnectParameters:t})}),createDefaultTransports=e=>{let t=e.reduce((e,t)=>{let n=t.id;return e[n]=function(e,t={}){let{batch:n,fetchOptions:o,key:i="http",name:s="HTTP JSON-RPC",onFetchResponse:l,retryDelay:c}=t;return({chain:u,retryCount:d,timeout:p})=>{let{batchSize:f=1e3,wait:m=0}="object"==typeof n?n:{},b=t.retryCount??d,g=p??t.timeout??1e4,y=e||u?.rpcUrls.default.http[0];if(!y)throw new UrlRequiredError;let v=function(e,t={}){return{async request(n){let{body:o,fetchOptions:i={},onResponse:s=t.onResponse,timeout:l=t.timeout??1e4}=n,{headers:c,method:u,signal:d}={...t.fetchOptions,...i};try{let t;let n=await withTimeout(async({signal:t})=>{let n=await fetch(e,{...i,body:Array.isArray(o)?(0,e7.P)(o.map(e=>({jsonrpc:"2.0",id:e.id??tj.take(),...e}))):(0,e7.P)({jsonrpc:"2.0",id:o.id??tj.take(),...o}),headers:{...c,"Content-Type":"application/json"},method:u||"POST",signal:d||(l>0?t:null)});return n},{errorInstance:new tS.W5({body:o,url:e}),timeout:l,signal:!0});if(s&&await s(n),t=n.headers.get("Content-Type")?.startsWith("application/json")?await n.json():await n.text(),!n.ok)throw new tS.Gg({body:o,details:(0,e7.P)(t.error)||n.statusText,headers:n.headers,status:n.status,url:e});return t}catch(t){if(t instanceof tS.Gg||t instanceof tS.W5)throw t;throw new tS.Gg({body:o,details:t.message,url:e})}}}}(y,{fetchOptions:o,onResponse:l,timeout:g});return(0,tT.q)({key:i,name:s,async request({method:t,params:o}){let i={method:t,params:o},{schedule:s}=(0,tI.S)({id:`${e}`,wait:m,shouldSplitBatch:e=>e.length>f,fn:e=>v.request({body:e}),sort:(e,t)=>e.id-t.id}),fn=async e=>n?s(e):[await v.request({body:e})],[{error:l,result:c}]=await fn(i);if(l)throw new tS.bs({body:i,error:l,url:y});return c},retryCount:b,retryDelay:c,timeout:g,type:"http"},{fetchOptions:o,url:y})}}(),e},{});return t},getDefaultConfig=({appName:e,appDescription:t,appUrl:n,appIcon:o,wallets:i,projectId:s,...l})=>{let{transports:c,chains:u,...d}=l,p=computeWalletConnectMetaData({appName:e,appDescription:t,appUrl:n,appIcon:o}),f=connectorsForWallets(i||[{groupName:"Popular",wallets:[rainbowWallet,dist_coinbaseWallet,metaMaskWallet,walletConnectWallet]}],{projectId:s,appName:e,appDescription:t,appUrl:n,appIcon:o,walletConnectParameters:{metadata:p}});return c||(c=createDefaultTransports(u)),function(e){let t;let{multiInjectedProviderDiscovery:n=!0,storage:o=function(e){let{deserialize:t=deserialize_deserialize,key:n="wagmi",serialize:o=serialize_serialize,storage:i=tU}=e;function unwrap(e){return e instanceof Promise?e.then(e=>e).catch(()=>null):e}return{...i,key:n,async getItem(e,o){let s=i.getItem(`${n}.${e}`),l=await unwrap(s);return l?t(l)??null:o??null},async setItem(e,t){let s=`${n}.${e}`;null===t?await unwrap(i.removeItem(s)):await unwrap(i.setItem(s,o(t)))},async removeItem(e){await unwrap(i.removeItem(`${n}.${e}`))}}}({storage:"undefined"!=typeof window&&window.localStorage?window.localStorage:tU}),syncConnectedChain:i=!0,ssr:s,...l}=e,c="undefined"!=typeof window&&n?function(){let e=new Set,t=[],request=()=>(function(e){let handler=t=>e(t.detail);return window.addEventListener("eip6963:announceProvider",handler),window.dispatchEvent(new CustomEvent("eip6963:requestProvider")),()=>window.removeEventListener("eip6963:announceProvider",handler)})(n=>{t.some(({info:e})=>e.uuid===n.info.uuid)||(t=[...t,n],e.forEach(e=>e(t,{added:[n]})))}),n=request();return{_listeners:()=>e,clear(){e.forEach(e=>e([],{removed:[...t]})),t=[]},destroy(){this.clear(),e.clear(),n()},findProvider:({rdns:e})=>t.find(t=>t.info.rdns===e),getProviders:()=>t,reset(){this.clear(),n(),n=request()},subscribe:(n,{emitImmediately:o}={})=>(e.add(n),o&&n(t,{added:t}),()=>e.delete(n))}}():void 0,u=vanilla_createStore(()=>l.chains),d=vanilla_createStore(()=>[...l.connectors??[],...s?[]:c?.getProviders().map(providerDetailToConnector)??[]].map(setup));function setup(e){var t;let n=(t=function(e=11){if(!C||tF+e>512){C="",tF=0;for(let e=0;e<256;e++)C+=(256+256*Math.random()|0).toString(16).substring(1)}return C.substring(tF,tF+++e)}(),new Emitter(t)),i={...e({emitter:n,chains:u.getState(),storage:o}),emitter:n,uid:n.uid};return n.on("connect",connect),i.setup?.(),i}function providerDetailToConnector(e){let{info:t}=e,n=e.provider;return injected({target:{...t,id:t.rdns,provider:n}})}let p=new Map;function getInitialState(){return{chainId:u.getState()[0].id,connections:new Map,current:void 0,status:"disconnected"}}let f="0.0.0-canary-";t=tN.i.startsWith(f)?parseInt(tN.i.replace(f,"")):parseInt(tN.i.split(".")[0]??"0");let m=vanilla_createStore(subscribeWithSelector(o?persist(getInitialState,{migrate(e,n){if(n===t)return e;let o=getInitialState(),i=e&&"object"==typeof e&&"chainId"in e&&"number"==typeof e.chainId?e.chainId:o.chainId;return{...o,chainId:i}},name:"store",partialize:e=>({connections:{__type:"Map",value:Array.from(e.connections.entries()).map(([e,t])=>{let{id:n,name:o,type:i,uid:s}=t.connector;return[e,{...t,connector:{id:n,name:o,type:i,uid:s}}]})},chainId:e.chainId,current:e.current}),skipHydration:s,storage:o,version:t}):getInitialState));function change(e){m.setState(t=>{let n=t.connections.get(e.uid);return n?{...t,connections:new Map(t.connections).set(e.uid,{accounts:e.accounts??n.accounts,chainId:e.chainId??n.chainId,connector:n.connector})}:t})}function connect(e){"connecting"!==m.getState().status&&"reconnecting"!==m.getState().status&&m.setState(t=>{let n=d.getState().find(t=>t.uid===e.uid);return n?{...t,connections:new Map(t.connections).set(e.uid,{accounts:e.accounts,chainId:e.chainId,connector:n}),current:e.uid,status:"connected"}:t})}return i&&m.subscribe(({connections:e,current:t})=>t?e.get(t)?.chainId:void 0,e=>{let t=u.getState().some(t=>t.id===e);if(t)return m.setState(t=>({...t,chainId:e??t.chainId}))}),c?.subscribe(e=>{let t=new Map;for(let e of d.getState())t.set(e.id,!0);let n=[];for(let o of e){let e=setup(providerDetailToConnector(o));t.has(e.id)||n.push(e)}d.setState(e=>[...e,...n],!0)}),{get chains(){return u.getState()},get connectors(){return d.getState()},storage:o,getClient:function(e={}){let t;let n=e.chainId??m.getState().chainId,o=u.getState().find(e=>e.id===n);if(e.chainId&&!o)throw new tw.X4;{let e=p.get(m.getState().chainId);if(e&&!o)return e;if(!o)throw new tw.X4}{let e=p.get(n);if(e)return e}if(l.client)t=l.client({chain:o});else{let e=o.id,n=u.getState().map(e=>e.id),i={},s=Object.entries(l);for(let[t,o]of s)if("chains"!==t&&"client"!==t&&"connectors"!==t&&"transports"!==t){if("object"==typeof o){if(e in o)i[t]=o[e];else{let e=n.some(e=>e in o);if(e)continue;i[t]=o}}else i[t]=o}t=(0,tP.e)({...i,chain:o,batch:i.batch??{multicall:!0},transport:t=>l.transports[e]({...t,connectors:d})})}return p.set(n,t),t},get state(){return m.getState()},setState(e){let t;t="function"==typeof e?e(m.getState()):e;let n=getInitialState();"object"!=typeof t&&(t=n);let o=Object.keys(n).some(e=>!(e in t));o&&(t=n),m.setState(t,!0)},subscribe:(e,t,n)=>m.subscribe(e,t,n?{...n,fireImmediately:n.emitImmediately}:void 0),_internal:{mipd:c,store:m,ssr:!!s,syncConnectedChain:i,transports:l.transports,chains:{setState(e){let t="function"==typeof e?e(u.getState()):e;if(0!==t.length)return u.setState(t,!0)},subscribe:e=>u.subscribe(e)},connectors:{providerDetailToConnector,setup,setState:e=>d.setState("function"==typeof e?e(d.getState()):e,!0),subscribe:e=>d.subscribe(e)},events:{change,connect,disconnect:function disconnect(e){m.setState(t=>{let n=t.connections.get(e.uid);if(n&&(n.connector.emitter.off("change",change),n.connector.emitter.off("disconnect",disconnect),n.connector.emitter.on("connect",connect)),t.connections.delete(e.uid),0===t.connections.size)return{...t,connections:new Map,current:void 0,status:"disconnected"};let o=t.connections.values().next().value;return{...t,connections:new Map(t.connections),current:o.connector.uid}})}}}}}({connectors:f,chains:u,transports:c,...d})}},66474:function(e,t,n){"use strict";n.d(t,{j:function(){return s}});var o=n(7506),i=n(24139),s=new class extends o.l{#L;#z;#q;constructor(){super(),this.#q=e=>{if(!i.sk&&window.addEventListener){let listener=()=>e();return window.addEventListener("visibilitychange",listener,!1),()=>{window.removeEventListener("visibilitychange",listener)}}}}onSubscribe(){this.#z||this.setEventListener(this.#q)}onUnsubscribe(){this.hasListeners()||(this.#z?.(),this.#z=void 0)}setEventListener(e){this.#q=e,this.#z?.(),this.#z=e(e=>{"boolean"==typeof e?this.setFocused(e):this.onFocus()})}setFocused(e){let t=this.#L!==e;t&&(this.#L=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return"boolean"==typeof this.#L?this.#L:globalThis.document?.visibilityState!=="hidden"}}},59289:function(e,t,n){"use strict";n.d(t,{R:function(){return getDefaultState},m:function(){return l}});var o=n(27037),i=n(48907),s=n(72008),l=class extends i.F{#G;#d;#u;#W;constructor(e){super(),this.mutationId=e.mutationId,this.#d=e.defaultOptions,this.#u=e.mutationCache,this.#G=[],this.state=e.state||getDefaultState(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options={...this.#d,...e},this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#G.includes(e)||(this.#G.push(e),this.clearGcTimeout(),this.#u.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#G=this.#G.filter(t=>t!==e),this.scheduleGc(),this.#u.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#G.length||("pending"===this.state.status?this.scheduleGc():this.#u.remove(this))}continue(){return this.#W?.continue()??this.execute(this.state.variables)}async execute(e){let t="pending"===this.state.status;try{if(!t){this.#H({type:"pending",variables:e}),await this.#u.config.onMutate?.(e,this);let t=await this.options.onMutate?.(e);t!==this.state.context&&this.#H({type:"pending",context:t,variables:e})}let n=await (this.#W=(0,s.Mz)({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(Error("No mutationFn found")),onFail:(e,t)=>{this.#H({type:"failed",failureCount:e,error:t})},onPause:()=>{this.#H({type:"pause"})},onContinue:()=>{this.#H({type:"continue"})},retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode}),this.#W.promise);return await this.#u.config.onSuccess?.(n,e,this.state.context,this),await this.options.onSuccess?.(n,e,this.state.context),await this.#u.config.onSettled?.(n,null,this.state.variables,this.state.context,this),await this.options.onSettled?.(n,null,e,this.state.context),this.#H({type:"success",data:n}),n}catch(t){try{throw await this.#u.config.onError?.(t,e,this.state.context,this),await this.options.onError?.(t,e,this.state.context),await this.#u.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this),await this.options.onSettled?.(void 0,t,e,this.state.context),t}finally{this.#H({type:"error",error:t})}}}#H(e){this.state=(t=>{switch(e.type){case"failed":return{...t,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...t,isPaused:!0};case"continue":return{...t,isPaused:!1};case"pending":return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:!(0,s.Kw)(this.options.networkMode),status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}})(this.state),o.V.batch(()=>{this.#G.forEach(t=>{t.onMutationUpdate(e)}),this.#u.notify({mutation:this,type:"updated",action:e})})}};function getDefaultState(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}},27037:function(e,t,n){"use strict";n.d(t,{V:function(){return o}});var o=function(){let e=[],t=0,notifyFn=e=>{e()},batchNotifyFn=e=>{e()},scheduleFn=e=>setTimeout(e,0),schedule=n=>{t?e.push(n):scheduleFn(()=>{notifyFn(n)})},flush=()=>{let t=e;e=[],t.length&&scheduleFn(()=>{batchNotifyFn(()=>{t.forEach(e=>{notifyFn(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{--t||flush()}return n},batchCalls:e=>(...t)=>{schedule(()=>{e(...t)})},schedule,setNotifyFunction:e=>{notifyFn=e},setBatchNotifyFunction:e=>{batchNotifyFn=e},setScheduler:e=>{scheduleFn=e}}}()},14304:function(e,t,n){"use strict";n.d(t,{N:function(){return s}});var o=n(7506),i=n(24139),s=new class extends o.l{#Q=!0;#z;#q;constructor(){super(),this.#q=e=>{if(!i.sk&&window.addEventListener){let onlineListener=()=>e(!0),offlineListener=()=>e(!1);return window.addEventListener("online",onlineListener,!1),window.addEventListener("offline",offlineListener,!1),()=>{window.removeEventListener("online",onlineListener),window.removeEventListener("offline",offlineListener)}}}}onSubscribe(){this.#z||this.setEventListener(this.#q)}onUnsubscribe(){this.hasListeners()||(this.#z?.(),this.#z=void 0)}setEventListener(e){this.#q=e,this.#z?.(),this.#z=e(this.setOnline.bind(this))}setOnline(e){let t=this.#Q!==e;t&&(this.#Q=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#Q}}},56888:function(e,t,n){"use strict";n.d(t,{A:function(){return c},z:function(){return fetchState}});var o=n(24139),i=n(27037),s=n(72008),l=n(48907),c=class extends l.F{#K;#V;#Z;#W;#G;#d;#J;constructor(e){super(),this.#J=!1,this.#d=e.defaultOptions,this.setOptions(e.options),this.#G=[],this.#Z=e.cache,this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#K=e.state||function(e){let t="function"==typeof e.initialData?e.initialData():e.initialData,n=void 0!==t,o=n?"function"==typeof e.initialDataUpdatedAt?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?o??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}(this.options),this.state=this.#K,this.scheduleGc()}get meta(){return this.options.meta}setOptions(e){this.options={...this.#d,...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){this.#G.length||"idle"!==this.state.fetchStatus||this.#Z.remove(this)}setData(e,t){let n=(0,o.oE)(this.state.data,e,this.options);return this.#H({data:n,type:"success",dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#H({type:"setState",state:e,setStateOptions:t})}cancel(e){let t=this.#W?.promise;return this.#W?.cancel(e),t?t.then(o.ZT).catch(o.ZT):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#K)}isActive(){return this.#G.some(e=>!1!==e.options.enabled)}isDisabled(){return this.getObserversCount()>0&&!this.isActive()}isStale(){return!!this.state.isInvalidated||(this.getObserversCount()>0?this.#G.some(e=>e.getCurrentResult().isStale):void 0===this.state.data)}isStaleByTime(e=0){return this.state.isInvalidated||void 0===this.state.data||!(0,o.Kp)(this.state.dataUpdatedAt,e)}onFocus(){let e=this.#G.find(e=>e.shouldFetchOnWindowFocus());e?.refetch({cancelRefetch:!1}),this.#W?.continue()}onOnline(){let e=this.#G.find(e=>e.shouldFetchOnReconnect());e?.refetch({cancelRefetch:!1}),this.#W?.continue()}addObserver(e){this.#G.includes(e)||(this.#G.push(e),this.clearGcTimeout(),this.#Z.notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.#G.includes(e)&&(this.#G=this.#G.filter(t=>t!==e),this.#G.length||(this.#W&&(this.#J?this.#W.cancel({revert:!0}):this.#W.cancelRetry()),this.scheduleGc()),this.#Z.notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.#G.length}invalidate(){this.state.isInvalidated||this.#H({type:"invalidate"})}fetch(e,t){if("idle"!==this.state.fetchStatus){if(void 0!==this.state.data&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#W)return this.#W.continueRetry(),this.#W.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.#G.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,i={queryKey:this.queryKey,meta:this.meta},addSignalProperty=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#J=!0,n.signal)})};addSignalProperty(i);let l={fetchOptions:t,options:this.options,queryKey:this.queryKey,state:this.state,fetchFn:()=>this.options.queryFn&&this.options.queryFn!==o.CN?(this.#J=!1,this.options.persister)?this.options.persister(this.options.queryFn,i,this):this.options.queryFn(i):Promise.reject(Error(`Missing queryFn: '${this.options.queryHash}'`))};addSignalProperty(l),this.options.behavior?.onFetch(l,this),this.#V=this.state,("idle"===this.state.fetchStatus||this.state.fetchMeta!==l.fetchOptions?.meta)&&this.#H({type:"fetch",meta:l.fetchOptions?.meta});let onError=e=>{(0,s.DV)(e)&&e.silent||this.#H({type:"error",error:e}),(0,s.DV)(e)||(this.#Z.config.onError?.(e,this),this.#Z.config.onSettled?.(this.state.data,e,this)),this.isFetchingOptimistic||this.scheduleGc(),this.isFetchingOptimistic=!1};return this.#W=(0,s.Mz)({fn:l.fetchFn,abort:n.abort.bind(n),onSuccess:e=>{if(void 0===e){onError(Error(`${this.queryHash} data is undefined`));return}this.setData(e),this.#Z.config.onSuccess?.(e,this),this.#Z.config.onSettled?.(e,this.state.error,this),this.isFetchingOptimistic||this.scheduleGc(),this.isFetchingOptimistic=!1},onError,onFail:(e,t)=>{this.#H({type:"failed",failureCount:e,error:t})},onPause:()=>{this.#H({type:"pause"})},onContinue:()=>{this.#H({type:"continue"})},retry:l.options.retry,retryDelay:l.options.retryDelay,networkMode:l.options.networkMode}),this.#W.promise}#H(e){this.state=(t=>{switch(e.type){case"failed":return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...t,fetchStatus:"paused"};case"continue":return{...t,fetchStatus:"fetching"};case"fetch":return{...t,...fetchState(t.data,this.options),fetchMeta:e.meta??null};case"success":return{...t,data:e.data,dataUpdateCount:t.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":let n=e.error;if((0,s.DV)(n)&&n.revert&&this.#V)return{...this.#V,fetchStatus:"idle"};return{...t,error:n,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:n,fetchStatus:"idle",status:"error"};case"invalidate":return{...t,isInvalidated:!0};case"setState":return{...t,...e.state}}})(this.state),i.V.batch(()=>{this.#G.forEach(e=>{e.onQueryUpdate()}),this.#Z.notify({query:this,type:"updated",action:e})})}};function fetchState(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:(0,s.Kw)(t.networkMode)?"fetching":"paused",...void 0===e&&{error:null,status:"pending"}}}},48907:function(e,t,n){"use strict";n.d(t,{F:function(){return i}});var o=n(24139),i=class{#X;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),(0,o.PN)(this.gcTime)&&(this.#X=setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(o.sk?1/0:3e5))}clearGcTimeout(){this.#X&&(clearTimeout(this.#X),this.#X=void 0)}}},72008:function(e,t,n){"use strict";n.d(t,{DV:function(){return isCancelledError},Kw:function(){return canFetch},Mz:function(){return createRetryer}});var o=n(66474),i=n(14304),s=n(24139);function defaultRetryDelay(e){return Math.min(1e3*2**e,3e4)}function canFetch(e){return(e??"online")!=="online"||i.N.isOnline()}var l=class{constructor(e){this.revert=e?.revert,this.silent=e?.silent}};function isCancelledError(e){return e instanceof l}function createRetryer(e){let t,n,c,u=!1,d=0,p=!1,f=new Promise((e,t)=>{n=e,c=t}),shouldPause=()=>!o.j.isFocused()||"always"!==e.networkMode&&!i.N.isOnline(),resolve=o=>{p||(p=!0,e.onSuccess?.(o),t?.(),n(o))},reject=n=>{p||(p=!0,e.onError?.(n),t?.(),c(n))},pause=()=>new Promise(n=>{t=e=>{let t=p||!shouldPause();return t&&n(e),t},e.onPause?.()}).then(()=>{t=void 0,p||e.onContinue?.()}),run=()=>{let t;if(!p){try{t=e.fn()}catch(e){t=Promise.reject(e)}Promise.resolve(t).then(resolve).catch(t=>{if(p)return;let n=e.retry??(s.sk?0:3),o=e.retryDelay??defaultRetryDelay,i="function"==typeof o?o(d,t):o,l=!0===n||"number"==typeof n&&d{if(shouldPause())return pause()}).then(()=>{u?reject(t):run()})})}};return canFetch(e.networkMode)?run():pause().then(run),{promise:f,cancel:t=>{p||(reject(new l(t)),e.abort?.())},continue:()=>{let e=t?.();return e?f:Promise.resolve()},cancelRetry:()=>{u=!0},continueRetry:()=>{u=!1}}}},7506:function(e,t,n){"use strict";n.d(t,{l:function(){return o}});var o=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}}},24139:function(e,t,n){"use strict";n.d(t,{CN:function(){return i},Ht:function(){return addToStart},Kp:function(){return timeUntilStale},PN:function(){return isValidTimeout},Rm:function(){return hashQueryKeyByOptions},SE:function(){return functionalUpdate},VS:function(){return shallowEqualObjects},VX:function(){return addToEnd},X7:function(){return matchMutation},Ym:function(){return hashKey},ZT:function(){return noop},_v:function(){return sleep},_x:function(){return matchQuery},oE:function(){return replaceData},sk:function(){return o},to:function(){return partialMatchKey}});var o="undefined"==typeof window||"Deno"in globalThis;function noop(){}function functionalUpdate(e,t){return"function"==typeof e?e(t):e}function isValidTimeout(e){return"number"==typeof e&&e>=0&&e!==1/0}function timeUntilStale(e,t){return Math.max(e+(t||0)-Date.now(),0)}function matchQuery(e,t){let{type:n="all",exact:o,fetchStatus:i,predicate:s,queryKey:l,stale:c}=e;if(l){if(o){if(t.queryHash!==hashQueryKeyByOptions(l,t.options))return!1}else if(!partialMatchKey(t.queryKey,l))return!1}if("all"!==n){let e=t.isActive();if("active"===n&&!e||"inactive"===n&&e)return!1}return("boolean"!=typeof c||t.isStale()===c)&&(!i||i===t.state.fetchStatus)&&(!s||!!s(t))}function matchMutation(e,t){let{exact:n,status:o,predicate:i,mutationKey:s}=e;if(s){if(!t.options.mutationKey)return!1;if(n){if(hashKey(t.options.mutationKey)!==hashKey(s))return!1}else if(!partialMatchKey(t.options.mutationKey,s))return!1}return(!o||t.state.status===o)&&(!i||!!i(t))}function hashQueryKeyByOptions(e,t){let n=t?.queryKeyHashFn||hashKey;return n(e)}function hashKey(e){return JSON.stringify(e,(e,t)=>isPlainObject(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function partialMatchKey(e,t){return e===t||typeof e==typeof t&&!!e&&!!t&&"object"==typeof e&&"object"==typeof t&&!Object.keys(t).some(n=>!partialMatchKey(e[n],t[n]))}function shallowEqualObjects(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function isPlainArray(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function isPlainObject(e){if(!hasObjectPrototype(e))return!1;let t=e.constructor;if(void 0===t)return!0;let n=t.prototype;return!!(hasObjectPrototype(n)&&n.hasOwnProperty("isPrototypeOf"))}function hasObjectPrototype(e){return"[object Object]"===Object.prototype.toString.call(e)}function sleep(e){return new Promise(t=>{setTimeout(t,e)})}function replaceData(e,t,n){return"function"==typeof n.structuralSharing?n.structuralSharing(e,t):!1!==n.structuralSharing?function replaceEqualDeep(e,t){if(e===t)return e;let n=isPlainArray(e)&&isPlainArray(t);if(n||isPlainObject(e)&&isPlainObject(t)){let o=n?e:Object.keys(e),i=o.length,s=n?t:Object.keys(t),l=s.length,c=n?[]:{},u=0;for(let i=0;in?o.slice(1):o}function addToStart(e,t,n=0){let o=[t,...e];return n&&o.length>n?o.slice(0,-1):o}var i=Symbol()},30202:function(e,t,n){"use strict";n.d(t,{NL:function(){return useQueryClient},aH:function(){return QueryClientProvider}});var o=n(67294),i=n(85893),s=o.createContext(void 0),useQueryClient=e=>{let t=o.useContext(s);if(e)return e;if(!t)throw Error("No QueryClient set, use QueryClientProvider to set one");return t},QueryClientProvider=({client:e,children:t})=>(o.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,i.jsx)(s.Provider,{value:e,children:t}))},98029:function(e,t,n){"use strict";n.d(t,{D:function(){return useMutation}});var o=n(67294),i=n(59289),s=n(27037),l=n(7506),c=n(24139),u=class extends l.l{#g;#C=void 0;#Y;#$;constructor(e,t){super(),this.#g=e,this.setOptions(t),this.bindMethods(),this.#ee()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#g.defaultMutationOptions(e),(0,c.VS)(this.options,t)||this.#g.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#Y,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,c.Ym)(t.mutationKey)!==(0,c.Ym)(this.options.mutationKey)?this.reset():this.#Y?.state.status==="pending"&&this.#Y.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#Y?.removeObserver(this)}onMutationUpdate(e){this.#ee(),this.#_(e)}getCurrentResult(){return this.#C}reset(){this.#Y?.removeObserver(this),this.#Y=void 0,this.#ee(),this.#_()}mutate(e,t){return this.#$=t,this.#Y?.removeObserver(this),this.#Y=this.#g.getMutationCache().build(this.#g,this.options),this.#Y.addObserver(this),this.#Y.execute(e)}#ee(){let e=this.#Y?.state??(0,i.R)();this.#C={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#_(e){s.V.batch(()=>{if(this.#$&&this.hasListeners()){let t=this.#C.variables,n=this.#C.context;e?.type==="success"?(this.#$.onSuccess?.(e.data,t,n),this.#$.onSettled?.(e.data,null,t,n)):e?.type==="error"&&(this.#$.onError?.(e.error,t,n),this.#$.onSettled?.(void 0,e.error,t,n))}this.listeners.forEach(e=>{e(this.#C)})})}},d=n(30202),p=n(86290);function useMutation(e,t){let n=(0,d.NL)(t),[i]=o.useState(()=>new u(n,e));o.useEffect(()=>{i.setOptions(e)},[i,e]);let l=o.useSyncExternalStore(o.useCallback(e=>i.subscribe(s.V.batchCalls(e)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),c=o.useCallback((e,t)=>{i.mutate(e,t).catch(p.Z)},[i]);if(l.error&&(0,p.L)(i.options.throwOnError,[l.error]))throw l.error;return{...l,mutate:c,mutateAsync:l.mutate}}},86290:function(e,t,n){"use strict";function shouldThrowError(e,t){return"function"==typeof e?e(...t):!!e}function noop(){}n.d(t,{L:function(){return shouldThrowError},Z:function(){return noop}})},52425:function(e,t,n){"use strict";function getAccount(e){let t=e.state.current,n=e.state.connections.get(t),o=n?.accounts,i=o?.[0],s=e.chains.find(e=>e.id===n?.chainId),l=e.state.status;switch(l){case"connected":return{address:i,addresses:o,chain:s,chainId:n?.chainId,connector:n?.connector,isConnected:!0,isConnecting:!1,isDisconnected:!1,isReconnecting:!1,status:l};case"reconnecting":return{address:i,addresses:o,chain:s,chainId:n?.chainId,connector:n?.connector,isConnected:!!i,isConnecting:!1,isDisconnected:!1,isReconnecting:!0,status:l};case"connecting":return{address:i,addresses:o,chain:s,chainId:n?.chainId,connector:n?.connector,isConnected:!1,isConnecting:!0,isDisconnected:!1,isReconnecting:!1,status:l};case"disconnected":return{address:void 0,addresses:void 0,chain:void 0,chainId:void 0,connector:void 0,isConnected:!1,isConnecting:!1,isDisconnected:!0,isReconnecting:!1,status:l}}}n.d(t,{D:function(){return getAccount}})},33397:function(e,t,n){"use strict";n.d(t,{u:function(){return watchAccount}});var o=n(74751),i=n(52425);function watchAccount(e,t){let{onChange:n}=t;return e.subscribe(()=>(0,i.D)(e),n,{equalityFn(e,t){let{connector:n,...i}=e,{connector:s,...l}=t;return(0,o.v)(i,l)&&n?.id===s?.id&&n?.uid===s?.uid}})}},7066:function(e,t,n){"use strict";n.d(t,{G:function(){return BaseError}});var o,i,s=n(79983);let getVersion=()=>`@wagmi/core@${s.i}`;var __classPrivateFieldGet=function(e,t,n,o){if("a"===n&&!o)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(e):o?o.value:t.get(e)};let BaseError=class BaseError extends Error{get docsBaseUrl(){return"https://wagmi.sh/core"}get version(){return getVersion()}constructor(e,t={}){super(),o.add(this),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"WagmiCoreError"});let n=t.cause instanceof BaseError?t.cause.details:t.cause?.message?t.cause.message:t.details,i=t.cause instanceof BaseError&&t.cause.docsPath||t.docsPath;this.message=[e||"An error occurred.","",...t.metaMessages?[...t.metaMessages,""]:[],...i?[`Docs: ${this.docsBaseUrl}${i}.html${t.docsSlug?`#${t.docsSlug}`:""}`]:[],...n?[`Details: ${n}`]:[],`Version: ${this.version}`].join("\n"),t.cause&&(this.cause=t.cause),this.details=n,this.docsPath=i,this.metaMessages=t.metaMessages,this.shortMessage=e}walk(e){return __classPrivateFieldGet(this,o,"m",i).call(this,this,e)}};o=new WeakSet,i=function _BaseError_walk(e,t){return t?.(e)?e:e.cause?__classPrivateFieldGet(this,o,"m",_BaseError_walk).call(this,e.cause,t):e}},87675:function(e,t,n){"use strict";n.d(t,{JK:function(){return ConnectorAccountNotFoundError},X4:function(){return ChainNotConfiguredError},aH:function(){return ConnectorNotConnectedError},wi:function(){return ConnectorAlreadyConnectedError}});var o=n(7066);let ChainNotConfiguredError=class ChainNotConfiguredError extends o.G{constructor(){super("Chain not configured."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ChainNotConfiguredError"})}};let ConnectorAlreadyConnectedError=class ConnectorAlreadyConnectedError extends o.G{constructor(){super("Connector already connected."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ConnectorAlreadyConnectedError"})}};let ConnectorNotConnectedError=class ConnectorNotConnectedError extends o.G{constructor(){super("Connector not connected."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ConnectorNotConnectedError"})}};let ConnectorAccountNotFoundError=class ConnectorAccountNotFoundError extends o.G{constructor({address:e,connector:t}){super(`Account "${e}" not found for connector "${t.name}".`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ConnectorAccountNotFoundError"})}}},74751:function(e,t,n){"use strict";n.d(t,{v:function(){return function deepEqual(e,t){if(e===t)return!0;if(e&&t&&"object"==typeof e&&"object"==typeof t){let n,o;if(e.constructor!==t.constructor)return!1;if(Array.isArray(e)&&Array.isArray(t)){if((n=e.length)!==t.length)return!1;for(o=n;0!=o--;)if(!deepEqual(e[o],t[o]))return!1;return!0}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();let i=Object.keys(e);if((n=i.length)!==Object.keys(t).length)return!1;for(o=n;0!=o--;)if(!Object.prototype.hasOwnProperty.call(t,i[o]))return!1;for(o=n;0!=o--;){let n=i[o];if(n&&!deepEqual(e[n],t[n]))return!1}return!0}return e!=e&&t!=t}}})},81946:function(e,t,n){"use strict";function getAction(e,t,n){let o=e[t.name];if("function"==typeof o)return o;let i=e[n];return"function"==typeof i?i:n=>t(e,n)}n.d(t,{s:function(){return getAction}})},79983:function(e,t,n){"use strict";n.d(t,{i:function(){return o}});let o="2.6.9"},90512:function(e,t,n){"use strict";t.Z=function(){for(var e,t,n=0,o="",i=arguments.length;nvoid 0!==e).length>0)}({request:v})&&!i)try{return await scheduleMulticall(e,{...v,blockNumber:f,blockTag:m})}catch(e){if(!(e instanceof c.pZ)&&!(e instanceof c.mm))throw e}let w=await e.request({method:"eth_call",params:i?[v,o,i]:[v,o]});if("0x"===w)return{data:void 0};return{data:w}}catch(c){let o=function(e){if(!(e instanceof l.G))return;let t=e.walk();return"object"==typeof t?.data?t.data?.data:t.data}(c),{offchainLookup:i,offchainLookupSignature:s}=await n.e(422).then(n.bind(n,10422));if(o?.slice(0,10)===s&&M)return{data:await i(e,{data:o,to:M})};throw function(e,{docsPath:t,...n}){let o=(()=>{let t=(0,w.k)(e,n);return t instanceof v.cj?e:t})();return new u.cg(o,{docsPath:t,...n})}(c,{...t,account:F,chain:e.chain})}}async function scheduleMulticall(e,t){let{batchSize:n=1024,wait:o=0}="object"==typeof e.batch?.multicall?e.batch.multicall:{},{blockNumber:s,blockTag:l="latest",data:d,multicallAddress:p,to:b}=t,v=p;if(!v){if(!e.chain)throw new c.pZ;v=(0,g.L)({blockNumber:s,chain:e.chain,contract:"multicall3"})}let w=s?(0,y.eC)(s):void 0,C=w||l,{schedule:E}=(0,x.S)({id:`${e.uid}.${C}`,wait:o,shouldSplitBatch(e){let t=e.reduce((e,{data:t})=>e+(t.length-2),0);return t>2*n},fn:async t=>{let n=t.map(e=>({allowFailure:!0,callData:e.data,target:e.to})),o=(0,m.R)({abi:i.F8,args:[n],functionName:"aggregate3"}),s=await e.request({method:"eth_call",params:[{data:o,to:v},C]});return(0,f.k)({abi:i.F8,args:[n],functionName:"aggregate3",data:s||"0x"})}}),[{returnData:A,success:k}]=await E({data:d,to:b});if(!k)throw new u.VQ({data:A});return"0x"===A?{data:void 0}:{data:A}}function parseStateMapping(e){if(e&&0!==e.length)return e.reduce((e,{slot:t,value:n})=>{if(66!==t.length)throw new d.W_({size:t.length,targetSize:66,type:"hex"});if(66!==n.length)throw new d.W_({size:n.length,targetSize:66,type:"hex"});return e[t]=n,e},{})}},66403:function(e,t,n){"use strict";n.d(t,{R:function(){return i}});var o=n(86164);let i=(0,o.a)({id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://cloudflare-eth.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io",apiUrl:"https://api.etherscan.io/api"}},contracts:{ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},ensUniversalResolver:{address:"0xce01f8eee7E479C928F8919abD53E553a36CeF67",blockCreated:19258213},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14353601}}})},16189:function(e,t,n){"use strict";let o;n.d(t,{e:function(){return createClient}});var i=n(14503);let s=256;function createClient(e){let{batch:t,cacheTime:n=e.pollingInterval??4e3,key:l="base",name:c="Base Client",pollingInterval:u=4e3,type:d="base"}=e,p=e.chain,f=e.account?(0,i.T)(e.account):void 0,{config:m,request:b,value:g}=e.transport({chain:p,pollingInterval:u}),y={...m,...g},v={account:f,batch:t,cacheTime:n,chain:p,key:l,name:c,pollingInterval:u,request:b,transport:y,type:d,uid:function(e=11){if(!o||s+e>512){o="",s=0;for(let e=0;e<256;e++)o+=(256+256*Math.random()|0).toString(16).substring(1)}return o.substring(s,s+++e)}()};return Object.assign(v,{extend:function extend(e){return t=>{let n=t(e);for(let e in v)delete n[e];let o={...e,...n};return Object.assign(o,{extend:extend(o)})}}(v)})}},91628:function(e,t,n){"use strict";n.d(t,{q:function(){return createTransport}});var o=n(62027),i=n(78863),s=n(39028),l=n(7760);function createTransport({key:e,name:t,request:n,retryCount:c=3,retryDelay:u=150,timeout:d,type:p},f){return{config:{key:e,name:t,request:n,retryCount:c,retryDelay:u,timeout:d,type:p},request:function(e,t={}){return async(n,c={})=>{let{retryDelay:u=150,retryCount:d=3}={...t,...c};return(0,l.J)(async()=>{try{return await e(n)}catch(e){switch(e.code){case s.s7.code:throw new s.s7(e);case s.B.code:throw new s.B(e);case s.LX.code:throw new s.LX(e);case s.nY.code:throw new s.nY(e);case s.XS.code:throw new s.XS(e);case s.yR.code:throw new s.yR(e);case s.Og.code:throw new s.Og(e);case s.pT.code:throw new s.pT(e);case s.KB.code:throw new s.KB(e);case s.gS.code:throw new s.gS(e);case s.Pv.code:throw new s.Pv(e);case s.GD.code:throw new s.GD(e);case s.ab.code:throw new s.ab(e);case s.PE.code:throw new s.PE(e);case s.Ts.code:throw new s.Ts(e);case s.u5.code:throw new s.u5(e);case s.I0.code:throw new s.I0(e);case s.x3.code:throw new s.x3(e);case 5e3:throw new s.ab(e);default:if(e instanceof o.G)throw e;throw new s.ir(e)}}},{delay:({count:e,error:t})=>{if(t&&t instanceof i.Gg){let e=t?.headers?.get("Retry-After");if(e?.match(/\d/))return 1e3*parseInt(e)}return~~(1<"code"in e&&"number"==typeof e.code?-1===e.code||e.code===s.Pv.code||e.code===s.XS.code:!(e instanceof i.Gg)||!e.status||403===e.status||408===e.status||413===e.status||429===e.status||500===e.status||502===e.status||503===e.status||504===e.status})}}(n,{retryCount:c,retryDelay:u}),value:f}}},16693:function(e,t,n){"use strict";n.d(t,{$o:function(){return d},F8:function(){return o},X$:function(){return u},du:function(){return l},k3:function(){return s},nZ:function(){return c}});let o=[{inputs:[{components:[{name:"target",type:"address"},{name:"allowFailure",type:"bool"},{name:"callData",type:"bytes"}],name:"calls",type:"tuple[]"}],name:"aggregate3",outputs:[{components:[{name:"success",type:"bool"},{name:"returnData",type:"bytes"}],name:"returnData",type:"tuple[]"}],stateMutability:"view",type:"function"}],i=[{inputs:[],name:"ResolverNotFound",type:"error"},{inputs:[],name:"ResolverWildcardNotSupported",type:"error"},{inputs:[],name:"ResolverNotContract",type:"error"},{inputs:[{name:"returnData",type:"bytes"}],name:"ResolverError",type:"error"},{inputs:[{components:[{name:"status",type:"uint16"},{name:"message",type:"string"}],name:"errors",type:"tuple[]"}],name:"HttpError",type:"error"}],s=[...i,{name:"resolve",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes"},{name:"data",type:"bytes"}],outputs:[{name:"",type:"bytes"},{name:"address",type:"address"}]},{name:"resolve",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes"},{name:"data",type:"bytes"},{name:"gateways",type:"string[]"}],outputs:[{name:"",type:"bytes"},{name:"address",type:"address"}]}],l=[...i,{name:"reverse",type:"function",stateMutability:"view",inputs:[{type:"bytes",name:"reverseName"}],outputs:[{type:"string",name:"resolvedName"},{type:"address",name:"resolvedAddress"},{type:"address",name:"reverseResolver"},{type:"address",name:"resolver"}]},{name:"reverse",type:"function",stateMutability:"view",inputs:[{type:"bytes",name:"reverseName"},{type:"string[]",name:"gateways"}],outputs:[{type:"string",name:"resolvedName"},{type:"address",name:"resolvedAddress"},{type:"address",name:"reverseResolver"},{type:"address",name:"resolver"}]}],c=[{name:"text",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"},{name:"key",type:"string"}],outputs:[{name:"",type:"string"}]}],u=[{name:"addr",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"}],outputs:[{name:"",type:"address"}]},{name:"addr",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"},{name:"coinType",type:"uint256"}],outputs:[{name:"",type:"bytes"}]}],d=[{inputs:[{internalType:"address",name:"_signer",type:"address"},{internalType:"bytes32",name:"_hash",type:"bytes32"},{internalType:"bytes",name:"_signature",type:"bytes"}],stateMutability:"nonpayable",type:"constructor"}]},21746:function(e,t,n){"use strict";n.d(t,{$:function(){return o},Up:function(){return i},hZ:function(){return s}});let o={1:"An `assert` condition failed.",17:"Arithmetic operation resulted in underflow or overflow.",18:"Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).",33:"Attempted to convert to an invalid type.",34:"Attempted to access a storage byte array that is incorrectly encoded.",49:"Performed `.pop()` on an empty array",50:"Array index is out of bounds.",65:"Allocated too much memory or created an array which is too large.",81:"Attempted to call a zero-initialized variable of internal function type."},i={inputs:[{name:"message",type:"string"}],name:"Error",type:"error"},s={inputs:[{name:"reason",type:"uint256"}],name:"Panic",type:"error"}},84192:function(e,t,n){"use strict";n.d(t,{Bd:function(){return s},Zn:function(){return i},ez:function(){return o}});let o={gwei:9,wei:18},i={ether:-9,wei:9},s={ether:-18,gwei:-9}},57412:function(e,t,n){"use strict";n.d(t,{CI:function(){return InvalidAbiDecodingTypeError},FM:function(){return AbiEventSignatureEmptyTopicsError},Gy:function(){return DecodeLogTopicsMismatch},KY:function(){return BytesSizeMismatchError},M4:function(){return AbiEncodingBytesSizeMismatchError},MX:function(){return AbiFunctionOutputsNotFoundError},S4:function(){return AbiItemAmbiguityError},SM:function(){return DecodeLogDataMismatch},cO:function(){return AbiConstructorParamsNotFoundError},dh:function(){return InvalidAbiEncodingTypeError},fM:function(){return AbiConstructorNotFoundError},fs:function(){return AbiEncodingLengthMismatchError},gr:function(){return AbiEncodingArrayLengthMismatchError},hn:function(){return InvalidArrayError},lC:function(){return AbiEventSignatureNotFoundError},mv:function(){return AbiEventNotFoundError},wM:function(){return InvalidDefinitionTypeError},wb:function(){return AbiDecodingZeroDataError},xB:function(){return AbiDecodingDataSizeTooSmallError},xL:function(){return AbiFunctionNotFoundError},yP:function(){return AbiErrorSignatureNotFoundError}});var o=n(80522),i=n(39135),s=n(62027);let AbiConstructorNotFoundError=class AbiConstructorNotFoundError extends s.G{constructor({docsPath:e}){super("A constructor was not found on the ABI.\nMake sure you are using the correct ABI and that the constructor exists on it.",{docsPath:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiConstructorNotFoundError"})}};let AbiConstructorParamsNotFoundError=class AbiConstructorParamsNotFoundError extends s.G{constructor({docsPath:e}){super("Constructor arguments were provided (`args`), but a constructor parameters (`inputs`) were not found on the ABI.\nMake sure you are using the correct ABI, and that the `inputs` attribute on the constructor exists.",{docsPath:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiConstructorParamsNotFoundError"})}};let AbiDecodingDataSizeTooSmallError=class AbiDecodingDataSizeTooSmallError extends s.G{constructor({data:e,params:t,size:n}){super(`Data size of ${n} bytes is too small for given parameters.`,{metaMessages:[`Params: (${(0,o.h)(t,{includeName:!0})})`,`Data: ${e} (${n} bytes)`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiDecodingDataSizeTooSmallError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"params",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"size",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=e,this.params=t,this.size=n}};let AbiDecodingZeroDataError=class AbiDecodingZeroDataError extends s.G{constructor(){super('Cannot decode zero data ("0x") with ABI parameters.'),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiDecodingZeroDataError"})}};let AbiEncodingArrayLengthMismatchError=class AbiEncodingArrayLengthMismatchError extends s.G{constructor({expectedLength:e,givenLength:t,type:n}){super(`ABI encoding array length mismatch for type ${n}. +`},89192:function(e,t,n){"use strict";let o,i,s,l,c,u,d,p,f,m,g,b,y,v,w,C,E;n.d(t,{NL:function(){return ConnectButton},pj:function(){return RainbowKitProvider},vX:function(){return getDefaultConfig}});var x,A,k,B,S,I,j,T,P='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',M={rounded:`SFRounded, ui-rounded, "SF Pro Rounded", ${P}`,system:P},O={large:{actionButton:"9999px",connectButton:"12px",modal:"24px",modalMobile:"28px"},medium:{actionButton:"10px",connectButton:"8px",modal:"16px",modalMobile:"18px"},none:{actionButton:"0px",connectButton:"0px",modal:"0px",modalMobile:"0px"},small:{actionButton:"4px",connectButton:"4px",modal:"8px",modalMobile:"8px"}},R={large:{modalOverlay:"blur(20px)"},none:{modalOverlay:"blur(0px)"},small:{modalOverlay:"blur(4px)"}},baseTheme=({borderRadius:e="large",fontStack:t="rounded",overlayBlur:n="none"})=>({blurs:{modalOverlay:R[n].modalOverlay},fonts:{body:M[t]},radii:{actionButton:O[e].actionButton,connectButton:O[e].connectButton,menuButton:O[e].connectButton,modal:O[e].modal,modalMobile:O[e].modalMobile}}),U={blue:{accentColor:"#0E76FD",accentColorForeground:"#FFF"},green:{accentColor:"#1DB847",accentColorForeground:"#FFF"},orange:{accentColor:"#FF801F",accentColorForeground:"#FFF"},pink:{accentColor:"#FF5CA0",accentColorForeground:"#FFF"},purple:{accentColor:"#5F5AFA",accentColorForeground:"#FFF"},red:{accentColor:"#FA423C",accentColorForeground:"#FFF"}},F=U.blue,lightTheme=({accentColor:e=F.accentColor,accentColorForeground:t=F.accentColorForeground,...n}={})=>({...baseTheme(n),colors:{accentColor:e,accentColorForeground:t,actionButtonBorder:"rgba(0, 0, 0, 0.04)",actionButtonBorderMobile:"rgba(0, 0, 0, 0.06)",actionButtonSecondaryBackground:"rgba(0, 0, 0, 0.06)",closeButton:"rgba(60, 66, 66, 0.8)",closeButtonBackground:"rgba(0, 0, 0, 0.06)",connectButtonBackground:"#FFF",connectButtonBackgroundError:"#FF494A",connectButtonInnerBackground:"linear-gradient(0deg, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.06))",connectButtonText:"#25292E",connectButtonTextError:"#FFF",connectionIndicator:"#30E000",downloadBottomCardBackground:"linear-gradient(126deg, rgba(255, 255, 255, 0) 9.49%, rgba(171, 171, 171, 0.04) 71.04%), #FFFFFF",downloadTopCardBackground:"linear-gradient(126deg, rgba(171, 171, 171, 0.2) 9.49%, rgba(255, 255, 255, 0) 71.04%), #FFFFFF",error:"#FF494A",generalBorder:"rgba(0, 0, 0, 0.06)",generalBorderDim:"rgba(0, 0, 0, 0.03)",menuItemBackground:"rgba(60, 66, 66, 0.1)",modalBackdrop:"rgba(0, 0, 0, 0.3)",modalBackground:"#FFF",modalBorder:"transparent",modalText:"#25292E",modalTextDim:"rgba(60, 66, 66, 0.3)",modalTextSecondary:"rgba(60, 66, 66, 0.6)",profileAction:"#FFF",profileActionHover:"rgba(255, 255, 255, 0.5)",profileForeground:"rgba(60, 66, 66, 0.06)",selectedOptionBorder:"rgba(60, 66, 66, 0.1)",standby:"#FFD641"},shadows:{connectButton:"0px 4px 12px rgba(0, 0, 0, 0.1)",dialog:"0px 8px 32px rgba(0, 0, 0, 0.32)",profileDetailsAction:"0px 2px 6px rgba(37, 41, 46, 0.04)",selectedOption:"0px 2px 6px rgba(0, 0, 0, 0.24)",selectedWallet:"0px 2px 6px rgba(0, 0, 0, 0.12)",walletLogo:"0px 2px 16px rgba(0, 0, 0, 0.16)"}});lightTheme.accentColors=U;var N=n(93763),D=n(67294),addRecipe=function(e,t){return Object.defineProperty(e,"__recipe__",{value:t,writable:!1}),e};function createNormalizeValueFn(e){var{conditions:t}=e;if(!t)throw Error("Styles have no conditions");return addRecipe(function(e){if("string"==typeof e||"number"==typeof e||"boolean"==typeof e){if(!t.defaultCondition)throw Error("No default condition");return{[t.defaultCondition]:e}}if(Array.isArray(e)){if(!("responsiveArray"in t))throw Error("Responsive arrays are not supported");var n={};for(var o in t.responsiveArray)null!=e[o]&&(n[t.responsiveArray[o]]=e[o]);return n}return e},{importPath:"@vanilla-extract/sprinkles/createUtils",importName:"createNormalizeValueFn",args:[{conditions:e.conditions}]})}function ownKeys(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function _objectSpread2(e){for(var t=1;tfunction(){for(var t=arguments.length,n=Array(t),o=0;oe.styles)),s=Object.keys(i),l=s.filter(e=>"mappings"in i[e]);return Object.assign(t=>{var n=[],o={},s=_objectSpread2({},t),c=!1;for(var u of l){var d=t[u];if(null!=d)for(var p of(c=!0,i[u].mappings))o[p]=d,null==s[p]&&delete s[p]}var f=c?_objectSpread2(_objectSpread2({},o),s):t;for(var m in f)if("continue"===function(){var e=f[m],t=i[m];try{if(t.mappings)return"continue";if("string"==typeof e||"number"==typeof e)n.push(t.values[e].defaultClass);else if(Array.isArray(e))for(var o=0;oe,_=n(92321),L=n(90512),z=n(37122),q=n(97405),G=n(95946),W=n(61836),H=n(15229),Q=n(92106);async function getBalance(e,{address:t,blockNumber:n,blockTag:o="latest"}){let i=n?(0,Q.eC)(n):void 0,s=await e.request({method:"eth_getBalance",params:[t,i||o]});return BigInt(s)}var K=n(81946),V=n(84192);function getUnit(e){return"number"==typeof e?e:"wei"===e?0:Math.abs(V.Bd[e])}var Z=n(16693),J=n(57412),X=n(62027),Y=n(7210),$=n(55629),ee=n(47864),et=n(39028);function getContractError(e,{abi:t,address:n,args:o,docsPath:i,functionName:s,sender:l}){let{code:c,data:u,message:d,shortMessage:p}=e instanceof q.VQ?e:e instanceof X.G?e.walk(e=>"data"in e)||e.walk():{},f=e instanceof J.wb?new q.Dk({functionName:s}):[3,et.XS.code].includes(c)&&(u||d||p)?new q.Lu({abi:t,data:"object"==typeof u?u.data:u,functionName:s,message:p??d}):e;return new q.uq(f,{abi:t,args:o,contractAddress:n,docsPath:i,functionName:s,sender:l})}function getAction_getAction(e,t,n){return o=>e[t.name||n]?.(o)??t(e,o)}var er=n(61376);async function readContract(e,t){let{abi:n,address:o,args:i,functionName:s,...l}=t,c=(0,$.R)({abi:n,args:i,functionName:s});try{let{data:t}=await getAction_getAction(e,er.RE,"call")({...l,data:c,to:o});return(0,Y.k)({abi:n,args:i,functionName:s,data:t||"0x"})}catch(e){throw getContractError(e,{abi:n,address:o,args:i,docsPath:"/docs/contract/readContract",functionName:s})}}async function multicall(e,t){let{allowFailure:n=!0,batchSize:o,blockNumber:i,blockTag:s,multicallAddress:l,stateOverride:c}=t,u=t.contracts,d=o??("object"==typeof e.batch?.multicall&&e.batch.multicall.batchSize||1024),p=l;if(!p){if(!e.chain)throw Error("client chain not configured. multicallAddress is required.");p=(0,ee.L)({blockNumber:i,chain:e.chain,contract:"multicall3"})}let f=[[]],m=0,g=0;for(let e=0;e0&&g>d&&f[m].length>0&&(m++,g=(e.length-2)/2,f[m]=[]),f[m]=[...f[m],{allowFailure:!0,callData:e,target:o}]}catch(l){let e=getContractError(l,{abi:t,address:o,args:i,docsPath:"/docs/contract/multicall",functionName:s});if(!n)throw e;f[m]=[...f[m],{allowFailure:!0,callData:"0x",target:o}]}}let b=await Promise.allSettled(f.map(t=>getAction_getAction(e,readContract,"readContract")({abi:Z.F8,address:p,args:[t],blockNumber:i,blockTag:s,functionName:"aggregate3",stateOverride:c}))),y=[];for(let e=0;e{let i=n.chainId??e.state.chainId;return{...t,[i]:[...t[i]||[],{contract:n,index:o}]}},{}),c=(await Promise.all(Object.entries(t).map(([t,l])=>multicall_multicall(e,{...s,allowFailure:n,blockNumber:o,blockTag:i,chainId:parseInt(t),contracts:l.map(({contract:e})=>e)})))).flat(),u=Object.values(t).flatMap(e=>e.map(({index:e})=>e));return c.reduce((e,t,n)=>(e&&(e[u[n]]=t),e),[])}catch(t){if(t instanceof q.uq)throw t;let promises=()=>l.map(t=>(function(e,t){let{chainId:n,...o}=t,i=e.getClient({chainId:n}),s=(0,K.s)(i,readContract,"readContract");return s(o)})(e,{...t,blockNumber:o,blockTag:i}));if(n)return(await Promise.allSettled(promises())).map(e=>"fulfilled"===e.status?{result:e.value,status:"success"}:{error:e.reason,result:void 0,status:"failure"});return await Promise.all(promises())}}async function getBalance_getBalance(e,t){let{address:n,blockNumber:o,blockTag:i,chainId:s,token:l,unit:c="ether"}=t;if(l)try{return getTokenBalance(e,{balanceAddress:n,chainId:s,symbolType:"string",tokenAddress:l})}catch(t){if(t instanceof q.uq){let t=await getTokenBalance(e,{balanceAddress:n,chainId:s,symbolType:"bytes32",tokenAddress:l}),o=(0,G.rR)((0,W.f)(t.symbol,{dir:"right"}));return{...t,symbol:o}}throw t}let u=e.getClient({chainId:s}),d=(0,K.s)(u,getBalance,"getBalance"),p=await d(o?{address:n,blockNumber:o}:{address:n,blockTag:i}),f=e.chains.find(e=>e.id===s)??u.chain;return{decimals:f.nativeCurrency.decimals,formatted:(0,H.b)(p,getUnit(c)),symbol:f.nativeCurrency.symbol,value:p}}async function getTokenBalance(e,t){let{balanceAddress:n,chainId:o,symbolType:i,tokenAddress:s,unit:l}=t,c={abi:[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{type:"address"}],outputs:[{type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{type:"uint8"}]},{type:"function",name:"symbol",stateMutability:"view",inputs:[],outputs:[{type:i}]}],address:s},[u,d,p]=await readContracts(e,{allowFailure:!1,contracts:[{...c,functionName:"balanceOf",args:[n],chainId:o},{...c,functionName:"decimals",chainId:o},{...c,functionName:"symbol",chainId:o}]}),f=(0,H.b)(u??"0",getUnit(l??d));return{decimals:d,formatted:f,symbol:p,value:u}}function utils_hashFn(e){return JSON.stringify(e,(e,t)=>!function(e){if(!hasObjectPrototype(e))return!1;let t=e.constructor;if(void 0===t)return!0;let n=t.prototype;return!!(hasObjectPrototype(n)&&n.hasOwnProperty("isPrototypeOf"))}(t)?"bigint"==typeof t?t.toString():t:Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}))}function hasObjectPrototype(e){return"[object Object]"===Object.prototype.toString.call(e)}function filterQueryOptions(e){let{_defaulted:t,behavior:n,gcTime:o,initialData:i,initialDataUpdatedAt:s,maxPages:l,meta:c,networkMode:u,queryFn:d,queryHash:p,queryKey:f,queryKeyHashFn:m,retry:g,retryDelay:b,structuralSharing:y,getPreviousPageParam:v,getNextPageParam:w,initialPageParam:C,_optimisticResults:E,enabled:x,notifyOnChangeProps:A,placeholderData:k,refetchInterval:B,refetchIntervalInBackground:S,refetchOnMount:I,refetchOnReconnect:j,refetchOnWindowFocus:T,retryOnMount:P,select:M,staleTime:O,suspense:R,throwOnError:U,config:F,connector:N,query:D,..._}=e;return _}var en=n(24139),ea=n(27037),eo=n(66474),ei=n(7506),es=n(56888),el=class extends ei.l{constructor(e,t){super(),this.options=t,this.#b=e,this.#y=null,this.bindMethods(),this.setOptions(t)}#b;#v=void 0;#w=void 0;#C=void 0;#E;#x;#y;#A;#k;#B;#S;#I;#j;#T=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){1===this.listeners.size&&(this.#v.addObserver(this),shouldFetchOnMount(this.#v,this.options)?this.#P():this.updateResult(),this.#M())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return shouldFetchOn(this.#v,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return shouldFetchOn(this.#v,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#O(),this.#R(),this.#v.removeObserver(this)}setOptions(e,t){let n=this.options,o=this.#v;if(this.options=this.#b.defaultQueryOptions(e),void 0!==this.options.enabled&&"boolean"!=typeof this.options.enabled)throw Error("Expected enabled to be a boolean");this.#U(),this.#v.setOptions(this.options),n._defaulted&&!(0,en.VS)(this.options,n)&&this.#b.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#v,observer:this});let i=this.hasListeners();i&&shouldFetchOptionally(this.#v,o,this.options,n)&&this.#P(),this.updateResult(t),i&&(this.#v!==o||this.options.enabled!==n.enabled||this.options.staleTime!==n.staleTime)&&this.#F();let s=this.#N();i&&(this.#v!==o||this.options.enabled!==n.enabled||s!==this.#j)&&this.#D(s)}getOptimisticResult(e){let t=this.#b.getQueryCache().build(this.#b,e),n=this.createResult(t,e);return(0,en.VS)(this.getCurrentResult(),n)||(this.#C=n,this.#x=this.options,this.#E=this.#v.state),n}getCurrentResult(){return this.#C}trackResult(e,t){let n={};return Object.keys(e).forEach(o=>{Object.defineProperty(n,o,{configurable:!1,enumerable:!0,get:()=>(this.trackProp(o),t?.(o),e[o])})}),n}trackProp(e){this.#T.add(e)}getCurrentQuery(){return this.#v}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#b.defaultQueryOptions(e),n=this.#b.getQueryCache().build(this.#b,t);return n.isFetchingOptimistic=!0,n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#P({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#C))}#P(e){this.#U();let t=this.#v.fetch(this.options,e);return e?.throwOnError||(t=t.catch(en.ZT)),t}#F(){if(this.#O(),en.sk||this.#C.isStale||!(0,en.PN)(this.options.staleTime))return;let e=(0,en.Kp)(this.#C.dataUpdatedAt,this.options.staleTime);this.#S=setTimeout(()=>{this.#C.isStale||this.updateResult()},e+1)}#N(){return("function"==typeof this.options.refetchInterval?this.options.refetchInterval(this.#v):this.options.refetchInterval)??!1}#D(e){this.#R(),this.#j=e,!en.sk&&!1!==this.options.enabled&&(0,en.PN)(this.#j)&&0!==this.#j&&(this.#I=setInterval(()=>{(this.options.refetchIntervalInBackground||eo.j.isFocused())&&this.#P()},this.#j))}#M(){this.#F(),this.#D(this.#N())}#O(){this.#S&&(clearTimeout(this.#S),this.#S=void 0)}#R(){this.#I&&(clearInterval(this.#I),this.#I=void 0)}createResult(e,t){let n;let o=this.#v,i=this.options,s=this.#C,l=this.#E,c=this.#x,u=e!==o,d=u?e.state:this.#w,{state:p}=e,f={...p},m=!1;if(t._optimisticResults){let n=this.hasListeners(),s=!n&&shouldFetchOnMount(e,t),l=n&&shouldFetchOptionally(e,o,t,i);(s||l)&&(f={...f,...(0,es.z)(p.data,e.options)}),"isRestoring"===t._optimisticResults&&(f.fetchStatus="idle")}let{error:g,errorUpdatedAt:b,status:y}=f;if(t.select&&void 0!==f.data){if(s&&f.data===l?.data&&t.select===this.#A)n=this.#k;else try{this.#A=t.select,n=t.select(f.data),n=(0,en.oE)(s?.data,n,t),this.#k=n,this.#y=null}catch(e){this.#y=e}}else n=f.data;if(void 0!==t.placeholderData&&void 0===n&&"pending"===y){let e;if(s?.isPlaceholderData&&t.placeholderData===c?.placeholderData)e=s.data;else if(e="function"==typeof t.placeholderData?t.placeholderData(this.#B?.state.data,this.#B):t.placeholderData,t.select&&void 0!==e)try{e=t.select(e),this.#y=null}catch(e){this.#y=e}void 0!==e&&(y="success",n=(0,en.oE)(s?.data,e,t),m=!0)}this.#y&&(g=this.#y,n=this.#k,b=Date.now(),y="error");let v="fetching"===f.fetchStatus,w="pending"===y,C="error"===y,E=w&&v,x=void 0!==n,A={status:y,fetchStatus:f.fetchStatus,isPending:w,isSuccess:"success"===y,isError:C,isInitialLoading:E,isLoading:E,data:n,dataUpdatedAt:f.dataUpdatedAt,error:g,errorUpdatedAt:b,failureCount:f.fetchFailureCount,failureReason:f.fetchFailureReason,errorUpdateCount:f.errorUpdateCount,isFetched:f.dataUpdateCount>0||f.errorUpdateCount>0,isFetchedAfterMount:f.dataUpdateCount>d.dataUpdateCount||f.errorUpdateCount>d.errorUpdateCount,isFetching:v,isRefetching:v&&!w,isLoadingError:C&&!x,isPaused:"paused"===f.fetchStatus,isPlaceholderData:m,isRefetchError:C&&x,isStale:isStale(e,t),refetch:this.refetch};return A}updateResult(e){let t=this.#C,n=this.createResult(this.#v,this.options);if(this.#E=this.#v.state,this.#x=this.options,void 0!==this.#E.data&&(this.#B=this.#v),(0,en.VS)(n,t))return;this.#C=n;let o={};e?.listeners!==!1&&(()=>{if(!t)return!0;let{notifyOnChangeProps:e}=this.options,n="function"==typeof e?e():e;if("all"===n||!n&&!this.#T.size)return!0;let o=new Set(n??this.#T);return this.options.throwOnError&&o.add("error"),Object.keys(this.#C).some(e=>{let n=this.#C[e]!==t[e];return n&&o.has(e)})})()&&(o.listeners=!0),this.#_({...o,...e})}#U(){let e=this.#b.getQueryCache().build(this.#b,this.options);if(e===this.#v)return;let t=this.#v;this.#v=e,this.#w=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#M()}#_(e){ea.V.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#C)}),this.#b.getQueryCache().notify({query:this.#v,type:"observerResultsUpdated"})})}};function shouldFetchOnMount(e,t){return!1!==t.enabled&&void 0===e.state.data&&!("error"===e.state.status&&!1===t.retryOnMount)||void 0!==e.state.data&&shouldFetchOn(e,t,t.refetchOnMount)}function shouldFetchOn(e,t,n){if(!1!==t.enabled){let o="function"==typeof n?n(e):n;return"always"===o||!1!==o&&isStale(e,t)}return!1}function shouldFetchOptionally(e,t,n,o){return(e!==t||!1===o.enabled)&&(!n.suspense||"error"!==e.state.status)&&isStale(e,n)}function isStale(e,t){return!1!==t.enabled&&e.isStaleByTime(t.staleTime)}n(85893);var ec=D.createContext((E=!1,{clearReset:()=>{E=!1},reset:()=>{E=!0},isReset:()=>E})),useQueryErrorResetBoundary=()=>D.useContext(ec),eu=n(30202),ed=D.createContext(!1),useIsRestoring=()=>D.useContext(ed);ed.Provider;var ep=n(86290),ensurePreventErrorBoundaryRetry=(e,t)=>{(e.suspense||e.throwOnError)&&!t.isReset()&&(e.retryOnMount=!1)},useClearResetErrorBoundary=e=>{D.useEffect(()=>{e.clearReset()},[e])},getHasError=({result:e,errorResetBoundary:t,throwOnError:n,query:o})=>e.isError&&!t.isReset()&&!e.isFetching&&o&&(0,ep.L)(n,[e.error,o]),ensureStaleTime=e=>{e.suspense&&"number"!=typeof e.staleTime&&(e.staleTime=1e3)},shouldSuspend=(e,t)=>e?.suspense&&t.isPending,fetchOptimistic=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function query_useQuery(e){let t=function(e,t,n){let o=(0,eu.NL)(n),i=useIsRestoring(),s=useQueryErrorResetBoundary(),l=o.defaultQueryOptions(e);l._optimisticResults=i?"isRestoring":"optimistic",ensureStaleTime(l),ensurePreventErrorBoundaryRetry(l,s),useClearResetErrorBoundary(s);let[c]=D.useState(()=>new t(o,l)),u=c.getOptimisticResult(l);if(D.useSyncExternalStore(D.useCallback(e=>{let t=i?()=>void 0:c.subscribe(ea.V.batchCalls(e));return c.updateResult(),t},[c,i]),()=>c.getCurrentResult(),()=>c.getCurrentResult()),D.useEffect(()=>{c.setOptions(l,{listeners:!1})},[l,c]),shouldSuspend(l,u))throw fetchOptimistic(l,c,s);if(getHasError({result:u,errorResetBoundary:s,throwOnError:l.throwOnError,query:o.getQueryCache().get(l.queryHash)}))throw u.error;return l.notifyOnChangeProps?u:c.trackResult(u)}({...e,queryKeyHashFn:utils_hashFn},el,void 0);return t.queryKey=e.queryKey,t}function getChainId(e){return e.state.chainId}function useChainId(e={}){let t=(0,z.Z)(e);return(0,D.useSyncExternalStore)(e=>(function(e,t){let{onChange:n}=t;return e.subscribe(e=>e.chainId,n)})(t,{onChange:e}),()=>getChainId(t),()=>getChainId(t))}function useBalance(e={}){let{address:t,query:n={}}=e,o=(0,z.Z)(e),i=useChainId(),s=function(e,t={}){return{async queryFn({queryKey:t}){let{address:n,scopeKey:o,...i}=t[1];if(!n)throw Error("address is required");let s=await getBalance_getBalance(e,{...i,address:n});return s??null},queryKey:function(e={}){return["balance",filterQueryOptions(e)]}(t)}}(o,{...e,chainId:e.chainId??i}),l=!!(t&&(n.enabled??!0));return query_useQuery({...n,...s,enabled:l})}let eh=new Map([[8217,"apostrophe"],[8260,"fraction slash"],[12539,"middle dot"]]);function read_compressed_payload(e){var t;let n;return t=function(e){let t=0;function u16(){return e[t++]<<8|e[t++]}let n=u16(),o=1,i=[0,1];for(let e=1;e>--c&1}let d=2147483648-1,p=0;for(let e=0;e<31;e++)p=p<<1|read_bit();let f=[],m=0,g=2147483648;for(;;){let e=Math.floor(((p-m+1)*o-1)/g),t=0,s=n;for(;s-t>1;){let n=t+s>>>1;e>>1|read_bit(),l=l<<1^1073741824,c=(1073741824^c)<<1|1073741825;m=l,g=1+c-l}let b=n-4;return f.map(t=>{switch(t-b){case 3:return b+65792+(e[l++]<<16|e[l++]<<8|e[l++]);case 2:return b+256+(e[l++]<<8|e[l++]);case 1:return b+e[l++];default:return t-1}})}(function(e){let t=[];[..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"].forEach((e,n)=>t[e.charCodeAt(0)]=n);let n=e.length,o=new Uint8Array(6*n>>3);for(let i=0,s=0,l=0,c=0;i=8&&(o[s++]=c>>(l-=8));return o}(e)),n=0,()=>t[n++]}function read_sorted(e,t=0){let n=[];for(;;){let o=e(),i=e();if(!i)break;t+=o;for(let e=0;e{let t=read_sorted(e);if(t.length)return t})}function read_mapped(e){let t=[];for(;;){let n=e();if(0==n)break;t.push(function(e,t){let n=1+t(),o=t(),i=read_array_while(t);return read_transposed(i.length,1+e,t).flatMap((e,t)=>{let[s,...l]=e;return Array(i[t]).fill().map((e,t)=>{let i=t*o;return[s+t*n,l.map(e=>e+i)]})})}(n,e))}for(;;){let n=e()-1;if(n<0)break;t.push(read_transposed(1+e(),1+n,e).map(e=>[e[0],e.slice(1)]))}return t.flat()}function read_array_while(e){let t=[];for(;;){let n=e(t.length);if(!n)break;t.push(n)}return t}function read_transposed(e,t,n){let o=Array(e).fill().map(()=>[]);for(let i=0;i>1:o>>1}return n})(e,n).forEach((e,t)=>o[t].push(e));return o}function quote_cp(e){return`{${e.toString(16).toUpperCase().padStart(2,"0")}}`}function str_from_cps(e){let t=e.length;if(t<4096)return String.fromCodePoint(...e);let n=[];for(let o=0;o>24&255}function unpack_cp(e){return 16777215&e}function is_hangul(e){return e>=44032&&e<55204}function decomposed(e){o||function(){let e=read_compressed_payload("AEUDTAHBCFQATQDRADAAcgAgADQAFAAsABQAHwAOACQADQARAAoAFwAHABIACAAPAAUACwAFAAwABAAQAAMABwAEAAoABQAIAAIACgABAAQAFAALAAIACwABAAIAAQAHAAMAAwAEAAsADAAMAAwACgANAA0AAwAKAAkABAAdAAYAZwDSAdsDJgC0CkMB8xhZAqfoC190UGcThgBurwf7PT09Pb09AjgJum8OjDllxHYUKXAPxzq6tABAxgK8ysUvWAgMPT09PT09PSs6LT2HcgWXWwFLoSMEEEl5RFVMKvO0XQ8ExDdJMnIgsj26PTQyy8FfEQ8AY8IPAGcEbwRwBHEEcgRzBHQEdQR2BHcEeAR6BHsEfAR+BIAEgfndBQoBYgULAWIFDAFiBNcE2ATZBRAFEQUvBdALFAsVDPcNBw13DYcOMA4xDjMB4BllHI0B2grbAMDpHLkQ7QHVAPRNQQFnGRUEg0yEB2uaJF8AJpIBpob5AERSMAKNoAXqaQLUBMCzEiACnwRZEkkVsS7tANAsBG0RuAQLEPABv9HICTUBXigPZwRBApMDOwAamhtaABqEAY8KvKx3LQ4ArAB8UhwEBAVSagD8AEFZADkBIadVj2UMUgx5Il4ANQC9AxIB1BlbEPMAs30CGxlXAhwZKQIECBc6EbsCoxngzv7UzRQA8M0BawL6ZwkN7wABAD33OQRcsgLJCjMCjqUChtw/km+NAsXPAoP2BT84PwURAK0RAvptb6cApQS/OMMey5HJS84UdxpxTPkCogVFITaTOwERAK5pAvkNBOVyA7q3BKlOJSALAgUIBRcEdASpBXqzABXFSWZOawLCOqw//AolCZdvv3dSBkEQGyelEPcMMwG1ATsN7UvYBPEGOwTJH30ZGQ/NlZwIpS3dDO0m4y6hgFoj9SqDBe1L9DzdC01RaA9ZC2UJ4zpjgU4DIQENIosK3Q05CG0Q8wrJaw3lEUUHOQPVSZoApQcBCxEdNRW1JhBirAsJOXcG+xr2C48mrxMpevwF0xohBk0BKRr/AM8u54WwWjFcHE9fBgMLJSPHFKhQIA0lQLd4SBobBxUlqQKRQ3BKh1E2HpMh9jw9DWYuE1F8B/U8BRlPC4E8nkarRQ4R0j6NPUgiSUwsBDV/LC8niwnPD4UMuXxyAVkJIQmxDHETMREXN8UIOQcZLZckJxUIIUaVYJoE958D8xPRAwsFPwlBBxMDtRwtEy4VKQUNgSTXAvM21S6zAo9WgAEXBcsPJR/fEFBH4A7pCJsCZQODJesALRUhABcimwhDYwBfj9hTBS7LCMdqbCN0A2cU52ERcweRDlcHpxwzFb8c4XDIXguGCCijrwlbAXUJmQFfBOMICTVbjKAgQWdTi1gYmyBhQT9d/AIxDGUVn0S9h3gCiw9rEhsBNQFzBzkNAQJ3Ee0RaxCVCOuGBDW1M/g6JQRPIYMgEQonA09szgsnJvkM+GkBoxJiAww0PXfuZ6tgtiQX/QcZMsVBYCHxC5JPzQycGsEYQlQuGeQHvwPzGvMn6kFXBf8DowMTOk0z7gS9C2kIiwk/AEkOoxcH1xhqCnGM0AExiwG3mQNXkYMCb48GNwcLAGcLhwV55QAdAqcIowAFAM8DVwA5Aq0HnQAZAIVBAT0DJy8BIeUCjwOTCDHLAZUvAfMpBBvDDBUA9zduSgLDsQKAamaiBd1YAo4CSTUBTSUEBU5HUQOvceEA2wBLBhPfRwEVq0rLGuNDAd9vKwDHAPsABTUHBUEBzQHzbQC3AV8LMQmis7UBTekpAIMAFWsB1wKJAN0ANQB/8QFTAE0FWfkF0wJPSQERMRgrV2EBuwMfATMBDQB5BsuNpckHHwRtB9MCEBsV4QLvLge1AQMi3xPNQsUCvd5VoWACZIECYkJbTa9bNyACofcCaJgCZgkCn4Q4GwsCZjsCZiYEbgR/A38TA36SOQY5dxc5gjojIwJsHQIyNjgKAm3HAm2u74ozZ0UrAWcA3gDhAEoFB5gMjQD+C8IADbUCdy8CdqI/AnlLQwJ4uh1c20WuRtcCfD8CesgCfQkCfPAFWQUgSABIfWMkAoFtAoAAAoAFAn+uSVhKWxUXSswC0QEC0MxLJwOITwOH5kTFkTIC8qFdAwMDrkvOTC0lA89NTE2vAos/AorYwRsHHUNnBbcCjjcCjlxAl4ECjtkCjlx4UbRTNQpS1FSFApP7ApMMAOkAHFUeVa9V0AYsGymVhjLheGZFOzkCl58C77JYIagAWSUClo8ClnycAKlZrFoJgU0AOwKWtQKWTlxEXNECmcsCmWRcyl0HGQKcmznCOp0CnBYCn5sCnriKAB0PMSoPAp3xAp6SALU9YTRh7wKe0wKgbgGpAp6fHwKeTqVjyGQnJSsCJ68CJn4CoPsCoEwCot0CocQCpi8Cpc4Cp/8AfQKn8mh8aLEAA0lqHGrRAqzjAqyuAq1nAq0CAlcdAlXcArHh1wMfTmyXArK9DQKy6Bds4G1jbUhfAyXNArZcOz9ukAMpRQK4XgK5RxUCuSp3cDZw4QK9GQK72nCWAzIRAr6IcgIDM3ECvhpzInNPAsPLAsMEc4J0SzVFdOADPKcDPJoDPb8CxXwCxkcCxhCJAshpUQLIRALJTwLJLgJknQLd0nh5YXiueSVL0AMYo2cCAmH0GfOVJHsLXpJeuxECz2sCz2wvS1PS8xOfAMatAs9zASnqA04SfksFAtwnAtuKAtJPA1JcA1NfAQEDVYyAiT8AyxbtYEWCHILTgs6DjQLaxwLZ3oQQhEmnPAOGpQAvA2QOhnFZ+QBVAt9lAt64c3cC4i/tFAHzMCcB9JsB8tKHAuvzAulweQLq+QLq5AD5RwG5Au6JAuuclqqXAwLuPwOF4Jh5cOBxoQLzAwBpA44WmZMC9xMDkW4DkocC95gC+dkC+GaaHJqruzebHgOdgwL++gEbADmfHJ+zAwWNA6ZqA6bZANHFAwZqoYiiBQkDDEkCwAA/AwDhQRdTARHzA2sHl2cFAJMtK7evvdsBiZkUfxEEOQH7KQUhDp0JnwCS/SlXxQL3AZ0AtwW5AG8LbUEuFCaNLgFDAYD8AbUmAHUDDgRtACwCFgyhAAAKAj0CagPdA34EkQEgRQUhfAoABQBEABMANhICdwEABdUDa+8KxQIA9wqfJ7+xt+UBkSFBQgHpFH8RNMCJAAQAGwBaAkUChIsABjpTOpSNbQC4Oo860ACNOME63AClAOgAywE6gTo7Ofw5+Tt2iTpbO56JOm85GAFWATMBbAUvNV01njWtNWY1dTW2NcU1gjWRNdI14TWeNa017jX9NbI1wTYCNhE1xjXVNhY2JzXeNe02LjY9Ni41LSE2OjY9Njw2yTcIBJA8VzY4Nt03IDcPNsogN4k3MAoEsDxnNiQ3GTdsOo03IULUQwdC4EMLHA8PCZsobShRVQYA6X8A6bABFCnXAukBowC9BbcAbwNzBL8MDAMMAQgDAAkKCwsLCQoGBAVVBI/DvwDz9b29kaUCb0QtsRTNLt4eGBcSHAMZFhYZEhYEARAEBUEcQRxBHEEcQRxBHEEaQRxBHEFCSTxBPElISUhBNkM2QTYbNklISVmBVIgBFLWZAu0BhQCjBcEAbykBvwGJAaQcEZ0ePCklMAAhMvAIMAL54gC7Bm8EescjzQMpARQpKgDUABavAj626xQAJP0A3etzuf4NNRA7efy2Z9NQrCnC0OSyANz5BBIbJ5IFDR6miIavYS6tprjjmuKebxm5C74Q225X1pkaYYPb6f1DK4k3xMEBb9S2WMjEibTNWhsRJIA+vwNVEiXTE5iXs/wezV66oFLfp9NZGYW+Gk19J2+bCT6Ye2w6LDYdgzKMUabk595eLBCXANz9HUpWbATq9vqXVx9XDg+Pc9Xp4+bsS005SVM/BJBM4687WUuf+Uj9dEi8aDNaPxtpbDxcG1THTImUMZq4UCaaNYpsVqraNyKLJXDYsFZ/5jl7bLRtO88t7P3xZaAxhb5OdPMXqsSkp1WCieG8jXm1U99+blvLlXzPCS+M93VnJCiK+09LfaSaBAVBomyDgJua8dfUzR7ga34IvR2Nvj+A9heJ6lsl1KG4NkI1032Cnff1m1wof2B9oHJK4bi6JkEdSqeNeiuo6QoZZincoc73/TH9SXF8sCE7XyuYyW8WSgbGFCjPV0ihLKhdPs08Tx82fYAkLLc4I2wdl4apY7GU5lHRFzRWJep7Ww3wbeA3qmd59/86P4xuNaqDpygXt6M85glSBHOCGgJDnt+pN9bK7HApMguX6+06RZNjzVmcZJ+wcUrJ9//bpRNxNuKpNl9uFds+S9tdx7LaM5ZkIrPj6nIU9mnbFtVbs9s/uLgl8MVczAwet+iOEzzBlYW7RCMgE6gyNLeq6+1tIx4dpgZnd0DksJS5f+JNDpwwcPNXaaVspq1fbQajOrJgK0ofKtJ1Ne90L6VO4MOl5S886p7u6xo7OLjG8TGL+HU1JXGJgppg4nNbNJ5nlzSpuPYy21JUEcUA94PoFiZfjZue+QnyQ80ekOuZVkxx4g+cvhJfHgNl4hy1/a6+RKcKlar/J29y//EztlbVPHVUeQ1zX86eQVAjR/M3dA9w4W8LfaXp4EgM85wOWasli837PzVMOnsLzR+k3o75/lRPAJSE1xAKQzEi5v10ke+VBvRt1cwQRMd+U5mLCTGVd6XiZtgBG5cDi0w22GKcVNvHiu5LQbZEDVtz0onn7k5+heuKXVsZtSzilkLRAUmjMXEMB3J9YC50XBxPiz53SC+EhnPl9WsKCv92SM/OFFIMJZYfl0WW8tIO3UxYcwdMAj7FSmgrsZ2aAZO03BOhP1bNNZItyXYQFTpC3SG1VuPDqH9GkiCDmE+JwxyIVSO5siDErAOpEXFgjy6PQtOVDj+s6e1r8heWVvmZnTciuf4EiNZzCAd7SOMhXERIOlsHIMG399i9aLTy3m2hRLZjJVDNLS53iGIK11dPqQt0zBDyg6qc7YqkDm2M5Ve6dCWCaCbTXX2rToaIgz6+zh4lYUi/+6nqcFMAkQJKHYLK0wYk5N9szV6xihDbDDFr45lN1K4aCXBq/FitPSud9gLt5ZVn+ZqGX7cwm2z5EGMgfFpIFyhGGuDPmso6TItTMwny+7uPnLCf4W6goFQFV0oQSsc9VfMmVLcLr6ZetDZbaSFTLqnSO/bIPjA3/zAUoqgGFAEQS4IhuMzEp2I3jJzbzkk/IEmyax+rhZTwd6f+CGtwPixu8IvzACquPWPREu9ZvGkUzpRwvRRuaNN6cr0W1wWits9ICdYJ7ltbgMiSL3sTPeufgNcVqMVWFkCPDH4jG2jA0XcVgQj62Cb29v9f/z/+2KbYvIv/zzjpQAPkliaVDzNrW57TZ/ZOyZD0nlfMmAIBIAGAI0D3k/mdN4xr9v85ZbZbbqfH2jGd5hUqNZWwl5SPfoGmfElmazUIeNL1j/mkF7VNAzTq4jNt8JoQ11NQOcmhprXoxSxfRGJ9LDEOAQ+dmxAQH90iti9e2u/MoeuaGcDTHoC+xsmEeWmxEKefQuIzHbpw5Tc5cEocboAD09oipWQhtTO1wivf/O+DRe2rpl/E9wlrzBorjJsOeG1B/XPW4EaJEFdNlECEZga5ZoGRHXgYouGRuVkm8tDESiEyFNo+3s5M5puSdTyUL2llnINVHEt91XUNW4ewdMgJ4boJfEyt/iY5WXqbA+A2Fkt5Z0lutiWhe9nZIyIUjyXDC3UsaG1t+eNx6z4W/OYoTB7A6x+dNSTOi9AInctbESqm5gvOLww7OWXPrmHwVZasrl4eD113pm+JtT7JVOvnCXqdzzdTRHgJ0PiGTFYW5Gvt9R9LD6Lzfs0v/TZZHSmyVNq7viIHE6DBK7Qp07Iz55EM8SYtQvZf/obBniTWi5C2/ovHfw4VndkE5XYdjOhCMRjDeOEfXeN/CwfGduiUIfsoFeUxXeQXba7c7972XNv8w+dTjjUM0QeNAReW+J014dKAD/McQYXT7c0GQPIkn3Ll6R7gGjuiQoZD0TEeEqQpKoZ15g/0OPQI17QiSv9AUROa/V/TQN3dvLArec3RrsYlvBm1b8LWzltdugsC50lNKYLEp2a+ZZYqPejULRlOJh5zj/LVMyTDvwKhMxxwuDkxJ1QpoNI0OTWLom4Z71SNzI9TV1iXJrIu9Wcnd+MCaAw8o1jSXd94YU/1gnkrC9BUEOtQvEIQ7g0i6h+KL2JKk8Ydl7HruvgWMSAmNe+LshGhV4qnWHhO9/RIPQzY1tHRj2VqOyNsDpK0cww+56AdDC4gsWwY0XxoucIWIqs/GcwnWqlaT0KPr8mbK5U94/301i1WLt4YINTVvCFBrFZbIbY8eycOdeJ2teD5IfPLCRg7jjcFTwlMFNl9zdh/o3E/hHPwj7BWg0MU09pPrBLbrCgm54A6H+I6v27+jL5gkjWg/iYdks9jbfVP5y/n0dlgWEMlKasl7JvFZd56LfybW1eeaVO0gxTfXZwD8G4SI116yx7UKVRgui6Ya1YpixqXeNLc8IxtAwCU5IhwQgn+NqHnRaDv61CxKhOq4pOX7M6pkA+Pmpd4j1vn6ACUALoLLc4vpXci8VidLxzm7qFBe7s+quuJs6ETYmnpgS3LwSZxPIltgBDXz8M1k/W2ySNv2f9/NPhxLGK2D21dkHeSGmenRT3Yqcdl0m/h3OYr8V+lXNYGf8aCCpd4bWjE4QIPj7vUKN4Nrfs7ML6Y2OyS830JCnofg/k7lpFpt4SqZc5HGg1HCOrHvOdC8bP6FGDbE/VV0mX4IakzbdS/op+Kt3G24/8QbBV7y86sGSQ/vZzU8FXs7u6jIvwchsEP2BpIhW3G8uWNwa3HmjfH/ZjhhCWvluAcF+nMf14ClKg5hGgtPLJ98ueNAkc5Hs2WZlk2QHvfreCK1CCGO6nMZVSb99VM/ajr8WHTte9JSmkXq/i/U943HEbdzW6Re/S88dKgg8pGOLlAeNiqrcLkUR3/aClFpMXcOUP3rmETcWSfMXZE3TUOi8i+fqRnTYLflVx/Vb/6GJ7eIRZUA6k3RYR3iFSK9c4iDdNwJuZL2FKz/IK5VimcNWEqdXjSoxSgmF0UPlDoUlNrPcM7ftmA8Y9gKiqKEHuWN+AZRIwtVSxye2Kf8rM3lhJ5XcBXU9n4v0Oy1RU2M+4qM8AQPVwse8ErNSob5oFPWxuqZnVzo1qB/IBxkM3EVUKFUUlO3e51259GgNcJbCmlvrdjtoTW7rChm1wyCKzpCTwozUUEOIcWLneRLgMXh+SjGSFkAllzbGS5HK7LlfCMRNRDSvbQPjcXaenNYxCvu2Qyznz6StuxVj66SgI0T8B6/sfHAJYZaZ78thjOSIFumNWLQbeZixDCCC+v0YBtkxiBB3jefHqZ/dFHU+crbj6OvS1x/JDD7vlm7zOVPwpUC01nhxZuY/63E7g");for(let[t,n]of(o=new Map(read_sorted_arrays(e).flatMap((e,t)=>e.map(e=>[e,t+1<<24]))),i=new Set(read_sorted(e)),s=new Map,l=new Map,read_mapped(e))){if(!i.has(t)&&2==n.length){let[e,o]=n,i=l.get(e);i||(i=new Map,l.set(e,i)),i.set(o,t)}s.set(t,n.reverse())}}();let t=[],n=[],c=!1;function add(e){let n=o.get(e);n&&(c=!0,e|=n),t.push(e)}for(let o of e)for(;;){if(o<128)t.push(o);else if(is_hangul(o)){let e=o-44032,t=e/588|0,n=e%588/28|0,i=e%28;add(4352+t),add(4449+n),i>0&&add(4519+i)}else{let e=s.get(o);e?n.push(...e):add(o)}if(!n.length)break;o=n.pop()}if(c&&t.length>1){let e=unpack_cc(t[0]);for(let n=1;n0&&i>=e)0==e?(t.push(o,...n),n.length=0,o=c):n.push(c),i=e;else{let s=function(e,t){if(e>=4352&&e<4371&&t>=4449&&t<4470)return 44032+(e-4352)*588+(t-4449)*28;if(is_hangul(e)&&t>4519&&t<4547&&(e-44032)%28==0)return e+(t-4519);{let n=l.get(e);return n&&(n=n.get(t))?n:-1}}(o,c);s>=0?o=s:0==i&&0==e?(t.push(o),o=c):(n.push(c),i=e)}}return o>=0&&t.push(o,...n),t}(decomposed(e))}let Array_from=e=>Array.from(e);function group_has_cp(e,t){return e.P.has(t)||e.Q.has(t)}let Emoji=class Emoji extends Array{get is_emoji(){return!0}};function init(){let e,t;if(c)return;let n=read_compressed_payload("AEEUdwmgDS8BxQKKAP4BOgDjATAAngDUAIMAoABoAOAAagCOAEQAhABMAHIAOwA9ACsANgAmAGIAHgAuACgAJwAXAC0AGgAjAB8ALwAUACkAEgAeAAkAGwARABkAFgA5ACgALQArADcAFQApABAAHgAiABAAGgAeABMAGAUhBe8BFxREN8sF2wC5AK5HAW8ArQkDzQCuhzc3NzcBP68NEfMABQdHBuw5BV8FYAA9MzkI9r4ZBg7QyQAWA9CeOwLNCjcCjqkChuA/lm+RAsXTAoP6ASfnEQDytQFJAjWVCkeXAOsA6godAB/cwdAUE0WlBCN/AQUCQRjFD/MRBjHxDQSJbw0jBzUAswBxme+tnIcAYwabAysG8QAjAEMMmxcDqgPKQyDXCMMxA7kUQwD3NXOrAKmFIAAfBC0D3x4BJQDBGdUFAhEgVD8JnwmQJiNWYUzrg0oAGwAUAB0AFnNcACkAFgBP9h3gPfsDOWDKneY2ChglX1UDYD30ABsAFAAdABZzIGRAnwDD8wAjAEEMzRbDqgMB2sAFYwXqAtCnAsS4AwpUJKRtFHsadUz9AMMVbwLpABM1NJEX0ZkCgYMBEyMAxRVvAukAEzUBUFAtmUwSAy4DBTER33EftQHfSwB5MxJ/AjkWKQLzL8E/cwBB6QH9LQDPDtO9ASNriQC5DQANAwCK21EFI91zHwCoL9kBqQcHBwcHKzUDowBvAQohPvU3fAQgHwCyAc8CKQMA5zMSezr7ULgFmDp/LzVQBgEGAi8FYQVgt8AFcTtlQhpCWEmfe5tmZ6IAExsDzQ8t+X8rBKtTAltbAn0jsy8Bl6utPWMDTR8Ei2kRANkDBrNHNysDBzECQWUAcwFpJ3kAiyUhAJ0BUb8AL3EfAbfNAz81KUsFWwF3YQZtAm0A+VEfAzEJDQBRSQCzAQBlAHsAM70GD/v3IZWHBwARKQAxALsjTwHZAeMPEzmXgIHwABIAGQA8AEUAQDt3gdvIEGcQZAkGTRFMdEIVEwK0D64L7REdDNkq09PgADSxB/MDWwfzA1sDWwfzB/MDWwfzA1sDWwNbA1scEvAi28gQZw9QBHUFlgWTBN4IiyZREYkHMAjaVBV0JhxPA00BBCMtSSQ7mzMTJUpMFE0LCAQ2SmyvfUADTzGzVP2QqgPTMlc5dAkGHnkSqAAyD3skNb1OhnpPcagKU0+2tYdJak5vAsY6sEAACikJm2/Dd1YGRRAfJ6kQ+ww3AbkBPw3xS9wE9QY/BM0fgRkdD9GVoAipLeEM8SbnLqWAXiP5KocF8Uv4POELUVFsD10LaQnnOmeBUgMlAREijwrhDT0IcRD3Cs1vDekRSQc9A9lJngCpBwULFR05FbkmFGKwCw05ewb/GvoLkyazEy17AAXXGiUGUQEtGwMA0y7rhbRaNVwgT2MGBwspI8sUrFAkDSlAu3hMGh8HGSWtApVDdEqLUToelyH6PEENai4XUYAH+TwJGVMLhTyiRq9FEhHWPpE9TCJNTDAEOYMsMyePCdMPiQy9fHYBXQklCbUMdRM1ERs3yQg9Bx0xlygnGQglRplgngT7owP3E9UDDwVDCUUHFwO5HDETMhUtBRGBKNsC9zbZLrcCk1aEARsFzw8pH+MQVEfkDu0InwJpA4cl7wAxFSUAGyKfCEdnAGOP3FMJLs8Iy2pwI3gDaxTrZRF3B5UOWwerHDcVwxzlcMxeD4YMKKezCV8BeQmdAWME5wgNNV+MpCBFZ1eLXBifIGVBQ14AAjUMaRWjRMGHfAKPD28SHwE5AXcHPQ0FAnsR8RFvEJkI74YINbkz/DopBFMhhyAVCisDU2zSCysm/Qz8bQGnEmYDEDRBd/Jnr2C6KBgBBx0yyUFkIfULlk/RDKAaxRhGVDIZ6AfDA/ca9yfuQVsGAwOnBxc6UTPyBMELbQiPCUMATQ6nGwfbGG4KdYzUATWPAbudA1uVhwJzkwY7Bw8Aaw+LBX3pACECqwinAAkA0wNbAD0CsQehAB0AiUUBQQMrMwEl6QKTA5cINc8BmTMB9y0EH8cMGQD7O25OAsO1AoBuZqYF4VwCkgJNOQFRKQQJUktVA7N15QDfAE8GF+NLARmvTs8e50cB43MvAMsA/wAJOQcJRQHRAfdxALsBYws1Caa3uQFR7S0AhwAZbwHbAo0A4QA5AIP1AVcAUQVd/QXXAlNNARU1HC9bZQG/AyMBNwERAH0Gz5GpzQsjBHEH1wIQHxXlAu8yB7kFAyLjE9FCyQK94lkAMhoKPAqrCqpgX2Q3CjV2PVQAEh+sPss/UgVVO1c7XDtXO1w7VztcO1c7XDtXO1wDm8Pmw+YKcF9JYe8Mqg3YRMw6TRPfYFVgNhPMLbsUxRXSJVoZQRrAJwkl6FUNDwgt12Y0CDA0eRfAAEMpbINFY4oeNApPHOtTlVT8LR8AtUumM7MNsBsZREQFS3XxYi4WEgomAmSFAmJGX1GzAV83JAKh+wJonAJmDQKfiDgfDwJmPwJmKgRyBIMDfxcDfpY5Cjl7GzmGOicnAmwhAjI6OA4CbcsCbbLzjgM3a0kvAWsA4gDlAE4JB5wMkQECD8YAEbkCdzMCdqZDAnlPRwJ4viFg30WyRvcCfEMCeswCfQ0CfPRIBEiBZygALxlJXEpfGRtK0ALRBQLQ0EsrA4hTA4fqRMmRNgLypV0HAwOyS9JMMSkH001QTbMCi0MCitzFHwshR2sJuwKOOwKOYESbhQKO3QKOYHxRuFM5AQ5S2FSJApP/ApMQAO0AIFUiVbNV1AosHymZijLleGpFPz0Cl6MC77ZYJawAXSkClpMCloCgAK1ZsFoNhVEAPwKWuQKWUlxIXNUCmc8CmWhczl0LHQKcnznGOqECnBoCn58CnryOACETNS4TAp31Ap6WALlBYThh8wKe1wKgcgGtAp6jIwKeUqljzGQrKS8CJ7MCJoICoP8CoFDbAqYzAqXSAqgDAIECp/ZogGi1AAdNaiBq1QKs5wKssgKtawKtBgJXIQJV4AKx5dsDH1JsmwKywRECsuwbbORtZ21MYwMl0QK2YD9DbpQDKUkCuGICuUsZArkue3A6cOUCvR0DLbYDMhUCvoxyBgMzdQK+HnMmc1MCw88CwwhzhnRPOUl05AM8qwEDPJ4DPcMCxYACxksCxhSNAshtVQLISALJUwLJMgJkoQLd1nh9ZXiyeSlL1AMYp2cGAmH4GfeVKHsPXpZevxUCz28Cz3AzT1fW9xejAMqxAs93AS3uA04Wfk8JAtwrAtuOAtJTA1JgA1NjAQUDVZCAjUMEzxrxZEl5A4LSg5EC2ssC2eKEFIRNp0ADhqkAMwNkEoZ1Xf0AWQLfaQLevHd7AuIz7RgB8zQrAfSfAfLWiwLr9wLpdH0DAur9AuroAP1LAb0C7o0C66CWrpcHAu5DA4XkmH1w5HGlAvMHAG0DjhqZlwL3FwORcgOSiwL3nAL53QL4apogmq+/O5siA52HAv7+AR8APZ8gAZ+3AwWRA6ZuA6bdANXJAwZuoYyiCQ0DDE0BEwEjB3EGZb1rCQC/BG/DFY8etxEAG3k9ACcDNxJRA42DAWcrJQCM8wAlAOanC6OVCLsGI6fJBgCvBRnDBvElRUYFFoAFcD9GSDNCKUK8X3kZX8QAls0FOgCQVCGbwTsuYDoZutcONxjOGJHJ/gVfBWAFXwVgBWsFYAVfBWAFXwVgBV8FYAVfBWBOHQjfjW8KCgoKbF7xMwTRA7kGN8PDAMMEr8MA70gxFroFTj5xPnhCR0K+X30/X/AAWBkzswCNBsxzzASm70aCRS4rDDMeLz49fnXfcsH5GcoscQFz13Y4HwVnBXLJycnACNdRYwgICAqEXoWTxgA7P4kACxbZBu21Kw0AjMsTAwkVAOVtJUUsJ1JCuULESUArXy9gPi9AKwnJRQYKTD9LPoA+iT54PnkCkULEUUpDX9NWV3JVEjQAc1w3A3IBE3YnX+g7QiMJb6MKaiszRCUuQrNCxDPMCcwEX9EWJzYREBEEBwIHKn6l33JCNVIfybPJtAltydPUCmhBZw/tEKsZAJOVJU1CLRuxbUHOQAo7P0s+eEJHHA8SJVRPdGM0NVrpvBoKhfUlM0JHHGUQUhEWO1xLSj8MO0ucNAqJIzVCRxv9EFsqKyA4OQgNj2nwZgp5ZNFgE2A1K3YHS2AhQQojJmC7DgpzGG1WYFUZCQYHZO9gHWCdYIVgu2BTYJlwFh8GvRbcXbG8YgtDHrMBwzPVyQonHQgkCyYBgQJ0Ajc4nVqIAwGSCsBPIgDsK3SWEtIVBa5N8gGjAo+kVwVIZwD/AEUSCDweX4ITrRQsJ8K3TwBXFDwEAB0TvzVcAtoTS20RIwDgVgZ9BBImYgA5AL4Coi8LFnezOkCnIQFjAY4KBAPh9RcGsgZSBsEAJctdsWIRu2kTkQstRw7DAcMBKgpPBGIGMDAwKCYnKTQaLg4AKRSVAFwCdl+YUZ0JdicFD3lPAdt1F9ZZKCGxuE3yBxkFVGcA/wBFEgiCBwAOLHQSjxOtQDg1z7deFRMAZ8QTAGtKb1ApIiPHADkAvgKiLy1DFtYCmBiDAlDDWNB0eo7fpaMO/aEVRRv0ATEQZBIODyMEAc8JQhCbDRgzFD4TAEMAu9YBCgCsAOkAm5I3ABwAYxvONnR+MhXJAxgKQyxL2+kkJhMbhQKDBMkSsvF0AD9BNQ6uQC7WqSQHwxEAEEIu1hkhAH2z4iQPwyJPHNWpdyYBRSpnJALzoBAEVPPsH20MxA0CCEQKRgAFyAtFAlMNwwjEDUQJRArELtapMg7DDZgJIw+TGukEIwvDFkMAqAtDEMMMBhioe+QAO3MMRAACrgnEBSPY9Q0FDnbSBoMAB8MSYxkSxAEJAPIJAAB8FWMOFtMc/HcXwxhDAC7DAvOowwAewwJdKDKHAAHDAALrFUQVwwAbwyvzpWMWv8wA/ABpAy++bcYDUKPD0KhDCwKmJ1MAAmMA5+UZwxAagwipBRL/eADfw6fDGOMCGsOjk3l6BwOpo4sAEsMOGxMAA5sAbcMOAAvDp0MJGkMDwgipnNIPAwfIqUMGAOGDAAPzABXDAAcDAAnDAGmTABrDAA7DChjDjnEWAwABYwAOcwAuUyYABsMAF8MIKQANUgC6wy4AA8MADqMq8wCyYgAcIwAB8wqpAAXOCx0V4wAHowBCwwEKAGnDAAuDAB3DAAjDCakABdIAbqcZ3QCZCCkABdIAAAFDAAfjAB2jCCkABqIACYMAGzMAbSMA5sOIAAhjAAhDABTDBAkpAAbSAOOTAAlDC6kOzPtnAAdDAG6kQFAATwAKwwwAA0MACbUDPwAHIwAZgwACE6cDAAojAApDAAoDp/MGwwAJIwADEwAQQwgAFEMAEXMAD5MADfMADcMAGRMOFiMAFUMAbqMWuwHDAMIAE0MLAGkzEgDhUwACQwAEWgAXgwUjAAbYABjDBSYBgzBaAEFNALcQBxUMegAwMngBrA0IZgJ0KxQHBREPd1N0ZzKRJwaIHAZqNT4DqQq8BwngAB4DAwt2AX56T1ocKQNXAh1GATQGC3tOxYNagkgAMQA5CQADAQEAWxLjAIOYNAEzAH7tFRk6TglSAF8NAAlYAQ+S1ACAQwQorQBiAN4dAJ1wPyeTANVzuQDX3AIeEMp9eyMgXiUAEdkBkJizKltbVVAaRMqRAAEAhyQ/SDEz6BmfVwB6ATEsOClKIRcDOF0E/832AFNt5AByAnkCRxGCOs94NjXdAwINGBonDBwPALW2AwICAgAAAAAAAAYDBQMDARrUAwAtAAAAAgEGBgYGBgYFBQUFBQUEBQYHCAkEBQUFBQQAAAICAAAAIgCNAJAAlT0A6gC7ANwApEQAwgCyAK0AqADuAKYA2gCjAOcBCAEDAMcAgQBiANIA1AEDAN4A8gCQAKkBMQDqAN8A3AsBCQ8yO9ra2tq8xuLT1tRJOB0BUgFcNU0BWgFpAWgBWwFMUUlLbhMBUxsNEAs6PhMOACcUKy0vMj5AQENDQ0RFFEYGJFdXV1dZWVhZL1pbXVxcI2NnZ2ZoZypsbnZ1eHh4eHh4enp6enp6enp6enp8fH18e2IARPIASQCaAHgAMgBm+ACOAFcAVwA3AnbvAIsABfj4AGQAk/IAnwBPAGIAZP//sACFAIUAaQBWALEAJAC2AIMCQAJDAPwA5wD+AP4A6AD/AOkA6QDoAOYALwJ7AVEBQAE+AVQBPgE+AT4BOQE4ATgBOAEcAVgXADEQCAEAUx8SHgsdHhYAjgCWAKYAUQBqIAIxAHYAbwCXAxUDJzIDIUlGTzEAkQJPAMcCVwKkAMAClgKWApYClgKWApYCiwKWApYClgKWApYClgKVApUCmAKgApcClgKWApQClAKUApQCkgKVAnUB1AKXAp8ClgKWApUeAIETBQD+DQOfAmECOh8BVBg9AuIZEjMbAU4/G1WZAXusRAFpYQEFA0FPAQYAmTEeIJdyADFoAHEANgCRA5zMk/C2jGINwjMWygIZCaXdfDILBCs5dAE7YnQBugDlhoiHhoiGiYqKhouOjIaNkI6Ij4qQipGGkoaThpSSlYaWhpeKmIaZhpqGm4aci52QnoqfhuIC4XTpAt90AIp0LHSoAIsAdHQEQwRABEIERQRDBEkERgRBBEcESQRIBEQERgRJAJ5udACrA490ALxuAQ10ANFZdHQA13QCFHQA/mJ0AP4BIQD+APwA/AD9APwDhGZ03ASMK23HAP4A/AD8AP0A/CR0dACRYnQA/gCRASEA/gCRAvQA/gCRA4RmdNwEjCttxyR0AP9idAEhAP4A/gD8APwA/QD8AP8A/AD8AP0A/AOEZnTcBIwrbcckdHQAkWJ0ASEA/gCRAP4AkQL0AP4AkQOEZnTcBIwrbcckdAJLAT50AlIBQXQCU8l0dAJfdHQDpgL0A6YDpgOnA6cDpwOnA4RmdNwEjCttxyR0dACRYnQBIQOmAJEDpgCRAvQDpgCRA4RmdNwEjCttxyR0BDh0AJEEOQCRDpU5dSgCADR03gV2CwArdAEFAM5iCnR0AF1iAAYcOgp0dACRCnQAXAEIwWZ0CnRmdHQAkWZ0CnRmdEXgAFF03gp0dEY0tlT2u3SOAQTwscwhjZZKrhYcBSfFp9XNbKiVDOD2b+cpe4/Z17mQnbtzzhaeQtE2GGj0IDNTjRUSyTxxw/RPHW/+vS7d1NfRt9z9QPZg4X7QFfhCnkvgNPIItOsC2eV6hPannZNHlZ9xrwZXIMOlu3jSoQSq78WEjwLjw1ELSlF1aBvfzwk5ZX7AUvQzjPQKbDuQ+sm4wNOp4A6AdVuRS0t1y/DZpg4R6m7FNjM9HgvW7Bi88zaMjOo6lM8wtBBdj8LP4ylv3zCXPhebMKJc066o9sF71oFW/8JXu86HJbwDID5lzw5GWLR/LhT0Qqnp2JQxNZNfcbLIzPy+YypqRm/lBmGmex+82+PisxUumSeJkALIT6rJezxMH+CTJmQtt5uwTVbL3ptmjDUQzlSIvWi8Tl7ng1NpuRn1Ng4n14Qc+3Iil7OwkvNWogLSPkn3pihIFytyIGmMhOe3n1tWsuMy9BdKyqF4Z3v2SgggTL9KVvMXPnCbRe+oOuFFP3HejBG/w9gvmfNYvg6JuWia2lcSSN1uIjBktzoIazOHPJZ7kKHPz8mRWVdW3lA8WGF9dQF6Bm673boov3BUWDU2JNcahR23GtfHKLOz/viZ+rYnZFaIznXO67CYEJ1fXuTRpZhYZkKe54xeoagkNGLs+NTZHE0rX45/XvQ2RGADX6vcAvdxIUBV27wxGm2zjZo4X3ILgAlrOFheuZ6wtsvaIj4yLY7qqawlliaIcrz2G+c3vscAnCkCuMzMmZvMfu9lLwTvfX+3cVSyPdN9ZwgDZhfjRgNJcLiJ67b9xx8JHswprbiE3v9UphotAPIgnXVIN5KmMc0piXhc6cChPnN+MRhG9adtdttQTTwSIpl8I4/j//d3sz1326qTBTpPRM/Hgh3kzqEXs8ZAk4ErQhNO8hzrQ0DLkWMA/N+91tn2MdOJnWC2FCZehkQrwzwbKOjhvZsbM95QoeL9skYyMf4srVPVJSgg7pOLUtr/n9eT99oe9nLtFRpjA9okV2Kj8h9k5HaC0oivRD8VyXkJ81tcd4fHNXPCfloIQasxsuO18/46dR2jgul/UIet2G0kRvnyONMKhHs6J26FEoqSqd+rfYjeEGwHWVDpX1fh1jBBcKGMqRepju9Y00mDVHC+Xdij/j44rKfvfjGinNs1jO/0F3jB83XCDINN/HB84axlP+3E/klktRo+vl3U/aiyMJbIodE1XSsDn6UAzIoMtUObY2+k/4gY/l+AkZJ5Sj2vQrkyLm3FoxjhDX+31UXBFf9XrAH31fFqoBmDEZvhvvpnZ87N+oZEu7U9O/nnk+QWj3x8uyoRbEnf+O5UMr9i0nHP38IF5AvzrBW8YWBUR0mIAzIvndQq9N3v/Jto3aPjPXUPl8ASdPPyAp7jENf8bk7VMM9ol9XGmlBmeDMuGqt+WzuL6CXAxXjIhCPM5vACchgMJ/8XBGLO/D1isVvGhwwHHr1DLaI5mn2Jr/b1pUD90uciDaS8cXNDzCWvNmT/PhQe5e8nTnnnkt8Ds/SIjibcum/fqDhKopxAY8AkSrPn+IGDEKOO+U3XOP6djFs2H5N9+orhOahiQk5KnEUWa+CzkVzhp8bMHRbg81qhjjXuIKbHjSLSIBKWqockGtKinY+z4/RdBUF6pcc3JmnlxVcNgrI4SEzKUZSwcD2QCyxzKve+gAmg6ZuSRkpPFa6mfThu7LJNu3H5K42uCpNvPAsoedolKV/LHe/eJ+BbaG5MG0NaSGVPRUmNFMFFSSpXEcXwbVh7UETOZZtoVNRGOIbbkig3McEtR68cG0RZAoJevWYo7Dg/lZ1CQzblWeUvVHmr8fY4Nqd9JJiH/zEX24mJviH60fAyFr0A3c4bC1j3yZU60VgJxXn8JgJXLUIsiBnmKmMYz+7yBQFBvqb2eYnuW59joZBf56/wXvWIR4R8wTmV80i1mZy+S4+BUES+hzjk0uXpC///z/IlqHZ1monzlXp8aCfhGKMti73FI1KbL1q6IKO4fuBuZ59gagjn5xU79muMpHXg6S+e+gDM/U9BKLHbl9l6o8czQKl4RUkJJiqftQG2i3BMg/TQlUYFkJDYBOOvAugYuzYSDnZbDDd/aSd9x0Oe6F+bJcHfl9+gp6L5/TgA+BdFFovbfCrQ40s5vMPw8866pNX8zyFGeFWdxIpPVp9Rg1UPOVFbFZrvaFq/YAzHQgqMWpahMYfqHpmwXfHL1/kpYmGuHFwT55mQu0dylfNuq2Oq0hTMCPwqfxnuBIPLXfci4Y1ANy+1CUipQxld/izVh16WyG2Q0CQQ9NqtAnx1HCHwDj7sYxOSB0wopZSnOzxQOcExmxrVTF2BkOthVpGfuhaGECfCJpJKpjnihY+xOT2QJxN61+9K6QSqtv2Shr82I3jgJrqBg0wELFZPjvHpvzTtaJnLK6Vb97Yn933koO/saN7fsjwNKzp4l2lJVx2orjCGzC/4ZL4zCver6aQYtC5sdoychuFE6ufOiog+VWi5UDkbmvmtah/3aArEBIi39s5ILUnlFLgilcGuz9CQshEY7fw2ouoILAYPVT/gyAIq3TFAIwVsl+ktkRz/qGfnCDGrm5gsl/l9QdvCWGsjPz3dU7XuqKfdUrr/6XIgjp4rey6AJBmCmUJMjITHVdFb5m1p+dLMCL8t55zD42cmftmLEJC0Da04YiRCVUBLLa8D071/N5UBNBXDh0LFsmhV/5B5ExOB4j3WVG/S3lfK5o+V6ELHvy6RR9n4ac+VsK4VE4yphPvV+kG9FegTBH4ZRXL2HytUHCduJazB/KykjfetYxOXTLws267aGOd+I+JhKP//+VnXmS90OD/jvLcVu0asyqcuYN1mSb6XTlCkqv1vigZPIYwNF/zpWcT1GR/6aEIRjkh0yhg4LXJfaGobYJTY4JI58KiAKgmmgAKWdl5nYCeLqavRJGQNuYuZtZFGx+IkI4w4NS2xwbetNMunOjBu/hmKCI/w7tfiiyUd//4rbTeWt4izBY8YvGIN6vyKYmP/8X8wHKCeN+WRcKM70+tXKNGyevU9H2Dg5BsljnTf8YbsJ1TmMs74Ce2XlHisleguhyeg44rQOHZuw/6HTkhnnurK2d62q6yS7210SsAIaR+jXMQA+svkrLpsUY+F30Uw89uOdGAR6vo4FIME0EfVVeHTu6eKicfhSqOeXJhbftcd08sWEnNUL1C9fnprTgd83IMut8onVUF0hvqzZfHduPjbjwEXIcoYmy+P6tcJZHmeOv6VrvEdkHDJecjHuHeWANe79VG662qTjA/HCvumVv3qL+LrOcpqGps2ZGwQdFJ7PU4iuyRlBrwfO+xnPyr47s2cXVbWzAyznDiBGjCM3ksxjjqM62GE9C8f5U38kB3VjtabKp/nRdvMESPGDG90bWRLAt1Qk5DyLuazRR1YzdC1c+hZXvAWV8xA72S4A8B67vjVhbba3MMop293FeEXpe7zItMWrJG/LOH9ByOXmYnNJfjmfuX9KbrpgLOba4nZ+fl8Gbdv/ihv+6wFGKHCYrVwmhFC0J3V2bn2tIB1wCc1CST3d3X2OyxhguXcs4sm679UngzofuSeBewMFJboIQHbUh/m2JhW2hG9DIvG2t7yZIzKBTz9wBtnNC+2pCRYhSIuQ1j8xsz5VvqnyUIthvuoyyu7fNIrg/KQUVmGQaqkqZk/Vx5b33/gsEs8yX7SC1J+NV4icz6bvIE7C5G6McBaI8rVg56q5QBJWxn/87Q1sPK4+sQa8fLU5gXo4paaq4cOcQ4wR0VBHPGjKh+UlPCbA1nLXyEUX45qZ8J7/Ln4FPJE2TdzD0Z8MLSNQiykMMmSyOCiFfy84Rq60emYB2vD09KjYwsoIpeDcBDTElBbXxND72yhd9pC/1CMid/5HUMvAL27OtcIJDzNKpRPNqPOpyt2aPGz9QWIs9hQ9LiX5s8m9hjTUu/f7MyIatjjd+tSfQ3ufZxPpmJhTaBtZtKLUcfOCUqADuO+QoH8B9v6U+P0HV1GLQmtoNFTb3s74ivZgjES0qfK+8RdGgBbcCMSy8eBvh98+et1KIFqSe1KQPyXULBMTsIYnysIwiZBJYdI20vseV+wuJkcqGemehKjaAb9L57xZm3g2zX0bZ2xk/fU+bCo7TlnbW7JuF1YdURo/2Gw7VclDG1W7LOtas2LX4upifZ/23rzpsnY/ALfRgrcWP5hYmV9VxVOQA1fZvp9F2UNU+7d7xRyVm5wiLp3/0dlV7vdw1PMiZrbDAYzIVqEjRY2YU03sJhPnlwIPcZUG5ltL6S8XCxU1eYS5cjr34veBmXAvy7yN4ZjArIG0dfD/5UpBNlX1ZPoxJOwyqRi3wQWtOzd4oNKh0LkoTm8cwqgIfKhqqGOhwo71I+zXnMemTv2B2AUzABWyFztGgGULjDDzWYwJUVBTjKCn5K2QGMK1CQT7SzziOjo+BhAmqBjzuc3xYym2eedGeOIRJVyTwDw37iCMe4g5Vbnsb5ZBdxOAnMT7HU4DHpxWGuQ7GeiY30Cpbvzss55+5Km1YsbD5ea3NI9QNYIXol5apgSu9dZ8f8xS5dtHpido5BclDuLWY4lhik0tbJa07yJhH0BOyEut/GRbYTS6RfiTYWGMCkNpfSHi7HvdiTglEVHKZXaVhezH4kkXiIvKopYAlPusftpE4a5IZwvw1x/eLvoDIh/zpo9FiQInsTb2SAkKHV42XYBjpJDg4374XiVb3ws4qM0s9eSQ5HzsMU4OZJKuopFjBM+dAZEl8RUMx5uU2N486Kr141tVsGQfGjORYMCJAMsxELeNT4RmWjRcpdTGBwcx6XN9drWqPmJzcrGrH4+DRc7+n1w3kPZwu0BkNr6hQrqgo7JTB9A5kdJ/H7P4cWBMwsmuixAzJB3yrQpnGIq90lxAXLzDCdn1LPibsRt7rHNjgQBklRgPZ8vTbjXdgXrTWQsK5MdrXXQVPp0Rinq3frzZKJ0qD6Qhc40VzAraUXlob1gvkhK3vpmHgI6FRlQZNx6eRqkp0zy4AQlX813fAPtL3jMRaitGFFjo0zmErloC+h+YYdVQ6k4F/epxAoF0BmqEoKNTt6j4vQZNQ2BoqF9Vj53TOIoNmDiu9Xp15RkIgQIGcoLpfoIbenzpGUAtqFJp5W+LLnx38jHeECTJ/navKY1NWfN0sY1T8/pB8kIH3DU3DX+u6W3YwpypBMYOhbSxGjq84RZ84fWJow8pyHqn4S/9J15EcCMsXqrfwyd9mhiu3+rEo9pPpoJkdZqHjra4NvzFwuThNKy6hao/SlLw3ZADUcUp3w3SRVfW2rhl80zOgTYnKE0Hs2qp1J6H3xqPqIkvUDRMFDYyRbsFI3M9MEyovPk8rlw7/0a81cDVLmBsR2ze2pBuKb23fbeZC0uXoIvDppfTwIDxk1Oq2dGesGc+oJXWJLGkOha3CX+DUnzgAp9HGH9RsPZN63Hn4RMA5eSVhPHO+9RcRb/IOgtW31V1Q5IPGtoxPjC+MEJbVlIMYADd9aHYWUIQKopuPOHmoqSkubnAKnzgKHqgIOfW5RdAgotN6BN+O2ZYHkuemLnvQ8U9THVrS1RtLmKbcC7PeeDsYznvqzeg6VCNwmr0Yyx1wnLjyT84BZz3EJyCptD3yeueAyDWIs0L2qs/VQ3HUyqfrja0V1LdDzqAikeWuV4sc7RLIB69jEIBjCkyZedoUHqCrOvShVzyd73OdrJW0hPOuQv2qOoHDc9xVb6Yu6uq3Xqp2ZaH46A7lzevbxQEmfrzvAYSJuZ4WDk1Hz3QX1LVdiUK0EvlAGAYlG3Md30r7dcPN63yqBCIj25prpvZP0nI4+EgWoFG95V596CurXpKRBGRjQlHCvy5Ib/iW8nZJWwrET3mgd6mEhfP4KCuaLjopWs7h+MdXFdIv8dHQJgg1xi1eYqB0uDYjxwVmri0Sv5XKut/onqapC+FQiC2C1lvYJ9MVco6yDYsS3AANUfMtvtbYI2hfwZatiSsnoUeMZd34GVjkMMKA+XnjJpXgRW2SHTZplVowPmJsvXy6w3cfO1AK2dvtZEKTkC/TY9LFiKHCG0DnrMQdGm2lzlBHM9iEYynH2UcVMhUEjsc0oDBTgo2ZSQ1gzkAHeWeBXYFjYLuuf8yzTCy7/RFR81WDjXMbq2BOH5dURnxo6oivmxL3cKzKInlZkD31nvpHB9Kk7GfcfE1t+1V64b9LtgeJGlpRFxQCAqWJ5DoY77ski8gsOEOr2uywZaoO/NGa0X0y1pNQHBi3b2SUGNpcZxDT7rLbBf1FSnQ8guxGW3W+36BW0gBje4DOz6Ba6SVk0xiKgt+q2JOFyr4SYfnu+Ic1QZYIuwHBrgzr6UvOcSCzPTOo7D6IC4ISeS7zkl4h+2VoeHpnG/uWR3+ysNgPcOIXQbv0n4mr3BwQcdKJxgPSeyuP/z1Jjg4e9nUvoXegqQVIE30EHx5GHv+FAVUNTowYDJgyFhf5IvlYmEqRif6+WN1MkEJmDcQITx9FX23a4mxy1AQRsOHO/+eImX9l8EMJI3oPWzVXxSOeHU1dUWYr2uAA7AMb+vAEZSbU3qob9ibCyXeypEMpZ6863o6QPqlqGHZkuWABSTVNd4cOh9hv3qEpSx2Zy/DJMP6cItEmiBJ5PFqQnDEIt3NrA3COlOSgz43D7gpNFNJ5MBh4oFzhDPiglC2ypsNU4ISywY2erkyb1NC3Qh/IfWj0eDgZI4/ln8WPfBsT3meTjq1Uqt1E7Zl/qftqkx6aM9KueMCekSnMrcHj1CqTWWzEzPsZGcDe3Ue4Ws+XFYVxNbOFF8ezkvQGR6ZOtOLU2lQEnMBStx47vE6Pb7AYMBRj2OOfZXfisjJnpTfSNjo6sZ6qSvNxZNmDeS7Gk3yYyCk1HtKN2UnhMIjOXUzAqDv90lx9O/q/AT1ZMnit5XQe9wmQxnE/WSH0CqZ9/2Hy+Sfmpeg8RwsHI5Z8kC8H293m/LHVVM/BA7HaTJYg5Enk7M/xWpq0192ACfBai2LA/qrCjCr6Dh1BIMzMXINBmX96MJ5Hn2nxln/RXPFhwHxUmSV0EV2V0jm86/dxxuYSU1W7sVkEbN9EzkG0QFwPhyHKyb3t+Fj5WoUUTErcazE/N6EW6Lvp0d//SDPj7EV9UdJN+Amnf3Wwk3A0SlJ9Z00yvXZ7n3z70G47Hfsow8Wq1JXcfwnA+Yxa5mFsgV464KKP4T31wqIgzFPd3eCe3j5ory5fBF2hgCFyVFrLzI9eetNXvM7oQqyFgDo4CTp/hDV9NMX9JDHQ/nyHTLvZLNLF6ftn2OxjGm8+PqOwhxnPHWipkE/8wbtyri80Sr7pMNkQGMfo4ZYK9OcCC4ESVFFbLMIvlxSoRqWie0wxqnLfcLSXMSpMMQEJYDVObYsXIQNv4TGNwjq1kvT1UOkicTrG3IaBZ3XdScS3u8sgeZPVpOLkbiF940FjbCeNRINNvDbd01EPBrTCPpm12m43ze1bBB59Ia6Ovhnur/Nvx3IxwSWol+3H2qfCJR8df6aQf4v6WiONxkK+IqT4pKQrZK/LplgDI/PJZbOep8dtbV7oCr6CgfpWa8NczOkPx81iSHbsNhVSJBOtrLIMrL31LK9TqHqAbAHe0RLmmV806kRLDLNEhUEJfm9u0sxpkL93Zgd6rw+tqBfTMi59xqXHLXSHwSbSBl0EK0+loECOPtrl+/nsaFe197di4yUgoe4jKoAJDXc6DGDjrQOoFDWZJ9HXwt8xDrQP+7aRwWKWI1GF8s8O4KzxWBBcwnl3vnl1Oez3oh6Ea1vjR7/z7DDTrFtqU2W/KAEzAuXDNZ7MY73MF216dzdSbWmUp4lcm7keJfWaMHgut9x5C9mj66Z0lJ+yhsjVvyiWrfk1lzPOTdhG15Y7gQlXtacvI7qv/XNSscDwqkgwHT/gUsD5yB7LdRRvJxQGYINn9hTpodKFVSTPrtGvyQw+HlRFXIkodErAGu9Iy1YpfSPc3jkFh5CX3lPxv7aqjE/JAfTIpEjGb/H7MO0e2vsViSW1qa/Lmi4/n4DEI3g7lYrcanspDfEpKkdV1OjSLOy0BCUqVoECaB55vs06rXl4jqmLsPsFM/7vYJ0vrBhDCm/00A/H81l1uekJ/6Lml3Hb9+NKiLqATJmDpyzfYZFHumEjC662L0Bwkxi7E9U4cQA0XMVDuMYAIeLMPgQaMVOd8fmt5SflFIfuBoszeAw7ow5gXPE2Y/yBc/7jExARUf/BxIHQBF5Sn3i61w4z5xJdCyO1F1X3+3ax+JSvMeZ7S6QSKp1Fp/sjYz6Z+VgCZzibGeEoujryfMulH7Rai5kAft9ebcW50DyJr2uo2z97mTWIu45YsSnNSMrrNUuG1XsYBtD9TDYzQffKB87vWbkM4EbPAFgoBV4GQS+vtFDUqOFAoi1nTtmIOvg38N4hT2Sn8r8clmBCXspBlMBYTnrqFJGBT3wZOzAyJDre9dHH7+x7qaaKDOB4UQALD5ecS0DE4obubQEiuJZ0EpBVpLuYcce8Aa4PYd/V4DLDAJBYKQPCWTcrEaZ5HYbJi11Gd6hjGom1ii18VHYnG28NKpkz2UKVPxlhYSp8uZr367iOmoy7zsxehW9wzcy2zG0a80PBMCRQMb32hnaHeOR8fnNDzZhaNYhkOdDsBUZ3loDMa1YP0uS0cjUP3b/6DBlqmZOeNABDsLl5BI5QJups8uxAuWJdkUB/pO6Zax6tsg7fN5mjjDgMGngO+DPcKqiHIDbFIGudxtPTIyDi9SFMKBDcfdGQRv41q1AqmxgkVfJMnP8w/Bc7N9/TR6C7mGObFqFkIEom8sKi2xYqJLTCHK7cxzaZvqODo22c3wisBCP4HeAgcRbNPAsBkNRhSmD48dHupdBRw4mIvtS5oeF6zeT1KMCyhMnmhpkFAGWnGscoNkwvQ8ZM5lE/vgTHFYL99OuNxdFBxTEDd5v2qLR8y9WkXsWgG6kZNndFG+pO/UAkOCipqIhL3hq7cRSdrCq7YhUsTocEcnaFa6nVkhnSeRYUA1YO0z5itF9Sly3VlxYDw239TJJH6f3EUfYO5lb7bcFcz8Bp7Oo8QmnsUHOz/fagVUBtKEw1iT88j+aKkv8cscKNkMxjYr8344D1kFoZ7/td1W6LCNYN594301tUGRmFjAzeRg5vyoM1F6+bJZ/Q54jN/k8SFd3DxPTYaAUsivsBfgTn7Mx8H2SpPt4GOdYRnEJOH6jHM2p6SgB0gzIRq6fHxGMmSmqaPCmlfwxiuloaVIitLGN8wie2CDWhkzLoCJcODh7KIOAqbHEvXdUxaS4TTTs07Clzj/6GmVs9kiZDerMxEnhUB6QQPlcfqkG9882RqHoLiHGBoHfQuXIsAG8GTAtao2KVwRnvvam8jo1e312GQAKWEa4sUVEAMG4G6ckcONDwRcg1e2D3+ohXgY4UAWF8wHKQMrSnzCgfFpsxh+aHXMGtPQroQasRY4U6UdG0rz1Vjbka0MekOGRZQEvqQFlxseFor8zWFgHek3v29+WqN6gaK5gZOTOMZzpQIC1201LkMCXild3vWXSc5UX9xcFYfbRPzGFa1FDcPfPB/jUEq/FeGt419CI3YmBlVoHsa4KdcwQP5ZSwHHhFJ7/Ph/Rap/4vmG91eDwPP0lDfCDRCLszTqfzM71xpmiKi2HwS4WlqvGNwtvwF5Dqpn6KTq8ax00UMPkxDcZrEEEsIvHiUXXEphdb4GB4FymlPwBz4Gperqq5pW7TQ6/yNRhW8VT5NhuP0udlxo4gILq5ZxAZk8ZGh3g4CqxJlPKY7AQxupfUcVpWT5VItp1+30UqoyP4wWsRo3olRRgkWZZ2ZN6VC3OZFeXB8NbnUrSdikNptD1QiGuKkr8EmSR/AK9Rw+FF3s5uwuPbvHGiPeFOViltMK7AUaOsq9+x9cndk3iJEE5LKZRlWJbKOZweROzmPNVPkjE3K/TyA57Rs68TkZ3MR8akKpm7cFjnjPd/DdkWjgYoKHSr5Wu5ssoBYU4acRs5g2DHxUmdq8VXOXRbunD8QN0LhgkssgahcdoYsNvuXGUK/KXD/7oFb+VGdhqIn02veuM5bLudJOc2Ky0GMaG4W/xWBxIJcL7yliJOXOpx0AkBqUgzlDczmLT4iILXDxxtRR1oZa2JWFgiAb43obrJnG/TZC2KSK2wqOzRZTXavZZFMb1f3bXvVaNaK828w9TO610gk8JNf3gMfETzXXsbcvRGCG9JWQZ6+cDPqc4466Yo2RcKH+PILeKOqtnlbInR3MmBeGG3FH10yzkybuqEC2HSQwpA0An7d9+73BkDUTm30bZmoP/RGbgFN+GrCOfADgqr0WbI1a1okpFms8iHYw9hm0zUvlEMivBRxModrbJJ+9/p3jUdQQ9BCtQdxnOGrT5dzRUmw0593/mbRSdBg0nRvRZM5/E16m7ZHmDEtWhwvfdZCZ8J8M12W0yRMszXamWfQTwIZ4ayYktrnscQuWr8idp3PjT2eF/jmtdhIfcpMnb+IfZY2FebW6UY/AK3jP4u3Tu4zE4qlnQgLFbM19EBIsNf7KhjdbqQ/D6yiDb+NlEi2SKD+ivXVUK8ib0oBo366gXkR8ZxGjpJIDcEgZPa9TcYe0TIbiPl/rPUQDu3XBJ9X/GNq3FAUsKsll57DzaGMrjcT+gctp+9MLYXCq+sqP81eVQ0r9lt+gcQfZbACRbEjvlMskztZG8gbC8Qn9tt26Q7y7nDrbZq/LEz7kR6Jc6pg3N9rVX8Y5MJrGlML9p9lU4jbTkKqCveeZUJjHB03m2KRKR2TytoFkTXOLg7keU1s1lrPMQJpoOKLuAAC+y1HlJucU6ysB5hsXhvSPPLq5J7JtnqHKZ4vYjC4Vy8153QY+6780xDuGARsGbOs1WqzH0QS765rnSKEbbKlkO8oI/VDwUd0is13tKpqILu1mDJFNy/iJAWcvDgjxvusIT+PGz3ST/J9r9Mtfd0jpaGeiLYIqXc7DiHSS8TcjFVksi66PEkxW1z6ujbLLUGNNYnzOWpH8BZGK4bCK7iR+MbIv8ncDAz1u4StN3vTTzewr9IQjk9wxFxn+6N1ddKs0vffJiS08N3a4G1SVrlZ97Q/M+8G9fe5AP6d9/Qq4WRnORVhofPIKEdCr3llspUfE0oKIIYoByBRPh+bX1HLS3JWGJRhIvE1aW4NTd8ePi4Z+kXb+Z8snYfSNcqijhAgVsx4RCM54cXUiYkjeBmmC4ajOHrChoELscJJC7+9jjMjw5BagZKlgRMiSNYz7h7vvZIoQqbtQmspc0cUk1G/73iXtSpROl5wtLgQi0mW2Ex8i3WULhcggx6E1LMVHUsdc9GHI1PH3U2Ko0PyGdn9KdVOLm7FPBui0i9a0HpA60MsewVE4z8CAt5d401Gv6zXlIT5Ybit1VIA0FCs7wtvYreru1fUyW3oLAZ/+aTnZrOcYRNVA8spoRtlRoWflsRClFcgzkqiHOrf0/SVw+EpVaFlJ0g4Kxq1MMOmiQdpMNpte8lMMQqm6cIFXlnGbfJllysKDi+0JJMotkqgIxOSQgU9dn/lWkeVf8nUm3iwX2Nl3WDw9i6AUK3vBAbZZrcJpDQ/N64AVwjT07Jef30GSSmtNu2WlW7YoyW2FlWfZFQUwk867EdLYKk9VG6JgEnBiBxkY7LMo4YLQJJlAo9l/oTvJkSARDF/XtyAzM8O2t3eT/iXa6wDN3WewNmQHdPfsxChU/KtLG2Mn8i4ZqKdSlIaBZadxJmRzVS/o4yA65RTSViq60oa395Lqw0pzY4SipwE0SXXsKV+GZraGSkr/RW08wPRvqvSUkYBMA9lPx4m24az+IHmCbXA+0faxTRE9wuGeO06DIXa6QlKJ3puIyiuAVfPr736vzo2pBirS+Vxel3TMm3JKhz9o2ZoRvaFVpIkykb0Hcm4oHFBMcNSNj7/4GJt43ogonY2Vg4nsDQIWxAcorpXACzgBqQPjYsE/VUpXpwNManEru4NwMCFPkXvMoqvoeLN3qyu/N1eWEHttMD65v19l/0kH2mR35iv/FI+yjoHJ9gPMz67af3Mq/BoWXqu3rphiWMXVkmnPSEkpGpUI2h1MThideGFEOK6YZHPwYzMBvpNC7+ZHxPb7epfefGyIB4JzO9DTNEYnDLVVHdQyvOEVefrk6Uv5kTQYVYWWdqrdcIl7yljwwIWdfQ/y+2QB3eR/qxYObuYyB4gTbo2in4PzarU1sO9nETkmj9/AoxDA+JM3GMqQtJR4jtduHtnoCLxd1gQUscHRB/MoRYIEsP2pDZ9KvHgtlk1iTbWWbHhohwFEYX7y51fUV2nuUmnoUcqnWIQAAgl9LTVX+Bc0QGNEhChxHR4YjfE51PUdGfsSFE6ck7BL3/hTf9jLq4G1IafINxOLKeAtO7quulYvH5YOBc+zX7CrMgWnW47/jfRsWnJjYYoE7xMfWV2HN2iyIqLI"),read_sorted_array=()=>read_sorted(n),read_sorted_set=()=>new Set(read_sorted_array());c=new Map(read_mapped(n)),u=read_sorted_set(),d=read_sorted_array(),p=new Set(read_sorted_array().map(e=>d[e])),d=new Set(d),f=read_sorted_set(),read_sorted_set();let o=read_sorted_arrays(n),i=n(),read_chunked=()=>new Set(read_sorted_array().flatMap(e=>o[e]).concat(read_sorted_array()));m=read_array_while(e=>{let t=read_array_while(n).map(e=>e+96);if(t.length){let o=e>=i;return t[0]-=32,t=str_from_cps(t),o&&(t=`Restricted[${t}]`),{N:t,P:read_chunked(),Q:read_chunked(),M:!n(),R:o}}}),g=read_sorted_set(),b=new Map;let s=read_sorted_array().concat(Array_from(g)).sort((e,t)=>e-t);for(let{V:e,M:t}of(s.forEach((e,t)=>{let o=n(),i=s[t]=o?s[t-o]:{V:[],M:new Map};i.V.push(e),g.has(e)||b.set(e,i)}),new Set(b.values()))){let n=[];for(let t of e){let e=m.filter(e=>group_has_cp(e,t)),o=n.find(({G:t})=>e.some(e=>t.has(e)));o||(o={G:new Set,V:[]},n.push(o)),o.V.push(t),e.forEach(e=>o.G.add(e))}let o=n.flatMap(e=>Array_from(e.G));for(let{G:e,V:i}of n){let n=new Set(o.filter(t=>!e.has(t)));for(let e of i)t.set(e,n)}}let l=new Set,C=new Set,add_to_union=e=>l.has(e)?C.add(e):l.add(e);for(let e of m){for(let t of e.P)add_to_union(t);for(let t of e.Q)add_to_union(t)}for(let e of l)b.has(e)||C.has(e)||b.set(e,1);for(let o of(y=new Set(Array_from(l).concat(Array_from(decomposed(l).map(unpack_cp)))),v=(e=[],t=read_sorted(n),function expand({S:t,B:n},o,i){if(!(4&t)||i!==o[o.length-1])for(let s of(2&t&&(i=o[o.length-1]),1&t&&e.push(o),n))for(let e of s.Q)expand(s,[...o,e],i)}(function decode(e){return{S:n(),B:read_array_while(()=>{let e=read_sorted(n).map(e=>t[e]);if(e.length)return decode(e)}),Q:e}}([]),[]),e).map(e=>Emoji.from(e)).sort(compare_arrays),w=new Map,v)){let e=[w];for(let t of o){let n=e.map(e=>{let n=e.get(t);return n||(n=new Map,e.set(t,n)),n});65039===t?e.push(...n):e=n}for(let t of e)t.V=o}}function quoted_cp(e){return(should_escape(e)?"":`${bidi_qq(safe_str_from_cps([e]))} `)+quote_cp(e)}function bidi_qq(e){return`"${e}"\u200E`}function safe_str_from_cps(e,t=quote_cp){var n;let o=[];n=e[0],init(),d.has(n)&&o.push("◌");let i=0,s=e.length;for(let n=0;ne.P.has(t));return o&&(n=`${o.N} ${n}`),Error(`illegal mixture: ${e.N} + ${n}`)}function error_placement(e){return Error(`illegal placement: ${e}`)}function filter_fe0f(e){return e.filter(e=>65039!=e)}let EnsAvatarInvalidMetadataError=class EnsAvatarInvalidMetadataError extends X.G{constructor({data:e}){super("Unable to extract image from metadata. The metadata may be malformed or invalid.",{metaMessages:["- Metadata must be a JSON object with at least an `image`, `image_url` or `image_data` property.","",`Provided data: ${JSON.stringify(e)}`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EnsAvatarInvalidMetadataError"})}};let EnsAvatarInvalidNftUriError=class EnsAvatarInvalidNftUriError extends X.G{constructor({reason:e}){super(`ENS NFT avatar URI is invalid. ${e}`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EnsAvatarInvalidNftUriError"})}};let EnsAvatarUriResolutionError=class EnsAvatarUriResolutionError extends X.G{constructor({uri:e}){super(`Unable to resolve ENS avatar URI "${e}". The URI may be malformed, invalid, or does not respond with a valid image.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EnsAvatarUriResolutionError"})}};let EnsAvatarUnsupportedNamespaceError=class EnsAvatarUnsupportedNamespaceError extends X.G{constructor({namespace:e}){super(`ENS NFT avatar namespace "${e}" is not supported. Must be "erc721" or "erc1155".`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EnsAvatarUnsupportedNamespaceError"})}};let ef=/(?https?:\/\/[^\/]*|ipfs:\/|ipns:\/|ar:\/)?(?\/)?(?ipfs\/|ipns\/)?(?[\w\-.]+)(?\/.*)?/,em=/^(Qm[1-9A-HJ-NP-Za-km-z]{44,}|b[A-Za-z2-7]{58,}|B[A-Z2-7]{58,}|z[1-9A-HJ-NP-Za-km-z]{48,}|F[0-9A-F]{50,})(\/(?[\w\-.]+))?(?\/.*)?$/,eg=/^data:([a-zA-Z\-/+]*);base64,([^"].*)/,eb=/^data:([a-zA-Z\-/+]*)?(;[a-zA-Z0-9].*?)?(,)/;async function isImageUri(e){try{let t=await fetch(e,{method:"HEAD"});if(200===t.status){let e=t.headers.get("content-type");return e?.startsWith("image/")}return!1}catch(t){if("object"==typeof t&&void 0!==t.response||!globalThis.hasOwnProperty("Image"))return!1;return new Promise(t=>{let n=new Image;n.onload=()=>{t(!0)},n.onerror=()=>{t(!1)},n.src=e})}}function getGateway(e,t){return e?e.endsWith("/")?e.slice(0,-1):e:t}function resolveAvatarUri({uri:e,gatewayUrls:t}){let n=eg.test(e);if(n)return{uri:e,isOnChain:!0,isEncoded:n};let o=getGateway(t?.ipfs,"https://ipfs.io"),i=getGateway(t?.arweave,"https://arweave.net"),s=e.match(ef),{protocol:l,subpath:c,target:u,subtarget:d=""}=s?.groups||{},p="ipns:/"===l||"ipns/"===c,f="ipfs:/"===l||"ipfs/"===c||em.test(e);if(e.startsWith("http")&&!p&&!f){let n=e;return t?.arweave&&(n=e.replace(/https:\/\/arweave.net/g,t?.arweave)),{uri:n,isOnChain:!1,isEncoded:!1}}if((p||f)&&u)return{uri:`${o}/${p?"ipns":"ipfs"}/${u}${d}`,isOnChain:!1,isEncoded:!1};if("ar:/"===l&&u)return{uri:`${i}/${u}${d||""}`,isOnChain:!1,isEncoded:!1};let m=e.replace(eb,"");if(m.startsWith("e.json()),o=await parseAvatarUri({gatewayUrls:e,uri:getJsonImage(n)});return o}catch{throw new EnsAvatarUriResolutionError({uri:t})}}async function parseAvatarUri({gatewayUrls:e,uri:t}){let{uri:n,isOnChain:o}=resolveAvatarUri({uri:t,gatewayUrls:e});if(o)return n;let i=await isImageUri(n);if(i)return n;throw new EnsAvatarUriResolutionError({uri:t})}async function getNftTokenUri(e,{nft:t}){if("erc721"===t.namespace)return readContract(e,{address:t.contractAddress,abi:[{name:"tokenURI",type:"function",stateMutability:"view",inputs:[{name:"tokenId",type:"uint256"}],outputs:[{name:"",type:"string"}]}],functionName:"tokenURI",args:[BigInt(t.tokenID)]});if("erc1155"===t.namespace)return readContract(e,{address:t.contractAddress,abi:[{name:"uri",type:"function",stateMutability:"view",inputs:[{name:"_id",type:"uint256"}],outputs:[{name:"",type:"string"}]}],functionName:"uri",args:[BigInt(t.tokenID)]});throw new EnsAvatarUnsupportedNamespaceError({namespace:t.namespace})}async function parseAvatarRecord(e,{gatewayUrls:t,record:n}){return/eip155:/i.test(n)?parseNftAvatarUri(e,{gatewayUrls:t,record:n}):parseAvatarUri({uri:n,gatewayUrls:t})}async function parseNftAvatarUri(e,{gatewayUrls:t,record:n}){let o=function(e){let t=e;t.startsWith("did:nft:")&&(t=t.replace("did:nft:","").replace(/_/g,"/"));let[n,o,i]=t.split("/"),[s,l]=n.split(":"),[c,u]=o.split(":");if(!s||"eip155"!==s.toLowerCase())throw new EnsAvatarInvalidNftUriError({reason:"Only EIP-155 supported"});if(!l)throw new EnsAvatarInvalidNftUriError({reason:"Chain ID not found"});if(!u)throw new EnsAvatarInvalidNftUriError({reason:"Contract address not found"});if(!i)throw new EnsAvatarInvalidNftUriError({reason:"Token ID not found"});if(!c)throw new EnsAvatarInvalidNftUriError({reason:"ERC namespace not found"});return{chainID:parseInt(l),namespace:c.toLowerCase(),contractAddress:u,tokenID:i}}(n),i=await getNftTokenUri(e,{nft:o}),{uri:s,isOnChain:l,isEncoded:c}=resolveAvatarUri({uri:i,gatewayUrls:t});if(l&&(s.includes("data:application/json;base64,")||s.startsWith("{"))){let e=c?atob(s.replace("data:application/json;base64,","")):s,n=JSON.parse(e);return parseAvatarUri({uri:getJsonImage(n),gatewayUrls:t})}let u=o.tokenID;return"erc1155"===o.namespace&&(u=u.replace("0x","").padStart(64,"0")),getMetadataAvatarUri({gatewayUrls:t,uri:s.replace(/(?:0x)?{id}/,u)})}var ey=n(21746);function isNullUniversalResolverError(e,t){if(!(e instanceof X.G))return!1;let n=e.walk(e=>e instanceof q.Lu);return n instanceof q.Lu&&(!!(n.data?.errorName==="ResolverNotFound"||n.data?.errorName==="ResolverWildcardNotSupported"||n.data?.errorName==="ResolverNotContract"||n.data?.errorName==="ResolverError"||n.data?.errorName==="HttpError"||n.reason?.includes("Wildcard on non-extended resolvers is not supported"))||"reverse"===t&&n.reason===ey.$[50])}var ev=n(57040),ew=n(11187),eC=n(49550),eE=n(15102);function encodedLabelToLabelhash(e){if(66!==e.length||0!==e.indexOf("[")||65!==e.indexOf("]"))return null;let t=`0x${e.slice(1,65)}`;return(0,eE.v)(t)?t:null}function namehash(e){let t=new Uint8Array(32).fill(0);if(!e)return(0,Q.ci)(t);let n=e.split(".");for(let e=n.length-1;e>=0;e-=1){let o=encodedLabelToLabelhash(n[e]),i=o?(0,ew.O0)(o):(0,eC.w)((0,ew.qX)(n[e]),"bytes");t=(0,eC.w)((0,ev.zo)([t,i]),"bytes")}return(0,Q.ci)(t)}function packetToBytes(e){let t=e.replace(/^\.|\.$/gm,"");if(0===t.length)return new Uint8Array(1);let n=new Uint8Array((0,ew.qX)(t).byteLength+2),o=0,i=t.split(".");for(let e=0;e255){var s;t=(0,ew.qX)((s=function(e){let t=new Uint8Array(32).fill(0);return e?encodedLabelToLabelhash(e)||(0,eC.w)((0,ew.qX)(e)):(0,Q.ci)(t)}(i[e]),`[${s.slice(2)}]`))}n[o]=t.length,n.set(t,o+1),o+=t.length+1}return n.byteLength!==o+1?n.slice(0,o+1):n}async function getEnsText(e,{blockNumber:t,blockTag:n,name:o,key:i,gatewayUrls:s,strict:l,universalResolverAddress:c}){let u=c;if(!u){if(!e.chain)throw Error("client chain not configured. universalResolverAddress is required.");u=(0,ee.L)({blockNumber:t,chain:e.chain,contract:"ensUniversalResolver"})}try{let l={address:u,abi:Z.k3,functionName:"resolve",args:[(0,Q.NC)(packetToBytes(o)),(0,$.R)({abi:Z.nZ,functionName:"text",args:[namehash(o),i]})],blockNumber:t,blockTag:n},c=getAction_getAction(e,readContract,"readContract"),d=s?await c({...l,args:[...l.args,s]}):await c(l);if("0x"===d[0])return null;let p=(0,Y.k)({abi:Z.nZ,functionName:"text",data:d[0]});return""===p?null:p}catch(e){if(l)throw e;if(isNullUniversalResolverError(e,"resolve"))return null;throw e}}async function getEnsAvatar(e,{blockNumber:t,blockTag:n,assetGatewayUrls:o,name:i,gatewayUrls:s,strict:l,universalResolverAddress:c}){let u=await getAction_getAction(e,getEnsText,"getEnsText")({blockNumber:t,blockTag:n,key:"avatar",name:i,universalResolverAddress:c,gatewayUrls:s,strict:l});if(!u)return null;try{return await parseAvatarRecord(e,{record:u,gatewayUrls:o})}catch{return null}}var ex=n(66403);async function getEnsName(e,{address:t,blockNumber:n,blockTag:o,gatewayUrls:i,strict:s,universalResolverAddress:l}){let c=l;if(!c){if(!e.chain)throw Error("client chain not configured. universalResolverAddress is required.");c=(0,ee.L)({blockNumber:n,chain:e.chain,contract:"ensUniversalResolver"})}let u=`${t.toLowerCase().substring(2)}.addr.reverse`;try{let s={address:c,abi:Z.du,functionName:"reverse",args:[(0,Q.NC)(packetToBytes(u))],blockNumber:n,blockTag:o},l=getAction_getAction(e,readContract,"readContract"),[d,p]=i?await l({...s,args:[...s.args,i]}):await l(s);if(t.toLowerCase()!==p.toLowerCase())return null;return d}catch(e){if(s)throw e;if(isNullUniversalResolverError(e,"reverse"))return null;throw e}}async function getEnsAddress(e,{blockNumber:t,blockTag:n,coinType:o,name:i,gatewayUrls:s,strict:l,universalResolverAddress:c}){let u=c;if(!u){if(!e.chain)throw Error("client chain not configured. universalResolverAddress is required.");u=(0,ee.L)({blockNumber:t,chain:e.chain,contract:"ensUniversalResolver"})}try{let l=(0,$.R)({abi:Z.X$,functionName:"addr",...null!=o?{args:[namehash(i),BigInt(o)]}:{args:[namehash(i)]}}),c={address:u,abi:Z.k3,functionName:"resolve",args:[(0,Q.NC)(packetToBytes(i)),l],blockNumber:t,blockTag:n},d=getAction_getAction(e,readContract,"readContract"),p=s?await d({...c,args:[...c.args,s]}):await d(c);if("0x"===p[0])return null;let f=(0,Y.k)({abi:Z.X$,args:null!=o?[namehash(i),BigInt(o)]:void 0,functionName:"addr",data:p[0]});if("0x"===f||"0x00"===(0,W.f)(f))return null;return f}catch(e){if(l)throw e;if(isNullUniversalResolverError(e,"resolve"))return null;throw e}}async function getEnsResolver(e,{blockNumber:t,blockTag:n,name:o,universalResolverAddress:i}){let s=i;if(!s){if(!e.chain)throw Error("client chain not configured. universalResolverAddress is required.");s=(0,ee.L)({blockNumber:t,chain:e.chain,contract:"ensUniversalResolver"})}let[l]=await getAction_getAction(e,readContract,"readContract")({address:s,abi:[{inputs:[{type:"bytes"}],name:"findResolver",outputs:[{type:"address"},{type:"bytes32"}],stateMutability:"view",type:"function"}],functionName:"findResolver",args:[(0,Q.NC)(packetToBytes(o))],blockNumber:t,blockTag:n});return l}function createFilterRequestScope(e,{method:t}){let n={};return"fallback"===e.transport.type&&e.transport.onResponse?.(({method:e,response:o,status:i,transport:s})=>{"success"===i&&t===e&&(n[o]=s.request)}),t=>n[t]||e.request}async function createBlockFilter(e){let t=createFilterRequestScope(e,{method:"eth_newBlockFilter"}),n=await e.request({method:"eth_newBlockFilter"});return{id:n,request:t(n),type:"block"}}let FilterTypeNotSupportedError=class FilterTypeNotSupportedError extends X.G{constructor(e){super(`Filter type "${e}" is not supported.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"FilterTypeNotSupportedError"})}};var eA=n(96005),ek=n(45444),eB=n(80522),eS=n(40840);let eI="/docs/contract/encodeEventTopics";function encodeEventTopics(e){let{abi:t,eventName:n,args:o}=e,i=t[0];if(n){let e=(0,eS.mE)({abi:t,name:n});if(!e)throw new J.mv(n,{docsPath:eI});i=e}if("event"!==i.type)throw new J.mv(void 0,{docsPath:eI});let s=(0,eB.t)(i),l=(0,eA.n)(s),c=[];if(o&&"inputs"in i){let e=i.inputs?.filter(e=>"indexed"in e&&e.indexed),t=Array.isArray(o)?o:Object.values(o).length>0?e?.map(e=>o[e.name])??[]:[];t.length>0&&(c=e?.map((e,n)=>Array.isArray(t[n])?t[n].map((o,i)=>encodeArg({param:e,value:t[n][i]})):t[n]?encodeArg({param:e,value:t[n]}):null)??[])}return[l,...c]}function encodeArg({param:e,value:t}){if("string"===e.type||"bytes"===e.type)return(0,eC.w)((0,ew.O0)(t));if("tuple"===e.type||e.type.match(/^(.*)\[(\d+)?\]$/))throw new FilterTypeNotSupportedError(e.type);return(0,ek.E)([e],[t])}async function createContractEventFilter(e,t){let{address:n,abi:o,args:i,eventName:s,fromBlock:l,strict:c,toBlock:u}=t,d=createFilterRequestScope(e,{method:"eth_newFilter"}),p=s?encodeEventTopics({abi:o,args:i,eventName:s}):void 0,f=await e.request({method:"eth_newFilter",params:[{address:n,fromBlock:"bigint"==typeof l?(0,Q.eC)(l):l,toBlock:"bigint"==typeof u?(0,Q.eC)(u):u,topics:p}]});return{abi:o,args:i,eventName:s,id:f,request:d(f),strict:!!c,type:"event"}}async function createEventFilter(e,{address:t,args:n,event:o,events:i,fromBlock:s,strict:l,toBlock:c}={}){let u=i??(o?[o]:void 0),d=createFilterRequestScope(e,{method:"eth_newFilter"}),p=[];u&&(p=[u.flatMap(e=>encodeEventTopics({abi:[e],eventName:e.name,args:n}))],o&&(p=p[0]));let f=await e.request({method:"eth_newFilter",params:[{address:t,fromBlock:"bigint"==typeof s?(0,Q.eC)(s):s,toBlock:"bigint"==typeof c?(0,Q.eC)(c):c,...p.length?{topics:p}:{}}]});return{abi:u,args:n,eventName:o?o.name:void 0,fromBlock:s,id:f,request:d(f),strict:!!l,toBlock:c,type:"event"}}async function createPendingTransactionFilter(e){let t=createFilterRequestScope(e,{method:"eth_newPendingTransactionFilter"}),n=await e.request({method:"eth_newPendingTransactionFilter"});return{id:n,request:t(n),type:"transaction"}}var ej=n(14503),eT=n(39625),eP=n(67795),eM=n(33639);let EstimateGasExecutionError=class EstimateGasExecutionError extends X.G{constructor(e,{account:t,docsPath:n,chain:o,data:i,gas:s,gasPrice:l,maxFeePerGas:c,maxPriorityFeePerGas:u,nonce:d,to:p,value:f}){let m=(0,eM.xr)({from:t?.address,to:p,value:void 0!==f&&`${(0,eT.d)(f)} ${o?.nativeCurrency?.symbol||"ETH"}`,data:i,gas:s,gasPrice:void 0!==l&&`${(0,eP.o)(l)} gwei`,maxFeePerGas:void 0!==c&&`${(0,eP.o)(c)} gwei`,maxPriorityFeePerGas:void 0!==u&&`${(0,eP.o)(u)} gwei`,nonce:d});super(e.shortMessage,{cause:e,docsPath:n,metaMessages:[...e.metaMessages?[...e.metaMessages," "]:[],"Estimate Gas Arguments:",m].filter(Boolean)}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"EstimateGasExecutionError"}),this.cause=e}};var eO=n(26445),eR=n(87469),eU=n(61163),eF=n(74688),eN=n(47531);let BaseFeeScalarError=class BaseFeeScalarError extends X.G{constructor(){super("`baseFeeMultiplier` must be greater than 1."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BaseFeeScalarError"})}};let Eip1559FeesNotSupportedError=class Eip1559FeesNotSupportedError extends X.G{constructor(){super("Chain does not support EIP-1559 fees."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"Eip1559FeesNotSupportedError"})}};let MaxFeePerGasTooLowError=class MaxFeePerGasTooLowError extends X.G{constructor({maxPriorityFeePerGas:e}){super(`\`maxFeePerGas\` cannot be less than the \`maxPriorityFeePerGas\` (${(0,eP.o)(e)} gwei).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"MaxFeePerGasTooLowError"})}};let BlockNotFoundError=class BlockNotFoundError extends X.G{constructor({blockHash:e,blockNumber:t}){let n="Block";e&&(n=`Block at hash "${e}"`),t&&(n=`Block at number "${t}"`),super(`${n} could not be found.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BlockNotFoundError"})}};var eD=n(43310);async function getBlock(e,{blockHash:t,blockNumber:n,blockTag:o,includeTransactions:i}={}){let s=i??!1,l=void 0!==n?(0,Q.eC)(n):void 0,c=null;if(!(c=t?await e.request({method:"eth_getBlockByHash",params:[t,s]}):await e.request({method:"eth_getBlockByNumber",params:[l||(o??"latest"),s]})))throw new BlockNotFoundError({blockHash:t,blockNumber:n});let u=e.chain?.formatters?.block?.format||eD.Z;return u(c)}async function getGasPrice(e){let t=await e.request({method:"eth_gasPrice"});return BigInt(t)}async function estimateMaxPriorityFeePerGas(e,t){return internal_estimateMaxPriorityFeePerGas(e,t)}async function internal_estimateMaxPriorityFeePerGas(e,t){let{block:n,chain:o=e.chain,request:i}=t||{};if("function"==typeof o?.fees?.defaultPriorityFee){let t=n||await getAction_getAction(e,getBlock,"getBlock")({});return o.fees.defaultPriorityFee({block:t,client:e,request:i})}if(void 0!==o?.fees?.defaultPriorityFee)return o?.fees?.defaultPriorityFee;try{let t=await e.request({method:"eth_maxPriorityFeePerGas"});return(0,G.y_)(t)}catch{let[t,o]=await Promise.all([n?Promise.resolve(n):getAction_getAction(e,getBlock,"getBlock")({}),getAction_getAction(e,getGasPrice,"getGasPrice")({})]);if("bigint"!=typeof t.baseFeePerGas)throw new Eip1559FeesNotSupportedError;let i=o-t.baseFeePerGas;if(i<0n)return 0n;return i}}async function estimateFeesPerGas(e,t){return internal_estimateFeesPerGas(e,t)}async function internal_estimateFeesPerGas(e,t){let{block:n,chain:o=e.chain,request:i,type:s="eip1559"}=t||{},l=await (async()=>"function"==typeof o?.fees?.baseFeeMultiplier?o.fees.baseFeeMultiplier({block:n,client:e,request:i}):o?.fees?.baseFeeMultiplier??1.2)();if(l<1)throw new BaseFeeScalarError;let c=l.toString().split(".")[1]?.length??0,u=10**c,multiply=e=>e*BigInt(Math.ceil(l*u))/BigInt(u),d=n||await getAction_getAction(e,getBlock,"getBlock")({});if("function"==typeof o?.fees?.estimateFeesPerGas)return o.fees.estimateFeesPerGas({block:n,client:e,multiply,request:i,type:s});if("eip1559"===s){if("bigint"!=typeof d.baseFeePerGas)throw new Eip1559FeesNotSupportedError;let t="bigint"==typeof i?.maxPriorityFeePerGas?i.maxPriorityFeePerGas:await internal_estimateMaxPriorityFeePerGas(e,{block:d,chain:o,request:i}),n=multiply(d.baseFeePerGas),s=i?.maxFeePerGas??n+t;return{maxFeePerGas:s,maxPriorityFeePerGas:t}}let p=i?.gasPrice??multiply(await getAction_getAction(e,getGasPrice,"getGasPrice")({}));return{gasPrice:p}}async function getTransactionCount(e,{address:t,blockTag:n="latest",blockNumber:o}){let i=await e.request({method:"eth_getTransactionCount",params:[t,o?(0,Q.eC)(o):n]});return(0,G.ly)(i)}var e_=n(82994);async function getChainId_getChainId(e){let t=await e.request({method:"eth_chainId"});return(0,G.ly)(t)}async function prepareTransactionRequest(e,t){let{account:n=e.account,chain:o,chainId:i,gas:s,nonce:l,parameters:c=["chainId","fees","gas","nonce","type"],type:u}=t,d=n?(0,ej.T)(n):void 0,p=await getAction_getAction(e,getBlock,"getBlock")({blockTag:"latest"}),f={...t,...d?{from:d?.address}:{}};if(c.includes("chainId")&&(o?f.chainId=o.id:void 0!==i?f.chainId=i:f.chainId=await getAction_getAction(e,getChainId_getChainId,"getChainId")({})),c.includes("nonce")&&void 0===l&&d&&(f.nonce=await getAction_getAction(e,getTransactionCount,"getTransactionCount")({address:d.address,blockTag:"pending"})),(c.includes("fees")||c.includes("type"))&&void 0===u)try{f.type=(0,e_.l)(f)}catch{f.type="bigint"==typeof p.baseFeePerGas?"eip1559":"legacy"}if(c.includes("fees")){if("eip1559"===f.type||"eip4844"===f.type){let{maxFeePerGas:n,maxPriorityFeePerGas:i}=await internal_estimateFeesPerGas(e,{block:p,chain:o,request:f});if(void 0===t.maxPriorityFeePerGas&&t.maxFeePerGas&&t.maxFeePerGas{let t=(0,eR.k)(e,n);return t instanceof eO.cj?e:t})();return new EstimateGasExecutionError(o,{docsPath:t,...n})}(n,{...t,account:o,chain:e.chain})}}async function estimateContractGas(e,t){let{abi:n,address:o,args:i,functionName:s,...l}=t,c=(0,$.R)({abi:n,args:i,functionName:s});try{let t=await getAction_getAction(e,estimateGas,"estimateGas")({data:c,to:o,...l});return t}catch(t){let e=l.account?(0,ej.T)(l.account):void 0;throw getContractError(t,{abi:n,address:o,args:i,docsPath:"/docs/contract/estimateContractGas",functionName:s,sender:e?.address})}}async function getBlobBaseFee(e){let t=await e.request({method:"eth_blobBaseFee"});return BigInt(t)}let eL=new Map,ez=new Map;async function withCache(e,{cacheKey:t,cacheTime:n=1/0}){let o=function(e){let buildCache=(e,t)=>({clear:()=>t.delete(e),get:()=>t.get(e),set:n=>t.set(e,n)}),t=buildCache(e,eL),n=buildCache(e,ez);return{clear:()=>{t.clear(),n.clear()},promise:t,response:n}}(t),i=o.response.get();if(i&&n>0){let e=new Date().getTime()-i.created.getTime();if(e`blockNumber.${e}`;async function getBlockNumber(e,{cacheTime:t=e.cacheTime}={}){let n=await withCache(()=>e.request({method:"eth_blockNumber"}),{cacheKey:cacheKey(e.uid),cacheTime:t});return BigInt(n)}async function getBlockTransactionCount(e,{blockHash:t,blockNumber:n,blockTag:o="latest"}={}){let i;let s=void 0!==n?(0,Q.eC)(n):void 0;return i=t?await e.request({method:"eth_getBlockTransactionCountByHash",params:[t]}):await e.request({method:"eth_getBlockTransactionCountByNumber",params:[s||o]}),(0,G.ly)(i)}async function getBytecode(e,{address:t,blockNumber:n,blockTag:o="latest"}){let i=void 0!==n?(0,Q.eC)(n):void 0,s=await e.request({method:"eth_getCode",params:[t,i||o]});if("0x"!==s)return s}var eq=n(39135),eG=n(66238),eW=n(78398);let eH="/docs/contract/decodeEventLog";function decodeEventLog(e){let{abi:t,data:n,strict:o,topics:i}=e,s=o??!0,[l,...c]=i;if(!l)throw new J.FM({docsPath:eH});let u=t.find(e=>"event"===e.type&&l===(0,eA.n)((0,eB.t)(e)));if(!(u&&"name"in u)||"event"!==u.type)throw new J.lC(l,{docsPath:eH});let{name:d,inputs:p}=u,f=p?.some(e=>!("name"in e&&e.name)),m=f?[]:{},g=p.filter(e=>"indexed"in e&&e.indexed);for(let e=0;e!("indexed"in e&&e.indexed));if(b.length>0){if(n&&"0x"!==n)try{let e=(0,eW.r)(b,n);if(e){if(f)m=[...m,...e];else for(let t=0;t0?m:void 0}}function parseEventLogs({abi:e,eventName:t,logs:n,strict:o=!0}){return n.map(n=>{try{let i=decodeEventLog({...n,abi:e,strict:o});if(t&&!t.includes(i.eventName))return null;return{...i,...n}}catch(i){let e,t;if(i instanceof J.lC)return null;if(i instanceof J.SM||i instanceof J.Gy){if(o)return null;e=i.abiItem.name,t=i.abiItem.inputs?.some(e=>!("name"in e&&e.name))}return{...n,args:t?[]:{},eventName:e}}}).filter(Boolean)}var eQ=n(53992);async function getLogs(e,{address:t,blockHash:n,fromBlock:o,toBlock:i,event:s,events:l,args:c,strict:u}={}){let d;let p=u??!1,f=l??(s?[s]:void 0),m=[];f&&(m=[f.flatMap(e=>encodeEventTopics({abi:[e],eventName:e.name,args:c}))],s&&(m=m[0])),d=n?await e.request({method:"eth_getLogs",params:[{address:t,topics:m,blockHash:n}]}):await e.request({method:"eth_getLogs",params:[{address:t,topics:m,fromBlock:"bigint"==typeof o?(0,Q.eC)(o):o,toBlock:"bigint"==typeof i?(0,Q.eC)(i):i}]});let g=d.map(e=>(0,eQ.U)(e));return f?parseEventLogs({abi:f,logs:g,strict:p}):g}async function getContractEvents(e,t){let{abi:n,address:o,args:i,blockHash:s,eventName:l,fromBlock:c,toBlock:u,strict:d}=t,p=l?(0,eS.mE)({abi:n,name:l}):void 0,f=p?void 0:n.filter(e=>"event"===e.type);return getAction_getAction(e,getLogs,"getLogs")({address:o,args:i,blockHash:s,event:p,events:f,fromBlock:c,toBlock:u,strict:d})}async function getFeeHistory(e,{blockCount:t,blockNumber:n,blockTag:o="latest",rewardPercentiles:i}){let s=n?(0,Q.eC)(n):void 0,l=await e.request({method:"eth_feeHistory",params:[(0,Q.eC)(t),s||o,i]});return{baseFeePerGas:l.baseFeePerGas.map(e=>BigInt(e)),gasUsedRatio:l.gasUsedRatio,oldestBlock:BigInt(l.oldestBlock),reward:l.reward?.map(e=>e.map(e=>BigInt(e)))}}async function getFilterChanges(e,{filter:t}){let n="strict"in t&&t.strict,o=await t.request({method:"eth_getFilterChanges",params:[t.id]});if("string"==typeof o[0])return o;let i=o.map(e=>(0,eQ.U)(e));return"abi"in t&&t.abi?parseEventLogs({abi:t.abi,logs:i,strict:n}):i}async function getFilterLogs(e,{filter:t}){let n=t.strict??!1,o=await t.request({method:"eth_getFilterLogs",params:[t.id]}),i=o.map(e=>(0,eQ.U)(e));return t.abi?parseEventLogs({abi:t.abi,logs:i,strict:n}):i}async function getProof(e,{address:t,blockNumber:n,blockTag:o,storageKeys:i}){let s=void 0!==n?(0,Q.eC)(n):void 0,l=await e.request({method:"eth_getProof",params:[t,i,s||(o??"latest")]});return{...l,balance:l.balance?BigInt(l.balance):void 0,nonce:l.nonce?(0,G.ly)(l.nonce):void 0,storageProof:l.storageProof?l.storageProof.map(e=>({...e,value:BigInt(e.value)})):void 0}}async function getStorageAt(e,{address:t,blockNumber:n,blockTag:o="latest",slot:i}){let s=void 0!==n?(0,Q.eC)(n):void 0,l=await e.request({method:"eth_getStorageAt",params:[t,i,s||o]});return l}var eK=n(6073);async function getTransaction(e,{blockHash:t,blockNumber:n,blockTag:o,hash:i,index:s}){let l=o||"latest",c=void 0!==n?(0,Q.eC)(n):void 0,u=null;if(i?u=await e.request({method:"eth_getTransactionByHash",params:[i]}):t?u=await e.request({method:"eth_getTransactionByBlockHashAndIndex",params:[t,(0,Q.eC)(s)]}):(c||l)&&(u=await e.request({method:"eth_getTransactionByBlockNumberAndIndex",params:[c||l,(0,Q.eC)(s)]})),!u)throw new eM.Bh({blockHash:t,blockNumber:n,blockTag:l,hash:i,index:s});let d=e.chain?.formatters?.transaction?.format||eK.Tr;return d(u)}async function getTransactionConfirmations(e,{hash:t,transactionReceipt:n}){let[o,i]=await Promise.all([getAction_getAction(e,getBlockNumber,"getBlockNumber")({}),t?getAction_getAction(e,getTransaction,"getBlockNumber")({hash:t}):void 0]),s=n?.blockNumber||i?.blockNumber;return s?o-s+1n:0n}var eV=n(30866);async function getTransactionReceipt(e,{hash:t}){let n=await e.request({method:"eth_getTransactionReceipt",params:[t]});if(!n)throw new eM.Yb({hash:t});let o=e.chain?.formatters?.transactionReceipt?.format||eV.f;return o(n)}async function simulateContract(e,t){let{abi:n,address:o,args:i,dataSuffix:s,functionName:l,...c}=t,u=c.account?(0,ej.T)(c.account):e.account,d=(0,$.R)({abi:n,args:i,functionName:l});try{let{data:p}=await getAction_getAction(e,er.RE,"call")({batch:!1,data:`${d}${s?s.replace("0x",""):""}`,to:o,...c,account:u}),f=(0,Y.k)({abi:n,args:i,functionName:l,data:p||"0x"}),m=n.filter(e=>"name"in e&&e.name===t.functionName);return{result:f,request:{abi:m,address:o,args:i,dataSuffix:s,functionName:l,...c,account:u}}}catch(e){throw getContractError(e,{abi:n,address:o,args:i,docsPath:"/docs/contract/simulateContract",functionName:l,sender:u?.address})}}async function uninstallFilter(e,{filter:t}){return t.request({method:"eth_uninstallFilter",params:[t.id]})}var eZ=n(27499);let eJ="/docs/contract/encodeDeployData";async function verifyHash(e,{address:t,hash:n,signature:o,...i}){let s=(0,eE.v)(o)?o:(0,Q.NC)(o);try{let{data:o}=await getAction_getAction(e,er.RE,"call")({data:function(e){let{abi:t,args:n,bytecode:o}=e;if(!n||0===n.length)return o;let i=t.find(e=>"type"in e&&"constructor"===e.type);if(!i)throw new J.fM({docsPath:eJ});if(!("inputs"in i)||!i.inputs||0===i.inputs.length)throw new J.cO({docsPath:eJ});let s=(0,ek.E)(i.inputs,n);return(0,ev.SM)([o,s])}({abi:Z.$o,args:[t,n,s],bytecode:"0x60806040523480156200001157600080fd5b50604051620007003803806200070083398101604081905262000034916200056f565b6000620000438484846200004f565b9050806000526001601ff35b600080846001600160a01b0316803b806020016040519081016040528181526000908060200190933c90507f6492649264926492649264926492649264926492649264926492649264926492620000a68462000451565b036200021f57600060608085806020019051810190620000c79190620005ce565b8651929550909350915060000362000192576000836001600160a01b031683604051620000f5919062000643565b6000604051808303816000865af19150503d806000811462000134576040519150601f19603f3d011682016040523d82523d6000602084013e62000139565b606091505b5050905080620001905760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726556616c696461746f723a206465706c6f796d656e74000060448201526064015b60405180910390fd5b505b604051630b135d3f60e11b808252906001600160a01b038a1690631626ba7e90620001c4908b90869060040162000661565b602060405180830381865afa158015620001e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020891906200069d565b6001600160e01b031916149450505050506200044a565b805115620002b157604051630b135d3f60e11b808252906001600160a01b03871690631626ba7e9062000259908890889060040162000661565b602060405180830381865afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d91906200069d565b6001600160e01b031916149150506200044a565b8251604114620003195760405162461bcd60e51b815260206004820152603a6024820152600080516020620006e083398151915260448201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000606482015260840162000187565b620003236200046b565b506020830151604080850151855186939260009185919081106200034b576200034b620006c9565b016020015160f81c9050601b81148015906200036b57508060ff16601c14155b15620003cf5760405162461bcd60e51b815260206004820152603b6024820152600080516020620006e083398151915260448201527f3a20696e76616c6964207369676e617475726520762076616c75650000000000606482015260840162000187565b6040805160008152602081018083528a905260ff83169181019190915260608101849052608081018390526001600160a01b038a169060019060a0016020604051602081039080840390855afa1580156200042e573d6000803e3d6000fd5b505050602060405103516001600160a01b031614955050505050505b9392505050565b60006020825110156200046357600080fd5b508051015190565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b03811681146200049f57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004d5578181015183820152602001620004bb565b50506000910152565b600082601f830112620004f057600080fd5b81516001600160401b03808211156200050d576200050d620004a2565b604051601f8301601f19908116603f01168101908282118183101715620005385762000538620004a2565b816040528381528660208588010111156200055257600080fd5b62000565846020830160208901620004b8565b9695505050505050565b6000806000606084860312156200058557600080fd5b8351620005928162000489565b6020850151604086015191945092506001600160401b03811115620005b657600080fd5b620005c486828701620004de565b9150509250925092565b600080600060608486031215620005e457600080fd5b8351620005f18162000489565b60208501519093506001600160401b03808211156200060f57600080fd5b6200061d87838801620004de565b935060408601519150808211156200063457600080fd5b50620005c486828701620004de565b6000825162000657818460208701620004b8565b9190910192915050565b828152604060208201526000825180604084015262000688816060850160208701620004b8565b601f01601f1916919091016060019392505050565b600060208284031215620006b057600080fd5b81516001600160e01b0319811681146200044a57600080fd5b634e487b7160e01b600052603260045260246000fdfe5369676e617475726556616c696461746f72237265636f7665725369676e6572"}),...i});return function(e,t){let n=(0,eE.v)(e)?(0,ew.O0)(e):e,o=(0,eE.v)(t)?(0,ew.O0)(t):t;return(0,eZ.Wd)(n,o)}(o??"0x0","0x1")}catch(e){if(e instanceof q.cg)return!1;throw e}}async function verifyMessage(e,{address:t,message:n,signature:o,...i}){let s=function(e,t){let n="string"==typeof e?(0,ew.qX)(e):e.raw instanceof Uint8Array?e.raw:(0,ew.O0)(e.raw),o=(0,ew.qX)(`Ethereum Signed Message: +${n.length}`);return(0,eC.w)((0,ev.zo)([o,n]),void 0)}(n);return verifyHash(e,{address:t,hash:s,signature:o,...i})}var eX=n(26087),eY=n(60480);let e$=/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/,e0=/^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/;function hashStruct({data:e,primaryType:t,types:n}){let o=function encodeData({data:e,primaryType:t,types:n}){let o=[{type:"bytes32"}],i=[function({primaryType:e,types:t}){let n=(0,Q.NC)(function({primaryType:e,types:t}){let n="",o=function findTypeDependencies({primaryType:e,types:t},n=new Set){let o=e.match(/^\w*/u),i=o?.[0];if(n.has(i)||void 0===t[i])return n;for(let e of(n.add(i),t[i]))findTypeDependencies({primaryType:e.type,types:t},n);return n}({primaryType:e,types:t});o.delete(e);let i=[e,...Array.from(o).sort()];for(let e of i)n+=`${e}(${t[e].map(({name:e,type:t})=>`${t} ${e}`).join(",")})`;return n}({primaryType:e,types:t}));return(0,eC.w)(n)}({primaryType:t,types:n})];for(let s of n[t]){let[t,l]=function encodeField({types:e,name:t,type:n,value:o}){if(void 0!==e[n])return[{type:"bytes32"},(0,eC.w)(encodeData({data:o,primaryType:n,types:e}))];if("bytes"===n){let e=o.length%2?"0":"";return o=`0x${e+o.slice(2)}`,[{type:"bytes32"},(0,eC.w)(o)]}if("string"===n)return[{type:"bytes32"},(0,eC.w)((0,Q.NC)(o))];if(n.lastIndexOf("]")===n.length-1){let i=n.slice(0,n.lastIndexOf("[")),s=o.map(n=>encodeField({name:t,type:i,types:e,value:n}));return[{type:"bytes32"},(0,eC.w)((0,ek.E)(s.map(([e])=>e),s.map(([,e])=>e)))]}return[{type:n},o]}({types:n,name:s.name,type:s.type,value:e[s.name]});o.push(t),i.push(l)}return(0,ek.E)(o,i)}({data:e,primaryType:t,types:n});return(0,eC.w)(o)}async function verifyTypedData(e,t){let{address:n,signature:o,message:i,primaryType:s,types:l,domain:c,...u}=t,d=function(e){let{domain:t={},message:n,primaryType:o}=e,i={EIP712Domain:function({domain:e}){return["string"==typeof e?.name&&{name:"name",type:"string"},e?.version&&{name:"version",type:"string"},"number"==typeof e?.chainId&&{name:"chainId",type:"uint256"},e?.verifyingContract&&{name:"verifyingContract",type:"address"},e?.salt&&{name:"salt",type:"bytes32"}].filter(Boolean)}({domain:t}),...e.types};!function(e){let{domain:t,message:n,primaryType:o,types:i}=e,validateData=(e,t)=>{for(let n of e){let{name:e,type:o}=n,s=t[e],l=o.match(e0);if(l&&("number"==typeof s||"bigint"==typeof s)){let[e,t,n]=l;(0,Q.eC)(s,{signed:"int"===t,size:parseInt(n)/8})}if("address"===o&&"string"==typeof s&&!(0,eY.U)(s))throw new eX.b({address:s});let c=o.match(e$);if(c){let[e,t]=c;if(t&&(0,eq.d)(s)!==parseInt(t))throw new J.KY({expectedSize:parseInt(t),givenSize:(0,eq.d)(s)})}let u=i[o];u&&validateData(u,s)}};if(i.EIP712Domain&&t&&validateData(i.EIP712Domain,t),"EIP712Domain"!==o){let e=i[o];validateData(e,n)}}({domain:t,message:n,primaryType:o,types:i});let s=["0x1901"];return t&&s.push(function({domain:e,types:t}){return hashStruct({data:e,primaryType:"EIP712Domain",types:t})}({domain:t,types:i})),"EIP712Domain"!==o&&s.push(hashStruct({data:n,primaryType:o,types:i})),(0,eC.w)((0,ev.zo)(s))}({message:i,primaryType:s,types:l,domain:c});return verifyHash(e,{address:n,hash:d,signature:o,...u})}let e1=new Map,e6=new Map,e3=0;function observe(e,t,n){let o=++e3,getListeners=()=>e1.get(e)||[],unsubscribe=()=>{let t=getListeners();e1.set(e,t.filter(e=>e.id!==o))},unwatch=()=>{let t=e6.get(e);1===getListeners().length&&t&&t(),unsubscribe()},i=getListeners();if(e1.set(e,[...i,{id:o,fns:t}]),i&&i.length>0)return unwatch;let s={};for(let e in t)s[e]=(...t)=>{let n=getListeners();if(0!==n.length)for(let o of n)o.fns[e]?.(...t)};let l=n(s);return"function"==typeof l&&e6.set(e,l),unwatch}var e2=n(7760),e7=n(96070),e8=n(62914);function poll(e,{emitOnBegin:t,initialWaitTime:n,interval:o}){let i=!0,unwatch=()=>i=!1,watch=async()=>{let s;t&&(s=await e({unpoll:unwatch}));let l=await n?.(s)??o;await (0,e8.D)(l);let poll=async()=>{i&&(await e({unpoll:unwatch}),await (0,e8.D)(o),poll())};poll()};return watch(),unwatch}function watchBlockNumber(e,{emitOnBegin:t=!1,emitMissed:n=!1,onBlockNumber:o,onError:i,poll:s,pollingInterval:l=e.pollingInterval}){let c;let u=void 0!==s?s:"webSocket"!==e.transport.type;return u?(()=>{let s=(0,e7.P)(["watchBlockNumber",e.uid,t,n,l]);return observe(s,{onBlockNumber:o,onError:i},o=>poll(async()=>{try{let t=await getAction_getAction(e,getBlockNumber,"getBlockNumber")({cacheTime:0});if(c){if(t===c)return;if(t-c>1&&n)for(let e=c+1n;ec)&&(o.onBlockNumber(t,c),c=t)}catch(e){o.onError?.(e)}},{emitOnBegin:t,interval:l}))})():(()=>{let s=(0,e7.P)(["watchBlockNumber",e.uid,t,n]);return observe(s,{onBlockNumber:o,onError:i},t=>{let n=!0,unsubscribe=()=>n=!1;return(async()=>{try{let{unsubscribe:o}=await e.transport.subscribe({params:["newHeads"],onData(e){if(!n)return;let o=(0,G.y_)(e.result?.number);t.onBlockNumber(o,c),c=o},onError(e){t.onError?.(e)}});unsubscribe=o,n||unsubscribe()}catch(e){i?.(e)}})(),()=>unsubscribe()})})()}async function waitForTransactionReceipt(e,{confirmations:t=1,hash:n,onReplaced:o,pollingInterval:i=e.pollingInterval,retryCount:s=6,retryDelay:l=({count:e})=>200*~~(1<{c&&setTimeout(()=>b(new eM.mc({hash:n})),c);let y=observe(f,{onReplaced:o,resolve:g,reject:b},o=>{let c=getAction_getAction(e,watchBlockNumber,"watchBlockNumber")({emitMissed:!0,emitOnBegin:!0,poll:!0,pollingInterval:i,async onBlockNumber(i){if(m)return;let f=i,done=e=>{c(),e(),y()};try{if(p){if(t>1&&(!p.blockNumber||f-p.blockNumber+1no.resolve(p));return}if(u||(m=!0,await (0,e2.J)(async()=>{(u=await getAction_getAction(e,getTransaction,"getTransaction")({hash:n})).blockNumber&&(f=u.blockNumber)},{delay:l,retryCount:s}),m=!1),p=await getAction_getAction(e,getTransactionReceipt,"getTransactionReceipt")({hash:n}),t>1&&(!p.blockNumber||f-p.blockNumber+1no.resolve(p))}catch(n){if(n instanceof eM.Bh||n instanceof eM.Yb){if(!u){m=!1;return}try{d=u,m=!0;let n=await (0,e2.J)(()=>getAction_getAction(e,getBlock,"getBlock")({blockNumber:f,includeTransactions:!0}),{delay:l,retryCount:s,shouldRetry:({error:e})=>e instanceof BlockNotFoundError});m=!1;let i=n.transactions.find(({from:e,nonce:t})=>e===d.from&&t===d.nonce);if(!i||(p=await getAction_getAction(e,getTransactionReceipt,"getTransactionReceipt")({hash:i.hash}),t>1&&(!p.blockNumber||f-p.blockNumber+1n{o.onReplaced?.({reason:c,replacedTransaction:d,transaction:i,transactionReceipt:p}),o.resolve(p)})}catch(e){done(()=>o.reject(e))}}else done(()=>o.reject(n))}}})})})}async function sendRawTransaction(e,{serializedTransaction:t}){return e.request({method:"eth_sendRawTransaction",params:[t]},{retryCount:0})}function publicActions(e){return{call:t=>(0,er.RE)(e,t),createBlockFilter:()=>createBlockFilter(e),createContractEventFilter:t=>createContractEventFilter(e,t),createEventFilter:t=>createEventFilter(e,t),createPendingTransactionFilter:()=>createPendingTransactionFilter(e),estimateContractGas:t=>estimateContractGas(e,t),estimateGas:t=>estimateGas(e,t),getBalance:t=>getBalance(e,t),getBlobBaseFee:()=>getBlobBaseFee(e),getBlock:t=>getBlock(e,t),getBlockNumber:t=>getBlockNumber(e,t),getBlockTransactionCount:t=>getBlockTransactionCount(e,t),getBytecode:t=>getBytecode(e,t),getChainId:()=>getChainId_getChainId(e),getContractEvents:t=>getContractEvents(e,t),getEnsAddress:t=>getEnsAddress(e,t),getEnsAvatar:t=>getEnsAvatar(e,t),getEnsName:t=>getEnsName(e,t),getEnsResolver:t=>getEnsResolver(e,t),getEnsText:t=>getEnsText(e,t),getFeeHistory:t=>getFeeHistory(e,t),estimateFeesPerGas:t=>estimateFeesPerGas(e,t),getFilterChanges:t=>getFilterChanges(e,t),getFilterLogs:t=>getFilterLogs(e,t),getGasPrice:()=>getGasPrice(e),getLogs:t=>getLogs(e,t),getProof:t=>getProof(e,t),estimateMaxPriorityFeePerGas:t=>estimateMaxPriorityFeePerGas(e,t),getStorageAt:t=>getStorageAt(e,t),getTransaction:t=>getTransaction(e,t),getTransactionConfirmations:t=>getTransactionConfirmations(e,t),getTransactionCount:t=>getTransactionCount(e,t),getTransactionReceipt:t=>getTransactionReceipt(e,t),multicall:t=>multicall(e,t),prepareTransactionRequest:t=>prepareTransactionRequest(e,t),readContract:t=>readContract(e,t),sendRawTransaction:t=>sendRawTransaction(e,t),simulateContract:t=>simulateContract(e,t),verifyMessage:t=>verifyMessage(e,t),verifyTypedData:t=>verifyTypedData(e,t),uninstallFilter:t=>uninstallFilter(e,t),waitForTransactionReceipt:t=>waitForTransactionReceipt(e,t),watchBlocks:t=>(function(e,{blockTag:t="latest",emitMissed:n=!1,emitOnBegin:o=!1,onBlock:i,onError:s,includeTransactions:l,poll:c,pollingInterval:u=e.pollingInterval}){let d,p,f;let m=void 0!==c?c:"webSocket"!==e.transport.type,g=l??!1;return m?(()=>{let l=(0,e7.P)(["watchBlocks",e.uid,n,o,g,u]);return observe(l,{onBlock:i,onError:s},i=>poll(async()=>{try{let o=await getAction_getAction(e,getBlock,"getBlock")({blockTag:t,includeTransactions:g});if(o.number&&d?.number){if(o.number===d.number)return;if(o.number-d.number>1&&n)for(let t=d?.number+1n;td.number)&&(i.onBlock(o,d),d=o)}catch(e){i.onError?.(e)}},{emitOnBegin:o,interval:u}))})():(p=!0,f=()=>p=!1,(async()=>{try{let{unsubscribe:t}=await e.transport.subscribe({params:["newHeads"],onData(t){if(!p)return;let n=e.chain?.formatters?.block?.format||eD.Z,o=n(t.result);i(o,d),d=o},onError(e){s?.(e)}});f=t,p||f()}catch(e){s?.(e)}})(),()=>f())})(e,t),watchBlockNumber:t=>watchBlockNumber(e,t),watchContractEvent:t=>(function(e,t){let{abi:n,address:o,args:i,batch:s=!0,eventName:l,onError:c,onLogs:u,poll:d,pollingInterval:p=e.pollingInterval,strict:f}=t,m=void 0!==d?d:"webSocket"!==e.transport.type;return m?(()=>{let t=f??!1,d=(0,e7.P)(["watchContractEvent",o,i,s,e.uid,l,p,t]);return observe(d,{onLogs:u,onError:c},c=>{let u,d;let f=!1,m=poll(async()=>{if(!f){try{d=await getAction_getAction(e,createContractEventFilter,"createContractEventFilter")({abi:n,address:o,args:i,eventName:l,strict:t})}catch{}f=!0;return}try{let p;if(d)p=await getAction_getAction(e,getFilterChanges,"getFilterChanges")({filter:d});else{let s=await getAction_getAction(e,getBlockNumber,"getBlockNumber")({});p=u&&u!==s?await getAction_getAction(e,getContractEvents,"getContractEvents")({abi:n,address:o,args:i,eventName:l,fromBlock:u+1n,toBlock:s,strict:t}):[],u=s}if(0===p.length)return;if(s)c.onLogs(p);else for(let e of p)c.onLogs([e])}catch(e){d&&e instanceof et.yR&&(f=!1),c.onError?.(e)}},{emitOnBegin:!0,interval:p});return async()=>{d&&await getAction_getAction(e,uninstallFilter,"uninstallFilter")({filter:d}),m()}})})():(()=>{let t=(0,e7.P)(["watchContractEvent",o,i,s,e.uid,l,p,f??!1]),d=!0,unsubscribe=()=>d=!1;return observe(t,{onLogs:u,onError:c},t=>((async()=>{try{let s=l?encodeEventTopics({abi:n,eventName:l,args:i}):[],{unsubscribe:c}=await e.transport.subscribe({params:["logs",{address:o,topics:s}],onData(e){if(!d)return;let o=e.result;try{let{eventName:e,args:i}=decodeEventLog({abi:n,data:o.data,topics:o.topics,strict:f}),s=(0,eQ.U)(o,{args:i,eventName:e});t.onLogs([s])}catch(s){let e,n;if(s instanceof J.SM||s instanceof J.Gy){if(f)return;e=s.abiItem.name,n=s.abiItem.inputs?.some(e=>!("name"in e&&e.name))}let i=(0,eQ.U)(o,{args:n?[]:{},eventName:e});t.onLogs([i])}},onError(e){t.onError?.(e)}});unsubscribe=c,d||unsubscribe()}catch(e){c?.(e)}})(),()=>unsubscribe()))})()})(e,t),watchEvent:t=>(function(e,{address:t,args:n,batch:o=!0,event:i,events:s,onError:l,onLogs:c,poll:u,pollingInterval:d=e.pollingInterval,strict:p}){let f,m;let g=void 0!==u?u:"webSocket"!==e.transport.type,b=p??!1;return g?(()=>{let u=(0,e7.P)(["watchEvent",t,n,o,e.uid,i,d]);return observe(u,{onLogs:c,onError:l},l=>{let c,u;let p=!1,f=poll(async()=>{if(!p){try{u=await getAction_getAction(e,createEventFilter,"createEventFilter")({address:t,args:n,event:i,events:s,strict:b})}catch{}p=!0;return}try{let d;if(u)d=await getAction_getAction(e,getFilterChanges,"getFilterChanges")({filter:u});else{let o=await getAction_getAction(e,getBlockNumber,"getBlockNumber")({});d=c&&c!==o?await getAction_getAction(e,getLogs,"getLogs")({address:t,args:n,event:i,events:s,fromBlock:c+1n,toBlock:o}):[],c=o}if(0===d.length)return;if(o)l.onLogs(d);else for(let e of d)l.onLogs([e])}catch(e){u&&e instanceof et.yR&&(p=!1),l.onError?.(e)}},{emitOnBegin:!0,interval:d});return async()=>{u&&await getAction_getAction(e,uninstallFilter,"uninstallFilter")({filter:u}),f()}})})():(f=!0,m=()=>f=!1,(async()=>{try{let o=s??(i?[i]:void 0),u=[];o&&(u=[o.flatMap(e=>encodeEventTopics({abi:[e],eventName:e.name,args:n}))],i&&(u=u[0]));let{unsubscribe:d}=await e.transport.subscribe({params:["logs",{address:t,topics:u}],onData(e){if(!f)return;let t=e.result;try{let{eventName:e,args:n}=decodeEventLog({abi:o??[],data:t.data,topics:t.topics,strict:b}),i=(0,eQ.U)(t,{args:n,eventName:e});c([i])}catch(i){let e,n;if(i instanceof J.SM||i instanceof J.Gy){if(p)return;e=i.abiItem.name,n=i.abiItem.inputs?.some(e=>!("name"in e&&e.name))}let o=(0,eQ.U)(t,{args:n?[]:{},eventName:e});c([o])}},onError(e){l?.(e)}});m=d,f||m()}catch(e){l?.(e)}})(),()=>m())})(e,t),watchPendingTransactions:t=>(function(e,{batch:t=!0,onError:n,onTransactions:o,poll:i,pollingInterval:s=e.pollingInterval}){let l,c;let u=void 0!==i?i:"webSocket"!==e.transport.type;return u?(()=>{let i=(0,e7.P)(["watchPendingTransactions",e.uid,t,s]);return observe(i,{onTransactions:o,onError:n},n=>{let o;let i=poll(async()=>{try{if(!o)try{o=await getAction_getAction(e,createPendingTransactionFilter,"createPendingTransactionFilter")({});return}catch(e){throw i(),e}let s=await getAction_getAction(e,getFilterChanges,"getFilterChanges")({filter:o});if(0===s.length)return;if(t)n.onTransactions(s);else for(let e of s)n.onTransactions([e])}catch(e){n.onError?.(e)}},{emitOnBegin:!0,interval:s});return async()=>{o&&await getAction_getAction(e,uninstallFilter,"uninstallFilter")({filter:o}),i()}})})():(l=!0,c=()=>l=!1,(async()=>{try{let{unsubscribe:t}=await e.transport.subscribe({params:["newPendingTransactions"],onData(e){if(!l)return;let t=e.result;o([t])},onError(e){n?.(e)}});c=t,l||c()}catch(e){n?.(e)}})(),()=>c())})(e,t)}}function getPublicClient(e,t={}){let n=function(e,t={}){let n;try{n=e.getClient(t)}catch{}return n}(e,t);return n?.extend(publicActions)}var e5=n(52798),e4=n(33397);function useAccountEffect_useAccountEffect(e={}){let{onConnect:t,onDisconnect:n}=e,o=(0,z.Z)(e);(0,D.useEffect)(()=>(0,e4.u)(o,{onChange(e,o){if(("reconnecting"===o.status||"connecting"===o.status&&void 0===o.address)&&"connected"===e.status){let{address:n,addresses:i,chain:s,chainId:l,connector:c}=e,u="reconnecting"===o.status||void 0===o.status;t?.({address:n,addresses:i,chain:s,chainId:l,connector:c,isReconnected:u})}else"connected"===o.status&&"disconnected"===e.status&&n?.()}}),[o,t,n])}var e9=n(98029);async function disconnect(e,t={}){let n;if(t.connector)n=t.connector;else{let{connections:t,current:o}=e.state,i=t.get(o);n=i?.connector}let o=e.state.connections;n&&(await n.disconnect(),n.emitter.off("change",e._internal.events.change),n.emitter.off("disconnect",e._internal.events.disconnect),n.emitter.on("connect",e._internal.events.connect),o.delete(n.uid)),e.setState(e=>{if(0===o.size)return{...e,connections:new Map,current:void 0,status:"disconnected"};let t=o.values().next().value;return{...e,connections:new Map(o),current:t.connector.uid}});{let t=e.state.current;if(!t)return;let n=e.state.connections.get(t)?.connector;if(!n)return;await e.storage?.setItem("recentConnectorId",n.id)}}var te=n(74751);let tt=[];function getConnections(e){let t=[...e.state.connections.values()];return"reconnecting"===e.state.status||(0,te.v)(tt,t)?tt:(tt=t,t)}function useDisconnect(e={}){let{mutation:t}=e,n=(0,z.Z)(e),{mutate:o,mutateAsync:i,...s}=(0,e9.D)({...t,mutationFn:e=>disconnect(n,e),mutationKey:["disconnect"]});return{...s,connectors:(function(e={}){let t=(0,z.Z)(e);return(0,D.useSyncExternalStore)(e=>(function(e,t){let{onChange:n}=t;return e.subscribe(()=>getConnections(e),n,{equalityFn:te.v})})(t,{onChange:e}),()=>getConnections(t),()=>getConnections(t))})({config:n}).map(e=>e.connector),disconnect:o,disconnectAsync:i}}var tr=n(73935),tn=n(70655),ta="right-scroll-bar-position",to="width-before-scroll-bar";function assignRef(e,t){return"function"==typeof e?e(t):e&&(e.current=t),e}var ti="undefined"!=typeof window?D.useLayoutEffect:D.useEffect,ts=new WeakMap,tl=(void 0===x&&(x={}),(void 0===A&&(A=function(e){return e}),k=[],B=!1,S={read:function(){if(B)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return k.length?k[k.length-1]:null},useMedium:function(e){var t=A(e,B);return k.push(t),function(){k=k.filter(function(e){return e!==t})}},assignSyncMedium:function(e){for(B=!0;k.length;){var t=k;k=[],t.forEach(e)}k={push:function(t){return e(t)},filter:function(){return k}}},assignMedium:function(e){B=!0;var t=[];if(k.length){var n=k;k=[],n.forEach(e),t=k}var executeQueue=function(){var n=t;t=[],n.forEach(e)},cycle=function(){return Promise.resolve().then(executeQueue)};cycle(),k={push:function(e){t.push(e),cycle()},filter:function(e){return t=t.filter(e),k}}}}).options=(0,tn.__assign)({async:!0,ssr:!1},x),S),nothing=function(){},tc=D.forwardRef(function(e,t){var n,o,i,s,l=D.useRef(null),c=D.useState({onScrollCapture:nothing,onWheelCapture:nothing,onTouchMoveCapture:nothing}),u=c[0],d=c[1],p=e.forwardProps,f=e.children,m=e.className,g=e.removeScrollBar,b=e.enabled,y=e.shards,v=e.sideCar,w=e.noIsolation,C=e.inert,E=e.allowPinchZoom,x=e.as,A=void 0===x?"div":x,k=e.gapMode,B=(0,tn.__rest)(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),S=(n=[l,t],o=function(e){return n.forEach(function(t){return assignRef(t,e)})},(i=(0,D.useState)(function(){return{value:null,callback:o,facade:{get current(){return i.value},set current(value){var e=i.value;e!==value&&(i.value=value,i.callback(value,e))}}}})[0]).callback=o,s=i.facade,ti(function(){var e=ts.get(s);if(e){var t=new Set(e),o=new Set(n),i=s.current;t.forEach(function(e){o.has(e)||assignRef(e,null)}),o.forEach(function(e){t.has(e)||assignRef(e,i)})}ts.set(s,n)},[n]),s),I=(0,tn.__assign)((0,tn.__assign)({},B),u);return D.createElement(D.Fragment,null,b&&D.createElement(v,{sideCar:tl,removeScrollBar:g,shards:y,noIsolation:w,inert:C,setCallbacks:d,allowPinchZoom:!!E,lockRef:l,gapMode:k}),p?D.cloneElement(D.Children.only(f),(0,tn.__assign)((0,tn.__assign)({},I),{ref:S})):D.createElement(A,(0,tn.__assign)({},I,{className:m,ref:S}),f))});tc.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},tc.classNames={fullWidth:to,zeroRight:ta};var SideCar=function(e){var t=e.sideCar,n=(0,tn.__rest)(e,["sideCar"]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var o=t.read();if(!o)throw Error("Sidecar medium not found");return D.createElement(o,(0,tn.__assign)({},n))};SideCar.isSideCarExport=!0;var stylesheetSingleton=function(){var e=0,t=null;return{add:function(o){if(0==e&&(t=function(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=I||n.nc;return t&&e.setAttribute("nonce",t),e}())){var i,s;(i=t).styleSheet?i.styleSheet.cssText=o:i.appendChild(document.createTextNode(o)),s=t,(document.head||document.getElementsByTagName("head")[0]).appendChild(s)}e++},remove:function(){--e||!t||(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},styleHookSingleton=function(){var e=stylesheetSingleton();return function(t,n){D.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},styleSingleton=function(){var e=styleHookSingleton();return function(t){return e(t.styles,t.dynamic),null}},tu={left:0,top:0,right:0,gap:0},parse=function(e){return parseInt(e||"",10)||0},getOffset=function(e){var t=window.getComputedStyle(document.body),n=t["padding"===e?"paddingLeft":"marginLeft"],o=t["padding"===e?"paddingTop":"marginTop"],i=t["padding"===e?"paddingRight":"marginRight"];return[parse(n),parse(o),parse(i)]},getGapWidth=function(e){if(void 0===e&&(e="margin"),"undefined"==typeof window)return tu;var t=getOffset(e),n=document.documentElement.clientWidth,o=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,o-n+t[2]-t[0])}},td=styleSingleton(),tp="data-scroll-locked",getStyles=function(e,t,n,o){var i=e.left,s=e.top,l=e.right,c=e.gap;return void 0===n&&(n="margin"),"\n .".concat("with-scroll-bars-hidden"," {\n overflow: hidden ").concat(o,";\n padding-right: ").concat(c,"px ").concat(o,";\n }\n body[").concat(tp,"] {\n overflow: hidden ").concat(o,";\n overscroll-behavior: contain;\n ").concat([t&&"position: relative ".concat(o,";"),"margin"===n&&"\n padding-left: ".concat(i,"px;\n padding-top: ").concat(s,"px;\n padding-right: ").concat(l,"px;\n margin-left:0;\n margin-top:0;\n margin-right: ").concat(c,"px ").concat(o,";\n "),"padding"===n&&"padding-right: ".concat(c,"px ").concat(o,";")].filter(Boolean).join(""),"\n }\n \n .").concat(ta," {\n right: ").concat(c,"px ").concat(o,";\n }\n \n .").concat(to," {\n margin-right: ").concat(c,"px ").concat(o,";\n }\n \n .").concat(ta," .").concat(ta," {\n right: 0 ").concat(o,";\n }\n \n .").concat(to," .").concat(to," {\n margin-right: 0 ").concat(o,";\n }\n \n body[").concat(tp,"] {\n ").concat("--removed-body-scroll-bar-size",": ").concat(c,"px;\n }\n")},getCurrentUseCounter=function(){var e=parseInt(document.body.getAttribute(tp)||"0",10);return isFinite(e)?e:0},useLockAttribute=function(){D.useEffect(function(){return document.body.setAttribute(tp,(getCurrentUseCounter()+1).toString()),function(){var e=getCurrentUseCounter()-1;e<=0?document.body.removeAttribute(tp):document.body.setAttribute(tp,e.toString())}},[])},RemoveScrollBar=function(e){var t=e.noRelative,n=e.noImportant,o=e.gapMode,i=void 0===o?"margin":o;useLockAttribute();var s=D.useMemo(function(){return getGapWidth(i)},[i]);return D.createElement(td,{styles:getStyles(s,!t,i,n?"":"!important")})},th=!1;if("undefined"!=typeof window)try{var tf=Object.defineProperty({},"passive",{get:function(){return th=!0,!0}});window.addEventListener("test",tf,tf),window.removeEventListener("test",tf,tf)}catch(e){th=!1}var tm=!!th&&{passive:!1},elementCanBeScrolled=function(e,t){var n=window.getComputedStyle(e);return"hidden"!==n[t]&&!(n.overflowY===n.overflowX&&"TEXTAREA"!==e.tagName&&"visible"===n[t])},locationCouldBeScrolled=function(e,t){var n=t.ownerDocument,o=t;do{if("undefined"!=typeof ShadowRoot&&o instanceof ShadowRoot&&(o=o.host),elementCouldBeScrolled(e,o)){var i=getScrollVariables(e,o);if(i[1]>i[2])return!0}o=o.parentNode}while(o&&o!==n.body);return!1},elementCouldBeScrolled=function(e,t){return"v"===e?elementCanBeScrolled(t,"overflowY"):elementCanBeScrolled(t,"overflowX")},getScrollVariables=function(e,t){return"v"===e?[t.scrollTop,t.scrollHeight,t.clientHeight]:[t.scrollLeft,t.scrollWidth,t.clientWidth]},handleScroll=function(e,t,n,o,i){var s,l=(s=window.getComputedStyle(t).direction,"h"===e&&"rtl"===s?-1:1),c=l*o,u=n.target,d=t.contains(u),p=!1,f=c>0,m=0,g=0;do{var b=getScrollVariables(e,u),y=b[0],v=b[1]-b[2]-l*y;(y||v)&&elementCouldBeScrolled(e,u)&&(m+=v,g+=y),u=u instanceof ShadowRoot?u.host:u.parentNode}while(!d&&u!==document.body||d&&(t.contains(u)||t===u));return f&&(i&&1>Math.abs(m)||!i&&c>m)?p=!0:!f&&(i&&1>Math.abs(g)||!i&&-c>g)&&(p=!0),p},getTouchXY=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},getDeltaXY=function(e){return[e.deltaX,e.deltaY]},extractRef=function(e){return e&&"current"in e?e.current:e},tg=0,tb=[],ty=(tl.useMedium(function(e){var t=D.useRef([]),n=D.useRef([0,0]),o=D.useRef(),i=D.useState(tg++)[0],s=D.useState(styleSingleton)[0],l=D.useRef(e);D.useEffect(function(){l.current=e},[e]),D.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(i));var t=(0,tn.__spreadArray)([e.lockRef.current],(e.shards||[]).map(extractRef),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),t.forEach(function(e){return e.classList.remove("allow-interactivity-".concat(i))})}}},[e.inert,e.lockRef.current,e.shards]);var c=D.useCallback(function(e,t){if("touches"in e&&2===e.touches.length)return!l.current.allowPinchZoom;var i,s=getTouchXY(e),c=n.current,u="deltaX"in e?e.deltaX:c[0]-s[0],d="deltaY"in e?e.deltaY:c[1]-s[1],p=e.target,f=Math.abs(u)>Math.abs(d)?"h":"v";if("touches"in e&&"h"===f&&"range"===p.type)return!1;var m=locationCouldBeScrolled(f,p);if(!m)return!0;if(m?i=f:(i="v"===f?"h":"v",m=locationCouldBeScrolled(f,p)),!m)return!1;if(!o.current&&"changedTouches"in e&&(u||d)&&(o.current=i),!i)return!0;var g=o.current||i;return handleScroll(g,t,e,"h"===g?u:d,!0)},[]),u=D.useCallback(function(e){if(tb.length&&tb[tb.length-1]===s){var n="deltaY"in e?getDeltaXY(e):getTouchXY(e),o=t.current.filter(function(t){var o;return t.name===e.type&&(t.target===e.target||e.target===t.shadowParent)&&(o=t.delta)[0]===n[0]&&o[1]===n[1]})[0];if(o&&o.should){e.cancelable&&e.preventDefault();return}if(!o){var i=(l.current.shards||[]).map(extractRef).filter(Boolean).filter(function(t){return t.contains(e.target)});(i.length>0?c(e,i[0]):!l.current.noIsolation)&&e.cancelable&&e.preventDefault()}}},[]),d=D.useCallback(function(e,n,o,i){var s={name:e,delta:n,target:o,should:i,shadowParent:function(e){for(var t=null;null!==e;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}(o)};t.current.push(s),setTimeout(function(){t.current=t.current.filter(function(e){return e!==s})},1)},[]),p=D.useCallback(function(e){n.current=getTouchXY(e),o.current=void 0},[]),f=D.useCallback(function(t){d(t.type,getDeltaXY(t),t.target,c(t,e.lockRef.current))},[]),m=D.useCallback(function(t){d(t.type,getTouchXY(t),t.target,c(t,e.lockRef.current))},[]);D.useEffect(function(){return tb.push(s),e.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:m}),document.addEventListener("wheel",u,tm),document.addEventListener("touchmove",u,tm),document.addEventListener("touchstart",p,tm),function(){tb=tb.filter(function(e){return e!==s}),document.removeEventListener("wheel",u,tm),document.removeEventListener("touchmove",u,tm),document.removeEventListener("touchstart",p,tm)}},[]);var g=e.removeScrollBar,b=e.inert;return D.createElement(D.Fragment,null,b?D.createElement(s,{styles:"\n .block-interactivity-".concat(i," {pointer-events: none;}\n .allow-interactivity-").concat(i," {pointer-events: all;}\n")}):null,g?D.createElement(RemoveScrollBar,{gapMode:e.gapMode}):null)}),SideCar),tv=D.forwardRef(function(e,t){return D.createElement(tc,(0,tn.__assign)({},e,{ref:t,sideCar:ty}))});function vanilla_extract_private_esm_getVarName(e){var t=e.match(/^var\((.*)\)$/);return t?t[1]:e}function assignInlineVars(e,t){var n={};if("object"==typeof t)!function vanilla_extract_private_esm_walkObject(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=e.constructor();for(var i in e){var s=e[i],l=[...n,i];"string"==typeof s||"number"==typeof s||null==s?o[i]=t(s,l):"object"!=typeof s||Array.isArray(s)?console.warn('Skipping invalid key "'.concat(l.join("."),'". Should be a string, number, null or object. Received: "').concat(Array.isArray(s)?"Array":typeof s,'"')):o[i]=vanilla_extract_private_esm_walkObject(s,t,l)}return o}(t,(t,o)=>{null!=t&&(n[vanilla_extract_private_esm_getVarName(function(e,t){var n=e;for(var o of t){if(!(o in n))throw Error("Path ".concat(t.join(" -> ")," does not exist in object"));n=n[o]}return n}(e,o))]=String(t))});else for(var o in e){var i=e[o];null!=i&&(n[vanilla_extract_private_esm_getVarName(o)]=i)}return Object.defineProperty(n,"toString",{value:function(){return Object.keys(this).map(e=>"".concat(e,":").concat(this[e])).join(";")},writable:!1}),n}tv.classNames=tc.classNames;var tw=n(87675);async function connect(e,t){let n;if((n="function"==typeof t.connector?e._internal.connectors.setup(t.connector):t.connector).uid===e.state.current)throw new tw.wi;try{e.setState(e=>({...e,status:"connecting"})),n.emitter.emit("message",{type:"connecting"});let o=await n.connect({chainId:t.chainId}),i=o.accounts;return n.emitter.off("connect",e._internal.events.connect),n.emitter.on("change",e._internal.events.change),n.emitter.on("disconnect",e._internal.events.disconnect),await e.storage?.setItem("recentConnectorId",n.id),e.setState(e=>({...e,connections:new Map(e.connections).set(n.uid,{accounts:i,chainId:o.chainId,connector:n}),current:n.uid,status:"connected"})),{accounts:i,chainId:o.chainId}}catch(t){throw e.setState(e=>({...e,status:e.current?"connected":"disconnected"})),t}}let tC=[];function getConnectors(e){let t=e.connectors;return(0,te.v)(tC,t)?tC:(tC=t,t)}var tE=n(42238),tx=n(55585),tA=n(7066);let ProviderNotFoundError=class ProviderNotFoundError extends tA.G{constructor(){super("Provider not found."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ProviderNotFoundError"})}};let SwitchChainNotSupportedError=class SwitchChainNotSupportedError extends tA.G{constructor({connector:e}){super(`"${e.name}" does not support programmatic chain switching.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SwitchChainNotSupportedError"})}};async function switchChain(e,t){let{chainId:n}=t,o=e.state.connections.get(t.connector?.uid??e.state.current);if(o){let e=o.connector;if(!e.switchChain)throw new SwitchChainNotSupportedError({connector:e});let t=await e.switchChain({chainId:n});return t}let i=e.chains.find(e=>e.id===n);if(!i)throw new tw.X4;return e.setState(e=>({...e,chainId:n})),i}let tk=[];function getChains(e){let t=e.chains;return(0,te.v)(tk,t)?tk:(tk=t,t)}var tB=n(92592),tS=n(78863);let UrlRequiredError=class UrlRequiredError extends X.G{constructor(){super("No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.",{docsPath:"/docs/clients/intro"})}};var tI=n(32357);function withTimeout(e,{errorInstance:t=Error("timed out"),timeout:n,signal:o}){return new Promise((i,s)=>{(async()=>{let l;try{let c=new AbortController;n>0&&(l=setTimeout(()=>{o?c.abort():s(t)},n)),i(await e({signal:c?.signal||null}))}catch(e){"AbortError"===e.name&&s(t),s(e)}finally{clearTimeout(l)}})()})}let tj={current:0,take(){return this.current++},reset(){this.current=0}};var tT=n(91628),tP=n(16189);let subscribeWithSelector=e=>(t,n,o)=>{let i=o.subscribe;o.subscribe=(e,t,n)=>{let s=e;if(t){let i=(null==n?void 0:n.equalityFn)||Object.is,l=e(o.getState());s=n=>{let o=e(n);if(!i(l,o)){let e=l;t(l=o,e)}},(null==n?void 0:n.fireImmediately)&&t(l,l)}return i(s)};let s=e(t,n,o);return s},toThenable=e=>t=>{try{let n=e(t);if(n instanceof Promise)return n;return{then:e=>toThenable(e)(n),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>toThenable(t)(e)}}},oldImpl=(e,t)=>(n,o,i)=>{let s,l,c={getStorage:()=>localStorage,serialize:JSON.stringify,deserialize:JSON.parse,partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},u=!1,d=new Set,p=new Set;try{s=c.getStorage()}catch(e){}if(!s)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${c.name}', the given storage is currently unavailable.`),n(...e)},o,i);let f=toThenable(c.serialize),setItem=()=>{let e;let t=c.partialize({...o()}),n=f({state:t,version:c.version}).then(e=>s.setItem(c.name,e)).catch(t=>{e=t});if(e)throw e;return n},m=i.setState;i.setState=(e,t)=>{m(e,t),setItem()};let g=e((...e)=>{n(...e),setItem()},o,i),hydrate=()=>{var e;if(!s)return;u=!1,d.forEach(e=>e(o()));let t=(null==(e=c.onRehydrateStorage)?void 0:e.call(c,o()))||void 0;return toThenable(s.getItem.bind(s))(c.name).then(e=>{if(e)return c.deserialize(e)}).then(e=>{if(e){if("number"!=typeof e.version||e.version===c.version)return e.state;if(c.migrate)return c.migrate(e.state,e.version);console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}}).then(e=>{var t;return n(l=c.merge(e,null!=(t=o())?t:g),!0),setItem()}).then(()=>{null==t||t(l,void 0),u=!0,p.forEach(e=>e(l))}).catch(e=>{null==t||t(void 0,e)})};return i.persist={setOptions:e=>{c={...c,...e},e.getStorage&&(s=e.getStorage())},clearStorage:()=>{null==s||s.removeItem(c.name)},getOptions:()=>c,rehydrate:()=>hydrate(),hasHydrated:()=>u,onHydrate:e=>(d.add(e),()=>{d.delete(e)}),onFinishHydration:e=>(p.add(e),()=>{p.delete(e)})},hydrate(),l||g},newImpl=(e,t)=>(n,o,i)=>{let s,l={storage:function(e,t){let n;try{n=e()}catch(e){return}return{getItem:e=>{var o;let parse=e=>null===e?null:JSON.parse(e,null==t?void 0:t.reviver),i=null!=(o=n.getItem(e))?o:null;return i instanceof Promise?i.then(parse):parse(i)},setItem:(e,o)=>n.setItem(e,JSON.stringify(o,null==t?void 0:t.replacer)),removeItem:e=>n.removeItem(e)}}(()=>localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},c=!1,u=new Set,d=new Set,p=l.storage;if(!p)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${l.name}', the given storage is currently unavailable.`),n(...e)},o,i);let setItem=()=>{let e=l.partialize({...o()});return p.setItem(l.name,{state:e,version:l.version})},f=i.setState;i.setState=(e,t)=>{f(e,t),setItem()};let m=e((...e)=>{n(...e),setItem()},o,i),hydrate=()=>{var e,t;if(!p)return;c=!1,u.forEach(e=>{var t;return e(null!=(t=o())?t:m)});let i=(null==(t=l.onRehydrateStorage)?void 0:t.call(l,null!=(e=o())?e:m))||void 0;return toThenable(p.getItem.bind(p))(l.name).then(e=>{if(e){if("number"!=typeof e.version||e.version===l.version)return e.state;if(l.migrate)return l.migrate(e.state,e.version);console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}}).then(e=>{var t;return n(s=l.merge(e,null!=(t=o())?t:m),!0),setItem()}).then(()=>{null==i||i(s,void 0),s=o(),c=!0,d.forEach(e=>e(s))}).catch(e=>{null==i||i(void 0,e)})};return i.persist={setOptions:e=>{l={...l,...e},e.storage&&(p=e.storage)},clearStorage:()=>{null==p||p.removeItem(l.name)},getOptions:()=>l,rehydrate:()=>hydrate(),hasHydrated:()=>c,onHydrate:e=>(u.add(e),()=>{u.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},l.skipHydration||hydrate(),s||m},persist=(e,t)=>"getStorage"in t||"serialize"in t||"deserialize"in t?(console.warn("[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead."),oldImpl(e,t)):newImpl(e,t),createStoreImpl=e=>{let t;let n=new Set,setState=(e,o)=>{let i="function"==typeof e?e(t):e;if(!Object.is(i,t)){let e=t;t=(null!=o?o:"object"!=typeof i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},getState=()=>t,o={setState,getState,subscribe:e=>(n.add(e),()=>n.delete(e)),destroy:()=>{console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}};return t=e(setState,getState,o),o},vanilla_createStore=e=>e?createStoreImpl(e):createStoreImpl;var tM=n(45775);function normalizeChainId(e){if("string"==typeof e)return Number.parseInt(e,"0x"===e.trim().substring(0,2)?16:10);if("bigint"==typeof e)return Number(e);if("number"==typeof e)return e;throw Error(`Cannot normalize chainId "${e}" of type "${typeof e}"`)}let tO={coinbaseWallet:{id:"coinbaseWallet",name:"Coinbase Wallet",provider:e=>e?.coinbaseWalletExtension?e.coinbaseWalletExtension:findProvider(e,"isCoinbaseWallet")},metaMask:{id:"metaMask",name:"MetaMask",provider:e=>findProvider(e,e=>{if(!e.isMetaMask||e.isBraveWallet&&!e._events&&!e._state)return!1;for(let t of["isApexWallet","isAvalanche","isBitKeep","isBlockWallet","isKuCoinWallet","isMathWallet","isOkxWallet","isOKExWallet","isOneInchIOSWallet","isOneInchAndroidWallet","isOpera","isPortal","isRabby","isTokenPocket","isTokenary","isZerion"])if(e[t])return!1;return!0})},phantom:{id:"phantom",name:"Phantom",provider:e=>e?.phantom?.ethereum?e.phantom?.ethereum:findProvider(e,"isPhantom")}};function injected(e={}){let{shimDisconnect:t=!0,unstable_shimAsyncInject:n}=e;function getTarget(){let t=e.target;if("function"==typeof t){let e=t();if(e)return e}return"object"==typeof t?t:"string"==typeof t?{...tO[t]??{id:t,name:`${t[0].toUpperCase()}${t.slice(1)}`,provider:`is${t[0].toUpperCase()}${t.slice(1)}`}}:{id:"injected",name:"Injected",provider:e=>e?.ethereum}}return o=>({get icon(){return getTarget().icon},get id(){return getTarget().id},get name(){return getTarget().name},type:injected.type,async setup(){let t=await this.getProvider();t&&e.target&&t.on("connect",this.onConnect.bind(this))},async connect({chainId:n,isReconnecting:i}={}){let s=await this.getProvider();if(!s)throw new ProviderNotFoundError;let l=null;if(!i){l=await this.getAccounts().catch(()=>null);let e=!!l?.length;if(e)try{let e=await s.request({method:"wallet_requestPermissions",params:[{eth_accounts:{}}]});l=e[0]?.caveats?.[0]?.value?.map(e=>tM.K(e))}catch(e){if(e.code===et.ab.code)throw new et.ab(e);if(e.code===et.pT.code)throw e}}try{if(!l?.length){let e=await s.request({method:"eth_requestAccounts"});l=e.map(e=>(0,tM.K)(e))}s.removeListener("connect",this.onConnect.bind(this)),s.on("accountsChanged",this.onAccountsChanged.bind(this)),s.on("chainChanged",this.onChainChanged),s.on("disconnect",this.onDisconnect.bind(this));let i=await this.getChainId();if(n&&i!==n){let e=await this.switchChain({chainId:n}).catch(e=>{if(e.code===et.ab.code)throw e;return{id:i}});i=e?.id??i}return t&&(await o.storage?.removeItem(`${this.id}.disconnected`),e.target||await o.storage?.setItem("injected.connected",!0)),{accounts:l,chainId:i}}catch(e){if(e.code===et.ab.code)throw new et.ab(e);if(e.code===et.pT.code)throw new et.pT(e);throw e}},async disconnect(){let n=await this.getProvider();if(!n)throw new ProviderNotFoundError;n.removeListener("accountsChanged",this.onAccountsChanged.bind(this)),n.removeListener("chainChanged",this.onChainChanged),n.removeListener("disconnect",this.onDisconnect.bind(this)),n.on("connect",this.onConnect.bind(this)),t&&(await o.storage?.setItem(`${this.id}.disconnected`,!0),e.target||await o.storage?.removeItem("injected.connected"))},async getAccounts(){let e=await this.getProvider();if(!e)throw new ProviderNotFoundError;let t=await e.request({method:"eth_accounts"});return t.map(e=>(0,tM.K)(e))},async getChainId(){let e=await this.getProvider();if(!e)throw new ProviderNotFoundError;let t=await e.request({method:"eth_chainId"});return normalizeChainId(t)},async getProvider(){let e;if("undefined"==typeof window)return;let t=getTarget();return(e="function"==typeof t.provider?t.provider(window):"string"==typeof t.provider?findProvider(window,t.provider):t.provider)&&!e.removeListener&&("off"in e&&"function"==typeof e.off?e.removeListener=e.off:e.removeListener=()=>{}),e},async isAuthorized(){try{let i=t&&await o.storage?.getItem(`${this.id}.disconnected`);if(i)return!1;if(!e.target){let e=await o.storage?.getItem("injected.connected");if(!e)return!1}let s=await this.getProvider();if(!s){if(void 0!==n&&!1!==n){let handleEthereum=async()=>{"undefined"!=typeof window&&window.removeEventListener("ethereum#initialized",handleEthereum);let e=await this.getProvider();return!!e},e="number"==typeof n?n:1e3,t=await Promise.race([..."undefined"!=typeof window?[new Promise(e=>window.addEventListener("ethereum#initialized",()=>e(handleEthereum()),{once:!0}))]:[],new Promise(t=>setTimeout(()=>t(handleEthereum()),e))]);if(t)return!0}throw new ProviderNotFoundError}let l=await (0,e2.J)(()=>withTimeout(()=>this.getAccounts(),{timeout:100}));return!!l.length}catch{return!1}},async switchChain({chainId:e}){let t=await this.getProvider();if(!t)throw new ProviderNotFoundError;let n=o.chains.find(t=>t.id===e);if(!n)throw new et.x3(new tw.X4);try{return await Promise.all([t.request({method:"wallet_switchEthereumChain",params:[{chainId:(0,Q.eC)(e)}]}),new Promise(t=>o.emitter.once("change",({chainId:n})=>{n===e&&t()}))]),n}catch(o){if(4902===o.code||o?.data?.originalError?.code===4902)try{let o;let{default:i,...s}=n.blockExplorers??{};i&&(o=[i.url,...Object.values(s).map(e=>e.url)]),await t.request({method:"wallet_addEthereumChain",params:[{chainId:(0,Q.eC)(e),chainName:n.name,nativeCurrency:n.nativeCurrency,rpcUrls:[n.rpcUrls.default?.http[0]??""],blockExplorerUrls:o}]});let l=await this.getChainId();if(l!==e)throw new et.ab(Error("User rejected switch after adding network."));return n}catch(e){throw new et.ab(e)}if(o.code===et.ab.code)throw new et.ab(o);throw new et.x3(o)}},async onAccountsChanged(e){if(0===e.length)this.onDisconnect();else if(o.emitter.listenerCount("connect")){let e=(await this.getChainId()).toString();this.onConnect({chainId:e}),t&&await o.storage?.removeItem(`${this.id}.disconnected`)}else o.emitter.emit("change",{accounts:e.map(e=>(0,tM.K)(e))})},onChainChanged(e){let t=normalizeChainId(e);o.emitter.emit("change",{chainId:t})},async onConnect(e){let t=await this.getAccounts();if(0===t.length)return;let n=normalizeChainId(e.chainId);o.emitter.emit("connect",{accounts:t,chainId:n});let i=await this.getProvider();i&&(i.removeListener("connect",this.onConnect.bind(this)),i.on("accountsChanged",this.onAccountsChanged.bind(this)),i.on("chainChanged",this.onChainChanged),i.on("disconnect",this.onDisconnect.bind(this)))},async onDisconnect(e){let t=await this.getProvider();e&&1013===e.code&&t&&(await this.getAccounts()).length||(o.emitter.emit("disconnect"),t&&(t.removeListener("accountsChanged",this.onAccountsChanged.bind(this)),t.removeListener("chainChanged",this.onChainChanged),t.removeListener("disconnect",this.onDisconnect.bind(this)),t.on("connect",this.onConnect.bind(this))))}})}function findProvider(e,t){function isProvider(e){return"function"==typeof t?t(e):"string"!=typeof t||e[t]}let n=e.ethereum;return n?.providers?n.providers.find(e=>isProvider(e)):n&&isProvider(n)?n:void 0}injected.type="injected";var tR=n(26729),__classPrivateFieldGet=function(e,t,n,o){if("a"===n&&!o)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(e):o?o.value:t.get(e)};let Emitter=class Emitter{constructor(e){Object.defineProperty(this,"uid",{enumerable:!0,configurable:!0,writable:!0,value:e}),j.set(this,new tR)}on(e,t){__classPrivateFieldGet(this,j,"f").on(e,t)}once(e,t){__classPrivateFieldGet(this,j,"f").once(e,t)}off(e,t){__classPrivateFieldGet(this,j,"f").off(e,t)}emit(e,...t){let n=t[0];__classPrivateFieldGet(this,j,"f").emit(e,{uid:this.uid,...n})}listenerCount(e){return __classPrivateFieldGet(this,j,"f").listenerCount(e)}};function deserialize_deserialize(e,t){return JSON.parse(e,(e,n)=>{let o=n;return o?.__type==="bigint"&&(o=BigInt(o.value)),o?.__type==="Map"&&(o=new Map(o.value)),t?.(e,o)??o})}function getReferenceKey(e,t){return e.slice(0,t).join(".")||"."}function getCutoff(e,t){let{length:n}=e;for(let o=0;o{let o=n;return"bigint"==typeof o&&(o={__type:"bigint",value:n.toString()}),o instanceof Map&&(o={__type:"Map",value:Array.from(n.entries())}),t?.(e,o)??o},o),n??void 0)}j=new WeakMap;let tU={getItem:()=>null,setItem:()=>{},removeItem:()=>{}},tF=256;var tN=n(79983);function walletConnect(e){let t,o;let i=e.isNewChainsStale??!0,s="eip155";return l=>({id:"walletConnect",name:"WalletConnect",type:walletConnect.type,async setup(){let e=await this.getProvider().catch(()=>null);e&&(e.on("connect",this.onConnect.bind(this)),e.on("session_delete",this.onSessionDelete.bind(this)))},async connect({chainId:e,...t}={}){try{let n=await this.getProvider();if(!n)throw new ProviderNotFoundError;n.on("display_uri",this.onDisplayUri);let o=e;if(!o){let e=await l.storage?.getItem("state")??{},t=l.chains.some(t=>t.id===e.chainId);o=t?e.chainId:l.chains[0]?.id}if(!o)throw Error("No chains found on connector.");let i=await this.isChainsStale();if(n.session&&i&&await n.disconnect(),!n.session||i){let e=l.chains.filter(e=>e.id!==o).map(e=>e.id);await n.connect({optionalChains:[o,...e],..."pairingTopic"in t?{pairingTopic:t.pairingTopic}:{}}),this.setRequestedChainsIds(l.chains.map(e=>e.id))}let s=(await n.enable()).map(e=>(0,tM.K)(e)),c=await this.getChainId();return n.removeListener("display_uri",this.onDisplayUri),n.removeListener("connect",this.onConnect.bind(this)),n.on("accountsChanged",this.onAccountsChanged.bind(this)),n.on("chainChanged",this.onChainChanged),n.on("disconnect",this.onDisconnect.bind(this)),n.on("session_delete",this.onSessionDelete.bind(this)),{accounts:s,chainId:c}}catch(e){if(/(user rejected|connection request reset)/i.test(e?.message))throw new et.ab(e);throw e}},async disconnect(){let e=await this.getProvider();try{await e?.disconnect()}catch(e){if(!/No matching key/i.test(e.message))throw e}finally{e?.removeListener("accountsChanged",this.onAccountsChanged.bind(this)),e?.removeListener("chainChanged",this.onChainChanged),e?.removeListener("disconnect",this.onDisconnect.bind(this)),e?.removeListener("session_delete",this.onSessionDelete.bind(this)),e?.on("connect",this.onConnect.bind(this)),this.setRequestedChainsIds([])}},async getAccounts(){let e=await this.getProvider();return e.accounts.map(e=>(0,tM.K)(e))},async getProvider({chainId:i}={}){async function initProvider(){let t=l.chains.map(e=>e.id);if(!t.length)return;let{EthereumProvider:o}=await Promise.all([n.e(1194),n.e(3138),n.e(5883)]).then(n.bind(n,33138));return await o.init({...e,disableProviderPing:!0,optionalChains:t,projectId:e.projectId,rpcMap:Object.fromEntries(l.chains.map(e=>[e.id,e.rpcUrls.default.http[0]])),showQrModal:e.showQrModal??!0})}return t||(o||(o=initProvider()),t=await o,t?.events.setMaxListeners(1/0)),i&&await this.switchChain?.({chainId:i}),t},async getChainId(){let e=await this.getProvider();return e.chainId},async isAuthorized(){try{let[e,t]=await Promise.all([this.getAccounts(),this.getProvider()]);if(!e.length)return!1;let n=await this.isChainsStale();if(n&&t.session)return await t.disconnect().catch(()=>{}),!1;return!0}catch{return!1}},async switchChain({chainId:e}){let t=l.chains.find(t=>t.id===e);if(!t)throw new et.x3(new tw.X4);try{let n=await this.getProvider(),o=this.getNamespaceChainsIds(),i=this.getNamespaceMethods(),s=o.includes(e);if(!s&&i.includes("wallet_addEthereumChain")){await n.request({method:"wallet_addEthereumChain",params:[{chainId:(0,Q.eC)(t.id),blockExplorerUrls:[t.blockExplorers?.default.url],chainName:t.name,nativeCurrency:t.nativeCurrency,rpcUrls:[...t.rpcUrls.default.http]}]});let o=await this.getRequestedChainsIds();this.setRequestedChainsIds([...o,e])}return await n.request({method:"wallet_switchEthereumChain",params:[{chainId:(0,Q.eC)(e)}]}),t}catch(t){let e="string"==typeof t?t:t?.message;if(/user rejected request/i.test(e))throw new et.ab(t);throw new et.x3(t)}},onAccountsChanged(e){0===e.length?this.onDisconnect():l.emitter.emit("change",{accounts:e.map(e=>(0,tM.K)(e))})},onChainChanged(e){let t=normalizeChainId(e);l.emitter.emit("change",{chainId:t})},async onConnect(e){let t=normalizeChainId(e.chainId),n=await this.getAccounts();l.emitter.emit("connect",{accounts:n,chainId:t})},async onDisconnect(e){this.setRequestedChainsIds([]),l.emitter.emit("disconnect");let t=await this.getProvider();t.removeListener("accountsChanged",this.onAccountsChanged.bind(this)),t.removeListener("chainChanged",this.onChainChanged),t.removeListener("disconnect",this.onDisconnect.bind(this)),t.removeListener("session_delete",this.onSessionDelete.bind(this)),t.on("connect",this.onConnect.bind(this))},onDisplayUri(e){l.emitter.emit("message",{type:"display_uri",data:e})},onSessionDelete(){this.onDisconnect()},getNamespaceChainsIds(){if(!t)return[];let e=t.session?.namespaces[s]?.chains?.map(e=>parseInt(e.split(":")[1]||""));return e??[]},getNamespaceMethods(){if(!t)return[];let e=t.session?.namespaces[s]?.methods;return e??[]},async getRequestedChainsIds(){return await l.storage?.getItem(this.requestedChainsStorageKey)??[]},async isChainsStale(){let e=this.getNamespaceMethods();if(e.includes("wallet_addEthereumChain")||!i)return!1;let t=l.chains.map(e=>e.id),n=this.getNamespaceChainsIds();if(n.length&&!n.some(e=>t.includes(e)))return!1;let o=await this.getRequestedChainsIds();return!t.every(e=>o.includes(e))},async setRequestedChainsIds(e){await l.storage?.setItem(this.requestedChainsStorageKey,e)},get requestedChainsStorageKey(){return`${this.id}.requestedChains`}})}function coinbaseWallet(e){let t,o;return i=>({id:"coinbaseWalletSDK",name:"Coinbase Wallet",type:coinbaseWallet.type,async connect({chainId:e}={}){try{let t=await this.getProvider(),n=(await t.request({method:"eth_requestAccounts"})).map(e=>(0,tM.K)(e));t.on("accountsChanged",this.onAccountsChanged),t.on("chainChanged",this.onChainChanged),t.on("disconnect",this.onDisconnect.bind(this));let o=await this.getChainId();if(e&&o!==e){let t=await this.switchChain({chainId:e}).catch(e=>{if(e.code===et.ab.code)throw e;return{id:o}});o=t?.id??o}return{accounts:n,chainId:o}}catch(e){if(/(user closed modal|accounts received is empty|user denied account)/i.test(e.message))throw new et.ab(e);throw e}},async disconnect(){let e=await this.getProvider();e.removeListener("accountsChanged",this.onAccountsChanged),e.removeListener("chainChanged",this.onChainChanged),e.removeListener("disconnect",this.onDisconnect.bind(this)),e.disconnect(),e.close()},async getAccounts(){let e=await this.getProvider();return(await e.request({method:"eth_accounts"})).map(e=>(0,tM.K)(e))},async getChainId(){let e=await this.getProvider(),t=await e.request({method:"eth_chainId"});return normalizeChainId(t)},async getProvider(){if(!o){let{default:s}=await Promise.all([n.e(1194),n.e(5811),n.e(6878)]).then(n.t.bind(n,45811,19));t=new("function"!=typeof s&&"function"==typeof s.default?s.default:s)({reloadOnDisconnect:!1,...e});let l=t.walletExtension?.getChainId(),c=i.chains.find(t=>e.chainId?t.id===e.chainId:t.id===l)||i.chains[0],u=e.chainId||c?.id,d=e.jsonRpcUrl||c?.rpcUrls.default.http[0];o=t.makeWeb3Provider(d,u)}return o},async isAuthorized(){try{let e=await this.getAccounts();return!!e.length}catch{return!1}},async switchChain({chainId:e}){let t=i.chains.find(t=>t.id===e);if(!t)throw new et.x3(new tw.X4);let n=await this.getProvider(),o=(0,Q.eC)(t.id);try{return await n.request({method:"wallet_switchEthereumChain",params:[{chainId:o}]}),t}catch(e){if(4902===e.code)try{return await n.request({method:"wallet_addEthereumChain",params:[{chainId:o,chainName:t.name,nativeCurrency:t.nativeCurrency,rpcUrls:[t.rpcUrls.default?.http[0]??""],blockExplorerUrls:[t.blockExplorers?.default.url]}]}),t}catch(e){throw new et.ab(e)}throw new et.x3(e)}},onAccountsChanged(e){0===e.length?i.emitter.emit("disconnect"):i.emitter.emit("change",{accounts:e.map(e=>(0,tM.K)(e))})},onChainChanged(e){let t=normalizeChainId(e);i.emitter.emit("change",{chainId:t})},async onDisconnect(e){i.emitter.emit("disconnect");let t=await this.getProvider();t.removeListener("accountsChanged",this.onAccountsChanged),t.removeListener("chainChanged",this.onChainChanged),t.removeListener("disconnect",this.onDisconnect.bind(this))}})}walletConnect.type="walletConnect",coinbaseWallet.type="coinbaseWallet";var tD=function(e){var{conditions:t}=e;if(!t)throw Error("Styles have no conditions");var n=createNormalizeValueFn(e);return addRecipe(function(e,o){if("string"==typeof e||"number"==typeof e||"boolean"==typeof e){if(!t.defaultCondition)throw Error("No default condition");return o(e,t.defaultCondition)}var i=Array.isArray(e)?n(e):e,s={};for(var l in i)null!=i[l]&&(s[l]=o(i[l],l));return s},{importPath:"@vanilla-extract/sprinkles/createUtils",importName:"createMapValueFn",args:[{conditions:e.conditions}]})}({conditions:{defaultCondition:"smallScreen",conditionNames:["smallScreen","largeScreen"],responsiveArray:void 0}}),t_=createNormalizeValueFn({conditions:{defaultCondition:"smallScreen",conditionNames:["smallScreen","largeScreen"],responsiveArray:void 0}}),tL=function(){return createSprinkles_c8550e00_esm_createSprinkles(composeStyles)(...arguments)}({conditions:{defaultCondition:"base",conditionNames:["base","hover","active"],responsiveArray:void 0},styles:{background:{values:{accentColor:{conditions:{base:"ju367v9i",hover:"ju367v9j",active:"ju367v9k"},defaultClass:"ju367v9i"},accentColorForeground:{conditions:{base:"ju367v9l",hover:"ju367v9m",active:"ju367v9n"},defaultClass:"ju367v9l"},actionButtonBorder:{conditions:{base:"ju367v9o",hover:"ju367v9p",active:"ju367v9q"},defaultClass:"ju367v9o"},actionButtonBorderMobile:{conditions:{base:"ju367v9r",hover:"ju367v9s",active:"ju367v9t"},defaultClass:"ju367v9r"},actionButtonSecondaryBackground:{conditions:{base:"ju367v9u",hover:"ju367v9v",active:"ju367v9w"},defaultClass:"ju367v9u"},closeButton:{conditions:{base:"ju367v9x",hover:"ju367v9y",active:"ju367v9z"},defaultClass:"ju367v9x"},closeButtonBackground:{conditions:{base:"ju367va0",hover:"ju367va1",active:"ju367va2"},defaultClass:"ju367va0"},connectButtonBackground:{conditions:{base:"ju367va3",hover:"ju367va4",active:"ju367va5"},defaultClass:"ju367va3"},connectButtonBackgroundError:{conditions:{base:"ju367va6",hover:"ju367va7",active:"ju367va8"},defaultClass:"ju367va6"},connectButtonInnerBackground:{conditions:{base:"ju367va9",hover:"ju367vaa",active:"ju367vab"},defaultClass:"ju367va9"},connectButtonText:{conditions:{base:"ju367vac",hover:"ju367vad",active:"ju367vae"},defaultClass:"ju367vac"},connectButtonTextError:{conditions:{base:"ju367vaf",hover:"ju367vag",active:"ju367vah"},defaultClass:"ju367vaf"},connectionIndicator:{conditions:{base:"ju367vai",hover:"ju367vaj",active:"ju367vak"},defaultClass:"ju367vai"},downloadBottomCardBackground:{conditions:{base:"ju367val",hover:"ju367vam",active:"ju367van"},defaultClass:"ju367val"},downloadTopCardBackground:{conditions:{base:"ju367vao",hover:"ju367vap",active:"ju367vaq"},defaultClass:"ju367vao"},error:{conditions:{base:"ju367var",hover:"ju367vas",active:"ju367vat"},defaultClass:"ju367var"},generalBorder:{conditions:{base:"ju367vau",hover:"ju367vav",active:"ju367vaw"},defaultClass:"ju367vau"},generalBorderDim:{conditions:{base:"ju367vax",hover:"ju367vay",active:"ju367vaz"},defaultClass:"ju367vax"},menuItemBackground:{conditions:{base:"ju367vb0",hover:"ju367vb1",active:"ju367vb2"},defaultClass:"ju367vb0"},modalBackdrop:{conditions:{base:"ju367vb3",hover:"ju367vb4",active:"ju367vb5"},defaultClass:"ju367vb3"},modalBackground:{conditions:{base:"ju367vb6",hover:"ju367vb7",active:"ju367vb8"},defaultClass:"ju367vb6"},modalBorder:{conditions:{base:"ju367vb9",hover:"ju367vba",active:"ju367vbb"},defaultClass:"ju367vb9"},modalText:{conditions:{base:"ju367vbc",hover:"ju367vbd",active:"ju367vbe"},defaultClass:"ju367vbc"},modalTextDim:{conditions:{base:"ju367vbf",hover:"ju367vbg",active:"ju367vbh"},defaultClass:"ju367vbf"},modalTextSecondary:{conditions:{base:"ju367vbi",hover:"ju367vbj",active:"ju367vbk"},defaultClass:"ju367vbi"},profileAction:{conditions:{base:"ju367vbl",hover:"ju367vbm",active:"ju367vbn"},defaultClass:"ju367vbl"},profileActionHover:{conditions:{base:"ju367vbo",hover:"ju367vbp",active:"ju367vbq"},defaultClass:"ju367vbo"},profileForeground:{conditions:{base:"ju367vbr",hover:"ju367vbs",active:"ju367vbt"},defaultClass:"ju367vbr"},selectedOptionBorder:{conditions:{base:"ju367vbu",hover:"ju367vbv",active:"ju367vbw"},defaultClass:"ju367vbu"},standby:{conditions:{base:"ju367vbx",hover:"ju367vby",active:"ju367vbz"},defaultClass:"ju367vbx"}}},borderColor:{values:{accentColor:{conditions:{base:"ju367vc0",hover:"ju367vc1",active:"ju367vc2"},defaultClass:"ju367vc0"},accentColorForeground:{conditions:{base:"ju367vc3",hover:"ju367vc4",active:"ju367vc5"},defaultClass:"ju367vc3"},actionButtonBorder:{conditions:{base:"ju367vc6",hover:"ju367vc7",active:"ju367vc8"},defaultClass:"ju367vc6"},actionButtonBorderMobile:{conditions:{base:"ju367vc9",hover:"ju367vca",active:"ju367vcb"},defaultClass:"ju367vc9"},actionButtonSecondaryBackground:{conditions:{base:"ju367vcc",hover:"ju367vcd",active:"ju367vce"},defaultClass:"ju367vcc"},closeButton:{conditions:{base:"ju367vcf",hover:"ju367vcg",active:"ju367vch"},defaultClass:"ju367vcf"},closeButtonBackground:{conditions:{base:"ju367vci",hover:"ju367vcj",active:"ju367vck"},defaultClass:"ju367vci"},connectButtonBackground:{conditions:{base:"ju367vcl",hover:"ju367vcm",active:"ju367vcn"},defaultClass:"ju367vcl"},connectButtonBackgroundError:{conditions:{base:"ju367vco",hover:"ju367vcp",active:"ju367vcq"},defaultClass:"ju367vco"},connectButtonInnerBackground:{conditions:{base:"ju367vcr",hover:"ju367vcs",active:"ju367vct"},defaultClass:"ju367vcr"},connectButtonText:{conditions:{base:"ju367vcu",hover:"ju367vcv",active:"ju367vcw"},defaultClass:"ju367vcu"},connectButtonTextError:{conditions:{base:"ju367vcx",hover:"ju367vcy",active:"ju367vcz"},defaultClass:"ju367vcx"},connectionIndicator:{conditions:{base:"ju367vd0",hover:"ju367vd1",active:"ju367vd2"},defaultClass:"ju367vd0"},downloadBottomCardBackground:{conditions:{base:"ju367vd3",hover:"ju367vd4",active:"ju367vd5"},defaultClass:"ju367vd3"},downloadTopCardBackground:{conditions:{base:"ju367vd6",hover:"ju367vd7",active:"ju367vd8"},defaultClass:"ju367vd6"},error:{conditions:{base:"ju367vd9",hover:"ju367vda",active:"ju367vdb"},defaultClass:"ju367vd9"},generalBorder:{conditions:{base:"ju367vdc",hover:"ju367vdd",active:"ju367vde"},defaultClass:"ju367vdc"},generalBorderDim:{conditions:{base:"ju367vdf",hover:"ju367vdg",active:"ju367vdh"},defaultClass:"ju367vdf"},menuItemBackground:{conditions:{base:"ju367vdi",hover:"ju367vdj",active:"ju367vdk"},defaultClass:"ju367vdi"},modalBackdrop:{conditions:{base:"ju367vdl",hover:"ju367vdm",active:"ju367vdn"},defaultClass:"ju367vdl"},modalBackground:{conditions:{base:"ju367vdo",hover:"ju367vdp",active:"ju367vdq"},defaultClass:"ju367vdo"},modalBorder:{conditions:{base:"ju367vdr",hover:"ju367vds",active:"ju367vdt"},defaultClass:"ju367vdr"},modalText:{conditions:{base:"ju367vdu",hover:"ju367vdv",active:"ju367vdw"},defaultClass:"ju367vdu"},modalTextDim:{conditions:{base:"ju367vdx",hover:"ju367vdy",active:"ju367vdz"},defaultClass:"ju367vdx"},modalTextSecondary:{conditions:{base:"ju367ve0",hover:"ju367ve1",active:"ju367ve2"},defaultClass:"ju367ve0"},profileAction:{conditions:{base:"ju367ve3",hover:"ju367ve4",active:"ju367ve5"},defaultClass:"ju367ve3"},profileActionHover:{conditions:{base:"ju367ve6",hover:"ju367ve7",active:"ju367ve8"},defaultClass:"ju367ve6"},profileForeground:{conditions:{base:"ju367ve9",hover:"ju367vea",active:"ju367veb"},defaultClass:"ju367ve9"},selectedOptionBorder:{conditions:{base:"ju367vec",hover:"ju367ved",active:"ju367vee"},defaultClass:"ju367vec"},standby:{conditions:{base:"ju367vef",hover:"ju367veg",active:"ju367veh"},defaultClass:"ju367vef"}}},boxShadow:{values:{connectButton:{conditions:{base:"ju367vei",hover:"ju367vej",active:"ju367vek"},defaultClass:"ju367vei"},dialog:{conditions:{base:"ju367vel",hover:"ju367vem",active:"ju367ven"},defaultClass:"ju367vel"},profileDetailsAction:{conditions:{base:"ju367veo",hover:"ju367vep",active:"ju367veq"},defaultClass:"ju367veo"},selectedOption:{conditions:{base:"ju367ver",hover:"ju367ves",active:"ju367vet"},defaultClass:"ju367ver"},selectedWallet:{conditions:{base:"ju367veu",hover:"ju367vev",active:"ju367vew"},defaultClass:"ju367veu"},walletLogo:{conditions:{base:"ju367vex",hover:"ju367vey",active:"ju367vez"},defaultClass:"ju367vex"}}},color:{values:{accentColor:{conditions:{base:"ju367vf0",hover:"ju367vf1",active:"ju367vf2"},defaultClass:"ju367vf0"},accentColorForeground:{conditions:{base:"ju367vf3",hover:"ju367vf4",active:"ju367vf5"},defaultClass:"ju367vf3"},actionButtonBorder:{conditions:{base:"ju367vf6",hover:"ju367vf7",active:"ju367vf8"},defaultClass:"ju367vf6"},actionButtonBorderMobile:{conditions:{base:"ju367vf9",hover:"ju367vfa",active:"ju367vfb"},defaultClass:"ju367vf9"},actionButtonSecondaryBackground:{conditions:{base:"ju367vfc",hover:"ju367vfd",active:"ju367vfe"},defaultClass:"ju367vfc"},closeButton:{conditions:{base:"ju367vff",hover:"ju367vfg",active:"ju367vfh"},defaultClass:"ju367vff"},closeButtonBackground:{conditions:{base:"ju367vfi",hover:"ju367vfj",active:"ju367vfk"},defaultClass:"ju367vfi"},connectButtonBackground:{conditions:{base:"ju367vfl",hover:"ju367vfm",active:"ju367vfn"},defaultClass:"ju367vfl"},connectButtonBackgroundError:{conditions:{base:"ju367vfo",hover:"ju367vfp",active:"ju367vfq"},defaultClass:"ju367vfo"},connectButtonInnerBackground:{conditions:{base:"ju367vfr",hover:"ju367vfs",active:"ju367vft"},defaultClass:"ju367vfr"},connectButtonText:{conditions:{base:"ju367vfu",hover:"ju367vfv",active:"ju367vfw"},defaultClass:"ju367vfu"},connectButtonTextError:{conditions:{base:"ju367vfx",hover:"ju367vfy",active:"ju367vfz"},defaultClass:"ju367vfx"},connectionIndicator:{conditions:{base:"ju367vg0",hover:"ju367vg1",active:"ju367vg2"},defaultClass:"ju367vg0"},downloadBottomCardBackground:{conditions:{base:"ju367vg3",hover:"ju367vg4",active:"ju367vg5"},defaultClass:"ju367vg3"},downloadTopCardBackground:{conditions:{base:"ju367vg6",hover:"ju367vg7",active:"ju367vg8"},defaultClass:"ju367vg6"},error:{conditions:{base:"ju367vg9",hover:"ju367vga",active:"ju367vgb"},defaultClass:"ju367vg9"},generalBorder:{conditions:{base:"ju367vgc",hover:"ju367vgd",active:"ju367vge"},defaultClass:"ju367vgc"},generalBorderDim:{conditions:{base:"ju367vgf",hover:"ju367vgg",active:"ju367vgh"},defaultClass:"ju367vgf"},menuItemBackground:{conditions:{base:"ju367vgi",hover:"ju367vgj",active:"ju367vgk"},defaultClass:"ju367vgi"},modalBackdrop:{conditions:{base:"ju367vgl",hover:"ju367vgm",active:"ju367vgn"},defaultClass:"ju367vgl"},modalBackground:{conditions:{base:"ju367vgo",hover:"ju367vgp",active:"ju367vgq"},defaultClass:"ju367vgo"},modalBorder:{conditions:{base:"ju367vgr",hover:"ju367vgs",active:"ju367vgt"},defaultClass:"ju367vgr"},modalText:{conditions:{base:"ju367vgu",hover:"ju367vgv",active:"ju367vgw"},defaultClass:"ju367vgu"},modalTextDim:{conditions:{base:"ju367vgx",hover:"ju367vgy",active:"ju367vgz"},defaultClass:"ju367vgx"},modalTextSecondary:{conditions:{base:"ju367vh0",hover:"ju367vh1",active:"ju367vh2"},defaultClass:"ju367vh0"},profileAction:{conditions:{base:"ju367vh3",hover:"ju367vh4",active:"ju367vh5"},defaultClass:"ju367vh3"},profileActionHover:{conditions:{base:"ju367vh6",hover:"ju367vh7",active:"ju367vh8"},defaultClass:"ju367vh6"},profileForeground:{conditions:{base:"ju367vh9",hover:"ju367vha",active:"ju367vhb"},defaultClass:"ju367vh9"},selectedOptionBorder:{conditions:{base:"ju367vhc",hover:"ju367vhd",active:"ju367vhe"},defaultClass:"ju367vhc"},standby:{conditions:{base:"ju367vhf",hover:"ju367vhg",active:"ju367vhh"},defaultClass:"ju367vhf"}}}}},{conditions:{defaultCondition:"smallScreen",conditionNames:["smallScreen","largeScreen"],responsiveArray:void 0},styles:{alignItems:{values:{"flex-start":{conditions:{smallScreen:"ju367v0",largeScreen:"ju367v1"},defaultClass:"ju367v0"},"flex-end":{conditions:{smallScreen:"ju367v2",largeScreen:"ju367v3"},defaultClass:"ju367v2"},center:{conditions:{smallScreen:"ju367v4",largeScreen:"ju367v5"},defaultClass:"ju367v4"}}},display:{values:{none:{conditions:{smallScreen:"ju367v6",largeScreen:"ju367v7"},defaultClass:"ju367v6"},block:{conditions:{smallScreen:"ju367v8",largeScreen:"ju367v9"},defaultClass:"ju367v8"},flex:{conditions:{smallScreen:"ju367va",largeScreen:"ju367vb"},defaultClass:"ju367va"},inline:{conditions:{smallScreen:"ju367vc",largeScreen:"ju367vd"},defaultClass:"ju367vc"}}}}},{conditions:void 0,styles:{margin:{mappings:["marginTop","marginBottom","marginLeft","marginRight"]},marginX:{mappings:["marginLeft","marginRight"]},marginY:{mappings:["marginTop","marginBottom"]},padding:{mappings:["paddingTop","paddingBottom","paddingLeft","paddingRight"]},paddingX:{mappings:["paddingLeft","paddingRight"]},paddingY:{mappings:["paddingTop","paddingBottom"]},alignSelf:{values:{"flex-start":{defaultClass:"ju367ve"},"flex-end":{defaultClass:"ju367vf"},center:{defaultClass:"ju367vg"}}},backgroundSize:{values:{cover:{defaultClass:"ju367vh"}}},borderRadius:{values:{1:{defaultClass:"ju367vi"},6:{defaultClass:"ju367vj"},10:{defaultClass:"ju367vk"},13:{defaultClass:"ju367vl"},actionButton:{defaultClass:"ju367vm"},connectButton:{defaultClass:"ju367vn"},menuButton:{defaultClass:"ju367vo"},modal:{defaultClass:"ju367vp"},modalMobile:{defaultClass:"ju367vq"},"25%":{defaultClass:"ju367vr"},full:{defaultClass:"ju367vs"}}},borderStyle:{values:{solid:{defaultClass:"ju367vt"}}},borderWidth:{values:{0:{defaultClass:"ju367vu"},1:{defaultClass:"ju367vv"},2:{defaultClass:"ju367vw"},4:{defaultClass:"ju367vx"}}},cursor:{values:{pointer:{defaultClass:"ju367vy"},none:{defaultClass:"ju367vz"}}},pointerEvents:{values:{none:{defaultClass:"ju367v10"},all:{defaultClass:"ju367v11"}}},minHeight:{values:{8:{defaultClass:"ju367v12"},44:{defaultClass:"ju367v13"}}},flexDirection:{values:{row:{defaultClass:"ju367v14"},column:{defaultClass:"ju367v15"}}},fontFamily:{values:{body:{defaultClass:"ju367v16"}}},fontSize:{values:{12:{defaultClass:"ju367v17"},13:{defaultClass:"ju367v18"},14:{defaultClass:"ju367v19"},16:{defaultClass:"ju367v1a"},18:{defaultClass:"ju367v1b"},20:{defaultClass:"ju367v1c"},23:{defaultClass:"ju367v1d"}}},fontWeight:{values:{regular:{defaultClass:"ju367v1e"},medium:{defaultClass:"ju367v1f"},semibold:{defaultClass:"ju367v1g"},bold:{defaultClass:"ju367v1h"},heavy:{defaultClass:"ju367v1i"}}},gap:{values:{0:{defaultClass:"ju367v1j"},1:{defaultClass:"ju367v1k"},2:{defaultClass:"ju367v1l"},3:{defaultClass:"ju367v1m"},4:{defaultClass:"ju367v1n"},5:{defaultClass:"ju367v1o"},6:{defaultClass:"ju367v1p"},8:{defaultClass:"ju367v1q"},10:{defaultClass:"ju367v1r"},12:{defaultClass:"ju367v1s"},14:{defaultClass:"ju367v1t"},16:{defaultClass:"ju367v1u"},18:{defaultClass:"ju367v1v"},20:{defaultClass:"ju367v1w"},24:{defaultClass:"ju367v1x"},28:{defaultClass:"ju367v1y"},32:{defaultClass:"ju367v1z"},36:{defaultClass:"ju367v20"},44:{defaultClass:"ju367v21"},64:{defaultClass:"ju367v22"},"-1":{defaultClass:"ju367v23"}}},height:{values:{1:{defaultClass:"ju367v24"},2:{defaultClass:"ju367v25"},4:{defaultClass:"ju367v26"},8:{defaultClass:"ju367v27"},12:{defaultClass:"ju367v28"},20:{defaultClass:"ju367v29"},24:{defaultClass:"ju367v2a"},28:{defaultClass:"ju367v2b"},30:{defaultClass:"ju367v2c"},32:{defaultClass:"ju367v2d"},34:{defaultClass:"ju367v2e"},36:{defaultClass:"ju367v2f"},40:{defaultClass:"ju367v2g"},44:{defaultClass:"ju367v2h"},48:{defaultClass:"ju367v2i"},54:{defaultClass:"ju367v2j"},60:{defaultClass:"ju367v2k"},200:{defaultClass:"ju367v2l"},full:{defaultClass:"ju367v2m"},max:{defaultClass:"ju367v2n"}}},justifyContent:{values:{"flex-start":{defaultClass:"ju367v2o"},"flex-end":{defaultClass:"ju367v2p"},center:{defaultClass:"ju367v2q"},"space-between":{defaultClass:"ju367v2r"},"space-around":{defaultClass:"ju367v2s"}}},textAlign:{values:{left:{defaultClass:"ju367v2t"},center:{defaultClass:"ju367v2u"},inherit:{defaultClass:"ju367v2v"}}},marginBottom:{values:{0:{defaultClass:"ju367v2w"},1:{defaultClass:"ju367v2x"},2:{defaultClass:"ju367v2y"},3:{defaultClass:"ju367v2z"},4:{defaultClass:"ju367v30"},5:{defaultClass:"ju367v31"},6:{defaultClass:"ju367v32"},8:{defaultClass:"ju367v33"},10:{defaultClass:"ju367v34"},12:{defaultClass:"ju367v35"},14:{defaultClass:"ju367v36"},16:{defaultClass:"ju367v37"},18:{defaultClass:"ju367v38"},20:{defaultClass:"ju367v39"},24:{defaultClass:"ju367v3a"},28:{defaultClass:"ju367v3b"},32:{defaultClass:"ju367v3c"},36:{defaultClass:"ju367v3d"},44:{defaultClass:"ju367v3e"},64:{defaultClass:"ju367v3f"},"-1":{defaultClass:"ju367v3g"}}},marginLeft:{values:{0:{defaultClass:"ju367v3h"},1:{defaultClass:"ju367v3i"},2:{defaultClass:"ju367v3j"},3:{defaultClass:"ju367v3k"},4:{defaultClass:"ju367v3l"},5:{defaultClass:"ju367v3m"},6:{defaultClass:"ju367v3n"},8:{defaultClass:"ju367v3o"},10:{defaultClass:"ju367v3p"},12:{defaultClass:"ju367v3q"},14:{defaultClass:"ju367v3r"},16:{defaultClass:"ju367v3s"},18:{defaultClass:"ju367v3t"},20:{defaultClass:"ju367v3u"},24:{defaultClass:"ju367v3v"},28:{defaultClass:"ju367v3w"},32:{defaultClass:"ju367v3x"},36:{defaultClass:"ju367v3y"},44:{defaultClass:"ju367v3z"},64:{defaultClass:"ju367v40"},"-1":{defaultClass:"ju367v41"}}},marginRight:{values:{0:{defaultClass:"ju367v42"},1:{defaultClass:"ju367v43"},2:{defaultClass:"ju367v44"},3:{defaultClass:"ju367v45"},4:{defaultClass:"ju367v46"},5:{defaultClass:"ju367v47"},6:{defaultClass:"ju367v48"},8:{defaultClass:"ju367v49"},10:{defaultClass:"ju367v4a"},12:{defaultClass:"ju367v4b"},14:{defaultClass:"ju367v4c"},16:{defaultClass:"ju367v4d"},18:{defaultClass:"ju367v4e"},20:{defaultClass:"ju367v4f"},24:{defaultClass:"ju367v4g"},28:{defaultClass:"ju367v4h"},32:{defaultClass:"ju367v4i"},36:{defaultClass:"ju367v4j"},44:{defaultClass:"ju367v4k"},64:{defaultClass:"ju367v4l"},"-1":{defaultClass:"ju367v4m"}}},marginTop:{values:{0:{defaultClass:"ju367v4n"},1:{defaultClass:"ju367v4o"},2:{defaultClass:"ju367v4p"},3:{defaultClass:"ju367v4q"},4:{defaultClass:"ju367v4r"},5:{defaultClass:"ju367v4s"},6:{defaultClass:"ju367v4t"},8:{defaultClass:"ju367v4u"},10:{defaultClass:"ju367v4v"},12:{defaultClass:"ju367v4w"},14:{defaultClass:"ju367v4x"},16:{defaultClass:"ju367v4y"},18:{defaultClass:"ju367v4z"},20:{defaultClass:"ju367v50"},24:{defaultClass:"ju367v51"},28:{defaultClass:"ju367v52"},32:{defaultClass:"ju367v53"},36:{defaultClass:"ju367v54"},44:{defaultClass:"ju367v55"},64:{defaultClass:"ju367v56"},"-1":{defaultClass:"ju367v57"}}},maxWidth:{values:{1:{defaultClass:"ju367v58"},2:{defaultClass:"ju367v59"},4:{defaultClass:"ju367v5a"},8:{defaultClass:"ju367v5b"},12:{defaultClass:"ju367v5c"},20:{defaultClass:"ju367v5d"},24:{defaultClass:"ju367v5e"},28:{defaultClass:"ju367v5f"},30:{defaultClass:"ju367v5g"},32:{defaultClass:"ju367v5h"},34:{defaultClass:"ju367v5i"},36:{defaultClass:"ju367v5j"},40:{defaultClass:"ju367v5k"},44:{defaultClass:"ju367v5l"},48:{defaultClass:"ju367v5m"},54:{defaultClass:"ju367v5n"},60:{defaultClass:"ju367v5o"},200:{defaultClass:"ju367v5p"},full:{defaultClass:"ju367v5q"},max:{defaultClass:"ju367v5r"}}},minWidth:{values:{1:{defaultClass:"ju367v5s"},2:{defaultClass:"ju367v5t"},4:{defaultClass:"ju367v5u"},8:{defaultClass:"ju367v5v"},12:{defaultClass:"ju367v5w"},20:{defaultClass:"ju367v5x"},24:{defaultClass:"ju367v5y"},28:{defaultClass:"ju367v5z"},30:{defaultClass:"ju367v60"},32:{defaultClass:"ju367v61"},34:{defaultClass:"ju367v62"},36:{defaultClass:"ju367v63"},40:{defaultClass:"ju367v64"},44:{defaultClass:"ju367v65"},48:{defaultClass:"ju367v66"},54:{defaultClass:"ju367v67"},60:{defaultClass:"ju367v68"},200:{defaultClass:"ju367v69"},full:{defaultClass:"ju367v6a"},max:{defaultClass:"ju367v6b"}}},overflow:{values:{hidden:{defaultClass:"ju367v6c"}}},paddingBottom:{values:{0:{defaultClass:"ju367v6d"},1:{defaultClass:"ju367v6e"},2:{defaultClass:"ju367v6f"},3:{defaultClass:"ju367v6g"},4:{defaultClass:"ju367v6h"},5:{defaultClass:"ju367v6i"},6:{defaultClass:"ju367v6j"},8:{defaultClass:"ju367v6k"},10:{defaultClass:"ju367v6l"},12:{defaultClass:"ju367v6m"},14:{defaultClass:"ju367v6n"},16:{defaultClass:"ju367v6o"},18:{defaultClass:"ju367v6p"},20:{defaultClass:"ju367v6q"},24:{defaultClass:"ju367v6r"},28:{defaultClass:"ju367v6s"},32:{defaultClass:"ju367v6t"},36:{defaultClass:"ju367v6u"},44:{defaultClass:"ju367v6v"},64:{defaultClass:"ju367v6w"},"-1":{defaultClass:"ju367v6x"}}},paddingLeft:{values:{0:{defaultClass:"ju367v6y"},1:{defaultClass:"ju367v6z"},2:{defaultClass:"ju367v70"},3:{defaultClass:"ju367v71"},4:{defaultClass:"ju367v72"},5:{defaultClass:"ju367v73"},6:{defaultClass:"ju367v74"},8:{defaultClass:"ju367v75"},10:{defaultClass:"ju367v76"},12:{defaultClass:"ju367v77"},14:{defaultClass:"ju367v78"},16:{defaultClass:"ju367v79"},18:{defaultClass:"ju367v7a"},20:{defaultClass:"ju367v7b"},24:{defaultClass:"ju367v7c"},28:{defaultClass:"ju367v7d"},32:{defaultClass:"ju367v7e"},36:{defaultClass:"ju367v7f"},44:{defaultClass:"ju367v7g"},64:{defaultClass:"ju367v7h"},"-1":{defaultClass:"ju367v7i"}}},paddingRight:{values:{0:{defaultClass:"ju367v7j"},1:{defaultClass:"ju367v7k"},2:{defaultClass:"ju367v7l"},3:{defaultClass:"ju367v7m"},4:{defaultClass:"ju367v7n"},5:{defaultClass:"ju367v7o"},6:{defaultClass:"ju367v7p"},8:{defaultClass:"ju367v7q"},10:{defaultClass:"ju367v7r"},12:{defaultClass:"ju367v7s"},14:{defaultClass:"ju367v7t"},16:{defaultClass:"ju367v7u"},18:{defaultClass:"ju367v7v"},20:{defaultClass:"ju367v7w"},24:{defaultClass:"ju367v7x"},28:{defaultClass:"ju367v7y"},32:{defaultClass:"ju367v7z"},36:{defaultClass:"ju367v80"},44:{defaultClass:"ju367v81"},64:{defaultClass:"ju367v82"},"-1":{defaultClass:"ju367v83"}}},paddingTop:{values:{0:{defaultClass:"ju367v84"},1:{defaultClass:"ju367v85"},2:{defaultClass:"ju367v86"},3:{defaultClass:"ju367v87"},4:{defaultClass:"ju367v88"},5:{defaultClass:"ju367v89"},6:{defaultClass:"ju367v8a"},8:{defaultClass:"ju367v8b"},10:{defaultClass:"ju367v8c"},12:{defaultClass:"ju367v8d"},14:{defaultClass:"ju367v8e"},16:{defaultClass:"ju367v8f"},18:{defaultClass:"ju367v8g"},20:{defaultClass:"ju367v8h"},24:{defaultClass:"ju367v8i"},28:{defaultClass:"ju367v8j"},32:{defaultClass:"ju367v8k"},36:{defaultClass:"ju367v8l"},44:{defaultClass:"ju367v8m"},64:{defaultClass:"ju367v8n"},"-1":{defaultClass:"ju367v8o"}}},position:{values:{absolute:{defaultClass:"ju367v8p"},fixed:{defaultClass:"ju367v8q"},relative:{defaultClass:"ju367v8r"}}},WebkitUserSelect:{values:{none:{defaultClass:"ju367v8s"}}},right:{values:{0:{defaultClass:"ju367v8t"}}},transition:{values:{default:{defaultClass:"ju367v8u"},transform:{defaultClass:"ju367v8v"}}},userSelect:{values:{none:{defaultClass:"ju367v8w"}}},width:{values:{1:{defaultClass:"ju367v8x"},2:{defaultClass:"ju367v8y"},4:{defaultClass:"ju367v8z"},8:{defaultClass:"ju367v90"},12:{defaultClass:"ju367v91"},20:{defaultClass:"ju367v92"},24:{defaultClass:"ju367v93"},28:{defaultClass:"ju367v94"},30:{defaultClass:"ju367v95"},32:{defaultClass:"ju367v96"},34:{defaultClass:"ju367v97"},36:{defaultClass:"ju367v98"},40:{defaultClass:"ju367v99"},44:{defaultClass:"ju367v9a"},48:{defaultClass:"ju367v9b"},54:{defaultClass:"ju367v9c"},60:{defaultClass:"ju367v9d"},200:{defaultClass:"ju367v9e"},full:{defaultClass:"ju367v9f"},max:{defaultClass:"ju367v9g"}}},backdropFilter:{values:{modalOverlay:{defaultClass:"ju367v9h"}}}}}),tz={colors:{accentColor:"var(--rk-colors-accentColor)",accentColorForeground:"var(--rk-colors-accentColorForeground)",actionButtonBorder:"var(--rk-colors-actionButtonBorder)",actionButtonBorderMobile:"var(--rk-colors-actionButtonBorderMobile)",actionButtonSecondaryBackground:"var(--rk-colors-actionButtonSecondaryBackground)",closeButton:"var(--rk-colors-closeButton)",closeButtonBackground:"var(--rk-colors-closeButtonBackground)",connectButtonBackground:"var(--rk-colors-connectButtonBackground)",connectButtonBackgroundError:"var(--rk-colors-connectButtonBackgroundError)",connectButtonInnerBackground:"var(--rk-colors-connectButtonInnerBackground)",connectButtonText:"var(--rk-colors-connectButtonText)",connectButtonTextError:"var(--rk-colors-connectButtonTextError)",connectionIndicator:"var(--rk-colors-connectionIndicator)",downloadBottomCardBackground:"var(--rk-colors-downloadBottomCardBackground)",downloadTopCardBackground:"var(--rk-colors-downloadTopCardBackground)",error:"var(--rk-colors-error)",generalBorder:"var(--rk-colors-generalBorder)",generalBorderDim:"var(--rk-colors-generalBorderDim)",menuItemBackground:"var(--rk-colors-menuItemBackground)",modalBackdrop:"var(--rk-colors-modalBackdrop)",modalBackground:"var(--rk-colors-modalBackground)",modalBorder:"var(--rk-colors-modalBorder)",modalText:"var(--rk-colors-modalText)",modalTextDim:"var(--rk-colors-modalTextDim)",modalTextSecondary:"var(--rk-colors-modalTextSecondary)",profileAction:"var(--rk-colors-profileAction)",profileActionHover:"var(--rk-colors-profileActionHover)",profileForeground:"var(--rk-colors-profileForeground)",selectedOptionBorder:"var(--rk-colors-selectedOptionBorder)",standby:"var(--rk-colors-standby)"},fonts:{body:"var(--rk-fonts-body)"},radii:{actionButton:"var(--rk-radii-actionButton)",connectButton:"var(--rk-radii-connectButton)",menuButton:"var(--rk-radii-menuButton)",modal:"var(--rk-radii-modal)",modalMobile:"var(--rk-radii-modalMobile)"},shadows:{connectButton:"var(--rk-shadows-connectButton)",dialog:"var(--rk-shadows-dialog)",profileDetailsAction:"var(--rk-shadows-profileDetailsAction)",selectedOption:"var(--rk-shadows-selectedOption)",selectedWallet:"var(--rk-shadows-selectedWallet)",walletLogo:"var(--rk-shadows-walletLogo)"},blurs:{modalOverlay:"var(--rk-blurs-modalOverlay)"}},tq={shrink:"_12cbo8i6",shrinkSm:"_12cbo8i7"},tG={grow:"_12cbo8i4",growLg:"_12cbo8i5"};function touchableStyles({active:e,hover:t}){return["_12cbo8i3 ju367v8r",t&&tG[t],tq[e]]}var tW=(0,D.createContext)(null);function useAuthenticationStatus(){var e;let t=(0,D.useContext)(tW);return null!=(e=null==t?void 0:t.status)?e:null}function useConnectionStatus(){let e=useAuthenticationStatus(),{isConnected:t}=(0,_.m)();return t?e&&("loading"===e||"unauthenticated"===e)?e:"connected":"disconnected"}function isAndroid(){return"undefined"!=typeof navigator&&/android/i.test(navigator.userAgent)}function isIOS(){return"undefined"!=typeof navigator&&/iPhone|iPod/.test(navigator.userAgent)||"undefined"!=typeof navigator&&(/iPad/.test(navigator.userAgent)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)}function isMobile(){return isAndroid()||isIOS()}var tH={a:"iekbcca",blockquote:"iekbcc2",button:"iekbcc9",input:"iekbcc8 iekbcc5 iekbcc4",mark:"iekbcc6",ol:"iekbcc1",q:"iekbcc2",select:"iekbcc7 iekbcc5 iekbcc4",table:"iekbcc3",textarea:"iekbcc5 iekbcc4",ul:"iekbcc1"},atoms=({reset:e,...t})=>{if(!e)return tL(t);let n=tH[e],o=tL(t);return(0,L.Z)("iekbcc0",n,o)},tQ=D.forwardRef(({as:e="div",className:t,testId:n,...o},i)=>{let s={},l={};for(let e in o)tL.properties.has(e)?s[e]=o[e]:l[e]=o[e];let c=atoms({reset:"string"==typeof e?e:"div",...s});return D.createElement(e,{className:(0,L.Z)(c,t),...l,"data-testid":n?`rk-${n.replace(/^rk-/,"")}`:void 0,ref:i})});tQ.displayName="Box";var tK=new Map,tV=new Map;async function loadAsyncImage(e){let t=tV.get(e);if(t)return t;let load=async()=>e().then(async t=>(tK.set(e,t),t)),n=load().catch(t=>load().catch(t=>{tV.delete(e)}));return tV.set(e,n),n}async function loadImages(...e){return await Promise.all(e.map(e=>"function"==typeof e?loadAsyncImage(e):e))}function useAsyncImage(e){let t="function"==typeof e?tK.get(e):void 0,n=function(){let[,e]=(0,D.useReducer)(e=>e+1,0);return e}();return(0,D.useEffect)(()=>{"function"!=typeof e||t||loadAsyncImage(e).then(n)},[e,t,n]),"function"==typeof e?t:e}function AsyncImage({alt:e,background:t,borderColor:n,borderRadius:o,useAsImage:i,boxShadow:s,height:l,src:c,width:u,testId:d}){let p=isIOS(),f=useAsyncImage(c),m=f&&/^http/.test(f),[g,b]=(0,D.useReducer)(()=>!0,!1);return D.createElement(tQ,{"aria-label":e,borderRadius:o,boxShadow:s,height:"string"==typeof l?l:void 0,overflow:"hidden",position:"relative",role:"img",style:{background:t,height:"number"==typeof l?l:void 0,width:"number"==typeof u?u:void 0},width:"string"==typeof u?u:void 0,testId:d},D.createElement(tQ,{...i?{"aria-hidden":!0,as:"img",src:f}:m?{"aria-hidden":!0,as:"img",onLoad:b,src:f}:{backgroundSize:"cover"},height:"full",position:"absolute",...p?{WebkitUserSelect:"none"}:{},style:{WebkitTouchCallout:"none",transition:"opacity .15s linear",userSelect:"none",...i?{}:m?{opacity:g?1:0}:{backgroundImage:f?`url(${f})`:void 0,backgroundRepeat:"no-repeat",opacity:f?1:0}},width:"full"}),n?D.createElement(tQ,{..."object"==typeof n&&"custom"in n?{style:{borderColor:n.custom}}:{borderColor:n},borderRadius:o,borderStyle:"solid",borderWidth:"1",height:"full",position:"relative",width:"full"}):null)}var useRandomId=e=>(0,D.useMemo)(()=>`${e}_${Math.round(1e9*Math.random())}`,[e]),SpinnerIcon=({height:e=21,width:t=21})=>{let n=useRandomId("spinner");return D.createElement("svg",{className:"_1luule42",fill:"none",height:e,viewBox:"0 0 21 21",width:t,xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Loading"),D.createElement("clipPath",{id:n},D.createElement("path",{d:"M10.5 3C6.35786 3 3 6.35786 3 10.5C3 14.6421 6.35786 18 10.5 18C11.3284 18 12 18.6716 12 19.5C12 20.3284 11.3284 21 10.5 21C4.70101 21 0 16.299 0 10.5C0 4.70101 4.70101 0 10.5 0C16.299 0 21 4.70101 21 10.5C21 11.3284 20.3284 12 19.5 12C18.6716 12 18 11.3284 18 10.5C18 6.35786 14.6421 3 10.5 3Z"})),D.createElement("foreignObject",{clipPath:`url(#${n})`,height:"21",width:"21",x:"0",y:"0"},D.createElement("div",{className:"_1luule43"})))},tZ=[{color:"#FC5C54",emoji:"\uD83C\uDF36"},{color:"#FFD95A",emoji:"\uD83E\uDD11"},{color:"#E95D72",emoji:"\uD83D\uDC19"},{color:"#6A87C8",emoji:"\uD83E\uDED0"},{color:"#5FD0F3",emoji:"\uD83D\uDC33"},{color:"#FC5C54",emoji:"\uD83E\uDD36"},{color:"#75C06B",emoji:"\uD83C\uDF32"},{color:"#FFDD86",emoji:"\uD83C\uDF1E"},{color:"#5FC6D4",emoji:"\uD83D\uDC12"},{color:"#FF949A",emoji:"\uD83D\uDC35"},{color:"#FF8024",emoji:"\uD83E\uDD8A"},{color:"#9BA1A4",emoji:"\uD83D\uDC3C"},{color:"#EC66FF",emoji:"\uD83E\uDD84"},{color:"#FF8CBC",emoji:"\uD83D\uDC37"},{color:"#FF9A23",emoji:"\uD83D\uDC27"},{color:"#FF949A",emoji:"\uD83E\uDDA9"},{color:"#C5DADB",emoji:"\uD83D\uDC7D"},{color:"#FC5C54",emoji:"\uD83C\uDF88"},{color:"#FF949A",emoji:"\uD83C\uDF49"},{color:"#FFD95A",emoji:"\uD83C\uDF89"},{color:"#A8CE63",emoji:"\uD83D\uDC32"},{color:"#71ABFF",emoji:"\uD83C\uDF0E"},{color:"#FFE279",emoji:"\uD83C\uDF4A"},{color:"#B6B1B6",emoji:"\uD83D\uDC2D"},{color:"#FF6780",emoji:"\uD83C\uDF63"},{color:"#FFD95A",emoji:"\uD83D\uDC25"},{color:"#A575FF",emoji:"\uD83D\uDC7E"},{color:"#A8CE63",emoji:"\uD83E\uDD66"},{color:"#FC5C54",emoji:"\uD83D\uDC79"},{color:"#FFE279",emoji:"\uD83D\uDE40"},{color:"#5FD0F3",emoji:"⛱"},{color:"#4D82FF",emoji:"⛵️"},{color:"#FFE279",emoji:"\uD83E\uDD73"},{color:"#FF949A",emoji:"\uD83E\uDD2F"},{color:"#FFB35A",emoji:"\uD83E\uDD20"}],defaultAvatar=({address:e,ensImage:t,size:n})=>{let[o,i]=(0,D.useState)(!1);(0,D.useEffect)(()=>{if(t){let e=new Image;e.src=t,e.onload=()=>i(!0)}},[t]);let{color:s,emoji:l}=(0,D.useMemo)(()=>(function(e){let t=Math.abs(function(e){let t=0;if(0===e.length)return t;for(let n=0;nD.createElement("svg",{fill:"none",height:"7",width:"14",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Dropdown"),D.createElement("path",{d:"M12.75 1.54001L8.51647 5.0038C7.77974 5.60658 6.72026 5.60658 5.98352 5.0038L1.75 1.54001",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2.5",xmlns:"http://www.w3.org/2000/svg"})),tX=new class{constructor(e){for(let[t,n]of(this.listeners=new Set,this.defaultLocale="en",this.enableFallback=!1,this.locale="en",this.cachedLocales=[],this.translations={},Object.entries(e)))this.cachedLocales=[...this.cachedLocales,t],this.translations={...this.translations,...this.flattenTranslation(n,t)}}missingMessage(e){return`[missing: "${this.locale}.${e}" translation]`}flattenTranslation(e,t){let n={},flatten=(e,t)=>{for(let o of Object.keys(e)){let i=`${t}.${o}`,s=e[o];"object"==typeof s&&null!==s?flatten(s,i):n[i]=s}};return flatten(e,t),n}translateWithReplacements(e,t={}){let n=e;for(let e in t){let o=t[e];n=n.replace(`%{${e}}`,o)}return n}t(e,t,n){let o=`${this.locale}.${e}`,i=this.translations[o];if(!i){if(this.enableFallback){let n=`${this.defaultLocale}.${e}`,o=this.translations[n];if(o)return this.translateWithReplacements(o,t)}return(null==n?void 0:n.rawKeyIfTranslationMissing)?e:this.missingMessage(e)}return this.translateWithReplacements(i,t)}isLocaleCached(e){return this.cachedLocales.includes(e)}updateLocale(e){this.locale=e,this.notifyListeners()}setTranslations(e,t){let n=this.isLocaleCached(e);n||(this.cachedLocales=[...this.cachedLocales,e],this.translations={...this.translations,...this.flattenTranslation(t,e)}),this.locale=e,this.notifyListeners()}notifyListeners(){for(let e of this.listeners)e()}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}}({en:JSON.parse(N.I),"en-US":JSON.parse(N.I)});tX.defaultLocale="en-US",tX.locale="en-US",tX.enableFallback=!0;var fetchTranslations=async e=>{switch(e){case"ar":case"ar-AR":return(await n.e(4507).then(n.bind(n,24507))).default;case"en":case"en-US":default:return(await n.e(3688).then(n.bind(n,93688))).default;case"es":case"es-419":return(await n.e(2499).then(n.bind(n,32499))).default;case"fr":case"fr-FR":return(await n.e(8989).then(n.bind(n,78989))).default;case"hi":case"hi-IN":return(await n.e(9212).then(n.bind(n,19212))).default;case"id":case"id-ID":return(await n.e(2840).then(n.bind(n,52840))).default;case"ja":case"ja-JP":return(await n.e(6210).then(n.bind(n,96210))).default;case"ko":case"ko-KR":return(await n.e(1961).then(n.bind(n,61961))).default;case"pt":case"pt-BR":return(await n.e(5850).then(n.bind(n,75850))).default;case"ru":case"ru-RU":return(await n.e(6626).then(n.bind(n,46626))).default;case"th":case"th-TH":return(await n.e(5515).then(n.bind(n,25515))).default;case"tr":case"tr-TR":return(await n.e(499).then(n.bind(n,60499))).default;case"ua":case"uk-UA":return(await n.e(3760).then(n.bind(n,3760))).default;case"zh":case"zh-CN":return(await n.e(2896).then(n.bind(n,72896))).default}};async function setLocale(e){let t=tX.isLocaleCached(e);if(t){tX.updateLocale(e);return}let n=await fetchTranslations(e);tX.setTranslations(e,JSON.parse(n))}var detectedBrowserLocale=()=>{var e;if("undefined"!=typeof window&&"undefined"!=typeof navigator){if(null==(e=navigator.languages)?void 0:e.length)return navigator.languages[0];if(navigator.language)return navigator.language}},tY=(0,D.createContext)({i18n:tX}),I18nProvider=({children:e,locale:t})=>{let[n,o]=(0,D.useState)(0),i=(0,D.useMemo)(()=>detectedBrowserLocale(),[]);(0,D.useEffect)(()=>{let e=tX.onChange(()=>{o(e=>e+1)});return e},[]),(0,D.useEffect)(()=>{t&&t!==tX.locale?setLocale(t):!t&&i&&i!==tX.locale&&setLocale(i)},[t,i]);let s=(0,D.useMemo)(()=>({t:(e,t)=>tX.t(e,t),i18n:tX}),[n]);return D.createElement(tY.Provider,{value:s},e)};function isNotNullish(e){return null!=e}var t$={iconBackground:"#96bedc",iconUrl:async()=>(await n.e(1727).then(n.bind(n,1727))).default},t0={iconBackground:"#e84141",iconUrl:async()=>(await n.e(6237).then(n.bind(n,36237))).default},t1={iconBackground:"#0052ff",iconUrl:async()=>(await n.e(1711).then(n.bind(n,41711))).default},t6={iconBackground:"#ebac0e",iconUrl:async()=>(await n.e(4253).then(n.bind(n,84253))).default},t3={iconBackground:"#002D74",iconUrl:async()=>(await n.e(5939).then(n.bind(n,95939))).default},t2={iconBackground:"#484c50",iconUrl:async()=>(await n.e(5488).then(n.bind(n,85488))).default},t7={iconBackground:"#ff5a57",iconUrl:async()=>(await n.e(704).then(n.bind(n,60704))).default},t8={iconBackground:"#9f71ec",iconUrl:async()=>(await n.e(8881).then(n.bind(n,48881))).default},t5={iconBackground:"#f9f7ec",iconUrl:async()=>(await n.e(135).then(n.bind(n,70135))).default},t4={iconBackground:"#f9f7ec",iconUrl:async()=>(await n.e(4583).then(n.bind(n,94583))).default},t9={iconBackground:"#000000",iconUrl:async()=>(await n.e(5119).then(n.bind(n,65119))).default},re=Object.fromEntries(Object.values({arbitrum:{chainId:42161,name:"Arbitrum",...t$},arbitrumGoerli:{chainId:421613,...t$},arbitrumSepolia:{chainId:421614,...t$},avalanche:{chainId:43114,...t0},avalancheFuji:{chainId:43113,...t0},base:{chainId:8453,name:"Base",...t1},baseGoerli:{chainId:84531,...t1},baseSepolia:{chainId:84532,...t1},bsc:{chainId:56,name:"BSC",...t6},bscTestnet:{chainId:97,...t6},cronos:{chainId:25,...t3},cronosTestnet:{chainId:338,...t3},goerli:{chainId:5,...t2},hardhat:{chainId:31337,iconBackground:"#f9f7ec",iconUrl:async()=>(await n.e(6253).then(n.bind(n,26253))).default},holesky:{chainId:17e3,...t2},kovan:{chainId:42,...t2},localhost:{chainId:1337,...t2},mainnet:{chainId:1,name:"Ethereum",...t2},optimism:{chainId:10,name:"Optimism",...t7},optimismGoerli:{chainId:420,...t7},optimismKovan:{chainId:69,...t7},optimismSepolia:{chainId:11155420,...t7},polygon:{chainId:137,name:"Polygon",...t8},polygonMumbai:{chainId:80001,...t8},rinkeby:{chainId:4,...t2},ropsten:{chainId:3,...t2},ronin:{chainId:2020,iconBackground:"#1273EA",iconUrl:async()=>(await n.e(1424).then(n.bind(n,81424))).default},sepolia:{chainId:11155111,...t2},xdc:{chainId:50,name:"XinFin",...t5},xdcTestnet:{chainId:51,...t5},zkSync:{chainId:324,name:"zkSync",...t4},zkSyncTestnet:{chainId:280,...t4},zora:{chainId:7777777,name:"Zora",...t9},zoraSepolia:{chainId:999999999,...t9},zoraTestnet:{chainId:999,...t9}}).filter(isNotNullish).map(({chainId:e,...t})=>[e,t])),provideRainbowKitChains=e=>e.map(e=>{var t,n,o,i;let s=null!=(t=re[e.id])?t:{};return{...e,name:null!=(n=s.name)?n:e.name,iconUrl:null!=(o=e.iconUrl)?o:s.iconUrl,iconBackground:null!=(i=e.iconBackground)?i:s.iconBackground}}),rt=(0,D.createContext)({chains:[]});function RainbowKitChainProvider({children:e,initialChain:t}){let{chains:n}=(0,z.Z)();return D.createElement(rt.Provider,{value:(0,D.useMemo)(()=>({chains:provideRainbowKitChains(n),initialChainId:"number"==typeof t?t:null==t?void 0:t.id}),[n,t])},e)}var useRainbowKitChains=()=>(0,D.useContext)(rt).chains,useInitialChainId=()=>(0,D.useContext)(rt).initialChainId,useRainbowKitChainsById=()=>{let e=useRainbowKitChains();return(0,D.useMemo)(()=>{let t={};for(let n of e)t[n.id]=n;return t},[e])},rr=(0,D.createContext)({showBalance:void 0,setShowBalance:()=>{}});function ShowBalanceProvider({children:e}){let[t,n]=(0,D.useState)();return D.createElement(rr.Provider,{value:{showBalance:t,setShowBalance:n}},e)}var useShowBalance=()=>(0,D.useContext)(rr);function useIsMainnetConfigured(){let e=useRainbowKitChains(),t=ex.R.id,n=e.some(e=>e.id===t);return n}function useMainnetEnsAvatar(e){var t;let n=useIsMainnetConfigured(),{data:o}=function(e={}){let{name:t,query:n={}}=e,o=(0,z.Z)(e),i=useChainId(),s=function(e,t={}){return{async queryFn({queryKey:t}){let{name:n,scopeKey:o,...i}=t[1];if(!n)throw Error("name is required");return function(e,t){let{chainId:n,...o}=t,i=e.getClient({chainId:n}),s=(0,K.s)(i,getEnsAvatar,"getEnsAvatar");return s(o)}(e,{...i,name:n})},queryKey:function(e={}){return["ensAvatar",filterQueryOptions(e)]}(t)}}(o,{...e,chainId:e.chainId??i}),l=!!(t&&(n.enabled??!0));return query_useQuery({...n,...s,enabled:l})}({chainId:ex.R.id,name:e?(t=function(e,t,n){if(!e)return[];init();let o=0;return e.split(".").map(e=>{let i=function(e){let t=[];for(let n=0,o=e.length;n0;)if(95!==e[--t])throw Error("underscore allowed only at start")}(f),!(s.emoji=l>1||o[0].is_emoji)&&f.every(e=>e<128))!function(e){if(e.length>=4&&45==e[2]&&45==e[3])throw Error(`invalid label extension: "${str_from_cps(e.slice(0,4))}"`)}(f),e="ASCII";else{let t=o.flatMap(e=>e.is_emoji?[]:e);if(t.length){if(d.has(f[0]))throw error_placement("leading combining mark");for(let e=1;egroup_has_cp(e,n));if(!e.length){if(m.some(e=>group_has_cp(e,n)))throw error_group_member(t[0],n);throw error_disallowed(n)}if(t=e,1==e.length)break}return t}(n);(function(e,t){for(let n of t)if(!group_has_cp(e,n))throw error_group_member(e,n);if(e.M){let e=decomposed(t).map(unpack_cp);for(let t=1,n=e.length;t4)throw Error(`excessive non-spacing marks: ${bidi_qq(safe_str_from_cps(e.slice(t-1,o)))} (${o-t}/4)`);t=o}}})(i,t),function(e,t){let n;let o=[];for(let e of t){let t=b.get(e);if(1===t)return;if(t){let o=t.M.get(e);if(!(n=n?n.filter(e=>o.has(e)):Array_from(o)).length)return}else o.push(e)}if(n){for(let t of n)if(o.every(e=>group_has_cp(t,e)))throw Error(`whole-script confusable: ${e.N}/${t.N}`)}}(i,n),e=i.N}else e="Emoji"}s.type=e}catch(e){s.error=e}return s})}(e,nfc,filter_fe0f)).map(({input:e,error:n,output:o})=>{if(n){let o=n.message;throw Error(1==t.length?o:`Invalid label ${bidi_qq(safe_str_from_cps(e))}: ${o}`)}return str_from_cps(o)}).join("."):void 0,query:{enabled:n}});return o}function useMainnetEnsName(e){let t=useIsMainnetConfigured(),{data:n}=function(e={}){let{address:t,query:n={}}=e,o=(0,z.Z)(e),i=useChainId(),s=function(e,t={}){return{async queryFn({queryKey:t}){let{address:n,scopeKey:o,...i}=t[1];if(!n)throw Error("address is required");return function(e,t){let{chainId:n,...o}=t,i=e.getClient({chainId:n}),s=(0,K.s)(i,getEnsName,"getEnsName");return s(o)}(e,{...i,address:n})},queryKey:function(e={}){return["ensName",filterQueryOptions(e)]}(t)}}(o,{...e,chainId:e.chainId??i}),l=!!(t&&(n.enabled??!0));return query_useQuery({...n,...s,enabled:l})}({chainId:ex.R.id,address:e,query:{enabled:t}});return n}function dist_useChainId(){var e;let{chain:t}=(0,_.m)();return null!=(e=null==t?void 0:t.id)?e:null}var rn="rk-transactions";function loadData(){return function(e){try{let t=e?JSON.parse(e):{};return"object"==typeof t?t:{}}catch{return{}}}("undefined"!=typeof localStorage?localStorage.getItem(rn):null)}var ra=/^0x([A-Fa-f0-9]{64})$/,ro=(0,D.createContext)(null);function TransactionStoreProvider({children:e}){let t=function(e={}){let t=(0,z.Z)(e);return(0,e5.useSyncExternalStoreWithSelector)(e=>(function(e,t){let{onChange:n}=t;return e.subscribe(()=>getPublicClient(e),n,{equalityFn:(e,t)=>e?.uid===t?.uid})})(t,{onChange:e}),()=>getPublicClient(t,e),()=>getPublicClient(t,e),e=>e,(e,t)=>e?.uid===t?.uid)}(),{address:n}=(0,_.m)(),o=dist_useChainId(),[i]=(0,D.useState)(()=>null!=T?T:T=function({provider:e}){let t=loadData(),n=e,o=new Set,i=new Map;function getTransactions(e,n){var o,i;return null!=(i=null==(o=t[e])?void 0:o[n])?i:[]}function setTransactionStatus(e,t,n,o){updateTransactions(e,t,e=>e.map(e=>e.hash===n?{...e,status:o}:e))}async function waitForPendingTransactions(e,t){await Promise.all(getTransactions(e,t).filter(e=>"pending"===e.status).map(async o=>{let{confirmations:s,hash:l}=o,c=i.get(l);if(c)return await c;let u=n.waitForTransactionReceipt({confirmations:s,hash:l,timeout:3e5}).then(({status:n})=>{i.delete(l),void 0!==n&&setTransactionStatus(e,t,l,0===n||"reverted"===n?"failed":"confirmed")}).catch(()=>{setTransactionStatus(e,t,l,"failed")});return i.set(l,u),await u}))}function updateTransactions(e,n,i){var s,l;(t=loadData())[e]=null!=(s=t[e])?s:{};let c=0,u=i(null!=(l=t[e][n])?l:[]).filter(({status:e})=>"pending"===e||c++<=10);t[e][n]=u.length>0?u:void 0,localStorage.setItem(rn,JSON.stringify(t)),function(){for(let e of o)e()}(),waitForPendingTransactions(e,n)}return{addTransaction:function(e,t,n){let o=function(e){let t=[];return ra.test(e.hash)||t.push("Invalid transaction hash"),"string"!=typeof e.description&&t.push("Transaction must have a description"),void 0!==e.confirmations&&(!Number.isInteger(e.confirmations)||e.confirmations<1)&&t.push("Transaction confirmations must be a positiver integer"),t}(n);if(o.length>0)throw Error(["Unable to add transaction",...o].join("\n"));updateTransactions(e,t,e=>[{...n,status:"pending"},...e.filter(({hash:e})=>e!==n.hash)])},clearTransactions:function(e,t){updateTransactions(e,t,()=>[])},getTransactions,onChange:function(e){return o.add(e),()=>{o.delete(e)}},setProvider:function(e){n=e},waitForPendingTransactions}}({provider:t}));return(0,D.useEffect)(()=>{i.setProvider(t)},[i,t]),(0,D.useEffect)(()=>{n&&o&&i.waitForPendingTransactions(n,o)},[i,n,o]),D.createElement(ro.Provider,{value:i},e)}function useTransactionStore(){let e=(0,D.useContext)(ro);if(!e)throw Error("Transaction hooks must be used within RainbowKitProvider");return e}function useRecentTransactions(){let e=useTransactionStore(),{address:t}=(0,_.m)(),n=dist_useChainId(),[o,i]=(0,D.useState)(()=>e&&t&&n?e.getTransactions(t,n):[]);return(0,D.useEffect)(()=>{if(e&&t&&n)return i(e.getTransactions(t,n)),e.onChange(()=>{i(e.getTransactions(t,n))})},[e,t,n]),o}var resolveThemeVars=e=>"function"==typeof e?e():e;function cssStringFromTheme(e,t={}){return Object.entries(function(e,{extends:t}={}){let n={...assignInlineVars(tz,resolveThemeVars(e))};if(!t)return n;let o=assignInlineVars(tz,resolveThemeVars(t)),i=Object.fromEntries(Object.entries(n).filter(([e,t])=>t!==o[e]));return i}(e,t)).map(([e,t])=>`${e}:${t.replace(/[:;{}]/g,"")};`).join("")}var ri={appName:void 0,disclaimer:void 0,learnMoreUrl:"https://learn.rainbow.me/understanding-web3?utm_source=rainbowkit&utm_campaign=learnmore"},rs=(0,D.createContext)(ri),rl=(0,D.createContext)(!1),useWindowSize=()=>{let[e,t]=(0,D.useState)({height:void 0,width:void 0});return(0,D.useEffect)(()=>{var e;let n;let o=(e=()=>{t({height:window.innerHeight,width:window.innerWidth})},()=>{n&&clearTimeout(n),n=setTimeout(()=>{n=null,e()},500)});return window.addEventListener("resize",o),o(),()=>window.removeEventListener("resize",o)},[]),e},rc=(0,D.createContext)({connector:null,setConnector:()=>{}});function WalletButtonProvider({children:e}){let[t,n]=(0,D.useState)(null);return D.createElement(rc.Provider,{value:(0,D.useMemo)(()=>({connector:t,setConnector:n}),[t])},e)}var ru={COMPACT:"compact",WIDE:"wide"},rd=(0,D.createContext)(ru.WIDE);function ModalSizeProvider({children:e,modalSize:t}){let{width:n}=useWindowSize(),{connector:o}=(0,D.useContext)(rc);return D.createElement(rd.Provider,{value:n&&n<768||o?ru.COMPACT:t},e)}var rp=(0,D.createContext)(!1);function isSafari(){return"undefined"!=typeof navigator&&/Version\/([0-9._]+).*Safari/.test(navigator.userAgent)}function getBrowser(){var e;if("undefined"==typeof navigator)return"Browser";let t=navigator.userAgent.toLowerCase();return(null==(e=navigator.brave)?void 0:e.isBrave)?"Brave":t.indexOf("edg/")>-1?"Edge":t.indexOf("op")>-1?"Opera":"undefined"!=typeof document&&""!==getComputedStyle(document.body).getPropertyValue("--arc-palette-focus")?"Arc":t.indexOf("chrome")>-1?"Chrome":t.indexOf("firefox")>-1?"Firefox":isSafari()?"Safari":"Browser"}var{os:rh}=(0,tE.UAParser)();function getPlatform(){return"Windows"===rh.name?"Windows":"Mac OS"===rh.name?"macOS":["Ubuntu","Mint","Fedora","Debian","Arch","Linux"].includes(rh.name)?"Linux":"Desktop"}var getExtensionDownloadUrl=e=>{var t,n,o,i,s,l,c,u,d,p,f,m;let g=getBrowser();return null!=(m=({Arc:null==(t=null==e?void 0:e.downloadUrls)?void 0:t.chrome,Brave:null==(n=null==e?void 0:e.downloadUrls)?void 0:n.chrome,Chrome:null==(o=null==e?void 0:e.downloadUrls)?void 0:o.chrome,Edge:(null==(i=null==e?void 0:e.downloadUrls)?void 0:i.edge)||(null==(s=null==e?void 0:e.downloadUrls)?void 0:s.chrome),Firefox:null==(l=null==e?void 0:e.downloadUrls)?void 0:l.firefox,Opera:(null==(c=null==e?void 0:e.downloadUrls)?void 0:c.opera)||(null==(u=null==e?void 0:e.downloadUrls)?void 0:u.chrome),Safari:null==(d=null==e?void 0:e.downloadUrls)?void 0:d.safari,Browser:null==(p=null==e?void 0:e.downloadUrls)?void 0:p.browserExtension})[g])?m:null==(f=null==e?void 0:e.downloadUrls)?void 0:f.browserExtension},getMobileDownloadUrl=e=>{var t,n,o,i;let s=isIOS();return null!=(i=s?null==(t=null==e?void 0:e.downloadUrls)?void 0:t.ios:null==(n=null==e?void 0:e.downloadUrls)?void 0:n.android)?i:null==(o=null==e?void 0:e.downloadUrls)?void 0:o.mobile},getDesktopDownloadUrl=e=>{var t,n,o,i,s,l;let c=getPlatform();return null!=(l=({Windows:null==(t=null==e?void 0:e.downloadUrls)?void 0:t.windows,macOS:null==(n=null==e?void 0:e.downloadUrls)?void 0:n.macos,Linux:null==(o=null==e?void 0:e.downloadUrls)?void 0:o.linux,Desktop:null==(i=null==e?void 0:e.downloadUrls)?void 0:i.desktop})[c])?l:null==(s=null==e?void 0:e.downloadUrls)?void 0:s.desktop},isRecentWallet=(e,t)=>e.some(e=>e.id===t),isRainbowKitConnector=e=>!!e.isRainbowKitConnector,isEIP6963Connector=e=>{var t;return!!(!e.isRainbowKitConnector&&(null==(t=e.icon)?void 0:t.startsWith("data:image"))&&e.uid&&e.name)},rainbowKitConnectorWithWalletConnect=(e,t)=>{let n="walletConnect"===e.id&&t;return n?{...e,walletConnectModalConnector:t}:e},connectorsWithRecentWallets=({wallets:e,recentWallets:t})=>[...t,...e.filter(e=>!isRecentWallet(t,e.id))],rf="rk-recent";function getRecentWalletIds(){return"undefined"!=typeof localStorage?function(e){try{let t=e?JSON.parse(e):[];return Array.isArray(t)?t:[]}catch{return[]}}(localStorage.getItem(rf)):[]}function useWalletConnectors(e=!1){var t,n,o,i;let s=useRainbowKitChains(),l=useInitialChainId(),{connectAsync:c,connectors:u}=function(e={}){let{mutation:t}=e,n=(0,z.Z)(e),o=function(e={}){let t=(0,z.Z)(e);return(0,D.useSyncExternalStore)(e=>(function(e,t){let{onChange:n}=t;return e._internal.connectors.subscribe((e,t)=>{n(Object.values(e),t)})})(t,{onChange:e}),()=>getConnectors(t),()=>getConnectors(t))}({config:n}),{mutate:i,mutateAsync:s,...l}=(0,e9.D)({...t,mutationFn:e=>connect(n,e),mutationKey:["connect"]});return(0,D.useEffect)(()=>n.subscribe(({status:e})=>e,(e,t)=>{"connected"===t&&"disconnected"===e&&l.reset()}),[n,l]),{...l,connect:i,connectAsync:s,connectors:o}}(),{setIsWalletConnectModalOpen:d}=useWalletConnectOpenState(),p=u.map(e=>({...e,...e.rkDetails||{}}));async function connectWallet(e){var t,n,o;let i=await e.getChainId(),u=await c({chainId:null!=(o=null!=l?l:null==(t=s.find(({id:e})=>e===i))?void 0:t.id)?o:null==(n=s[0])?void 0:n.id,connector:e});return u&&function(e){var t;let n=(t=[e,...getRecentWalletIds()],[...new Set(t)]);localStorage.setItem(rf,JSON.stringify(n))}(e.id),u}async function connectToWalletConnectModal(e){try{d(!0),await connectWallet(e),d(!1)}catch(t){let e="UserRejectedRequestError"===t.name||"Connection request reset. Please try again."===t.message;if(d(!1),!e)throw t}}let getWalletConnectUri=async(e,t)=>{let n=await e.getProvider();return"coinbase"===e.id?n.qrUrl:new Promise(e=>n.once("display_uri",n=>{e(t(n))}))},f=p.find(e=>"walletConnect"===e.id&&e.isWalletConnectModalConnector),m=p.filter(isEIP6963Connector).map(e=>({...e,groupIndex:0})),g=p.filter(isRainbowKitConnector).filter(e=>!e.isWalletConnectModalConnector).filter(t=>{if(!e)return!0;let n=m.some(e=>e.id===t.rdns);return!n}).map(e=>rainbowKitConnectorWithWalletConnect(e,f)),b=[...m,...g],y=function(e,t){let n={};for(let o of e){let e=t(o);e&&(n[e]=o)}return n}(b,e=>e.id),v=getRecentWalletIds().map(e=>y[e]).filter(Boolean).slice(0,3),w=[],C=connectorsWithRecentWallets({wallets:b,recentWallets:v});for(let e of C){if(!e)continue;let s=isEIP6963Connector(e),l=isRecentWallet(v,e.id);if(s){w.push({...e,iconUrl:e.icon,ready:!0,connect:()=>connectWallet(e),groupName:"Installed",recent:l});continue}w.push({...e,ready:null==(t=e.installed)||t,connect:()=>connectWallet(e),desktopDownloadUrl:getDesktopDownloadUrl(e),extensionDownloadUrl:getExtensionDownloadUrl(e),groupName:e.groupName,mobileDownloadUrl:getMobileDownloadUrl(e),getQrCodeUri:(null==(n=e.qrCode)?void 0:n.getUri)?()=>getWalletConnectUri(e,e.qrCode.getUri):void 0,getDesktopUri:(null==(o=e.desktop)?void 0:o.getUri)?()=>getWalletConnectUri(e,e.desktop.getUri):void 0,getMobileUri:(null==(i=e.mobile)?void 0:i.getUri)?()=>{var t;return getWalletConnectUri(e,null==(t=e.mobile)?void 0:t.getUri)}:void 0,recent:l,showWalletConnectModal:e.walletConnectModalConnector?()=>connectToWalletConnectModal(e.walletConnectModalConnector):void 0})}return w}var src=async()=>(await n.e(794).then(n.bind(n,20794))).default,preloadAssetsIcon=()=>loadImages(src),AssetsIcon=()=>D.createElement(AsyncImage,{background:"#d0d5de",borderRadius:"10",height:"48",src,width:"48"}),src2=async()=>(await n.e(3200).then(n.bind(n,3200))).default,preloadLoginIcon=()=>loadImages(src2),LoginIcon=()=>D.createElement(AsyncImage,{background:"#d0d5de",borderRadius:"10",height:"48",src:src2,width:"48"}),rm=D.forwardRef(({as:e="div",children:t,className:n,color:o,display:i,font:s="body",id:l,size:c="16",style:u,tabIndex:d,textAlign:p="inherit",weight:f="regular",testId:m},g)=>D.createElement(tQ,{as:e,className:n,color:o,display:i,fontFamily:s,fontSize:c,fontWeight:f,id:l,ref:g,style:u,tabIndex:d,textAlign:p,testId:m},t));rm.displayName="Text";var rg={large:{fontSize:"16",paddingX:"24",paddingY:"10"},medium:{fontSize:"14",height:"28",paddingX:"12",paddingY:"4"},small:{fontSize:"14",paddingX:"10",paddingY:"5"}};function ActionButton({disabled:e=!1,href:t,label:n,onClick:o,rel:i="noreferrer noopener",size:s="medium",target:l="_blank",testId:c,type:u="primary"}){let d="primary"===u,p="large"!==s,f=isMobile(),m=e?"actionButtonSecondaryBackground":d?"accentColor":p?"actionButtonSecondaryBackground":null,{fontSize:g,height:b,paddingX:y,paddingY:v}=rg[s];return D.createElement(tQ,{...t?e?{}:{as:"a",href:t,rel:i,target:l}:{as:"button",type:"button"},onClick:e?void 0:o,...f&&p?{}:{borderColor:!f||p||d?"actionButtonBorder":"actionButtonBorderMobile",borderStyle:"solid",borderWidth:"1"},borderRadius:"actionButton",className:!e&&touchableStyles({active:"shrinkSm",hover:"grow"}),display:"block",paddingX:y,paddingY:v,style:{willChange:"transform"},testId:c,textAlign:"center",transition:"transform",...m?{background:m}:{},...b?{height:b}:{}},D.createElement(rm,{color:e?"modalTextSecondary":d?"accentColorForeground":"accentColor",size:g,weight:"bold"},n))}var CloseIcon=()=>isMobile()?D.createElement("svg",{"aria-hidden":!0,fill:"none",height:"11.5",viewBox:"0 0 11.5 11.5",width:"11.5",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Close"),D.createElement("path",{d:"M2.13388 0.366117C1.64573 -0.122039 0.854272 -0.122039 0.366117 0.366117C-0.122039 0.854272 -0.122039 1.64573 0.366117 2.13388L3.98223 5.75L0.366117 9.36612C-0.122039 9.85427 -0.122039 10.6457 0.366117 11.1339C0.854272 11.622 1.64573 11.622 2.13388 11.1339L5.75 7.51777L9.36612 11.1339C9.85427 11.622 10.6457 11.622 11.1339 11.1339C11.622 10.6457 11.622 9.85427 11.1339 9.36612L7.51777 5.75L11.1339 2.13388C11.622 1.64573 11.622 0.854272 11.1339 0.366117C10.6457 -0.122039 9.85427 -0.122039 9.36612 0.366117L5.75 3.98223L2.13388 0.366117Z",fill:"currentColor"})):D.createElement("svg",{"aria-hidden":!0,fill:"none",height:"10",viewBox:"0 0 10 10",width:"10",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Close"),D.createElement("path",{d:"M1.70711 0.292893C1.31658 -0.0976311 0.683417 -0.0976311 0.292893 0.292893C-0.0976311 0.683417 -0.0976311 1.31658 0.292893 1.70711L3.58579 5L0.292893 8.29289C-0.0976311 8.68342 -0.0976311 9.31658 0.292893 9.70711C0.683417 10.0976 1.31658 10.0976 1.70711 9.70711L5 6.41421L8.29289 9.70711C8.68342 10.0976 9.31658 10.0976 9.70711 9.70711C10.0976 9.31658 10.0976 8.68342 9.70711 8.29289L6.41421 5L9.70711 1.70711C10.0976 1.31658 10.0976 0.683417 9.70711 0.292893C9.31658 -0.0976311 8.68342 -0.0976311 8.29289 0.292893L5 3.58579L1.70711 0.292893Z",fill:"currentColor"})),CloseButton=({"aria-label":e="Close",onClose:t})=>{let n=isMobile();return D.createElement(tQ,{alignItems:"center","aria-label":e,as:"button",background:"closeButtonBackground",borderColor:"actionButtonBorder",borderRadius:"full",borderStyle:"solid",borderWidth:n?"0":"1",className:touchableStyles({active:"shrinkSm",hover:"growLg"}),color:"closeButton",display:"flex",height:n?"30":"28",justifyContent:"center",onClick:t,style:{willChange:"transform"},transition:"default",type:"button",width:n?"30":"28"},D.createElement(CloseIcon,null))},signInIcon=async()=>(await n.e(2898).then(n.bind(n,92898))).default;function SignIn({onClose:e,onCloseModal:t}){let{i18n:n}=(0,D.useContext)(tY),[{status:o,...i},s]=D.useState({status:"idle"}),l=function(){var e;let{adapter:t}=null!=(e=(0,D.useContext)(tW))?e:{};if(!t)throw Error("No authentication adapter found");return t}(),c=(0,D.useCallback)(async()=>{try{let e=await l.getNonce();s(t=>({...t,nonce:e}))}catch{s(e=>({...e,errorMessage:n.t("sign_in.message.preparing_error"),status:"idle"}))}},[l,n.t]),u=(0,D.useRef)(!1);D.useEffect(()=>{u.current||(u.current=!0,c())},[c]);let d=isMobile(),{address:p,chain:f}=(0,_.m)(),{signMessageAsync:m}=(0,tx.Q)(),signIn=async()=>{try{let e;let o=null==f?void 0:f.id,{nonce:c}=i;if(!p||!o||!c)return;s(e=>({...e,errorMessage:void 0,status:"signing"}));let u=l.createMessage({address:p,chainId:o,nonce:c});try{e=await m({message:l.getMessageBody({message:u})})}catch(e){if(e instanceof et.ab)return s(e=>({...e,status:"idle"}));return s(e=>({...e,errorMessage:n.t("sign_in.signature.signing_error"),status:"idle"}))}s(e=>({...e,status:"verifying"}));try{let n=await l.verify({message:u,signature:e});if(n){t();return}throw Error()}catch{return s(e=>({...e,errorMessage:n.t("sign_in.signature.verifying_error"),status:"idle"}))}}catch{s({errorMessage:n.t("sign_in.signature.oops_error"),status:"idle"})}};return D.createElement(tQ,{position:"relative"},D.createElement(tQ,{display:"flex",paddingRight:"16",paddingTop:"16",position:"absolute",right:"0"},D.createElement(CloseButton,{onClose:e})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:d?"32":"24",padding:"24",paddingX:"18",style:{paddingTop:d?"60px":"36px"}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:d?"6":"4",style:{maxWidth:d?320:280}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:d?"32":"16"},D.createElement(AsyncImage,{height:40,src:signInIcon,width:40}),D.createElement(rm,{color:"modalText",size:d?"20":"18",textAlign:"center",weight:"heavy"},n.t("sign_in.label"))),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:d?"16":"12"},D.createElement(rm,{color:"modalTextSecondary",size:d?"16":"14",textAlign:"center"},n.t("sign_in.description")),"idle"===o&&i.errorMessage?D.createElement(rm,{color:"error",size:d?"16":"14",textAlign:"center",weight:"bold"},i.errorMessage):null)),D.createElement(tQ,{alignItems:d?void 0:"center",display:"flex",flexDirection:"column",gap:"8",width:"full"},D.createElement(ActionButton,{disabled:!i.nonce||"signing"===o||"verifying"===o,label:i.nonce?"signing"===o?n.t("sign_in.signature.waiting"):"verifying"===o?n.t("sign_in.signature.verifying"):n.t("sign_in.message.send"):n.t("sign_in.message.preparing"),onClick:signIn,size:d?"large":"medium",testId:"auth-message-button"}),d?D.createElement(ActionButton,{label:"Cancel",onClick:e,size:"large",type:"secondary"}):D.createElement(tQ,{as:"button",borderRadius:"full",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",onClick:e,paddingX:"10",paddingY:"5",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"closeButton",size:d?"16":"14",weight:"bold"},n.t("sign_in.message.cancel"))))))}var rb="WALLETCONNECT_DEEPLINK_CHOICE";function clearWalletConnectDeepLink(){localStorage.removeItem(rb)}var ry=(0,D.createContext)(void 0),rv="data-rk",createThemeRootProps=e=>({[rv]:e||""}),createThemeRootSelector=e=>{if(e&&!/^[a-zA-Z0-9_]+$/.test(e))throw Error(`Invalid ID: ${e}`);return e?`[${rv}="${e}"]`:`[${rv}]`},useThemeRootProps=()=>{let e=(0,D.useContext)(ry);return createThemeRootProps(e)},rw=lightTheme();function RainbowKitProvider({appInfo:e,avatar:t,children:n,coolMode:o=!1,id:i,initialChain:s,locale:l,modalSize:c=ru.WIDE,showRecentTransactions:u=!1,theme:d=rw}){if(!function(){let e=useRainbowKitChains(),t=useWalletConnectors(),n="unauthenticated"===useAuthenticationStatus(),o=(0,D.useCallback)(()=>{loadImages(...t.map(e=>e.iconUrl),...e.map(e=>e.iconUrl).filter(isNotNullish)),isMobile()||(preloadAssetsIcon(),preloadLoginIcon()),n&&loadImages(signInIcon)},[t,e,n]);(0,D.useEffect)(()=>{o()},[o])}(),!function(){let e=(0,D.useCallback)(()=>{!function({version:e}){localStorage.setItem("rk-version",e)}({version:"2.0.2"})},[]);(0,D.useEffect)(()=>{e()},[e])}(),useAccountEffect_useAccountEffect({onDisconnect:clearWalletConnectDeepLink}),"function"==typeof d)throw Error('A theme function was provided to the "theme" prop instead of a theme object. You must execute this function to get the resulting theme object.');let p=createThemeRootSelector(i),f={...ri,...e},m=null!=t?t:defaultAvatar;return D.createElement(RainbowKitChainProvider,{initialChain:s},D.createElement(WalletButtonProvider,null,D.createElement(I18nProvider,{locale:l},D.createElement(rl.Provider,{value:o},D.createElement(ModalSizeProvider,{modalSize:c},D.createElement(rp.Provider,{value:u},D.createElement(TransactionStoreProvider,null,D.createElement(tJ.Provider,{value:m},D.createElement(rs.Provider,{value:f},D.createElement(ry.Provider,{value:i},D.createElement(ShowBalanceProvider,null,D.createElement(ModalProvider,null,d?D.createElement("div",{...createThemeRootProps(i)},D.createElement("style",{dangerouslySetInnerHTML:{__html:[`${p}{${cssStringFromTheme("lightMode"in d?d.lightMode:d)}}`,"darkMode"in d?`@media(prefers-color-scheme:dark){${p}{${cssStringFromTheme(d.darkMode,{extends:d.lightMode})}}}`:null].join("")}}),n):n))))))))))))}var moveFocusWithin=(e,t)=>{let n=e.querySelectorAll("button:not(:disabled), a[href]");0!==n.length&&n["end"===t?n.length-1:0].focus()};function FocusTrap(e){let t=(0,D.useRef)(null);return(0,D.useEffect)(()=>{let e=document.activeElement;return()=>{var t;null==(t=e.focus)||t.call(e)}},[]),(0,D.useEffect)(()=>{if(t.current){let e=t.current.querySelector("[data-auto-focus]");e?e.focus():t.current.focus()}},[]),D.createElement(D.Fragment,null,D.createElement("div",{onFocus:(0,D.useCallback)(()=>t.current&&moveFocusWithin(t.current,"end"),[]),tabIndex:0}),D.createElement("div",{ref:t,style:{outline:"none"},tabIndex:-1,...e}),D.createElement("div",{onFocus:(0,D.useCallback)(()=>t.current&&moveFocusWithin(t.current,"start"),[]),tabIndex:0}))}var stopPropagation=e=>e.stopPropagation();function Dialog({children:e,onClose:t,open:n,titleId:o}){(0,D.useEffect)(()=>{let handleEscape=e=>n&&"Escape"===e.key&&t();return document.addEventListener("keydown",handleEscape),()=>document.removeEventListener("keydown",handleEscape)},[n,t]);let[i,s]=(0,D.useState)(!0);(0,D.useEffect)(()=>{s("hidden"!==getComputedStyle(window.document.body).overflow)},[]);let l=(0,D.useCallback)(()=>t(),[t]),c=useThemeRootProps(),u=isMobile();return D.createElement(D.Fragment,null,n?(0,tr.createPortal)(D.createElement(tv,{enabled:i},D.createElement(tQ,{...c},D.createElement(tQ,{...c,alignItems:u?"flex-end":"center","aria-labelledby":o,"aria-modal":!0,className:"_9pm4ki3 ju367v9h ju367vb3 ju367va ju367v2q ju367v8q",onClick:l,position:"fixed",role:"dialog"},D.createElement(FocusTrap,{className:"_9pm4ki5 ju367va ju367v15 ju367v8r",onClick:stopPropagation,role:"document"},e)))),document.body):null)}function DialogContent({bottomSheetOnMobile:e=!1,children:t,marginTop:n,padding:o="16",paddingBottom:i,wide:s=!1}){let l=isMobile(),c=(0,D.useContext)(rd),u=c===ru.COMPACT;return D.createElement(tQ,{marginTop:n},D.createElement(tQ,{className:[s?l?"_1ckjpok2 _1ckjpok1 ju367vb6 ju367vdr ju367vp ju367vt ju367vv ju367vel ju367va ju367v15 ju367v6c ju367v8r":u?"_1ckjpok4 _1ckjpok1 ju367vb6 ju367vdr ju367vp ju367vt ju367vv ju367vel ju367va ju367v15 ju367v6c ju367v8r":"_1ckjpok3 _1ckjpok1 ju367vb6 ju367vdr ju367vp ju367vt ju367vv ju367vel ju367va ju367v15 ju367v6c ju367v8r":"_1ckjpok1 ju367vb6 ju367vdr ju367vp ju367vt ju367vv ju367vel ju367va ju367v15 ju367v6c ju367v8r",l?"_1ckjpok6 ju367vq":null,l&&e?"_1ckjpok7":null].join(" ")},D.createElement(tQ,{padding:o,paddingBottom:null!=i?i:o},t)))}var rC=["k","m","b","t"];function toPrecision(e,t=1){return e.toString().replace(RegExp(`(.+\\.\\d{${t}})\\d+`),"$1").replace(/(\.[1-9]*)0+$/,"$1").replace(/\.$/,"")}function abbreviateETHBalance(e){if(e<1)return toPrecision(e,3);if(e<100)return toPrecision(e,2);if(e<1e4)return new Intl.NumberFormat().format(parseFloat(toPrecision(e,1)));let t=String(e);for(let n=rC.length-1;n>=0;n--){let o=10**((n+1)*3);if(o<=e){t=toPrecision(e=10*e/o/10,1)+rC[n];break}}return t}function formatAddress(e){return e.length<8?e:`${e.substring(0,4)}\u2026${e.substring(e.length-4)}`}function formatENS(e){if(!e)return"";let t=e.split("."),n=t.pop();return t.join(".").length>24?`${t.join(".").substring(0,24)}...`:`${t.join(".")}.${n}`}var CopiedIcon=()=>D.createElement("svg",{fill:"none",height:"13",viewBox:"0 0 13 13",width:"13",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Copied"),D.createElement("path",{d:"M4.94568 12.2646C5.41052 12.2646 5.77283 12.0869 6.01892 11.7109L12.39 1.96973C12.5677 1.69629 12.6429 1.44336 12.6429 1.2041C12.6429 0.561523 12.1644 0.0966797 11.5082 0.0966797C11.057 0.0966797 10.7767 0.260742 10.5033 0.691406L4.9115 9.50977L2.07458 5.98926C1.82166 5.68848 1.54822 5.55176 1.16541 5.55176C0.502319 5.55176 0.0238037 6.02344 0.0238037 6.66602C0.0238037 6.95312 0.112671 7.20605 0.358765 7.48633L3.88611 11.7588C4.18005 12.1074 4.50818 12.2646 4.94568 12.2646Z",fill:"currentColor"})),CopyIcon=()=>D.createElement("svg",{fill:"none",height:"16",viewBox:"0 0 17 16",width:"17",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Copy"),D.createElement("path",{d:"M3.04236 12.3027H4.18396V13.3008C4.18396 14.8525 5.03845 15.7002 6.59705 15.7002H13.6244C15.183 15.7002 16.0375 14.8525 16.0375 13.3008V6.24609C16.0375 4.69434 15.183 3.84668 13.6244 3.84668H12.4828V2.8418C12.4828 1.29688 11.6283 0.442383 10.0697 0.442383H3.04236C1.48376 0.442383 0.629272 1.29004 0.629272 2.8418V9.90332C0.629272 11.4551 1.48376 12.3027 3.04236 12.3027ZM3.23376 10.5391C2.68689 10.5391 2.39294 10.2656 2.39294 9.68457V3.06055C2.39294 2.47949 2.68689 2.21289 3.23376 2.21289H9.8783C10.4252 2.21289 10.7191 2.47949 10.7191 3.06055V3.84668H6.59705C5.03845 3.84668 4.18396 4.69434 4.18396 6.24609V10.5391H3.23376ZM6.78845 13.9365C6.24158 13.9365 5.94763 13.6699 5.94763 13.0889V6.45801C5.94763 5.87695 6.24158 5.61035 6.78845 5.61035H13.433C13.9799 5.61035 14.2738 5.87695 14.2738 6.45801V13.0889C14.2738 13.6699 13.9799 13.9365 13.433 13.9365H6.78845Z",fill:"currentColor"})),DisconnectIcon=()=>D.createElement("svg",{fill:"none",height:"16",viewBox:"0 0 18 16",width:"18",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Disconnect"),D.createElement("path",{d:"M2.67834 15.5908H9.99963C11.5514 15.5908 12.399 14.7432 12.399 13.1777V10.2656H10.6354V12.9863C10.6354 13.5332 10.3688 13.8271 9.78772 13.8271H2.89026C2.3092 13.8271 2.0426 13.5332 2.0426 12.9863V3.15625C2.0426 2.60254 2.3092 2.30859 2.89026 2.30859H9.78772C10.3688 2.30859 10.6354 2.60254 10.6354 3.15625V5.89746H12.399V2.95801C12.399 1.39941 11.5514 0.544922 9.99963 0.544922H2.67834C1.12659 0.544922 0.278931 1.39941 0.278931 2.95801V13.1777C0.278931 14.7432 1.12659 15.5908 2.67834 15.5908ZM7.43616 8.85059H14.0875L15.0924 8.78906L14.566 9.14453L13.6842 9.96484C13.5406 10.1016 13.4586 10.2861 13.4586 10.4844C13.4586 10.8398 13.7321 11.168 14.1217 11.168C14.3199 11.168 14.4635 11.0928 14.6002 10.9561L16.7809 8.68652C16.986 8.48145 17.0543 8.27637 17.0543 8.06445C17.0543 7.85254 16.986 7.64746 16.7809 7.43555L14.6002 5.17285C14.4635 5.03613 14.3199 4.9541 14.1217 4.9541C13.7321 4.9541 13.4586 5.27539 13.4586 5.6377C13.4586 5.83594 13.5406 6.02734 13.6842 6.15723L14.566 6.98438L15.0924 7.33984L14.0875 7.27148H7.43616C7.01917 7.27148 6.65686 7.62012 6.65686 8.06445C6.65686 8.50195 7.01917 8.85059 7.43616 8.85059Z",fill:"currentColor"})),chainToExplorerUrl=e=>{var t,n;return null==(n=null==(t=null==e?void 0:e.blockExplorers)?void 0:t.default)?void 0:n.url},ExternalLinkIcon=()=>D.createElement("svg",{fill:"none",height:"19",viewBox:"0 0 20 19",width:"20",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Link"),D.createElement("path",{d:"M10 18.9443C15.0977 18.9443 19.2812 14.752 19.2812 9.6543C19.2812 4.56543 15.0889 0.373047 10 0.373047C4.90234 0.373047 0.71875 4.56543 0.71875 9.6543C0.71875 14.752 4.91113 18.9443 10 18.9443ZM10 16.6328C6.1416 16.6328 3.03906 13.5215 3.03906 9.6543C3.03906 5.7959 6.13281 2.68457 10 2.68457C13.8584 2.68457 16.9697 5.7959 16.9697 9.6543C16.9785 13.5215 13.8672 16.6328 10 16.6328ZM12.7158 12.1416C13.2432 12.1416 13.5684 11.7549 13.5684 11.1836V7.19336C13.5684 6.44629 13.1377 6.05957 12.417 6.05957H8.40918C7.8291 6.05957 7.45117 6.38477 7.45117 6.91211C7.45117 7.43945 7.8291 7.77344 8.40918 7.77344H9.69238L10.7207 7.63281L9.53418 8.67871L6.73047 11.4912C6.53711 11.6758 6.41406 11.9395 6.41406 12.2031C6.41406 12.7832 6.85352 13.1699 7.39844 13.1699C7.68848 13.1699 7.92578 13.0732 8.1543 12.8623L10.9316 10.0762L11.9775 8.89844L11.8545 9.98828V11.1836C11.8545 11.7725 12.1885 12.1416 12.7158 12.1416Z",fill:"currentColor"})),CancelIcon=()=>D.createElement("svg",{fill:"none",height:"19",viewBox:"0 0 20 19",width:"20",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Cancel"),D.createElement("path",{d:"M10 18.9443C15.0977 18.9443 19.2812 14.752 19.2812 9.6543C19.2812 4.56543 15.0889 0.373047 10 0.373047C4.90234 0.373047 0.71875 4.56543 0.71875 9.6543C0.71875 14.752 4.91113 18.9443 10 18.9443ZM10 16.6328C6.1416 16.6328 3.03906 13.5215 3.03906 9.6543C3.03906 5.7959 6.13281 2.68457 10 2.68457C13.8584 2.68457 16.9697 5.7959 16.9697 9.6543C16.9785 13.5215 13.8672 16.6328 10 16.6328ZM7.29297 13.3018C7.58301 13.3018 7.81152 13.2139 7.99609 13.0205L10 11.0166L12.0127 13.0205C12.1973 13.2051 12.4258 13.3018 12.707 13.3018C13.2432 13.3018 13.6562 12.8887 13.6562 12.3525C13.6562 12.0977 13.5508 11.8691 13.3662 11.6934L11.3535 9.67188L13.375 7.6416C13.5596 7.44824 13.6562 7.22852 13.6562 6.98242C13.6562 6.44629 13.2432 6.0332 12.7158 6.0332C12.4346 6.0332 12.2148 6.12109 12.0215 6.31445L10 8.32715L7.9873 6.32324C7.80273 6.12988 7.58301 6.04199 7.29297 6.04199C6.76562 6.04199 6.35254 6.45508 6.35254 6.99121C6.35254 7.2373 6.44922 7.46582 6.63379 7.6416L8.65527 9.67188L6.63379 11.6934C6.44922 11.8691 6.35254 12.1064 6.35254 12.3525C6.35254 12.8887 6.76562 13.3018 7.29297 13.3018Z",fill:"currentColor"})),SuccessIcon=()=>D.createElement("svg",{fill:"none",height:"20",viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Success"),D.createElement("path",{d:"M10 19.4443C15.0977 19.4443 19.2812 15.252 19.2812 10.1543C19.2812 5.06543 15.0889 0.873047 10 0.873047C4.90234 0.873047 0.71875 5.06543 0.71875 10.1543C0.71875 15.252 4.91113 19.4443 10 19.4443ZM10 17.1328C6.1416 17.1328 3.03906 14.0215 3.03906 10.1543C3.03906 6.2959 6.13281 3.18457 10 3.18457C13.8584 3.18457 16.9697 6.2959 16.9697 10.1543C16.9785 14.0215 13.8672 17.1328 10 17.1328ZM9.07715 14.3379C9.4375 14.3379 9.7627 14.1533 9.97363 13.8369L13.7441 8.00977C13.8848 7.79883 13.9814 7.5791 13.9814 7.36816C13.9814 6.84961 13.5244 6.48926 13.0322 6.48926C12.707 6.48926 12.4258 6.66504 12.2148 7.0166L9.05957 12.0967L7.5918 10.2949C7.37207 10.0225 7.13477 9.9082 6.84473 9.9082C6.33496 9.9082 5.92188 10.3125 5.92188 10.8223C5.92188 11.0684 6.00098 11.2793 6.18555 11.5078L8.1543 13.8545C8.40918 14.1709 8.70801 14.3379 9.07715 14.3379Z",fill:"currentColor"})),getTxStatusIcon=e=>{switch(e){case"pending":default:return SpinnerIcon;case"confirmed":return SuccessIcon;case"failed":return CancelIcon}};function TxItem({tx:e}){let t=isMobile(),n=getTxStatusIcon(e.status),o="failed"===e.status?"error":"accentColor",{chain:i}=(0,_.m)(),s="confirmed"===e.status?"Confirmed":"failed"===e.status?"Failed":"Pending",l=chainToExplorerUrl(i);return D.createElement(D.Fragment,null,D.createElement(tQ,{...l?{as:"a",background:{hover:"profileForeground"},borderRadius:"menuButton",className:touchableStyles({active:"shrink"}),href:`${l}/tx/${e.hash}`,rel:"noreferrer noopener",target:"_blank",transition:"default"}:{},color:"modalText",display:"flex",flexDirection:"row",justifyContent:"space-between",padding:"8",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:t?"16":"14"},D.createElement(tQ,{color:o},D.createElement(n,null)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:t?"3":"1"},D.createElement(tQ,null,D.createElement(rm,{color:"modalText",font:"body",size:t?"16":"14",weight:"bold"},null==e?void 0:e.description)),D.createElement(tQ,null,D.createElement(rm,{color:"pending"===e.status?"modalTextSecondary":o,font:"body",size:"14",weight:t?"medium":"regular"},s)))),l&&D.createElement(tQ,{alignItems:"center",color:"modalTextDim",display:"flex"},D.createElement(ExternalLinkIcon,null))))}function TxList({address:e}){let t=useRecentTransactions(),n=function(){let e=useTransactionStore(),{address:t}=(0,_.m)(),n=dist_useChainId();return(0,D.useCallback)(()=>{if(!t||!n)throw Error("No address or chain ID found");e.clearTransactions(t,n)},[e,t,n])}(),{chain:o}=(0,_.m)(),i=chainToExplorerUrl(o),s=t.slice(0,3),l=s.length>0,c=isMobile(),{appName:u}=(0,D.useContext)(rs),{i18n:d}=(0,D.useContext)(tY);return D.createElement(D.Fragment,null,D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"10",paddingBottom:"2",paddingTop:"16",paddingX:c?"8":"18"},l&&D.createElement(tQ,{paddingBottom:c?"4":"0",paddingTop:"8",paddingX:c?"12":"6"},D.createElement(tQ,{display:"flex",justifyContent:"space-between"},D.createElement(rm,{color:"modalTextSecondary",size:c?"16":"14",weight:"semibold"},d.t("profile.transactions.recent.title")),D.createElement(tQ,{style:{marginBottom:-6,marginLeft:-10,marginRight:-10,marginTop:-6}},D.createElement(tQ,{as:"button",background:{hover:"profileForeground"},borderRadius:"actionButton",className:touchableStyles({active:"shrink"}),onClick:n,paddingX:c?"8":"12",paddingY:c?"4":"5",transition:"default",type:"button"},D.createElement(rm,{color:"modalTextSecondary",size:c?"16":"14",weight:"semibold"},d.t("profile.transactions.clear.label")))))),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},l?s.map(e=>D.createElement(TxItem,{key:e.hash,tx:e})):D.createElement(D.Fragment,null,D.createElement(tQ,{padding:c?"12":"8"},D.createElement(rm,{color:"modalTextDim",size:c?"16":"14",weight:c?"medium":"bold"},u?d.t("profile.transactions.description",{appName:u}):d.t("profile.transactions.description_fallback"))),c&&D.createElement(tQ,{background:"generalBorderDim",height:"1",marginX:"12",marginY:"8"})))),i&&D.createElement(tQ,{paddingBottom:"18",paddingX:c?"8":"18"},D.createElement(tQ,{alignItems:"center",as:"a",background:{hover:"profileForeground"},borderRadius:"menuButton",className:touchableStyles({active:"shrink"}),color:"modalTextDim",display:"flex",flexDirection:"row",href:`${i}/address/${e}`,justifyContent:"space-between",paddingX:"8",paddingY:"12",rel:"noreferrer noopener",style:{willChange:"transform"},target:"_blank",transition:"default",width:"full",...c?{paddingLeft:"12"}:{}},D.createElement(rm,{color:"modalText",font:"body",size:c?"16":"14",weight:c?"semibold":"bold"},d.t("profile.explorer.label")),D.createElement(ExternalLinkIcon,null))))}function ProfileDetailsAction({action:e,icon:t,label:n,testId:o,url:i}){let s=isMobile();return D.createElement(tQ,{...i?{as:"a",href:i,rel:"noreferrer noopener",target:"_blank"}:{as:"button",type:"button"},background:{base:"profileAction",...s?{}:{hover:"profileActionHover"}},borderRadius:"menuButton",boxShadow:"profileDetailsAction",className:touchableStyles({active:"shrinkSm",hover:s?void 0:"grow"}),display:"flex",onClick:e,padding:s?"6":"8",style:{willChange:"transform"},testId:o,transition:"default",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"1",justifyContent:"center",paddingTop:"2",width:"full"},D.createElement(tQ,{color:"modalText",height:"max"},t),D.createElement(tQ,null,D.createElement(rm,{color:"modalText",size:s?"12":"13",weight:"semibold"},n))))}function ProfileDetails({address:e,ensAvatar:t,ensName:n,onClose:o,onDisconnect:i}){let s=(0,D.useContext)(rp),{data:l}=useBalance({address:e}),[c,u]=(0,D.useState)(!1),d=(0,D.useCallback)(()=>{e&&(navigator.clipboard.writeText(e),u(!0))},[e]);if((0,D.useEffect)(()=>{if(c){let e=setTimeout(()=>{u(!1)},1500);return()=>clearTimeout(e)}},[c]),!e)return null;let p=n?formatENS(n):formatAddress(e),f=null==l?void 0:l.formatted,m=f?abbreviateETHBalance(parseFloat(f)):void 0,g="rk_profile_title",b=isMobile(),{i18n:y}=(0,D.useContext)(tY);return D.createElement(D.Fragment,null,D.createElement(tQ,{display:"flex",flexDirection:"column"},D.createElement(tQ,{background:"profileForeground",padding:"16"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:b?"16":"12",justifyContent:"center",margin:"8",style:{textAlign:"center"}},D.createElement(tQ,{style:{position:"absolute",right:16,top:16,willChange:"transform"}},D.createElement(CloseButton,{onClose:o}))," ",D.createElement(tQ,{marginTop:b?"24":"0"},D.createElement(Avatar,{address:e,imageUrl:t,size:b?82:74})),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:b?"4":"0",textAlign:"center"},D.createElement(tQ,{textAlign:"center"},D.createElement(rm,{as:"h1",color:"modalText",id:g,size:b?"20":"18",weight:"heavy"},p)),!!l&&D.createElement(tQ,{textAlign:"center"},D.createElement(rm,{as:"h1",color:"modalTextSecondary",id:g,size:b?"16":"14",weight:"semibold"},m," ",l.symbol)))),D.createElement(tQ,{display:"flex",flexDirection:"row",gap:"8",margin:"2",marginTop:"16"},D.createElement(ProfileDetailsAction,{action:d,icon:c?D.createElement(CopiedIcon,null):D.createElement(CopyIcon,null),label:c?y.t("profile.copy_address.copied"):y.t("profile.copy_address.label")}),D.createElement(ProfileDetailsAction,{action:i,icon:D.createElement(DisconnectIcon,null),label:y.t("profile.disconnect.label"),testId:"disconnect-button"}))),s&&D.createElement(D.Fragment,null,D.createElement(tQ,{background:"generalBorder",height:"1",marginTop:"-1"}),D.createElement(tQ,null,D.createElement(TxList,{address:e})))))}function AccountModal({onClose:e,open:t}){let{address:n}=(0,_.m)(),o=useMainnetEnsName(n),i=useMainnetEnsAvatar(o),{disconnect:s}=useDisconnect();return n?D.createElement(D.Fragment,null,n&&D.createElement(Dialog,{onClose:e,open:t,titleId:"rk_account_modal_title"},D.createElement(DialogContent,{bottomSheetOnMobile:!0,padding:"0"},D.createElement(ProfileDetails,{address:n,ensAvatar:i,ensName:o,onClose:e,onDisconnect:s})))):null}var DisconnectSqIcon=({size:e})=>D.createElement("svg",{fill:"none",height:e,viewBox:"0 0 28 28",width:e,xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Disconnect"),D.createElement("path",{d:"M6.742 22.195h8.367c1.774 0 2.743-.968 2.743-2.758V16.11h-2.016v3.11c0 .625-.305.96-.969.96H6.984c-.664 0-.968-.335-.968-.96V7.984c0-.632.304-.968.968-.968h7.883c.664 0 .969.336.969.968v3.133h2.016v-3.36c0-1.78-.97-2.757-2.743-2.757H6.742C4.97 5 4 5.977 4 7.758v11.68c0 1.789.969 2.757 2.742 2.757Zm5.438-7.703h7.601l1.149-.07-.602.406-1.008.938a.816.816 0 0 0-.258.593c0 .407.313.782.758.782.227 0 .39-.086.547-.243l2.492-2.593c.235-.235.313-.47.313-.711 0-.242-.078-.477-.313-.719l-2.492-2.586c-.156-.156-.32-.25-.547-.25-.445 0-.758.367-.758.781 0 .227.094.446.258.594l1.008.945.602.407-1.149-.079H12.18a.904.904 0 0 0 0 1.805Z",fill:"currentColor"})),rE=D.forwardRef(({children:e,currentlySelected:t=!1,onClick:n,testId:o,...i},s)=>{let l=isMobile();return D.createElement(tQ,{as:"button",borderRadius:"menuButton",disabled:t,display:"flex",onClick:n,ref:s,testId:o,type:"button"},D.createElement(tQ,{borderRadius:"menuButton",className:[l?"v9horb0":void 0,!t&&touchableStyles({active:"shrink"})],padding:l?"8":"6",transition:"default",width:"full",...t?{background:"accentColor",borderColor:"selectedOptionBorder",borderStyle:"solid",borderWidth:"1",boxShadow:"selectedOption",color:"accentColorForeground"}:{background:{hover:"menuItemBackground"},color:"modalText",transition:"default"},...i},e))});rE.displayName="MenuButton";var Chain_default=({chainId:e,currentChainId:t,switchChain:n,chainIconSize:o,isLoading:i,src:s,name:l,iconBackground:c,idx:u})=>{let d=isMobile(),{i18n:p}=(0,D.useContext)(tY),f=useRainbowKitChains(),m=t===e;return D.createElement(D.Fragment,null,D.createElement(rE,{currentlySelected:m,onClick:m?void 0:()=>n({chainId:e}),testId:`chain-option-${e}`},D.createElement(tQ,{fontFamily:"body",fontSize:"16",fontWeight:"bold"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",justifyContent:"space-between"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"4",height:o},s&&D.createElement(tQ,{height:"full",marginRight:"8"},D.createElement(AsyncImage,{alt:l,background:c,borderRadius:"full",height:o,src:s,width:o,testId:`chain-option-${e}-icon`})),D.createElement("div",null,l)),m&&D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",marginRight:"6"},D.createElement(rm,{color:"accentColorForeground",size:"14",weight:"medium"},p.t("chains.connected")),D.createElement(tQ,{background:"connectionIndicator",borderColor:"selectedOptionBorder",borderRadius:"full",borderStyle:"solid",borderWidth:"1",height:"8",marginLeft:"8",width:"8"})),i&&D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",marginRight:"6"},D.createElement(rm,{color:"modalText",size:"14",weight:"medium"},p.t("chains.confirm")),D.createElement(tQ,{background:"standby",borderRadius:"full",height:"8",marginLeft:"8",width:"8"}))))),d&&uswitchChain(n,e),mutationKey:["switchChain"]});return{...s,chains:function(e={}){let t=(0,z.Z)(e);return(0,D.useSyncExternalStore)(e=>(function(e,t){let{onChange:n}=t;return e._internal.chains.subscribe((e,t)=>{n(e,t)})})(t,{onChange:e}),()=>getChains(t),()=>getChains(t))}({config:n}),switchChain:o,switchChainAsync:i}}({mutation:{onMutate:({chainId:e})=>{s(e)},onSuccess:()=>{i&&s(null)},onError:()=>{i&&s(null)},onSettled:()=>{e()}}}),{i18n:c}=(0,D.useContext)(tY),{disconnect:u}=useDisconnect(),d="rk_chain_modal_title",p=isMobile(),f=o.some(e=>e.id===n),m=p?"36":"28",g=useRainbowKitChains();return n?D.createElement(Dialog,{onClose:e,open:t,titleId:d},D.createElement(DialogContent,{bottomSheetOnMobile:!0,paddingBottom:"0"},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"14"},D.createElement(tQ,{display:"flex",flexDirection:"row",justifyContent:"space-between"},p&&D.createElement(tQ,{width:"30"}),D.createElement(tQ,{paddingBottom:"0",paddingLeft:"8",paddingTop:"4"},D.createElement(rm,{as:"h1",color:"modalText",id:d,size:p?"20":"18",weight:"heavy"},c.t("chains.title"))),D.createElement(CloseButton,{onClose:e})),!f&&D.createElement(tQ,{marginX:"8",textAlign:p?"center":"left"},D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},c.t("chains.wrong_network"))),D.createElement(tQ,{className:p?"_18dqw9x1":"_18dqw9x0",display:"flex",flexDirection:"column",gap:"4",padding:"2",paddingBottom:"16"},g.map(({iconBackground:e,iconUrl:t,id:o,name:s},c)=>D.createElement(Chain_default,{key:o,chainId:o,currentChainId:n,switchChain:l,chainIconSize:m,isLoading:i===o,src:t,name:s,iconBackground:e,idx:c})),!f&&D.createElement(D.Fragment,null,D.createElement(tQ,{background:"generalBorderDim",height:"1",marginX:"8"}),D.createElement(rE,{onClick:()=>u(),testId:"chain-option-disconnect"},D.createElement(tQ,{color:"error",fontFamily:"body",fontSize:"16",fontWeight:"bold"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",justifyContent:"space-between"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"4",height:m},D.createElement(tQ,{alignItems:"center",color:"error",height:m,justifyContent:"center",marginRight:"8"},D.createElement(DisconnectSqIcon,{size:Number(m)})),D.createElement("div",null,c.t("chains.disconnect"))))))))))):null}var DisclaimerLink=({children:e,href:t})=>D.createElement(tQ,{as:"a",color:"accentColor",href:t,rel:"noreferrer",target:"_blank"},e),DisclaimerText=({children:e})=>D.createElement(rm,{color:"modalTextSecondary",size:"12",weight:"medium"},e);function ConnectModalIntro({compactModeEnabled:e=!1,getWallet:t}){let{disclaimer:n,learnMoreUrl:o}=(0,D.useContext)(rs),{i18n:i}=(0,D.useContext)(tY);return D.createElement(D.Fragment,null,D.createElement(tQ,{alignItems:"center",color:"accentColor",display:"flex",flexDirection:"column",height:"full",justifyContent:"space-around"},D.createElement(tQ,{marginBottom:"10"},!e&&D.createElement(rm,{color:"modalText",size:"18",weight:"heavy"},i.t("intro.title"))),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"32",justifyContent:"center",marginY:"20",style:{maxWidth:312}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16"},D.createElement(tQ,{borderRadius:"6",height:"48",minWidth:"48",width:"48"},D.createElement(AssetsIcon,null)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},i.t("intro.digital_asset.title")),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},i.t("intro.digital_asset.description")))),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16"},D.createElement(tQ,{borderRadius:"6",height:"48",minWidth:"48",width:"48"},D.createElement(LoginIcon,null)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},i.t("intro.login.title")),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},i.t("intro.login.description"))))),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"12",justifyContent:"center",margin:"10"},D.createElement(ActionButton,{label:i.t("intro.get.label"),onClick:t}),D.createElement(tQ,{as:"a",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",href:o,paddingX:"12",paddingY:"4",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},i.t("intro.learn_more.label")))),n&&!e&&D.createElement(tQ,{marginBottom:"8",marginTop:"12",textAlign:"center"},D.createElement(n,{Link:DisclaimerLink,Text:DisclaimerText}))))}var BackIcon=()=>D.createElement("svg",{fill:"none",height:"17",viewBox:"0 0 11 17",width:"11",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Back"),D.createElement("path",{d:"M0.99707 8.6543C0.99707 9.08496 1.15527 9.44531 1.51562 9.79688L8.16016 16.3096C8.43262 16.5732 8.74902 16.7051 9.13574 16.7051C9.90918 16.7051 10.5508 16.0811 10.5508 15.3076C10.5508 14.9121 10.3838 14.5605 10.0938 14.2705L4.30176 8.64551L10.0938 3.0293C10.3838 2.74805 10.5508 2.3877 10.5508 2.00098C10.5508 1.23633 9.90918 0.603516 9.13574 0.603516C8.74902 0.603516 8.43262 0.735352 8.16016 0.999023L1.51562 7.51172C1.15527 7.85449 1.00586 8.21484 0.99707 8.6543Z",fill:"currentColor"})),InfoIcon=()=>D.createElement("svg",{fill:"none",height:"12",viewBox:"0 0 8 12",width:"8",xmlns:"http://www.w3.org/2000/svg"},D.createElement("title",null,"Info"),D.createElement("path",{d:"M3.64258 7.99609C4.19336 7.99609 4.5625 7.73828 4.68555 7.24609C4.69141 7.21094 4.70312 7.16406 4.70898 7.13477C4.80859 6.60742 5.05469 6.35547 6.04492 5.76367C7.14648 5.10156 7.67969 4.3457 7.67969 3.24414C7.67969 1.39844 6.17383 0.255859 3.95898 0.255859C2.32422 0.255859 1.05859 0.894531 0.548828 1.86719C0.396484 2.14844 0.320312 2.44727 0.320312 2.74023C0.314453 3.37305 0.742188 3.79492 1.42188 3.79492C1.91406 3.79492 2.33594 3.54883 2.53516 3.11523C2.78711 2.47656 3.23242 2.21289 3.83594 2.21289C4.55664 2.21289 5.10742 2.65234 5.10742 3.29102C5.10742 3.9707 4.7793 4.29883 3.81836 4.87891C3.02148 5.36523 2.50586 5.92773 2.50586 6.76562V6.90039C2.50586 7.55664 2.96289 7.99609 3.64258 7.99609ZM3.67188 11.4473C4.42773 11.4473 5.04297 10.8672 5.04297 10.1406C5.04297 9.41406 4.42773 8.83984 3.67188 8.83984C2.91602 8.83984 2.30664 9.41406 2.30664 10.1406C2.30664 10.8672 2.91602 11.4473 3.67188 11.4473Z",fill:"currentColor"})),InfoButton=({"aria-label":e="Info",onClick:t})=>{let n=isMobile();return D.createElement(tQ,{alignItems:"center","aria-label":e,as:"button",background:"closeButtonBackground",borderColor:"actionButtonBorder",borderRadius:"full",borderStyle:"solid",borderWidth:n?"0":"1",className:touchableStyles({active:"shrinkSm",hover:"growLg"}),color:"closeButton",display:"flex",height:n?"30":"28",justifyContent:"center",onClick:t,style:{willChange:"transform"},transition:"default",type:"button",width:n?"30":"28"},D.createElement(InfoIcon,null))},useCoolMode=e=>{let t=(0,D.useRef)(null),n=(0,D.useContext)(rl),o=useAsyncImage(e);return(0,D.useEffect)(()=>{if(n&&t.current&&o)return function(e,t){let n;rx++;let o=[15,20,25,35,45],i=[],s=!1,l=0,c=0,u=getContainer();!function loop(){s&&i.length<35&&function(){let e=o[Math.floor(Math.random()*o.length)],n=360*Math.random(),s=c-e/2,d=l-e/2,p=document.createElement("div");p.innerHTML=``,p.setAttribute("style",`position:absolute;will-change:transform;top:${s}px;left:${d}px;transform:rotate(${n}deg)`),u.appendChild(p),i.push({direction:.5>=Math.random()?-1:1,element:p,left:d,size:e,speedHorz:10*Math.random(),speedUp:25*Math.random(),spinSpeed:35*Math.random()*(.5>=Math.random()?-1:1),spinVal:n,top:s})}(),function(){for(let e of i)e.left=e.left-e.speedHorz*e.direction,e.top=e.top-e.speedUp,e.speedUp=Math.min(e.size,e.speedUp-1),e.spinVal=e.spinVal+e.spinSpeed,e.top>=Math.max(window.innerHeight,document.body.clientHeight)+e.size&&(i=i.filter(t=>t!==e),e.element.remove()),e.element.setAttribute("style",`position:absolute;will-change:transform;top:${e.top}px;left:${e.left}px;transform:rotate(${e.spinVal}deg)`)}(),n=requestAnimationFrame(loop)}();let d="ontouchstart"in window||navigator.msMaxTouchPoints,p=d?"touchstart":"mousedown",f=d?"touchend":"mouseup",m=d?"touchmove":"mousemove",updateMousePosition=e=>{var t,n;"touches"in e?(l=null==(t=e.touches)?void 0:t[0].clientX,c=null==(n=e.touches)?void 0:n[0].clientY):(l=e.clientX,c=e.clientY)},tapHandler=e=>{updateMousePosition(e),s=!0},disableAutoAddParticle=()=>{s=!1};return e.addEventListener(m,updateMousePosition,{passive:!1}),e.addEventListener(p,tapHandler),e.addEventListener(f,disableAutoAddParticle),e.addEventListener("mouseleave",disableAutoAddParticle),()=>{e.removeEventListener(m,updateMousePosition),e.removeEventListener(p,tapHandler),e.removeEventListener(f,disableAutoAddParticle),e.removeEventListener("mouseleave",disableAutoAddParticle);let t=setInterval(()=>{n&&0===i.length&&(cancelAnimationFrame(n),clearInterval(t),0==--rx&&u.remove())},500)}}(t.current,o)},[n,o]),t},getContainer=()=>{let e="_rk_coolMode",t=document.getElementById(e);if(t)return t;let n=document.createElement("div");return n.setAttribute("id",e),n.setAttribute("style","overflow:hidden;position:fixed;height:100%;top:0;left:0;right:0;bottom:0;pointer-events:none;z-index:2147483647"),document.body.appendChild(n),n},rx=0,ModalSelection=({as:e="button",currentlySelected:t=!1,iconBackground:n,iconUrl:o,name:i,onClick:s,ready:l,recent:c,testId:u,isRainbowKitConnector:d,...p})=>{let f=useCoolMode(o),[m,g]=(0,D.useState)(!1),{i18n:b}=(0,D.useContext)(tY);return D.createElement(tQ,{display:"flex",flexDirection:"column",onMouseEnter:()=>g(!0),onMouseLeave:()=>g(!1),ref:f},D.createElement(tQ,{as:e,borderRadius:"menuButton",borderStyle:"solid",borderWidth:"1",className:t?void 0:["g5kl0l0",touchableStyles({active:"shrink"})],disabled:t,onClick:s,padding:"5",style:{willChange:"transform"},testId:u,transition:"default",width:"full",...t?{background:"accentColor",borderColor:"selectedOptionBorder",boxShadow:"selectedWallet"}:{background:{hover:"menuItemBackground"}},...p},D.createElement(tQ,{color:t?"accentColorForeground":"modalText",disabled:!l,fontFamily:"body",fontSize:"16",fontWeight:"bold",transition:"default"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"12"},D.createElement(AsyncImage,{background:n,...!m&&d?{borderColor:"actionButtonBorder"}:{},useAsImage:!d,borderRadius:"6",height:"28",src:o,width:"28"}),D.createElement(tQ,null,D.createElement(tQ,{style:{marginTop:c?-2:void 0},maxWidth:"200"},i),c&&D.createElement(rm,{color:t?"accentColorForeground":"accentColor",size:"12",style:{lineHeight:1,marginTop:-1},weight:"medium"},b.t("connect.recent")))))))};ModalSelection.displayName="ModalSelection";var rA="rk-latest-id",convertHexToRGBA=(e,t=1)=>{let n=e.replace("#","");3===n.length&&(n=`${n[0]}${n[0]}${n[1]}${n[1]}${n[2]}${n[2]}`);let o=parseInt(n.substring(0,2),16),i=parseInt(n.substring(2,4),16),s=parseInt(n.substring(4,6),16);return t>1&&t<=100&&(t/=100),`rgba(${o},${i},${s},${t})`},getGradientRGBAs=e=>e?[convertHexToRGBA(e,.2),convertHexToRGBA(e,.14),convertHexToRGBA(e,.1)]:null,isHexString=e=>/^#([0-9a-f]{3}){1,2}$/i.test(e),src3=async()=>(await n.e(9600).then(n.bind(n,99600))).default,preloadConnectIcon=()=>loadImages(src3),ConnectIcon=()=>D.createElement(AsyncImage,{background:"#515a70",borderColor:"generalBorder",borderRadius:"10",height:"48",src:src3,width:"48"}),src4=async()=>(await n.e(8137).then(n.bind(n,68137))).default,preloadCreateIcon=()=>loadImages(src4),CreateIcon=()=>D.createElement(AsyncImage,{background:"#e3a5e8",borderColor:"generalBorder",borderRadius:"10",height:"48",src:src4,width:"48"}),src5=async()=>(await n.e(1748).then(n.bind(n,31748))).default,preloadRefreshIcon=()=>loadImages(src5),RefreshIcon=()=>D.createElement(AsyncImage,{background:"#515a70",borderColor:"generalBorder",borderRadius:"10",height:"48",src:src5,width:"48"}),src6=async()=>(await n.e(5806).then(n.bind(n,75806))).default,preloadScanIcon=()=>loadImages(src6),ScanIcon=()=>D.createElement(AsyncImage,{background:"#515a70",borderColor:"generalBorder",borderRadius:"10",height:"48",src:src6,width:"48"}),generateMatrix=(e,t)=>{let n=Array.prototype.slice.call(tB.create(e,{errorCorrectionLevel:t}).modules.data,0),o=Math.sqrt(n.length);return n.reduce((e,t,n)=>(n%o==0?e.push([t]):e[e.length-1].push(t))&&e,[])};function QRCode({ecl:e="M",logoBackground:t,logoMargin:n=10,logoSize:o=50,logoUrl:i,size:s=200,uri:l}){let c=s-2*parseInt("20",10),u=(0,D.useMemo)(()=>{let t=[],n=generateMatrix(l,e),i=c/n.length;[{x:0,y:0},{x:1,y:0},{x:0,y:1}].forEach(({x:e,y:o})=>{let s=(n.length-7)*i*e,l=(n.length-7)*i*o;for(let n=0;n<3;n++)t.push(D.createElement("rect",{fill:n%2!=0?"white":"black",height:i*(7-2*n),key:`${n}-${e}-${o}`,rx:-((n-2)*5)+(0===n?2:0),ry:-((n-2)*5)+(0===n?2:0),width:i*(7-2*n),x:s+i*n,y:l+i*n}))});let s=Math.floor((o+25)/i),u=n.length/2-s/2,d=n.length/2+s/2-1;return n.forEach((e,o)=>{e.forEach((e,s)=>{!n[o][s]||o<7&&s<7||o>n.length-8&&s<7||o<7&&s>n.length-8||o>u&&ou&&s{let e=getBrowser();switch(e){case"Arc":return(await n.e(6328).then(n.bind(n,76328))).default;case"Brave":return(await n.e(6551).then(n.bind(n,86551))).default;case"Chrome":return(await n.e(7682).then(n.bind(n,57682))).default;case"Edge":return(await n.e(934).then(n.bind(n,60934))).default;case"Firefox":return(await n.e(9223).then(n.bind(n,99223))).default;case"Opera":return(await n.e(9941).then(n.bind(n,89941))).default;case"Safari":return(await n.e(2604).then(n.bind(n,62604))).default;default:return(await n.e(2746).then(n.bind(n,92746))).default}},preloadBrowserIcon=()=>loadImages(getBrowserSrc),getPlatformSrc=async()=>{let e=getPlatform();switch(e){case"Windows":return(await n.e(5710).then(n.bind(n,35710))).default;case"macOS":return(await n.e(8906).then(n.bind(n,8906))).default;default:return(await n.e(8366).then(n.bind(n,78366))).default}},preloadPlatformIcon=()=>loadImages(getPlatformSrc);function GetDetail({getWalletDownload:e,compactModeEnabled:t}){let n=useWalletConnectors().filter(e=>e.isRainbowKitConnector),o=n.splice(0,5),{i18n:i}=(0,D.useContext)(tY);return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",marginTop:"18",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"28",height:"full",width:"full"},null==o?void 0:o.filter(e=>{var t;return e.extensionDownloadUrl||e.desktopDownloadUrl||e.qrCode&&(null==(t=e.downloadUrls)?void 0:t.qrCode)}).map(t=>{let{downloadUrls:n,iconBackground:o,iconUrl:s,id:l,name:c,qrCode:u}=t,d=(null==n?void 0:n.qrCode)&&u,p=!!t.extensionDownloadUrl,f=(null==n?void 0:n.qrCode)&&p,m=(null==n?void 0:n.qrCode)&&!!t.desktopDownloadUrl;return D.createElement(tQ,{alignItems:"center",display:"flex",gap:"16",justifyContent:"space-between",key:t.id,width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16"},D.createElement(AsyncImage,{background:o,borderColor:"actionButtonBorder",borderRadius:"10",height:"48",src:s,width:"48"}),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"2"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},c),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},f?i.t("get.mobile_and_extension.description"):m?i.t("get.mobile_and_desktop.description"):d?i.t("get.mobile.description"):p?i.t("get.extension.description"):null))),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(ActionButton,{label:i.t("get.action.label"),onClick:()=>e(l),type:"secondary"})))})),D.createElement(tQ,{alignItems:"center",borderRadius:"10",display:"flex",flexDirection:"column",gap:"8",justifyContent:"space-between",marginBottom:"4",paddingY:"8",style:{maxWidth:275,textAlign:"center"}},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},i.t("get.looking_for.title")),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},t?i.t("get.looking_for.desktop.compact_description"):i.t("get.looking_for.desktop.wide_description"))))}function ConnectDetail({changeWalletStep:e,compactModeEnabled:t,connectionError:n,onClose:o,qrCodeUri:i,reconnect:s,wallet:l}){let{downloadUrls:c,iconBackground:u,iconUrl:d,name:p,qrCode:f,ready:m,showWalletConnectModal:g,getDesktopUri:b}=l,y=!!b,v=isSafari(),{i18n:w}=(0,D.useContext)(tY),C=!!l.extensionDownloadUrl,E=(null==c?void 0:c.qrCode)&&C,x=(null==c?void 0:c.qrCode)&&!!l.desktopDownloadUrl,A=f&&i,onDesktopUri=async()=>{let e=await (null==b?void 0:b());window.open(e,v?"_blank":"_self")},k=g?{description:t?w.t("connect.walletconnect.description.compact"):w.t("connect.walletconnect.description.full"),label:w.t("connect.walletconnect.open.label"),onClick:()=>{o(),g()}}:A?{description:w.t("connect.secondary_action.get.description",{wallet:p}),label:w.t("connect.secondary_action.get.label"),onClick:()=>e(E||x?"DOWNLOAD_OPTIONS":"DOWNLOAD")}:null,{width:B}=useWindowSize();return(0,D.useEffect)(()=>{preloadBrowserIcon(),preloadPlatformIcon()},[]),D.createElement(tQ,{display:"flex",flexDirection:"column",height:"full",width:"full"},A?D.createElement(tQ,{alignItems:"center",display:"flex",height:"full",justifyContent:"center"},D.createElement(QRCode,{logoBackground:u,logoSize:t?60:72,logoUrl:d,size:t?318:B&&B<768?Math.max(280,Math.min(B-308,382)):382,uri:i})):D.createElement(tQ,{alignItems:"center",display:"flex",justifyContent:"center",style:{flexGrow:1}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"8"},D.createElement(tQ,{borderRadius:"10",height:"44",overflow:"hidden"},D.createElement(AsyncImage,{useAsImage:!l.isRainbowKitConnector,height:"44",src:d,width:"44"})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"4",paddingX:"32",style:{textAlign:"center"}},D.createElement(rm,{color:"modalText",size:"18",weight:"bold"},m?w.t("connect.status.opening",{wallet:p}):C?w.t("connect.status.not_installed",{wallet:p}):w.t("connect.status.not_available",{wallet:p})),!m&&C?D.createElement(tQ,{paddingTop:"20"},D.createElement(ActionButton,{href:l.extensionDownloadUrl,label:w.t("connect.secondary_action.install.label"),type:"secondary"})):null,m&&!A&&D.createElement(D.Fragment,null,D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",justifyContent:"center"},D.createElement(rm,{color:"modalTextSecondary",size:"14",textAlign:"center",weight:"medium"},w.t("connect.status.confirm"))),D.createElement(tQ,{alignItems:"center",color:"modalText",display:"flex",flexDirection:"row",height:"32",marginTop:"8"},n?D.createElement(ActionButton,{label:w.t("connect.secondary_action.retry.label"),onClick:async()=>{y&&onDesktopUri(),s(l)}}):D.createElement(tQ,{color:"modalTextSecondary"},D.createElement(SpinnerIcon,null))))))),D.createElement(tQ,{alignItems:"center",borderRadius:"10",display:"flex",flexDirection:"row",gap:"8",height:"28",justifyContent:"space-between",marginTop:"12"},m&&k&&D.createElement(D.Fragment,null,D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},k.description),D.createElement(ActionButton,{label:k.label,onClick:k.onClick,type:"secondary"}))))}var DownloadOptionsBox=({actionLabel:e,description:t,iconAccent:n,iconBackground:o,iconUrl:i,isCompact:s,onAction:l,title:c,url:u,variant:d})=>{let p="browser"===d,f=!p&&n&&getGradientRGBAs(n);return D.createElement(tQ,{alignItems:"center",borderRadius:"13",display:"flex",justifyContent:"center",overflow:"hidden",paddingX:s?"18":"44",position:"relative",style:{flex:1,isolation:"isolate"},width:"full"},D.createElement(tQ,{borderColor:"actionButtonBorder",borderRadius:"13",borderStyle:"solid",borderWidth:"1",style:{bottom:"0",left:"0",position:"absolute",right:"0",top:"0",zIndex:1}}),p&&D.createElement(tQ,{background:"downloadTopCardBackground",height:"full",position:"absolute",style:{zIndex:0},width:"full"},D.createElement(tQ,{display:"flex",flexDirection:"row",justifyContent:"space-between",style:{bottom:"0",filter:"blur(20px)",left:"0",position:"absolute",right:"0",top:"0",transform:"translate3d(0, 0, 0)"}},D.createElement(tQ,{style:{filter:"blur(100px)",marginLeft:-27,marginTop:-20,opacity:.6,transform:"translate3d(0, 0, 0)"}},D.createElement(AsyncImage,{borderRadius:"full",height:"200",src:i,width:"200"})),D.createElement(tQ,{style:{filter:"blur(100px)",marginRight:0,marginTop:105,opacity:.6,overflow:"auto",transform:"translate3d(0, 0, 0)"}},D.createElement(AsyncImage,{borderRadius:"full",height:"200",src:i,width:"200"})))),!p&&f&&D.createElement(tQ,{background:"downloadBottomCardBackground",style:{bottom:"0",left:"0",position:"absolute",right:"0",top:"0"}},D.createElement(tQ,{position:"absolute",style:{background:`radial-gradient(50% 50% at 50% 50%, ${f[0]} 0%, ${f[1]} 25%, rgba(0,0,0,0) 100%)`,height:564,left:-215,top:-197,transform:"translate3d(0, 0, 0)",width:564}}),D.createElement(tQ,{position:"absolute",style:{background:`radial-gradient(50% 50% at 50% 50%, ${f[2]} 0%, rgba(0, 0, 0, 0) 100%)`,height:564,left:-1,top:-76,transform:"translate3d(0, 0, 0)",width:564}})),D.createElement(tQ,{alignItems:"flex-start",display:"flex",flexDirection:"row",gap:"24",height:"max",justifyContent:"center",style:{zIndex:1}},D.createElement(tQ,null,D.createElement(AsyncImage,{height:"60",src:i,width:"60",...o?{background:o,borderColor:"generalBorder",borderRadius:"10"}:null})),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4",style:{flex:1},width:"full"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},c),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},t),D.createElement(tQ,{marginTop:"14",width:"max"},D.createElement(ActionButton,{href:u,label:e,onClick:l,size:"medium"})))))};function DownloadOptionsDetail({changeWalletStep:e,wallet:t}){let n=getBrowser(),o=getPlatform(),i=(0,D.useContext)(rd),s="compact"===i,{desktop:l,desktopDownloadUrl:c,extension:u,extensionDownloadUrl:d,mobileDownloadUrl:p}=t,{i18n:f}=(0,D.useContext)(tY);return(0,D.useEffect)(()=>{preloadCreateIcon(),preloadScanIcon(),preloadRefreshIcon(),preloadConnectIcon()},[]),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"24",height:"full",marginBottom:"8",marginTop:"4",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"8",height:"full",justifyContent:"center",width:"full"},d&&D.createElement(DownloadOptionsBox,{actionLabel:f.t("get_options.extension.download.label",{browser:n}),description:f.t("get_options.extension.description"),iconUrl:getBrowserSrc,isCompact:s,onAction:()=>e((null==u?void 0:u.instructions)?"INSTRUCTIONS_EXTENSION":"CONNECT"),title:f.t("get_options.extension.title",{wallet:t.name,browser:n}),url:d,variant:"browser"}),c&&D.createElement(DownloadOptionsBox,{actionLabel:f.t("get_options.desktop.download.label",{platform:o}),description:f.t("get_options.desktop.description"),iconUrl:getPlatformSrc,isCompact:s,onAction:()=>e((null==l?void 0:l.instructions)?"INSTRUCTIONS_DESKTOP":"CONNECT"),title:f.t("get_options.desktop.title",{wallet:t.name,platform:o}),url:c,variant:"desktop"}),p&&D.createElement(DownloadOptionsBox,{actionLabel:f.t("get_options.mobile.download.label",{wallet:t.name}),description:f.t("get_options.mobile.description"),iconAccent:t.iconAccent,iconBackground:t.iconBackground,iconUrl:t.iconUrl,isCompact:s,onAction:()=>{e("DOWNLOAD")},title:f.t("get_options.mobile.title",{wallet:t.name}),variant:"app"})))}function DownloadDetail({changeWalletStep:e,wallet:t}){let{downloadUrls:n,qrCode:o}=t,{i18n:i}=(0,D.useContext)(tY);return(0,D.useEffect)(()=>{preloadCreateIcon(),preloadScanIcon()},[]),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"24",height:"full",width:"full"},D.createElement(tQ,{style:{maxWidth:220,textAlign:"center"}},D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"semibold"},i.t("get_mobile.description"))),D.createElement(tQ,{height:"full"},(null==n?void 0:n.qrCode)?D.createElement(QRCode,{logoSize:0,size:268,uri:n.qrCode}):null),D.createElement(tQ,{alignItems:"center",borderRadius:"10",display:"flex",flexDirection:"row",gap:"8",height:"34",justifyContent:"space-between",marginBottom:"12",paddingY:"8"},D.createElement(ActionButton,{label:i.t("get_mobile.continue.label"),onClick:()=>e((null==o?void 0:o.instructions)?"INSTRUCTIONS_MOBILE":"CONNECT")})))}var rk={connect:()=>D.createElement(ConnectIcon,null),create:()=>D.createElement(CreateIcon,null),install:e=>D.createElement(AsyncImage,{background:e.iconBackground,borderColor:"generalBorder",borderRadius:"10",height:"48",src:e.iconUrl,width:"48"}),refresh:()=>D.createElement(RefreshIcon,null),scan:()=>D.createElement(ScanIcon,null)};function InstructionMobileDetail({connectWallet:e,wallet:t}){var n,o,i,s;let{i18n:l}=(0,D.useContext)(tY);return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",width:"full"},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"28",height:"full",justifyContent:"center",paddingY:"32",style:{maxWidth:320}},null==(o=null==(n=null==t?void 0:t.qrCode)?void 0:n.instructions)?void 0:o.steps.map((e,n)=>{var o;return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16",key:n},D.createElement(tQ,{borderRadius:"10",height:"48",minWidth:"48",overflow:"hidden",position:"relative",width:"48"},null==(o=rk[e.step])?void 0:o.call(rk,t)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},l.t(e.title,void 0,{rawKeyIfTranslationMissing:!0})),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},l.t(e.description,void 0,{rawKeyIfTranslationMissing:!0}))))})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"12",justifyContent:"center",marginBottom:"16"},D.createElement(ActionButton,{label:l.t("get_instructions.mobile.connect.label"),onClick:()=>e(t)}),D.createElement(tQ,{as:"a",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",href:null==(s=null==(i=null==t?void 0:t.qrCode)?void 0:i.instructions)?void 0:s.learnMoreUrl,paddingX:"12",paddingY:"4",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},l.t("get_instructions.mobile.learn_more.label")))))}function InstructionExtensionDetail({wallet:e}){var t,n,o,i;let{i18n:s}=(0,D.useContext)(tY);return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",width:"full"},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"28",height:"full",justifyContent:"center",paddingY:"32",style:{maxWidth:320}},null==(n=null==(t=null==e?void 0:e.extension)?void 0:t.instructions)?void 0:n.steps.map((t,n)=>{var o;return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16",key:n},D.createElement(tQ,{borderRadius:"10",height:"48",minWidth:"48",overflow:"hidden",position:"relative",width:"48"},null==(o=rk[t.step])?void 0:o.call(rk,e)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},s.t(t.title,void 0,{rawKeyIfTranslationMissing:!0})),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},s.t(t.description,void 0,{rawKeyIfTranslationMissing:!0}))))})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"12",justifyContent:"center",marginBottom:"16"},D.createElement(ActionButton,{label:s.t("get_instructions.extension.refresh.label"),onClick:window.location.reload.bind(window.location)}),D.createElement(tQ,{as:"a",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",href:null==(i=null==(o=null==e?void 0:e.extension)?void 0:o.instructions)?void 0:i.learnMoreUrl,paddingX:"12",paddingY:"4",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},s.t("get_instructions.extension.learn_more.label")))))}function InstructionDesktopDetail({connectWallet:e,wallet:t}){var n,o,i,s;let{i18n:l}=(0,D.useContext)(tY);return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",width:"full"},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"28",height:"full",justifyContent:"center",paddingY:"32",style:{maxWidth:320}},null==(o=null==(n=null==t?void 0:t.desktop)?void 0:n.instructions)?void 0:o.steps.map((e,n)=>{var o;return D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"16",key:n},D.createElement(tQ,{borderRadius:"10",height:"48",minWidth:"48",overflow:"hidden",position:"relative",width:"48"},null==(o=rk[e.step])?void 0:o.call(rk,t)),D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},D.createElement(rm,{color:"modalText",size:"14",weight:"bold"},l.t(e.title,void 0,{rawKeyIfTranslationMissing:!0})),D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},l.t(e.description,void 0,{rawKeyIfTranslationMissing:!0}))))})),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"12",justifyContent:"center",marginBottom:"16"},D.createElement(ActionButton,{label:l.t("get_instructions.desktop.connect.label"),onClick:()=>e(t)}),D.createElement(tQ,{as:"a",className:touchableStyles({active:"shrink",hover:"grow"}),display:"block",href:null==(s=null==(i=null==t?void 0:t.desktop)?void 0:i.instructions)?void 0:s.learnMoreUrl,paddingX:"12",paddingY:"4",rel:"noreferrer",style:{willChange:"transform"},target:"_blank",transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},l.t("get_instructions.desktop.learn_more.label")))))}function DesktopOptions({onClose:e}){let t;let[n,o]=(0,D.useState)(),[i,s]=(0,D.useState)(),[l,c]=(0,D.useState)(),u=!!(null==i?void 0:i.qrCode)&&l,[d,p]=(0,D.useState)(!1),f=(0,D.useContext)(rd),m=f===ru.COMPACT,{disclaimer:g}=(0,D.useContext)(rs),{i18n:b}=(0,D.useContext)(tY),y=isSafari(),v=(0,D.useRef)(!1),{connector:w}=(0,D.useContext)(rc),C=!w,E=useWalletConnectors(C).filter(e=>e.ready||!!e.extensionDownloadUrl).sort((e,t)=>e.groupIndex-t.groupIndex),x=function(e,t){let n={};for(let o of e){let e=t(o);e&&(n[e]||(n[e]=[]),n[e].push(o))}return n}(E,e=>e.groupName),A=["Recommended","Other","Popular","More","Others","Installed"];(0,D.useEffect)(()=>{w&&!v.current&&(changeWalletStep("CONNECT"),selectWallet(w),v.current=!0)},[w]);let connectToWallet=e=>{var t,n;p(!1),e.ready&&(null==(n=null==(t=null==e?void 0:e.connect)?void 0:t.call(e))||n.catch(()=>{p(!0)}))},onDesktopUri=async e=>{let t=E.find(t=>e.id===t.id);(null==t?void 0:t.getDesktopUri)&&setTimeout(async()=>{var e;let n=await (null==(e=null==t?void 0:t.getDesktopUri)?void 0:e.call(t));n&&window.open(n,y?"_blank":"_self")},0)},onQrCode=async e=>{var t;let n=E.find(t=>e.id===t.id),o=await (null==(t=null==n?void 0:n.getQrCodeUri)?void 0:t.call(n));c(o),setTimeout(()=>{s(n),changeWalletStep("CONNECT")},o?0:50)},selectWallet=async e=>{var t;t=e.id,localStorage.setItem(rA,t),e.ready&&(onQrCode(e),onDesktopUri(e)),connectToWallet(e),o(e.id),e.ready||(s(e),changeWalletStep((null==e?void 0:e.extensionDownloadUrl)?"DOWNLOAD_OPTIONS":"CONNECT"))},clearSelectedWallet=()=>{o(void 0),s(void 0),c(void 0)},changeWalletStep=(e,t=!1)=>{t&&"GET"===e&&"GET"===k?clearSelectedWallet():t||"GET"!==e?t||"CONNECT"!==e||B("CONNECT"):B("GET"),I(e)},[k,B]=(0,D.useState)("NONE"),[S,I]=(0,D.useState)("NONE"),j=null,T=null,P=null;(0,D.useEffect)(()=>{p(!1)},[S,i]);let M=!!(null==i?void 0:i.extensionDownloadUrl),O=!!(M&&(null==i?void 0:i.mobileDownloadUrl));switch(S){case"NONE":j=D.createElement(ConnectModalIntro,{getWallet:()=>changeWalletStep("GET")});break;case"LEARN_COMPACT":j=D.createElement(ConnectModalIntro,{compactModeEnabled:m,getWallet:()=>changeWalletStep("GET")}),T=b.t("intro.title"),P="NONE";break;case"GET":j=D.createElement(GetDetail,{getWalletDownload:e=>{var t;o(e);let n=E.find(t=>e===t.id),i=null==(t=null==n?void 0:n.downloadUrls)?void 0:t.qrCode,l=!!(null==n?void 0:n.desktopDownloadUrl),c=!!(null==n?void 0:n.extensionDownloadUrl);s(n),i&&(c||l)?changeWalletStep("DOWNLOAD_OPTIONS"):i?changeWalletStep("DOWNLOAD"):l?changeWalletStep("INSTRUCTIONS_DESKTOP"):changeWalletStep("INSTRUCTIONS_EXTENSION")},compactModeEnabled:m}),T=b.t("get.title"),P=m?"LEARN_COMPACT":"NONE";break;case"CONNECT":j=i&&D.createElement(ConnectDetail,{changeWalletStep,compactModeEnabled:m,connectionError:d,onClose:e,qrCodeUri:l,reconnect:connectToWallet,wallet:i}),T=u&&("WalletConnect"===i.name?b.t("connect_scan.fallback_title"):b.t("connect_scan.title",{wallet:i.name})),P=m?w?null:"NONE":null,t=m?w?()=>{}:clearSelectedWallet:()=>{};break;case"DOWNLOAD_OPTIONS":j=i&&D.createElement(DownloadOptionsDetail,{changeWalletStep,wallet:i}),T=i&&b.t("get_options.short_title",{wallet:i.name}),P=w?"CONNECT":m?"NONE":null;break;case"DOWNLOAD":j=i&&D.createElement(DownloadDetail,{changeWalletStep,wallet:i}),T=i&&b.t("get_mobile.title",{wallet:i.name}),P=O?"DOWNLOAD_OPTIONS":k;break;case"INSTRUCTIONS_MOBILE":j=i&&D.createElement(InstructionMobileDetail,{connectWallet:selectWallet,wallet:i}),T=i&&b.t("get_options.title",{wallet:m&&i.shortName||i.name}),P="DOWNLOAD";break;case"INSTRUCTIONS_EXTENSION":j=i&&D.createElement(InstructionExtensionDetail,{wallet:i}),T=i&&b.t("get_options.title",{wallet:m&&i.shortName||i.name}),P="DOWNLOAD_OPTIONS";break;case"INSTRUCTIONS_DESKTOP":j=i&&D.createElement(InstructionDesktopDetail,{connectWallet:selectWallet,wallet:i}),T=i&&b.t("get_options.title",{wallet:m&&i.shortName||i.name}),P="DOWNLOAD_OPTIONS"}return D.createElement(tQ,{display:"flex",flexDirection:"row",style:{maxHeight:m?468:504}},(!m||"NONE"===S)&&D.createElement(tQ,{className:m?"_1vwt0cg4":"_1vwt0cg3",display:"flex",flexDirection:"column",marginTop:"16"},D.createElement(tQ,{display:"flex",justifyContent:"space-between"},m&&g&&D.createElement(tQ,{marginLeft:"16",width:"28"},D.createElement(InfoButton,{onClick:()=>changeWalletStep("LEARN_COMPACT")})),m&&!g&&D.createElement(tQ,{marginLeft:"16",width:"28"}),D.createElement(tQ,{marginLeft:m?"0":"6",paddingBottom:"8",paddingTop:"2",paddingX:"18"},D.createElement(rm,{as:"h1",color:"modalText",id:"rk_connect_title",size:"18",weight:"heavy",testId:"connect-header-label"},b.t("connect.title"))),m&&D.createElement(tQ,{marginRight:"16"},D.createElement(CloseButton,{onClose:e}))),D.createElement(tQ,{className:"_1vwt0cg2 ju367v7a ju367v7v",paddingBottom:"18"},Object.entries(x).map(([e,t],o)=>t.length>0&&D.createElement(D.Fragment,{key:o},e?D.createElement(tQ,{marginBottom:"8",marginTop:"16",marginX:"6"},D.createElement(rm,{color:"Installed"===e?"accentColor":"modalTextSecondary",size:"14",weight:"bold"},A.includes(e)?b.t(`connector_group.${e.toLowerCase()}`):e)):null,D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"4"},t.map(e=>D.createElement(ModalSelection,{currentlySelected:e.id===n,iconBackground:e.iconBackground,iconUrl:e.iconUrl,key:e.id,name:e.name,onClick:()=>selectWallet(e),ready:e.ready,recent:e.recent,testId:`wallet-option-${e.id}`,isRainbowKitConnector:e.isRainbowKitConnector})))))),m&&D.createElement(D.Fragment,null,D.createElement(tQ,{background:"generalBorder",height:"1",marginTop:"-1"}),g?D.createElement(tQ,{paddingX:"24",paddingY:"16",textAlign:"center"},D.createElement(g,{Link:DisclaimerLink,Text:DisclaimerText})):D.createElement(tQ,{alignItems:"center",display:"flex",justifyContent:"space-between",paddingX:"24",paddingY:"16"},D.createElement(tQ,{paddingY:"4"},D.createElement(rm,{color:"modalTextSecondary",size:"14",weight:"medium"},b.t("connect.new_to_ethereum.description"))),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"row",gap:"4",justifyContent:"center"},D.createElement(tQ,{className:touchableStyles({active:"shrink",hover:"grow"}),cursor:"pointer",onClick:()=>changeWalletStep("LEARN_COMPACT"),paddingY:"4",style:{willChange:"transform"},transition:"default"},D.createElement(rm,{color:"accentColor",size:"14",weight:"bold"},b.t("connect.new_to_ethereum.learn_more.label"))))))),(!m||"NONE"!==S)&&D.createElement(D.Fragment,null,!m&&D.createElement(tQ,{background:"generalBorder",minWidth:"1",width:"1"}),D.createElement(tQ,{display:"flex",flexDirection:"column",margin:"16",style:{flexGrow:1}},D.createElement(tQ,{alignItems:"center",display:"flex",justifyContent:"space-between",marginBottom:"12"},D.createElement(tQ,{width:"28"},P&&D.createElement(tQ,{as:"button",className:touchableStyles({active:"shrinkSm",hover:"growLg"}),color:"accentColor",onClick:()=>{P&&changeWalletStep(P,!0),null==t||t()},paddingX:"8",paddingY:"4",style:{boxSizing:"content-box",height:17,willChange:"transform"},transition:"default",type:"button"},D.createElement(BackIcon,null))),D.createElement(tQ,{display:"flex",justifyContent:"center",style:{flexGrow:1}},T&&D.createElement(rm,{color:"modalText",size:"18",textAlign:"center",weight:"heavy"},T)),D.createElement(CloseButton,{onClose:e})),D.createElement(tQ,{display:"flex",flexDirection:"column",style:{minHeight:m?396:432}},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"6",height:"full",justifyContent:"center",marginX:"8"},j)))))}var LoadingSpinner=({wallet:e})=>D.createElement("svg",{className:"_1am14413",viewBox:"0 0 86 86",width:"86",height:"86"},D.createElement("title",null,"Loading"),D.createElement("rect",{x:"3",y:"3",width:80,height:80,rx:20,ry:20,strokeDasharray:"53.333333333333336 "+320/3,strokeDashoffset:160,className:"_1am14412",style:{stroke:(null==e?void 0:e.iconAccent)||"#0D3887"}}));function WalletButton({onClose:e,wallet:t,connecting:n}){let{connect:o,iconBackground:i,iconUrl:s,id:l,name:c,getMobileUri:u,ready:d,shortName:p,showWalletConnectModal:f}=t,m=useCoolMode(s),g=(0,D.useRef)(!1),{i18n:b}=(0,D.useContext)(tY),y=(0,D.useCallback)(async()=>{let onMobileUri=async()=>{let e=await (null==u?void 0:u());if(e){if(e&&function({mobileUri:e,name:t}){localStorage.setItem(rb,JSON.stringify({href:e.split("?")[0],name:t}))}({mobileUri:e,name:c}),e.startsWith("http")){let t=document.createElement("a");t.href=e,t.target="_blank",t.rel="noreferrer noopener",t.click()}else window.location.href=e}};if("walletConnect"!==l&&onMobileUri(),f){f(),null==e||e();return}null==o||o()},[o,u,f,e,c,l]);return(0,D.useEffect)(()=>{n&&!g.current&&(y(),g.current=!0)},[n,y]),D.createElement(tQ,{as:"button",color:d?"modalText":"modalTextSecondary",disabled:!d,fontFamily:"body",key:l,onClick:y,ref:m,style:{overflow:"visible",textAlign:"center"},testId:`wallet-option-${l}`,type:"button",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",justifyContent:"center"},D.createElement(tQ,{display:"flex",alignItems:"center",justifyContent:"center",paddingBottom:"8",paddingTop:"10",position:"relative"},n?D.createElement(LoadingSpinner,{wallet:t}):null,D.createElement(AsyncImage,{background:i,borderRadius:"13",boxShadow:"walletLogo",height:"60",src:s,width:"60"})),n?null:D.createElement(tQ,{display:"flex",flexDirection:"column",textAlign:"center"},D.createElement(rm,{as:"h2",color:t.ready?"modalText":"modalTextSecondary",size:"13",weight:"medium"},D.createElement(tQ,{as:"span",position:"relative"},null!=p?p:c,!t.ready&&" (unsupported)")),t.recent&&D.createElement(rm,{color:"accentColor",size:"12",weight:"medium"},b.t("connect.recent")))))}function MobileOptions({onClose:e}){var t;let n=useWalletConnectors().filter(e=>e.isRainbowKitConnector),{disclaimer:o,learnMoreUrl:i}=(0,D.useContext)(rs),s=null,l=null,c=!1,u=null,[d,p]=(0,D.useState)("CONNECT"),{i18n:f}=(0,D.useContext)(tY),m=isIOS();switch(d){case"CONNECT":s=f.t("connect.title"),c=!0,l=D.createElement(tQ,null,D.createElement(tQ,{background:"profileForeground",className:"_1am14410",display:"flex",paddingBottom:"20",paddingTop:"6"},D.createElement(tQ,{display:"flex",style:{margin:"0 auto"}},n.filter(e=>e.ready).map(t=>D.createElement(tQ,{key:t.id,paddingX:"20"},D.createElement(tQ,{width:"60"},D.createElement(WalletButton,{onClose:e,wallet:t})))))),D.createElement(tQ,{background:"generalBorder",height:"1",marginBottom:"32",marginTop:"-1"}),D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",gap:"32",paddingX:"32",style:{textAlign:"center"}},D.createElement(tQ,{display:"flex",flexDirection:"column",gap:"8",textAlign:"center"},D.createElement(rm,{color:"modalText",size:"16",weight:"bold"},f.t("intro.title")),D.createElement(rm,{color:"modalTextSecondary",size:"16"},f.t("intro.description")))),D.createElement(tQ,{paddingTop:"32",paddingX:"20"},D.createElement(tQ,{display:"flex",gap:"14",justifyContent:"center"},D.createElement(ActionButton,{label:f.t("intro.get.label"),onClick:()=>p("GET"),size:"large",type:"secondary"}),D.createElement(ActionButton,{href:i,label:f.t("intro.learn_more.label"),size:"large",type:"secondary"}))),o&&D.createElement(tQ,{marginTop:"28",marginX:"32",textAlign:"center"},D.createElement(o,{Link:DisclaimerLink,Text:DisclaimerText})));break;case"GET":{s=f.t("get.title"),u="CONNECT";let e=null==(t=null==n?void 0:n.filter(e=>{var t,n,o;return(null==(t=e.downloadUrls)?void 0:t.ios)||(null==(n=e.downloadUrls)?void 0:n.android)||(null==(o=e.downloadUrls)?void 0:o.mobile)}))?void 0:t.splice(0,3);l=D.createElement(tQ,null,D.createElement(tQ,{alignItems:"center",display:"flex",flexDirection:"column",height:"full",marginBottom:"36",marginTop:"5",paddingTop:"12",width:"full"},e.map((t,n)=>{let{downloadUrls:o,iconBackground:i,iconUrl:s,name:l}=t;return(null==o?void 0:o.ios)||(null==o?void 0:o.android)||(null==o?void 0:o.mobile)?D.createElement(tQ,{display:"flex",gap:"16",key:t.id,paddingX:"20",width:"full"},D.createElement(tQ,{style:{minHeight:48,minWidth:48}},D.createElement(AsyncImage,{background:i,borderColor:"generalBorder",borderRadius:"10",height:"48",src:s,width:"48"})),D.createElement(tQ,{display:"flex",flexDirection:"column",width:"full"},D.createElement(tQ,{alignItems:"center",display:"flex",height:"48"},D.createElement(tQ,{width:"full"},D.createElement(rm,{color:"modalText",size:"18",weight:"bold"},l)),D.createElement(ActionButton,{href:(m?null==o?void 0:o.ios:null==o?void 0:o.android)||(null==o?void 0:o.mobile),label:f.t("get.action.label"),size:"small",type:"secondary"})),np(u),padding:"16",style:{height:17,willChange:"transform"},transition:"default",type:"button"},D.createElement(BackIcon,null))),D.createElement(tQ,{marginTop:"4",textAlign:"center",width:"full"},D.createElement(rm,{as:"h1",color:"modalText",id:"rk_connect_title",size:"20",weight:"bold"},s)),D.createElement(tQ,{alignItems:"center",display:"flex",height:"32",paddingRight:"14",position:"absolute",right:"0"},D.createElement(tQ,{style:{marginBottom:-20,marginTop:-20}},D.createElement(CloseButton,{onClose:e}))))),D.createElement(tQ,{display:"flex",flexDirection:"column"},l))}var MobileStatus=({onClose:e})=>{let{connector:t}=(0,D.useContext)(rc),{i18n:n}=(0,D.useContext)(tY),o=(null==t?void 0:t.name)||"";return D.createElement(tQ,null,D.createElement(tQ,{display:"flex",paddingBottom:"32",justifyContent:"center",alignItems:"center",background:"profileForeground",flexDirection:"column"},D.createElement(tQ,{width:"full",display:"flex",justifyContent:"flex-end",marginTop:"18",marginRight:"24"},D.createElement(CloseButton,{onClose:e})),D.createElement(tQ,{width:"60"},D.createElement(WalletButton,{onClose:e,wallet:t,connecting:!0})),D.createElement(tQ,{marginTop:"20"},D.createElement(rm,{textAlign:"center",color:"modalText",size:"18",weight:"semibold"},n.t("connect.status.connect_mobile",{wallet:o}))),D.createElement(tQ,{maxWidth:"full",marginTop:"8"},D.createElement(rm,{textAlign:"center",color:"modalText",size:"16",weight:"medium"},n.t("connect.status.confirm_mobile",{wallet:o})))))};function ConnectOptions({onClose:e}){let{connector:t}=(0,D.useContext)(rc);return isMobile()?t?D.createElement(MobileStatus,{onClose:e}):D.createElement(MobileOptions,{onClose:e}):D.createElement(DesktopOptions,{onClose:e})}function ConnectModal({onClose:e,open:t}){let n="rk_connect_title",o=useConnectionStatus(),{disconnect:i}=useDisconnect(),{isConnecting:s}=(0,_.m)(),l=D.useCallback(()=>{e(),i()},[e,i]),c=D.useCallback(()=>{s&&i(),e()},[e,i,s]);return"disconnected"===o?D.createElement(Dialog,{onClose:c,open:t,titleId:n},D.createElement(DialogContent,{bottomSheetOnMobile:!0,padding:"0",wide:!0},D.createElement(ConnectOptions,{onClose:c}))):"unauthenticated"===o?D.createElement(Dialog,{onClose:l,open:t,titleId:n},D.createElement(DialogContent,{bottomSheetOnMobile:!0,padding:"0"},D.createElement(SignIn,{onClose:l,onCloseModal:e}))):null}function useModalStateValue(){let[e,t]=(0,D.useState)(!1);return{closeModal:(0,D.useCallback)(()=>t(!1),[]),isModalOpen:e,openModal:(0,D.useCallback)(()=>t(!0),[])}}var rB=(0,D.createContext)({accountModalOpen:!1,chainModalOpen:!1,connectModalOpen:!1,isWalletConnectModalOpen:!1,setIsWalletConnectModalOpen:()=>{}});function ModalProvider({children:e}){let{closeModal:t,isModalOpen:n,openModal:o}=useModalStateValue(),{closeModal:i,isModalOpen:s,openModal:l}=useModalStateValue(),{closeModal:c,isModalOpen:u,openModal:d}=useModalStateValue(),[p,f]=(0,D.useState)(!1),m=useConnectionStatus(),{chainId:g}=(0,_.m)(),{chains:b}=(0,z.Z)(),y=b.some(e=>e.id===g);function closeModals({keepConnectModalOpen:e=!1}={}){e||t(),i(),c()}let v="unauthenticated"===useAuthenticationStatus();return useAccountEffect_useAccountEffect({onConnect:()=>closeModals({keepConnectModalOpen:v}),onDisconnect:()=>closeModals()}),(0,D.useEffect)(()=>{v&&closeModals()},[v]),D.createElement(rB.Provider,{value:(0,D.useMemo)(()=>({accountModalOpen:s,chainModalOpen:u,connectModalOpen:n,isWalletConnectModalOpen:p,openAccountModal:y&&"connected"===m?l:void 0,openChainModal:"connected"===m?d:void 0,openConnectModal:"disconnected"===m||"unauthenticated"===m?o:void 0,setIsWalletConnectModalOpen:f}),[m,s,u,n,l,d,o,y,p])},e,D.createElement(ConnectModal,{onClose:t,open:n}),D.createElement(AccountModal,{onClose:i,open:s}),D.createElement(ChainModal,{onClose:c,open:u}))}function useWalletConnectOpenState(){let{isWalletConnectModalOpen:e,setIsWalletConnectModalOpen:t}=(0,D.useContext)(rB);return{isWalletConnectModalOpen:e,setIsWalletConnectModalOpen:t}}var noop=()=>{};function ConnectButtonRenderer({children:e}){var t,n,o,i;let s=function(){let[e,t]=(0,D.useState)(!1);return(0,D.useEffect)(()=>(t(!0),()=>{t(!1)}),[]),(0,D.useCallback)(()=>e,[e])}(),{address:l}=(0,_.m)(),c=useMainnetEnsName(l),u=useMainnetEnsAvatar(c),{chainId:d}=(0,_.m)(),{chains:p}=(0,z.Z)(),f=p.some(e=>e.id===d),m=useRainbowKitChainsById(),g=null!=(t=useAuthenticationStatus())?t:void 0,b=d?m[d]:void 0,y=null!=(n=null==b?void 0:b.name)?n:void 0,v=null!=(o=null==b?void 0:b.iconUrl)?o:void 0,w=null!=(i=null==b?void 0:b.iconBackground)?i:void 0,C=useAsyncImage(v),E=(0,D.useContext)(rp),x=useRecentTransactions().some(({status:e})=>"pending"===e)&&E,{showBalance:A}=useShowBalance(),k="boolean"==typeof A?A:!A||t_(A)[isMobile()?"smallScreen":"largeScreen"],{data:B}=useBalance({address:k?l:void 0}),S=B?`${abbreviateETHBalance(parseFloat(B.formatted))} ${B.symbol}`:void 0,{openConnectModal:I}=function(){let{connectModalOpen:e,openConnectModal:t}=(0,D.useContext)(rB),{isWalletConnectModalOpen:n}=useWalletConnectOpenState();return{connectModalOpen:e||n,openConnectModal:t}}(),{openChainModal:j}=function(){let{chainModalOpen:e,openChainModal:t}=(0,D.useContext)(rB);return{chainModalOpen:e,openChainModal:t}}(),{openAccountModal:T}=function(){let{accountModalOpen:e,openAccountModal:t}=(0,D.useContext)(rB);return{accountModalOpen:e,openAccountModal:t}}(),{accountModalOpen:P,chainModalOpen:M,connectModalOpen:O}=function(){let{accountModalOpen:e,chainModalOpen:t,connectModalOpen:n}=(0,D.useContext)(rB);return{accountModalOpen:e,chainModalOpen:t,connectModalOpen:n}}();return D.createElement(D.Fragment,null,e({account:l?{address:l,balanceDecimals:null==B?void 0:B.decimals,balanceFormatted:null==B?void 0:B.formatted,balanceSymbol:null==B?void 0:B.symbol,displayBalance:S,displayName:c?formatENS(c):formatAddress(l),ensAvatar:null!=u?u:void 0,ensName:null!=c?c:void 0,hasPendingTransactions:x}:void 0,accountModalOpen:P,authenticationStatus:g,chain:d?{hasIcon:!!v,iconBackground:w,iconUrl:C,id:d,name:y,unsupported:!f}:void 0,chainModalOpen:M,connectModalOpen:O,mounted:s(),openAccountModal:null!=T?T:noop,openChainModal:null!=j?j:noop,openConnectModal:null!=I?I:noop}))}ConnectButtonRenderer.displayName="ConnectButton.Custom";var rS={accountStatus:"full",chainStatus:{largeScreen:"full",smallScreen:"icon"},label:"Connect Wallet",showBalance:{largeScreen:!0,smallScreen:!1}};function ConnectButton({accountStatus:e=rS.accountStatus,chainStatus:t=rS.chainStatus,label:n=rS.label,showBalance:o=rS.showBalance}){let i=useRainbowKitChains(),s=useConnectionStatus(),{setShowBalance:l}=useShowBalance(),[c,u]=(0,D.useState)(!1),{i18n:d}=(0,D.useContext)(tY);return(0,D.useEffect)(()=>{l(o),c||u(!0)},[o,l]),c?D.createElement(ConnectButtonRenderer,null,({account:l,chain:c,mounted:u,openAccountModal:p,openChainModal:f,openConnectModal:m})=>{var g,b,y;let v=u&&"loading"!==s,w=null!=(g=null==c?void 0:c.unsupported)&&g;return D.createElement(tQ,{display:"flex",gap:"12",...!v&&{"aria-hidden":!0,style:{opacity:0,pointerEvents:"none",userSelect:"none"}}},v&&l&&"connected"===s?D.createElement(D.Fragment,null,c&&(i.length>1||w)&&D.createElement(tQ,{alignItems:"center","aria-label":"Chain Selector",as:"button",background:w?"connectButtonBackgroundError":"connectButtonBackground",borderRadius:"connectButton",boxShadow:"connectButton",className:touchableStyles({active:"shrink",hover:"grow"}),color:w?"connectButtonTextError":"connectButtonText",display:tD(t,e=>"none"===e?"none":"flex"),fontFamily:"body",fontWeight:"bold",gap:"6",key:w?"unsupported":"supported",onClick:f,paddingX:"10",paddingY:"8",testId:w?"wrong-network-button":"chain-button",transition:"default",type:"button"},w?D.createElement(tQ,{alignItems:"center",display:"flex",height:"24",paddingX:"4"},d.t("connect_wallet.wrong_network.label")):D.createElement(tQ,{alignItems:"center",display:"flex",gap:"6"},c.hasIcon?D.createElement(tQ,{display:tD(t,e=>"full"===e||"icon"===e?"block":"none"),height:"24",width:"24"},D.createElement(AsyncImage,{alt:null!=(b=c.name)?b:"Chain icon",background:c.iconBackground,borderRadius:"full",height:"24",src:c.iconUrl,width:"24"})):null,D.createElement(tQ,{display:tD(t,e=>"icon"!==e||c.iconUrl?"full"===e||"name"===e?"block":"none":"block")},null!=(y=c.name)?y:c.id)),D.createElement(DropdownIcon,null)),!w&&D.createElement(tQ,{alignItems:"center",as:"button",background:"connectButtonBackground",borderRadius:"connectButton",boxShadow:"connectButton",className:touchableStyles({active:"shrink",hover:"grow"}),color:"connectButtonText",display:"flex",fontFamily:"body",fontWeight:"bold",onClick:p,testId:"account-button",transition:"default",type:"button"},l.displayBalance&&D.createElement(tQ,{display:tD(o,e=>e?"block":"none"),padding:"8",paddingLeft:"12"},l.displayBalance),D.createElement(tQ,{background:t_(o)[isMobile()?"smallScreen":"largeScreen"]?"connectButtonInnerBackground":"connectButtonBackground",borderColor:"connectButtonBackground",borderRadius:"connectButton",borderStyle:"solid",borderWidth:"2",color:"connectButtonText",fontFamily:"body",fontWeight:"bold",paddingX:"8",paddingY:"6",transition:"default"},D.createElement(tQ,{alignItems:"center",display:"flex",gap:"6",height:"24"},D.createElement(tQ,{display:tD(e,e=>"full"===e||"avatar"===e?"block":"none")},D.createElement(Avatar,{address:l.address,imageUrl:l.ensAvatar,loading:l.hasPendingTransactions,size:24})),D.createElement(tQ,{alignItems:"center",display:"flex",gap:"6"},D.createElement(tQ,{display:tD(e,e=>"full"===e||"address"===e?"block":"none")},l.displayName),D.createElement(DropdownIcon,null)))))):D.createElement(tQ,{as:"button",background:"accentColor",borderRadius:"connectButton",boxShadow:"connectButton",className:touchableStyles({active:"shrink",hover:"grow"}),color:"accentColorForeground",fontFamily:"body",fontWeight:"bold",height:"40",key:"connect",onClick:m,paddingX:"14",testId:"connect-button",transition:"default",type:"button"},u&&"Connect Wallet"===n?d.t("connect_wallet.label"):n))}):D.createElement(D.Fragment,null)}ConnectButton.__defaultProps=rS,ConnectButton.Custom=ConnectButtonRenderer;var computeWalletConnectMetaData=({appName:e,appDescription:t,appUrl:n,appIcon:o})=>({name:e,description:null!=t?t:e,url:null!=n?n:"undefined"!=typeof window?window.location.href:"",icons:[...o?[o]:[]]}),connectorsForWallets=(e,{projectId:t,walletConnectParameters:n,appName:o,appDescription:i,appUrl:s,appIcon:l})=>{let c=-1,u=[],d=[],p=[],f=computeWalletConnectMetaData({appName:o,appDescription:i,appUrl:s,appIcon:l});e.forEach(({groupName:e,wallets:i},s)=>{i.forEach(i=>{c++;let u=i({projectId:t,appName:o,appIcon:l,options:{metadata:f,...n},walletConnectParameters:{metadata:f,...n}});if((null==u?void 0:u.iconAccent)&&!isHexString(null==u?void 0:u.iconAccent))throw Error(`Property \`iconAccent\` is not a hex value for wallet: ${u.name}`);let m={...u,groupIndex:s+1,groupName:e,index:c};"function"==typeof u.hidden?p.push(m):d.push(m)})});let m=[...d,...p];for(let{createConnector:e,groupIndex:t,groupName:n,hidden:o,...i}of m){if("function"==typeof o){let e=o();if(e)continue}let walletMetaData=e=>({rkDetails:Object.fromEntries(Object.entries({...i,groupIndex:t,groupName:n,isRainbowKitConnector:!0,...e||{}}).filter(([e,t])=>void 0!==t))}),s="walletConnect"===i.id;s&&u.push(e(walletMetaData({isWalletConnectModalConnector:!0,showQrModal:!0})));let l=e(walletMetaData());u.push(l)}return u},rI=new Map,getOrCreateWalletConnectInstance=({projectId:e,walletConnectParameters:t,rkDetailsShowQrModal:n})=>{let o={...t||{},projectId:e,showQrModal:!1};n&&(o={...o,showQrModal:!0});let i=JSON.stringify(o),s=rI.get(i);if(s)return s;let l=walletConnect(o);return rI.set(i,l),l};function getWalletConnectConnector({projectId:e,walletConnectParameters:t}){if(!e||""===e)throw Error("No projectId found. Every dApp must now provide a WalletConnect Cloud projectId to enable WalletConnect v2 https://www.rainbowkit.com/docs/installation#configure");return"YOUR_PROJECT_ID"===e&&(e="21fef48091f12692cad574a6f7753643"),n=>(function({projectId:e,walletDetails:t,walletConnectParameters:n}){return o=>({...getOrCreateWalletConnectInstance({projectId:e,walletConnectParameters:n,rkDetailsShowQrModal:t.rkDetails.showQrModal})(o),...t})})({projectId:e,walletDetails:n,walletConnectParameters:t})}function getExplicitInjectedProvider(e){if("undefined"==typeof window||void 0===window.ethereum)return;let t=window.ethereum.providers;return t?t.find(t=>t[e]):window.ethereum[e]?window.ethereum:void 0}function getWindowProviderNamespace(e){let providerSearch=(e,t)=>{let[n,...o]=t.split("."),i=e[n];if(i)return 0===o.length?i:providerSearch(i,o.join("."))};if("undefined"!=typeof window)return providerSearch(window,e)}function hasInjectedProvider({flag:e,namespace:t}){return!!t&&void 0!==getWindowProviderNamespace(t)||!!e&&void 0!==getExplicitInjectedProvider(e)}function getInjectedConnector({flag:e,namespace:t,target:n}){let o=n||function({flag:e,namespace:t}){var n;if("undefined"==typeof window)return;if(t){let e=getWindowProviderNamespace(t);if(e)return e}let o=null==(n=window.ethereum)?void 0:n.providers;if(e){let t=getExplicitInjectedProvider(e);if(t)return t}return void 0!==o&&o.length>0?o[0]:window.ethereum}({flag:e,namespace:t});return e=>{let t=o?{target:()=>({id:e.rkDetails.id,name:e.rkDetails.name,provider:o})}:{};return n=>({...injected(t)(n),...e})}}var dist_coinbaseWallet=({appName:e,appIcon:t})=>{let o=hasInjectedProvider({flag:"isCoinbaseWallet"}),i=isIOS();return{id:"coinbase",name:"Coinbase Wallet",shortName:"Coinbase",rdns:"com.coinbase.wallet",iconUrl:async()=>(await n.e(1950).then(n.bind(n,41950))).default,iconAccent:"#2c5ff6",iconBackground:"#2c5ff6",installed:o||void 0,downloadUrls:{android:"https://play.google.com/store/apps/details?id=org.toshi",ios:"https://apps.apple.com/us/app/coinbase-wallet-store-crypto/id1278383455",mobile:"https://coinbase.com/wallet/downloads",qrCode:"https://coinbase-wallet.onelink.me/q5Sx/fdb9b250",chrome:"https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad",browserExtension:"https://coinbase.com/wallet"},...i?{}:{qrCode:{getUri:e=>e,instructions:{learnMoreUrl:"https://coinbase.com/wallet/articles/getting-started-mobile",steps:[{description:"wallet_connectors.coinbase.qr_code.step1.description",step:"install",title:"wallet_connectors.coinbase.qr_code.step1.title"},{description:"wallet_connectors.coinbase.qr_code.step2.description",step:"create",title:"wallet_connectors.coinbase.qr_code.step2.title"},{description:"wallet_connectors.coinbase.qr_code.step3.description",step:"scan",title:"wallet_connectors.coinbase.qr_code.step3.title"}]}},extension:{instructions:{learnMoreUrl:"https://coinbase.com/wallet/articles/getting-started-extension",steps:[{description:"wallet_connectors.coinbase.extension.step1.description",step:"install",title:"wallet_connectors.coinbase.extension.step1.title"},{description:"wallet_connectors.coinbase.extension.step2.description",step:"create",title:"wallet_connectors.coinbase.extension.step2.title"},{description:"wallet_connectors.coinbase.extension.step3.description",step:"refresh",title:"wallet_connectors.coinbase.extension.step3.title"}]}}},createConnector:n=>o=>({...coinbaseWallet({appName:e,appLogoUrl:t,headlessMode:!0})(o),...n})}};function isMetaMask(e){return!!(null==e?void 0:e.isMetaMask)&&(!e.isBraveWallet||!!e._events||!!e._state)&&!e.isApexWallet&&!e.isAvalanche&&!e.isBackpack&&!e.isBifrost&&!e.isBitKeep&&!e.isBitski&&!e.isBlockWallet&&!e.isCoinbaseWallet&&!e.isDawn&&!e.isEnkrypt&&!e.isExodus&&!e.isFrame&&!e.isFrontier&&!e.isGamestop&&!e.isHyperPay&&!e.isImToken&&!e.isKuCoinWallet&&!e.isMathWallet&&!e.isOkxWallet&&!e.isOKExWallet&&!e.isOneInchIOSWallet&&!e.isOneInchAndroidWallet&&!e.isOpera&&!e.isPhantom&&!e.isPortal&&!e.isRabby&&!e.isRainbow&&!e.isStatus&&!e.isTalisman&&!e.isTally&&!e.isTokenPocket&&!e.isTokenary&&!e.isTrust&&!e.isTrustWallet&&!e.isXDEFI&&!e.isZeal&&!e.isZerion}var metaMaskWallet=({projectId:e,walletConnectParameters:t})=>{var o,i,s;let l=hasInjectedProvider({flag:"isMetaMask"}),c=!l,getUri=e=>isAndroid()?e:isIOS()?`metamask://wc?uri=${encodeURIComponent(e)}`:`https://metamask.app.link/wc?uri=${encodeURIComponent(e)}`;return{id:"metaMask",name:"MetaMask",rdns:"io.metamask",iconUrl:async()=>(await n.e(4419).then(n.bind(n,84419))).default,iconAccent:"#f6851a",iconBackground:"#fff",installed:c?void 0:l,downloadUrls:{android:"https://play.google.com/store/apps/details?id=io.metamask",ios:"https://apps.apple.com/us/app/metamask/id1438144202",mobile:"https://metamask.io/download",qrCode:"https://metamask.io/download",chrome:"https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn",edge:"https://microsoftedge.microsoft.com/addons/detail/metamask/ejbalbakoplchlghecdalmeeeajnimhm",firefox:"https://addons.mozilla.org/firefox/addon/ether-metamask",opera:"https://addons.opera.com/extensions/details/metamask-10",browserExtension:"https://metamask.io/download"},mobile:{getUri:c?getUri:void 0},qrCode:c?{getUri,instructions:{learnMoreUrl:"https://metamask.io/faqs/",steps:[{description:"wallet_connectors.metamask.qr_code.step1.description",step:"install",title:"wallet_connectors.metamask.qr_code.step1.title"},{description:"wallet_connectors.metamask.qr_code.step2.description",step:"create",title:"wallet_connectors.metamask.qr_code.step2.title"},{description:"wallet_connectors.metamask.qr_code.step3.description",step:"refresh",title:"wallet_connectors.metamask.qr_code.step3.title"}]}}:void 0,extension:{instructions:{learnMoreUrl:"https://metamask.io/faqs/",steps:[{description:"wallet_connectors.metamask.extension.step1.description",step:"install",title:"wallet_connectors.metamask.extension.step1.title"},{description:"wallet_connectors.metamask.extension.step2.description",step:"create",title:"wallet_connectors.metamask.extension.step2.title"},{description:"wallet_connectors.metamask.extension.step3.description",step:"refresh",title:"wallet_connectors.metamask.extension.step3.title"}]}},createConnector:c?getWalletConnectConnector({projectId:e,walletConnectParameters:t}):getInjectedConnector({target:"undefined"!=typeof window?null!=(s=null==(i=null==(o=window.ethereum)?void 0:o.providers)?void 0:i.find(isMetaMask))?s:window.ethereum:void 0})}},rainbowWallet=({projectId:e,walletConnectParameters:t})=>{let o=hasInjectedProvider({flag:"isRainbow"}),i=!o,getUri=e=>isAndroid()?e:isIOS()?`rainbow://wc?uri=${encodeURIComponent(e)}&connector=rainbowkit`:`https://rnbwapp.com/wc?uri=${encodeURIComponent(e)}&connector=rainbowkit`;return{id:"rainbow",name:"Rainbow",rdns:"me.rainbow",iconUrl:async()=>(await n.e(1608).then(n.bind(n,31608))).default,iconBackground:"#0c2f78",installed:i?void 0:o,downloadUrls:{android:"https://play.google.com/store/apps/details?id=me.rainbow&referrer=utm_source%3Drainbowkit&utm_source=rainbowkit",ios:"https://apps.apple.com/app/apple-store/id1457119021?pt=119997837&ct=rainbowkit&mt=8",mobile:"https://rainbow.download?utm_source=rainbowkit",qrCode:"https://rainbow.download?utm_source=rainbowkit&utm_medium=qrcode",browserExtension:"https://rainbow.me/extension?utm_source=rainbowkit"},mobile:{getUri:i?getUri:void 0},qrCode:i?{getUri,instructions:{learnMoreUrl:"https://learn.rainbow.me/connect-to-a-website-or-app?utm_source=rainbowkit&utm_medium=connector&utm_campaign=learnmore",steps:[{description:"wallet_connectors.rainbow.qr_code.step1.description",step:"install",title:"wallet_connectors.rainbow.qr_code.step1.title"},{description:"wallet_connectors.rainbow.qr_code.step2.description",step:"create",title:"wallet_connectors.rainbow.qr_code.step2.title"},{description:"wallet_connectors.rainbow.qr_code.step3.description",step:"scan",title:"wallet_connectors.rainbow.qr_code.step3.title"}]}}:void 0,createConnector:i?getWalletConnectConnector({projectId:e,walletConnectParameters:t}):getInjectedConnector({flag:"isRainbow"})}},walletConnectWallet=({projectId:e,options:t})=>({id:"walletConnect",name:"WalletConnect",installed:void 0,iconUrl:async()=>(await n.e(3525).then(n.bind(n,33525))).default,iconBackground:"#3b99fc",qrCode:{getUri:e=>e},createConnector:getWalletConnectConnector({projectId:e,walletConnectParameters:t})}),createDefaultTransports=e=>{let t=e.reduce((e,t)=>{let n=t.id;return e[n]=function(e,t={}){let{batch:n,fetchOptions:o,key:i="http",name:s="HTTP JSON-RPC",onFetchResponse:l,retryDelay:c}=t;return({chain:u,retryCount:d,timeout:p})=>{let{batchSize:f=1e3,wait:m=0}="object"==typeof n?n:{},g=t.retryCount??d,b=p??t.timeout??1e4,y=e||u?.rpcUrls.default.http[0];if(!y)throw new UrlRequiredError;let v=function(e,t={}){return{async request(n){let{body:o,fetchOptions:i={},onResponse:s=t.onResponse,timeout:l=t.timeout??1e4}=n,{headers:c,method:u,signal:d}={...t.fetchOptions,...i};try{let t;let n=await withTimeout(async({signal:t})=>{let n=await fetch(e,{...i,body:Array.isArray(o)?(0,e7.P)(o.map(e=>({jsonrpc:"2.0",id:e.id??tj.take(),...e}))):(0,e7.P)({jsonrpc:"2.0",id:o.id??tj.take(),...o}),headers:{...c,"Content-Type":"application/json"},method:u||"POST",signal:d||(l>0?t:null)});return n},{errorInstance:new tS.W5({body:o,url:e}),timeout:l,signal:!0});if(s&&await s(n),t=n.headers.get("Content-Type")?.startsWith("application/json")?await n.json():await n.text(),!n.ok)throw new tS.Gg({body:o,details:(0,e7.P)(t.error)||n.statusText,headers:n.headers,status:n.status,url:e});return t}catch(t){if(t instanceof tS.Gg||t instanceof tS.W5)throw t;throw new tS.Gg({body:o,details:t.message,url:e})}}}}(y,{fetchOptions:o,onResponse:l,timeout:b});return(0,tT.q)({key:i,name:s,async request({method:t,params:o}){let i={method:t,params:o},{schedule:s}=(0,tI.S)({id:`${e}`,wait:m,shouldSplitBatch:e=>e.length>f,fn:e=>v.request({body:e}),sort:(e,t)=>e.id-t.id}),fn=async e=>n?s(e):[await v.request({body:e})],[{error:l,result:c}]=await fn(i);if(l)throw new tS.bs({body:i,error:l,url:y});return c},retryCount:g,retryDelay:c,timeout:b,type:"http"},{fetchOptions:o,url:y})}}(),e},{});return t},getDefaultConfig=({appName:e,appDescription:t,appUrl:n,appIcon:o,wallets:i,projectId:s,...l})=>{let{transports:c,chains:u,...d}=l,p=computeWalletConnectMetaData({appName:e,appDescription:t,appUrl:n,appIcon:o}),f=connectorsForWallets(i||[{groupName:"Popular",wallets:[rainbowWallet,dist_coinbaseWallet,metaMaskWallet,walletConnectWallet]}],{projectId:s,appName:e,appDescription:t,appUrl:n,appIcon:o,walletConnectParameters:{metadata:p}});return c||(c=createDefaultTransports(u)),function(e){let t;let{multiInjectedProviderDiscovery:n=!0,storage:o=function(e){let{deserialize:t=deserialize_deserialize,key:n="wagmi",serialize:o=serialize_serialize,storage:i=tU}=e;function unwrap(e){return e instanceof Promise?e.then(e=>e).catch(()=>null):e}return{...i,key:n,async getItem(e,o){let s=i.getItem(`${n}.${e}`),l=await unwrap(s);return l?t(l)??null:o??null},async setItem(e,t){let s=`${n}.${e}`;null===t?await unwrap(i.removeItem(s)):await unwrap(i.setItem(s,o(t)))},async removeItem(e){await unwrap(i.removeItem(`${n}.${e}`))}}}({storage:"undefined"!=typeof window&&window.localStorage?window.localStorage:tU}),syncConnectedChain:i=!0,ssr:s,...l}=e,c="undefined"!=typeof window&&n?function(){let e=new Set,t=[],request=()=>(function(e){let handler=t=>e(t.detail);return window.addEventListener("eip6963:announceProvider",handler),window.dispatchEvent(new CustomEvent("eip6963:requestProvider")),()=>window.removeEventListener("eip6963:announceProvider",handler)})(n=>{t.some(({info:e})=>e.uuid===n.info.uuid)||(t=[...t,n],e.forEach(e=>e(t,{added:[n]})))}),n=request();return{_listeners:()=>e,clear(){e.forEach(e=>e([],{removed:[...t]})),t=[]},destroy(){this.clear(),e.clear(),n()},findProvider:({rdns:e})=>t.find(t=>t.info.rdns===e),getProviders:()=>t,reset(){this.clear(),n(),n=request()},subscribe:(n,{emitImmediately:o}={})=>(e.add(n),o&&n(t,{added:t}),()=>e.delete(n))}}():void 0,u=vanilla_createStore(()=>l.chains),d=vanilla_createStore(()=>[...l.connectors??[],...s?[]:c?.getProviders().map(providerDetailToConnector)??[]].map(setup));function setup(e){var t;let n=(t=function(e=11){if(!C||tF+e>512){C="",tF=0;for(let e=0;e<256;e++)C+=(256+256*Math.random()|0).toString(16).substring(1)}return C.substring(tF,tF+++e)}(),new Emitter(t)),i={...e({emitter:n,chains:u.getState(),storage:o}),emitter:n,uid:n.uid};return n.on("connect",connect),i.setup?.(),i}function providerDetailToConnector(e){let{info:t}=e,n=e.provider;return injected({target:{...t,id:t.rdns,provider:n}})}let p=new Map;function getInitialState(){return{chainId:u.getState()[0].id,connections:new Map,current:void 0,status:"disconnected"}}let f="0.0.0-canary-";t=tN.i.startsWith(f)?parseInt(tN.i.replace(f,"")):parseInt(tN.i.split(".")[0]??"0");let m=vanilla_createStore(subscribeWithSelector(o?persist(getInitialState,{migrate(e,n){if(n===t)return e;let o=getInitialState(),i=e&&"object"==typeof e&&"chainId"in e&&"number"==typeof e.chainId?e.chainId:o.chainId;return{...o,chainId:i}},name:"store",partialize:e=>({connections:{__type:"Map",value:Array.from(e.connections.entries()).map(([e,t])=>{let{id:n,name:o,type:i,uid:s}=t.connector;return[e,{...t,connector:{id:n,name:o,type:i,uid:s}}]})},chainId:e.chainId,current:e.current}),skipHydration:s,storage:o,version:t}):getInitialState));function change(e){m.setState(t=>{let n=t.connections.get(e.uid);return n?{...t,connections:new Map(t.connections).set(e.uid,{accounts:e.accounts??n.accounts,chainId:e.chainId??n.chainId,connector:n.connector})}:t})}function connect(e){"connecting"!==m.getState().status&&"reconnecting"!==m.getState().status&&m.setState(t=>{let n=d.getState().find(t=>t.uid===e.uid);return n?{...t,connections:new Map(t.connections).set(e.uid,{accounts:e.accounts,chainId:e.chainId,connector:n}),current:e.uid,status:"connected"}:t})}return i&&m.subscribe(({connections:e,current:t})=>t?e.get(t)?.chainId:void 0,e=>{let t=u.getState().some(t=>t.id===e);if(t)return m.setState(t=>({...t,chainId:e??t.chainId}))}),c?.subscribe(e=>{let t=new Map;for(let e of d.getState())t.set(e.id,!0);let n=[];for(let o of e){let e=setup(providerDetailToConnector(o));t.has(e.id)||n.push(e)}d.setState(e=>[...e,...n],!0)}),{get chains(){return u.getState()},get connectors(){return d.getState()},storage:o,getClient:function(e={}){let t;let n=e.chainId??m.getState().chainId,o=u.getState().find(e=>e.id===n);if(e.chainId&&!o)throw new tw.X4;{let e=p.get(m.getState().chainId);if(e&&!o)return e;if(!o)throw new tw.X4}{let e=p.get(n);if(e)return e}if(l.client)t=l.client({chain:o});else{let e=o.id,n=u.getState().map(e=>e.id),i={},s=Object.entries(l);for(let[t,o]of s)if("chains"!==t&&"client"!==t&&"connectors"!==t&&"transports"!==t){if("object"==typeof o){if(e in o)i[t]=o[e];else{let e=n.some(e=>e in o);if(e)continue;i[t]=o}}else i[t]=o}t=(0,tP.e)({...i,chain:o,batch:i.batch??{multicall:!0},transport:t=>l.transports[e]({...t,connectors:d})})}return p.set(n,t),t},get state(){return m.getState()},setState(e){let t;t="function"==typeof e?e(m.getState()):e;let n=getInitialState();"object"!=typeof t&&(t=n);let o=Object.keys(n).some(e=>!(e in t));o&&(t=n),m.setState(t,!0)},subscribe:(e,t,n)=>m.subscribe(e,t,n?{...n,fireImmediately:n.emitImmediately}:void 0),_internal:{mipd:c,store:m,ssr:!!s,syncConnectedChain:i,transports:l.transports,chains:{setState(e){let t="function"==typeof e?e(u.getState()):e;if(0!==t.length)return u.setState(t,!0)},subscribe:e=>u.subscribe(e)},connectors:{providerDetailToConnector,setup,setState:e=>d.setState("function"==typeof e?e(d.getState()):e,!0),subscribe:e=>d.subscribe(e)},events:{change,connect,disconnect:function disconnect(e){m.setState(t=>{let n=t.connections.get(e.uid);if(n&&(n.connector.emitter.off("change",change),n.connector.emitter.off("disconnect",disconnect),n.connector.emitter.on("connect",connect)),t.connections.delete(e.uid),0===t.connections.size)return{...t,connections:new Map,current:void 0,status:"disconnected"};let o=t.connections.values().next().value;return{...t,connections:new Map(t.connections),current:o.connector.uid}})}}}}}({connectors:f,chains:u,transports:c,...d})}},66474:function(e,t,n){"use strict";n.d(t,{j:function(){return s}});var o=n(7506),i=n(24139),s=new class extends o.l{#L;#z;#q;constructor(){super(),this.#q=e=>{if(!i.sk&&window.addEventListener){let listener=()=>e();return window.addEventListener("visibilitychange",listener,!1),()=>{window.removeEventListener("visibilitychange",listener)}}}}onSubscribe(){this.#z||this.setEventListener(this.#q)}onUnsubscribe(){this.hasListeners()||(this.#z?.(),this.#z=void 0)}setEventListener(e){this.#q=e,this.#z?.(),this.#z=e(e=>{"boolean"==typeof e?this.setFocused(e):this.onFocus()})}setFocused(e){let t=this.#L!==e;t&&(this.#L=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return"boolean"==typeof this.#L?this.#L:globalThis.document?.visibilityState!=="hidden"}}},59289:function(e,t,n){"use strict";n.d(t,{R:function(){return getDefaultState},m:function(){return l}});var o=n(27037),i=n(48907),s=n(72008),l=class extends i.F{#G;#d;#u;#W;constructor(e){super(),this.mutationId=e.mutationId,this.#d=e.defaultOptions,this.#u=e.mutationCache,this.#G=[],this.state=e.state||getDefaultState(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options={...this.#d,...e},this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#G.includes(e)||(this.#G.push(e),this.clearGcTimeout(),this.#u.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#G=this.#G.filter(t=>t!==e),this.scheduleGc(),this.#u.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#G.length||("pending"===this.state.status?this.scheduleGc():this.#u.remove(this))}continue(){return this.#W?.continue()??this.execute(this.state.variables)}async execute(e){let t="pending"===this.state.status;try{if(!t){this.#H({type:"pending",variables:e}),await this.#u.config.onMutate?.(e,this);let t=await this.options.onMutate?.(e);t!==this.state.context&&this.#H({type:"pending",context:t,variables:e})}let n=await (this.#W=(0,s.Mz)({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(Error("No mutationFn found")),onFail:(e,t)=>{this.#H({type:"failed",failureCount:e,error:t})},onPause:()=>{this.#H({type:"pause"})},onContinue:()=>{this.#H({type:"continue"})},retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode}),this.#W.promise);return await this.#u.config.onSuccess?.(n,e,this.state.context,this),await this.options.onSuccess?.(n,e,this.state.context),await this.#u.config.onSettled?.(n,null,this.state.variables,this.state.context,this),await this.options.onSettled?.(n,null,e,this.state.context),this.#H({type:"success",data:n}),n}catch(t){try{throw await this.#u.config.onError?.(t,e,this.state.context,this),await this.options.onError?.(t,e,this.state.context),await this.#u.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this),await this.options.onSettled?.(void 0,t,e,this.state.context),t}finally{this.#H({type:"error",error:t})}}}#H(e){this.state=(t=>{switch(e.type){case"failed":return{...t,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...t,isPaused:!0};case"continue":return{...t,isPaused:!1};case"pending":return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:!(0,s.Kw)(this.options.networkMode),status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}})(this.state),o.V.batch(()=>{this.#G.forEach(t=>{t.onMutationUpdate(e)}),this.#u.notify({mutation:this,type:"updated",action:e})})}};function getDefaultState(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}},27037:function(e,t,n){"use strict";n.d(t,{V:function(){return o}});var o=function(){let e=[],t=0,notifyFn=e=>{e()},batchNotifyFn=e=>{e()},scheduleFn=e=>setTimeout(e,0),schedule=n=>{t?e.push(n):scheduleFn(()=>{notifyFn(n)})},flush=()=>{let t=e;e=[],t.length&&scheduleFn(()=>{batchNotifyFn(()=>{t.forEach(e=>{notifyFn(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{--t||flush()}return n},batchCalls:e=>(...t)=>{schedule(()=>{e(...t)})},schedule,setNotifyFunction:e=>{notifyFn=e},setBatchNotifyFunction:e=>{batchNotifyFn=e},setScheduler:e=>{scheduleFn=e}}}()},14304:function(e,t,n){"use strict";n.d(t,{N:function(){return s}});var o=n(7506),i=n(24139),s=new class extends o.l{#Q=!0;#z;#q;constructor(){super(),this.#q=e=>{if(!i.sk&&window.addEventListener){let onlineListener=()=>e(!0),offlineListener=()=>e(!1);return window.addEventListener("online",onlineListener,!1),window.addEventListener("offline",offlineListener,!1),()=>{window.removeEventListener("online",onlineListener),window.removeEventListener("offline",offlineListener)}}}}onSubscribe(){this.#z||this.setEventListener(this.#q)}onUnsubscribe(){this.hasListeners()||(this.#z?.(),this.#z=void 0)}setEventListener(e){this.#q=e,this.#z?.(),this.#z=e(this.setOnline.bind(this))}setOnline(e){let t=this.#Q!==e;t&&(this.#Q=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#Q}}},56888:function(e,t,n){"use strict";n.d(t,{A:function(){return c},z:function(){return fetchState}});var o=n(24139),i=n(27037),s=n(72008),l=n(48907),c=class extends l.F{#K;#V;#Z;#W;#G;#d;#J;constructor(e){super(),this.#J=!1,this.#d=e.defaultOptions,this.setOptions(e.options),this.#G=[],this.#Z=e.cache,this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#K=e.state||function(e){let t="function"==typeof e.initialData?e.initialData():e.initialData,n=void 0!==t,o=n?"function"==typeof e.initialDataUpdatedAt?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?o??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}(this.options),this.state=this.#K,this.scheduleGc()}get meta(){return this.options.meta}setOptions(e){this.options={...this.#d,...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){this.#G.length||"idle"!==this.state.fetchStatus||this.#Z.remove(this)}setData(e,t){let n=(0,o.oE)(this.state.data,e,this.options);return this.#H({data:n,type:"success",dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e,t){this.#H({type:"setState",state:e,setStateOptions:t})}cancel(e){let t=this.#W?.promise;return this.#W?.cancel(e),t?t.then(o.ZT).catch(o.ZT):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#K)}isActive(){return this.#G.some(e=>!1!==e.options.enabled)}isDisabled(){return this.getObserversCount()>0&&!this.isActive()}isStale(){return!!this.state.isInvalidated||(this.getObserversCount()>0?this.#G.some(e=>e.getCurrentResult().isStale):void 0===this.state.data)}isStaleByTime(e=0){return this.state.isInvalidated||void 0===this.state.data||!(0,o.Kp)(this.state.dataUpdatedAt,e)}onFocus(){let e=this.#G.find(e=>e.shouldFetchOnWindowFocus());e?.refetch({cancelRefetch:!1}),this.#W?.continue()}onOnline(){let e=this.#G.find(e=>e.shouldFetchOnReconnect());e?.refetch({cancelRefetch:!1}),this.#W?.continue()}addObserver(e){this.#G.includes(e)||(this.#G.push(e),this.clearGcTimeout(),this.#Z.notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.#G.includes(e)&&(this.#G=this.#G.filter(t=>t!==e),this.#G.length||(this.#W&&(this.#J?this.#W.cancel({revert:!0}):this.#W.cancelRetry()),this.scheduleGc()),this.#Z.notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.#G.length}invalidate(){this.state.isInvalidated||this.#H({type:"invalidate"})}fetch(e,t){if("idle"!==this.state.fetchStatus){if(void 0!==this.state.data&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#W)return this.#W.continueRetry(),this.#W.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.#G.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,i={queryKey:this.queryKey,meta:this.meta},addSignalProperty=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#J=!0,n.signal)})};addSignalProperty(i);let l={fetchOptions:t,options:this.options,queryKey:this.queryKey,state:this.state,fetchFn:()=>this.options.queryFn&&this.options.queryFn!==o.CN?(this.#J=!1,this.options.persister)?this.options.persister(this.options.queryFn,i,this):this.options.queryFn(i):Promise.reject(Error(`Missing queryFn: '${this.options.queryHash}'`))};addSignalProperty(l),this.options.behavior?.onFetch(l,this),this.#V=this.state,("idle"===this.state.fetchStatus||this.state.fetchMeta!==l.fetchOptions?.meta)&&this.#H({type:"fetch",meta:l.fetchOptions?.meta});let onError=e=>{(0,s.DV)(e)&&e.silent||this.#H({type:"error",error:e}),(0,s.DV)(e)||(this.#Z.config.onError?.(e,this),this.#Z.config.onSettled?.(this.state.data,e,this)),this.isFetchingOptimistic||this.scheduleGc(),this.isFetchingOptimistic=!1};return this.#W=(0,s.Mz)({fn:l.fetchFn,abort:n.abort.bind(n),onSuccess:e=>{if(void 0===e){onError(Error(`${this.queryHash} data is undefined`));return}this.setData(e),this.#Z.config.onSuccess?.(e,this),this.#Z.config.onSettled?.(e,this.state.error,this),this.isFetchingOptimistic||this.scheduleGc(),this.isFetchingOptimistic=!1},onError,onFail:(e,t)=>{this.#H({type:"failed",failureCount:e,error:t})},onPause:()=>{this.#H({type:"pause"})},onContinue:()=>{this.#H({type:"continue"})},retry:l.options.retry,retryDelay:l.options.retryDelay,networkMode:l.options.networkMode}),this.#W.promise}#H(e){this.state=(t=>{switch(e.type){case"failed":return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...t,fetchStatus:"paused"};case"continue":return{...t,fetchStatus:"fetching"};case"fetch":return{...t,...fetchState(t.data,this.options),fetchMeta:e.meta??null};case"success":return{...t,data:e.data,dataUpdateCount:t.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":let n=e.error;if((0,s.DV)(n)&&n.revert&&this.#V)return{...this.#V,fetchStatus:"idle"};return{...t,error:n,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:n,fetchStatus:"idle",status:"error"};case"invalidate":return{...t,isInvalidated:!0};case"setState":return{...t,...e.state}}})(this.state),i.V.batch(()=>{this.#G.forEach(e=>{e.onQueryUpdate()}),this.#Z.notify({query:this,type:"updated",action:e})})}};function fetchState(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:(0,s.Kw)(t.networkMode)?"fetching":"paused",...void 0===e&&{error:null,status:"pending"}}}},48907:function(e,t,n){"use strict";n.d(t,{F:function(){return i}});var o=n(24139),i=class{#X;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),(0,o.PN)(this.gcTime)&&(this.#X=setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(o.sk?1/0:3e5))}clearGcTimeout(){this.#X&&(clearTimeout(this.#X),this.#X=void 0)}}},72008:function(e,t,n){"use strict";n.d(t,{DV:function(){return isCancelledError},Kw:function(){return canFetch},Mz:function(){return createRetryer}});var o=n(66474),i=n(14304),s=n(24139);function defaultRetryDelay(e){return Math.min(1e3*2**e,3e4)}function canFetch(e){return(e??"online")!=="online"||i.N.isOnline()}var l=class{constructor(e){this.revert=e?.revert,this.silent=e?.silent}};function isCancelledError(e){return e instanceof l}function createRetryer(e){let t,n,c,u=!1,d=0,p=!1,f=new Promise((e,t)=>{n=e,c=t}),shouldPause=()=>!o.j.isFocused()||"always"!==e.networkMode&&!i.N.isOnline(),resolve=o=>{p||(p=!0,e.onSuccess?.(o),t?.(),n(o))},reject=n=>{p||(p=!0,e.onError?.(n),t?.(),c(n))},pause=()=>new Promise(n=>{t=e=>{let t=p||!shouldPause();return t&&n(e),t},e.onPause?.()}).then(()=>{t=void 0,p||e.onContinue?.()}),run=()=>{let t;if(!p){try{t=e.fn()}catch(e){t=Promise.reject(e)}Promise.resolve(t).then(resolve).catch(t=>{if(p)return;let n=e.retry??(s.sk?0:3),o=e.retryDelay??defaultRetryDelay,i="function"==typeof o?o(d,t):o,l=!0===n||"number"==typeof n&&d{if(shouldPause())return pause()}).then(()=>{u?reject(t):run()})})}};return canFetch(e.networkMode)?run():pause().then(run),{promise:f,cancel:t=>{p||(reject(new l(t)),e.abort?.())},continue:()=>{let e=t?.();return e?f:Promise.resolve()},cancelRetry:()=>{u=!0},continueRetry:()=>{u=!1}}}},7506:function(e,t,n){"use strict";n.d(t,{l:function(){return o}});var o=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}}},24139:function(e,t,n){"use strict";n.d(t,{CN:function(){return i},Ht:function(){return addToStart},Kp:function(){return timeUntilStale},PN:function(){return isValidTimeout},Rm:function(){return hashQueryKeyByOptions},SE:function(){return functionalUpdate},VS:function(){return shallowEqualObjects},VX:function(){return addToEnd},X7:function(){return matchMutation},Ym:function(){return hashKey},ZT:function(){return noop},_v:function(){return sleep},_x:function(){return matchQuery},oE:function(){return replaceData},sk:function(){return o},to:function(){return partialMatchKey}});var o="undefined"==typeof window||"Deno"in globalThis;function noop(){}function functionalUpdate(e,t){return"function"==typeof e?e(t):e}function isValidTimeout(e){return"number"==typeof e&&e>=0&&e!==1/0}function timeUntilStale(e,t){return Math.max(e+(t||0)-Date.now(),0)}function matchQuery(e,t){let{type:n="all",exact:o,fetchStatus:i,predicate:s,queryKey:l,stale:c}=e;if(l){if(o){if(t.queryHash!==hashQueryKeyByOptions(l,t.options))return!1}else if(!partialMatchKey(t.queryKey,l))return!1}if("all"!==n){let e=t.isActive();if("active"===n&&!e||"inactive"===n&&e)return!1}return("boolean"!=typeof c||t.isStale()===c)&&(!i||i===t.state.fetchStatus)&&(!s||!!s(t))}function matchMutation(e,t){let{exact:n,status:o,predicate:i,mutationKey:s}=e;if(s){if(!t.options.mutationKey)return!1;if(n){if(hashKey(t.options.mutationKey)!==hashKey(s))return!1}else if(!partialMatchKey(t.options.mutationKey,s))return!1}return(!o||t.state.status===o)&&(!i||!!i(t))}function hashQueryKeyByOptions(e,t){let n=t?.queryKeyHashFn||hashKey;return n(e)}function hashKey(e){return JSON.stringify(e,(e,t)=>isPlainObject(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function partialMatchKey(e,t){return e===t||typeof e==typeof t&&!!e&&!!t&&"object"==typeof e&&"object"==typeof t&&!Object.keys(t).some(n=>!partialMatchKey(e[n],t[n]))}function shallowEqualObjects(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function isPlainArray(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function isPlainObject(e){if(!hasObjectPrototype(e))return!1;let t=e.constructor;if(void 0===t)return!0;let n=t.prototype;return!!(hasObjectPrototype(n)&&n.hasOwnProperty("isPrototypeOf"))}function hasObjectPrototype(e){return"[object Object]"===Object.prototype.toString.call(e)}function sleep(e){return new Promise(t=>{setTimeout(t,e)})}function replaceData(e,t,n){return"function"==typeof n.structuralSharing?n.structuralSharing(e,t):!1!==n.structuralSharing?function replaceEqualDeep(e,t){if(e===t)return e;let n=isPlainArray(e)&&isPlainArray(t);if(n||isPlainObject(e)&&isPlainObject(t)){let o=n?e:Object.keys(e),i=o.length,s=n?t:Object.keys(t),l=s.length,c=n?[]:{},u=0;for(let i=0;in?o.slice(1):o}function addToStart(e,t,n=0){let o=[t,...e];return n&&o.length>n?o.slice(0,-1):o}var i=Symbol()},30202:function(e,t,n){"use strict";n.d(t,{NL:function(){return useQueryClient},aH:function(){return QueryClientProvider}});var o=n(67294),i=n(85893),s=o.createContext(void 0),useQueryClient=e=>{let t=o.useContext(s);if(e)return e;if(!t)throw Error("No QueryClient set, use QueryClientProvider to set one");return t},QueryClientProvider=({client:e,children:t})=>(o.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,i.jsx)(s.Provider,{value:e,children:t}))},98029:function(e,t,n){"use strict";n.d(t,{D:function(){return useMutation}});var o=n(67294),i=n(59289),s=n(27037),l=n(7506),c=n(24139),u=class extends l.l{#b;#C=void 0;#Y;#$;constructor(e,t){super(),this.#b=e,this.setOptions(t),this.bindMethods(),this.#ee()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#b.defaultMutationOptions(e),(0,c.VS)(this.options,t)||this.#b.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#Y,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,c.Ym)(t.mutationKey)!==(0,c.Ym)(this.options.mutationKey)?this.reset():this.#Y?.state.status==="pending"&&this.#Y.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#Y?.removeObserver(this)}onMutationUpdate(e){this.#ee(),this.#_(e)}getCurrentResult(){return this.#C}reset(){this.#Y?.removeObserver(this),this.#Y=void 0,this.#ee(),this.#_()}mutate(e,t){return this.#$=t,this.#Y?.removeObserver(this),this.#Y=this.#b.getMutationCache().build(this.#b,this.options),this.#Y.addObserver(this),this.#Y.execute(e)}#ee(){let e=this.#Y?.state??(0,i.R)();this.#C={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#_(e){s.V.batch(()=>{if(this.#$&&this.hasListeners()){let t=this.#C.variables,n=this.#C.context;e?.type==="success"?(this.#$.onSuccess?.(e.data,t,n),this.#$.onSettled?.(e.data,null,t,n)):e?.type==="error"&&(this.#$.onError?.(e.error,t,n),this.#$.onSettled?.(void 0,e.error,t,n))}this.listeners.forEach(e=>{e(this.#C)})})}},d=n(30202),p=n(86290);function useMutation(e,t){let n=(0,d.NL)(t),[i]=o.useState(()=>new u(n,e));o.useEffect(()=>{i.setOptions(e)},[i,e]);let l=o.useSyncExternalStore(o.useCallback(e=>i.subscribe(s.V.batchCalls(e)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),c=o.useCallback((e,t)=>{i.mutate(e,t).catch(p.Z)},[i]);if(l.error&&(0,p.L)(i.options.throwOnError,[l.error]))throw l.error;return{...l,mutate:c,mutateAsync:l.mutate}}},86290:function(e,t,n){"use strict";function shouldThrowError(e,t){return"function"==typeof e?e(...t):!!e}function noop(){}n.d(t,{L:function(){return shouldThrowError},Z:function(){return noop}})},52425:function(e,t,n){"use strict";function getAccount(e){let t=e.state.current,n=e.state.connections.get(t),o=n?.accounts,i=o?.[0],s=e.chains.find(e=>e.id===n?.chainId),l=e.state.status;switch(l){case"connected":return{address:i,addresses:o,chain:s,chainId:n?.chainId,connector:n?.connector,isConnected:!0,isConnecting:!1,isDisconnected:!1,isReconnecting:!1,status:l};case"reconnecting":return{address:i,addresses:o,chain:s,chainId:n?.chainId,connector:n?.connector,isConnected:!!i,isConnecting:!1,isDisconnected:!1,isReconnecting:!0,status:l};case"connecting":return{address:i,addresses:o,chain:s,chainId:n?.chainId,connector:n?.connector,isConnected:!1,isConnecting:!0,isDisconnected:!1,isReconnecting:!1,status:l};case"disconnected":return{address:void 0,addresses:void 0,chain:void 0,chainId:void 0,connector:void 0,isConnected:!1,isConnecting:!1,isDisconnected:!0,isReconnecting:!1,status:l}}}n.d(t,{D:function(){return getAccount}})},33397:function(e,t,n){"use strict";n.d(t,{u:function(){return watchAccount}});var o=n(74751),i=n(52425);function watchAccount(e,t){let{onChange:n}=t;return e.subscribe(()=>(0,i.D)(e),n,{equalityFn(e,t){let{connector:n,...i}=e,{connector:s,...l}=t;return(0,o.v)(i,l)&&n?.id===s?.id&&n?.uid===s?.uid}})}},7066:function(e,t,n){"use strict";n.d(t,{G:function(){return BaseError}});var o,i,s=n(79983);let getVersion=()=>`@wagmi/core@${s.i}`;var __classPrivateFieldGet=function(e,t,n,o){if("a"===n&&!o)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(e):o?o.value:t.get(e)};let BaseError=class BaseError extends Error{get docsBaseUrl(){return"https://wagmi.sh/core"}get version(){return getVersion()}constructor(e,t={}){super(),o.add(this),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"WagmiCoreError"});let n=t.cause instanceof BaseError?t.cause.details:t.cause?.message?t.cause.message:t.details,i=t.cause instanceof BaseError&&t.cause.docsPath||t.docsPath;this.message=[e||"An error occurred.","",...t.metaMessages?[...t.metaMessages,""]:[],...i?[`Docs: ${this.docsBaseUrl}${i}.html${t.docsSlug?`#${t.docsSlug}`:""}`]:[],...n?[`Details: ${n}`]:[],`Version: ${this.version}`].join("\n"),t.cause&&(this.cause=t.cause),this.details=n,this.docsPath=i,this.metaMessages=t.metaMessages,this.shortMessage=e}walk(e){return __classPrivateFieldGet(this,o,"m",i).call(this,this,e)}};o=new WeakSet,i=function _BaseError_walk(e,t){return t?.(e)?e:e.cause?__classPrivateFieldGet(this,o,"m",_BaseError_walk).call(this,e.cause,t):e}},87675:function(e,t,n){"use strict";n.d(t,{JK:function(){return ConnectorAccountNotFoundError},X4:function(){return ChainNotConfiguredError},aH:function(){return ConnectorNotConnectedError},wi:function(){return ConnectorAlreadyConnectedError}});var o=n(7066);let ChainNotConfiguredError=class ChainNotConfiguredError extends o.G{constructor(){super("Chain not configured."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ChainNotConfiguredError"})}};let ConnectorAlreadyConnectedError=class ConnectorAlreadyConnectedError extends o.G{constructor(){super("Connector already connected."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ConnectorAlreadyConnectedError"})}};let ConnectorNotConnectedError=class ConnectorNotConnectedError extends o.G{constructor(){super("Connector not connected."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ConnectorNotConnectedError"})}};let ConnectorAccountNotFoundError=class ConnectorAccountNotFoundError extends o.G{constructor({address:e,connector:t}){super(`Account "${e}" not found for connector "${t.name}".`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ConnectorAccountNotFoundError"})}}},74751:function(e,t,n){"use strict";n.d(t,{v:function(){return function deepEqual(e,t){if(e===t)return!0;if(e&&t&&"object"==typeof e&&"object"==typeof t){let n,o;if(e.constructor!==t.constructor)return!1;if(Array.isArray(e)&&Array.isArray(t)){if((n=e.length)!==t.length)return!1;for(o=n;0!=o--;)if(!deepEqual(e[o],t[o]))return!1;return!0}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();let i=Object.keys(e);if((n=i.length)!==Object.keys(t).length)return!1;for(o=n;0!=o--;)if(!Object.prototype.hasOwnProperty.call(t,i[o]))return!1;for(o=n;0!=o--;){let n=i[o];if(n&&!deepEqual(e[n],t[n]))return!1}return!0}return e!=e&&t!=t}}})},81946:function(e,t,n){"use strict";function getAction(e,t,n){let o=e[t.name];if("function"==typeof o)return o;let i=e[n];return"function"==typeof i?i:n=>t(e,n)}n.d(t,{s:function(){return getAction}})},79983:function(e,t,n){"use strict";n.d(t,{i:function(){return o}});let o="2.6.9"},90512:function(e,t,n){"use strict";t.Z=function(){for(var e,t,n=0,o="",i=arguments.length;nvoid 0!==e).length>0)}({request:v})&&!i)try{return await scheduleMulticall(e,{...v,blockNumber:f,blockTag:m})}catch(e){if(!(e instanceof c.pZ)&&!(e instanceof c.mm))throw e}let w=await e.request({method:"eth_call",params:i?[v,o,i]:[v,o]});if("0x"===w)return{data:void 0};return{data:w}}catch(c){let o=function(e){if(!(e instanceof l.G))return;let t=e.walk();return"object"==typeof t?.data?t.data?.data:t.data}(c),{offchainLookup:i,offchainLookupSignature:s}=await n.e(422).then(n.bind(n,10422));if(o?.slice(0,10)===s&&M)return{data:await i(e,{data:o,to:M})};throw function(e,{docsPath:t,...n}){let o=(()=>{let t=(0,w.k)(e,n);return t instanceof v.cj?e:t})();return new u.cg(o,{docsPath:t,...n})}(c,{...t,account:F,chain:e.chain})}}async function scheduleMulticall(e,t){let{batchSize:n=1024,wait:o=0}="object"==typeof e.batch?.multicall?e.batch.multicall:{},{blockNumber:s,blockTag:l="latest",data:d,multicallAddress:p,to:g}=t,v=p;if(!v){if(!e.chain)throw new c.pZ;v=(0,b.L)({blockNumber:s,chain:e.chain,contract:"multicall3"})}let w=s?(0,y.eC)(s):void 0,C=w||l,{schedule:E}=(0,x.S)({id:`${e.uid}.${C}`,wait:o,shouldSplitBatch(e){let t=e.reduce((e,{data:t})=>e+(t.length-2),0);return t>2*n},fn:async t=>{let n=t.map(e=>({allowFailure:!0,callData:e.data,target:e.to})),o=(0,m.R)({abi:i.F8,args:[n],functionName:"aggregate3"}),s=await e.request({method:"eth_call",params:[{data:o,to:v},C]});return(0,f.k)({abi:i.F8,args:[n],functionName:"aggregate3",data:s||"0x"})}}),[{returnData:A,success:k}]=await E({data:d,to:g});if(!k)throw new u.VQ({data:A});return"0x"===A?{data:void 0}:{data:A}}function parseStateMapping(e){if(e&&0!==e.length)return e.reduce((e,{slot:t,value:n})=>{if(66!==t.length)throw new d.W_({size:t.length,targetSize:66,type:"hex"});if(66!==n.length)throw new d.W_({size:n.length,targetSize:66,type:"hex"});return e[t]=n,e},{})}},66403:function(e,t,n){"use strict";n.d(t,{R:function(){return i}});var o=n(86164);let i=(0,o.a)({id:1,name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://cloudflare-eth.com"]}},blockExplorers:{default:{name:"Etherscan",url:"https://etherscan.io",apiUrl:"https://api.etherscan.io/api"}},contracts:{ensRegistry:{address:"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"},ensUniversalResolver:{address:"0xce01f8eee7E479C928F8919abD53E553a36CeF67",blockCreated:19258213},multicall3:{address:"0xca11bde05977b3631167028862be2a173976ca11",blockCreated:14353601}}})},16189:function(e,t,n){"use strict";let o;n.d(t,{e:function(){return createClient}});var i=n(14503);let s=256;function createClient(e){let{batch:t,cacheTime:n=e.pollingInterval??4e3,key:l="base",name:c="Base Client",pollingInterval:u=4e3,type:d="base"}=e,p=e.chain,f=e.account?(0,i.T)(e.account):void 0,{config:m,request:g,value:b}=e.transport({chain:p,pollingInterval:u}),y={...m,...b},v={account:f,batch:t,cacheTime:n,chain:p,key:l,name:c,pollingInterval:u,request:g,transport:y,type:d,uid:function(e=11){if(!o||s+e>512){o="",s=0;for(let e=0;e<256;e++)o+=(256+256*Math.random()|0).toString(16).substring(1)}return o.substring(s,s+++e)}()};return Object.assign(v,{extend:function extend(e){return t=>{let n=t(e);for(let e in v)delete n[e];let o={...e,...n};return Object.assign(o,{extend:extend(o)})}}(v)})}},91628:function(e,t,n){"use strict";n.d(t,{q:function(){return createTransport}});var o=n(62027),i=n(78863),s=n(39028),l=n(7760);function createTransport({key:e,name:t,request:n,retryCount:c=3,retryDelay:u=150,timeout:d,type:p},f){return{config:{key:e,name:t,request:n,retryCount:c,retryDelay:u,timeout:d,type:p},request:function(e,t={}){return async(n,c={})=>{let{retryDelay:u=150,retryCount:d=3}={...t,...c};return(0,l.J)(async()=>{try{return await e(n)}catch(e){switch(e.code){case s.s7.code:throw new s.s7(e);case s.B.code:throw new s.B(e);case s.LX.code:throw new s.LX(e);case s.nY.code:throw new s.nY(e);case s.XS.code:throw new s.XS(e);case s.yR.code:throw new s.yR(e);case s.Og.code:throw new s.Og(e);case s.pT.code:throw new s.pT(e);case s.KB.code:throw new s.KB(e);case s.gS.code:throw new s.gS(e);case s.Pv.code:throw new s.Pv(e);case s.GD.code:throw new s.GD(e);case s.ab.code:throw new s.ab(e);case s.PE.code:throw new s.PE(e);case s.Ts.code:throw new s.Ts(e);case s.u5.code:throw new s.u5(e);case s.I0.code:throw new s.I0(e);case s.x3.code:throw new s.x3(e);case 5e3:throw new s.ab(e);default:if(e instanceof o.G)throw e;throw new s.ir(e)}}},{delay:({count:e,error:t})=>{if(t&&t instanceof i.Gg){let e=t?.headers?.get("Retry-After");if(e?.match(/\d/))return 1e3*parseInt(e)}return~~(1<"code"in e&&"number"==typeof e.code?-1===e.code||e.code===s.Pv.code||e.code===s.XS.code:!(e instanceof i.Gg)||!e.status||403===e.status||408===e.status||413===e.status||429===e.status||500===e.status||502===e.status||503===e.status||504===e.status})}}(n,{retryCount:c,retryDelay:u}),value:f}}},16693:function(e,t,n){"use strict";n.d(t,{$o:function(){return d},F8:function(){return o},X$:function(){return u},du:function(){return l},k3:function(){return s},nZ:function(){return c}});let o=[{inputs:[{components:[{name:"target",type:"address"},{name:"allowFailure",type:"bool"},{name:"callData",type:"bytes"}],name:"calls",type:"tuple[]"}],name:"aggregate3",outputs:[{components:[{name:"success",type:"bool"},{name:"returnData",type:"bytes"}],name:"returnData",type:"tuple[]"}],stateMutability:"view",type:"function"}],i=[{inputs:[],name:"ResolverNotFound",type:"error"},{inputs:[],name:"ResolverWildcardNotSupported",type:"error"},{inputs:[],name:"ResolverNotContract",type:"error"},{inputs:[{name:"returnData",type:"bytes"}],name:"ResolverError",type:"error"},{inputs:[{components:[{name:"status",type:"uint16"},{name:"message",type:"string"}],name:"errors",type:"tuple[]"}],name:"HttpError",type:"error"}],s=[...i,{name:"resolve",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes"},{name:"data",type:"bytes"}],outputs:[{name:"",type:"bytes"},{name:"address",type:"address"}]},{name:"resolve",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes"},{name:"data",type:"bytes"},{name:"gateways",type:"string[]"}],outputs:[{name:"",type:"bytes"},{name:"address",type:"address"}]}],l=[...i,{name:"reverse",type:"function",stateMutability:"view",inputs:[{type:"bytes",name:"reverseName"}],outputs:[{type:"string",name:"resolvedName"},{type:"address",name:"resolvedAddress"},{type:"address",name:"reverseResolver"},{type:"address",name:"resolver"}]},{name:"reverse",type:"function",stateMutability:"view",inputs:[{type:"bytes",name:"reverseName"},{type:"string[]",name:"gateways"}],outputs:[{type:"string",name:"resolvedName"},{type:"address",name:"resolvedAddress"},{type:"address",name:"reverseResolver"},{type:"address",name:"resolver"}]}],c=[{name:"text",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"},{name:"key",type:"string"}],outputs:[{name:"",type:"string"}]}],u=[{name:"addr",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"}],outputs:[{name:"",type:"address"}]},{name:"addr",type:"function",stateMutability:"view",inputs:[{name:"name",type:"bytes32"},{name:"coinType",type:"uint256"}],outputs:[{name:"",type:"bytes"}]}],d=[{inputs:[{internalType:"address",name:"_signer",type:"address"},{internalType:"bytes32",name:"_hash",type:"bytes32"},{internalType:"bytes",name:"_signature",type:"bytes"}],stateMutability:"nonpayable",type:"constructor"}]},21746:function(e,t,n){"use strict";n.d(t,{$:function(){return o},Up:function(){return i},hZ:function(){return s}});let o={1:"An `assert` condition failed.",17:"Arithmetic operation resulted in underflow or overflow.",18:"Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).",33:"Attempted to convert to an invalid type.",34:"Attempted to access a storage byte array that is incorrectly encoded.",49:"Performed `.pop()` on an empty array",50:"Array index is out of bounds.",65:"Allocated too much memory or created an array which is too large.",81:"Attempted to call a zero-initialized variable of internal function type."},i={inputs:[{name:"message",type:"string"}],name:"Error",type:"error"},s={inputs:[{name:"reason",type:"uint256"}],name:"Panic",type:"error"}},84192:function(e,t,n){"use strict";n.d(t,{Bd:function(){return s},Zn:function(){return i},ez:function(){return o}});let o={gwei:9,wei:18},i={ether:-9,wei:9},s={ether:-18,gwei:-9}},57412:function(e,t,n){"use strict";n.d(t,{CI:function(){return InvalidAbiDecodingTypeError},FM:function(){return AbiEventSignatureEmptyTopicsError},Gy:function(){return DecodeLogTopicsMismatch},KY:function(){return BytesSizeMismatchError},M4:function(){return AbiEncodingBytesSizeMismatchError},MX:function(){return AbiFunctionOutputsNotFoundError},S4:function(){return AbiItemAmbiguityError},SM:function(){return DecodeLogDataMismatch},cO:function(){return AbiConstructorParamsNotFoundError},dh:function(){return InvalidAbiEncodingTypeError},fM:function(){return AbiConstructorNotFoundError},fs:function(){return AbiEncodingLengthMismatchError},gr:function(){return AbiEncodingArrayLengthMismatchError},hn:function(){return InvalidArrayError},lC:function(){return AbiEventSignatureNotFoundError},mv:function(){return AbiEventNotFoundError},wM:function(){return InvalidDefinitionTypeError},wb:function(){return AbiDecodingZeroDataError},xB:function(){return AbiDecodingDataSizeTooSmallError},xL:function(){return AbiFunctionNotFoundError},yP:function(){return AbiErrorSignatureNotFoundError}});var o=n(80522),i=n(39135),s=n(62027);let AbiConstructorNotFoundError=class AbiConstructorNotFoundError extends s.G{constructor({docsPath:e}){super("A constructor was not found on the ABI.\nMake sure you are using the correct ABI and that the constructor exists on it.",{docsPath:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiConstructorNotFoundError"})}};let AbiConstructorParamsNotFoundError=class AbiConstructorParamsNotFoundError extends s.G{constructor({docsPath:e}){super("Constructor arguments were provided (`args`), but a constructor parameters (`inputs`) were not found on the ABI.\nMake sure you are using the correct ABI, and that the `inputs` attribute on the constructor exists.",{docsPath:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiConstructorParamsNotFoundError"})}};let AbiDecodingDataSizeTooSmallError=class AbiDecodingDataSizeTooSmallError extends s.G{constructor({data:e,params:t,size:n}){super(`Data size of ${n} bytes is too small for given parameters.`,{metaMessages:[`Params: (${(0,o.h)(t,{includeName:!0})})`,`Data: ${e} (${n} bytes)`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiDecodingDataSizeTooSmallError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"params",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"size",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=e,this.params=t,this.size=n}};let AbiDecodingZeroDataError=class AbiDecodingZeroDataError extends s.G{constructor(){super('Cannot decode zero data ("0x") with ABI parameters.'),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiDecodingZeroDataError"})}};let AbiEncodingArrayLengthMismatchError=class AbiEncodingArrayLengthMismatchError extends s.G{constructor({expectedLength:e,givenLength:t,type:n}){super(`ABI encoding array length mismatch for type ${n}. Expected length: ${e} Given length: ${t}`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiEncodingArrayLengthMismatchError"})}};let AbiEncodingBytesSizeMismatchError=class AbiEncodingBytesSizeMismatchError extends s.G{constructor({expectedSize:e,value:t}){super(`Size of bytes "${t}" (bytes${(0,i.d)(t)}) does not match expected size (bytes${e}).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiEncodingBytesSizeMismatchError"})}};let AbiEncodingLengthMismatchError=class AbiEncodingLengthMismatchError extends s.G{constructor({expectedLength:e,givenLength:t}){super(`ABI encoding params/values length mismatch. Expected length (params): ${e} @@ -1140,11 +1140,11 @@ Cannot decode function result without knowing what the parameter types are. Make sure you are using the correct ABI and that the function exists on it.`,{docsPath:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiFunctionOutputsNotFoundError"})}};let AbiItemAmbiguityError=class AbiItemAmbiguityError extends s.G{constructor(e,t){super("Found ambiguous types in overloaded ABI items.",{metaMessages:[`\`${e.type}\` in \`${(0,o.t)(e.abiItem)}\`, and`,`\`${t.type}\` in \`${(0,o.t)(t.abiItem)}\``,"","These types encode differently and cannot be distinguished at runtime.","Remove one of the ambiguous items in the ABI."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiItemAmbiguityError"})}};let BytesSizeMismatchError=class BytesSizeMismatchError extends s.G{constructor({expectedSize:e,givenSize:t}){super(`Expected bytes${e}, got bytes${t}.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BytesSizeMismatchError"})}};let DecodeLogDataMismatch=class DecodeLogDataMismatch extends s.G{constructor({abiItem:e,data:t,params:n,size:i}){super(`Data size of ${i} bytes is too small for non-indexed event parameters.`,{metaMessages:[`Params: (${(0,o.h)(n,{includeName:!0})})`,`Data: ${t} (${i} bytes)`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"DecodeLogDataMismatch"}),Object.defineProperty(this,"abiItem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"params",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"size",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.abiItem=e,this.data=t,this.params=n,this.size=i}};let DecodeLogTopicsMismatch=class DecodeLogTopicsMismatch extends s.G{constructor({abiItem:e,param:t}){super(`Expected a topic for indexed event parameter${t.name?` "${t.name}"`:""} on event "${(0,o.t)(e,{includeName:!0})}".`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"DecodeLogTopicsMismatch"}),Object.defineProperty(this,"abiItem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.abiItem=e}};let InvalidAbiEncodingTypeError=class InvalidAbiEncodingTypeError extends s.G{constructor(e,{docsPath:t}){super(`Type "${e}" is not a valid encoding type. Please provide a valid ABI type.`,{docsPath:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAbiEncodingType"})}};let InvalidAbiDecodingTypeError=class InvalidAbiDecodingTypeError extends s.G{constructor(e,{docsPath:t}){super(`Type "${e}" is not a valid decoding type. Please provide a valid ABI type.`,{docsPath:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAbiDecodingType"})}};let InvalidArrayError=class InvalidArrayError extends s.G{constructor(e){super(`Value "${e}" is not a valid array.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidArrayError"})}};let InvalidDefinitionTypeError=class InvalidDefinitionTypeError extends s.G{constructor(e){super(`"${e}" is not a valid definition type. -Valid types: "function", "event", "error"`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidDefinitionTypeError"})}}},26087:function(e,t,n){"use strict";n.d(t,{b:function(){return InvalidAddressError}});var o=n(62027);let InvalidAddressError=class InvalidAddressError extends o.G{constructor({address:e}){super(`Address "${e}" is invalid.`,{metaMessages:["- Address must be a hex value of 20 bytes (40 hex characters).","- Address must match its checksum counterpart."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAddressError"})}}},62027:function(e,t,n){"use strict";n.d(t,{G:function(){return BaseError}});var o=n(35280);let BaseError=class BaseError extends Error{constructor(e,t={}){super(),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ViemError"}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:(0,o.bo)()});let n=t.cause instanceof BaseError?t.cause.details:t.cause?.message?t.cause.message:t.details,i=t.cause instanceof BaseError&&t.cause.docsPath||t.docsPath;this.message=[e||"An error occurred.","",...t.metaMessages?[...t.metaMessages,""]:[],...i?[`Docs: https://viem.sh${i}${t.docsSlug?`#${t.docsSlug}`:""}`]:[],...n?[`Details: ${n}`]:[],`Version: ${this.version}`].join("\n"),t.cause&&(this.cause=t.cause),this.details=n,this.docsPath=i,this.metaMessages=t.metaMessages,this.shortMessage=e}walk(e){return function walk(e,t){return t?.(e)?e:e&&"object"==typeof e&&"cause"in e?walk(e.cause,t):t?null:e}(this,e)}}},80377:function(e,t,n){"use strict";n.d(t,{hJ:function(){return InvalidChainIdError},mm:function(){return ChainDoesNotSupportContract},pZ:function(){return ClientChainNotConfiguredError}});var o=n(62027);let ChainDoesNotSupportContract=class ChainDoesNotSupportContract extends o.G{constructor({blockNumber:e,chain:t,contract:n}){super(`Chain "${t.name}" does not support contract "${n.name}".`,{metaMessages:["This could be due to any of the following:",...e&&n.blockCreated&&n.blockCreated>e?[`- The contract "${n.name}" was not deployed until block ${n.blockCreated} (current block ${e}).`]:[`- The chain does not have the contract "${n.name}" configured.`]]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ChainDoesNotSupportContract"})}};let ClientChainNotConfiguredError=class ClientChainNotConfiguredError extends o.G{constructor(){super("No chain was provided to the Client."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ClientChainNotConfiguredError"})}};let InvalidChainIdError=class InvalidChainIdError extends o.G{constructor({chainId:e}){super("number"==typeof e?`Chain ID "${e}" is invalid.`:"Chain ID is invalid."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidChainIdError"})}}},97405:function(e,t,n){"use strict";n.d(t,{cg:function(){return CallExecutionError},uq:function(){return ContractFunctionExecutionError},Lu:function(){return ContractFunctionRevertedError},Dk:function(){return ContractFunctionZeroDataError},VQ:function(){return RawContractError}});var o=n(14503),i=n(21746),s=n(86899),l=n(80522),c=n(96070);function formatAbiItemWithArgs({abiItem:e,args:t,includeFunctionName:n=!0,includeName:o=!1}){if("name"in e&&"inputs"in e&&e.inputs)return`${n?e.name:""}(${e.inputs.map((e,n)=>`${o&&e.name?`${e.name}: `:""}${"object"==typeof t[n]?(0,c.P)(t[n]):t[n]}`).join(", ")})`}var u=n(40840),d=n(39625),p=n(67795),f=n(57412),m=n(62027),b=n(20443),g=n(33639),y=n(35280);let CallExecutionError=class CallExecutionError extends m.G{constructor(e,{account:t,docsPath:n,chain:i,data:s,gas:l,gasPrice:c,maxFeePerGas:u,maxPriorityFeePerGas:f,nonce:m,to:y,value:v,stateOverride:w}){let C=t?(0,o.T)(t):void 0,E=(0,g.xr)({from:C?.address,to:y,value:void 0!==v&&`${(0,d.d)(v)} ${i?.nativeCurrency?.symbol||"ETH"}`,data:s,gas:l,gasPrice:void 0!==c&&`${(0,p.o)(c)} gwei`,maxFeePerGas:void 0!==u&&`${(0,p.o)(u)} gwei`,maxPriorityFeePerGas:void 0!==f&&`${(0,p.o)(f)} gwei`,nonce:m});w&&(E+=` -${(0,b.Bj)(w)}`),super(e.shortMessage,{cause:e,docsPath:n,metaMessages:[...e.metaMessages?[...e.metaMessages," "]:[],"Raw Call Arguments:",E].filter(Boolean)}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"CallExecutionError"}),this.cause=e}};let ContractFunctionExecutionError=class ContractFunctionExecutionError extends m.G{constructor(e,{abi:t,args:n,contractAddress:o,docsPath:i,functionName:s,sender:c}){let d=(0,u.mE)({abi:t,args:n,name:s}),p=d?formatAbiItemWithArgs({abiItem:d,args:n,includeFunctionName:!1,includeName:!1}):void 0,f=d?(0,l.t)(d,{includeName:!0}):void 0,m=(0,g.xr)({address:o&&(0,y.CR)(o),function:f,args:p&&"()"!==p&&`${[...Array(s?.length??0).keys()].map(()=>" ").join("")}${p}`,sender:c});super(e.shortMessage||`An unknown error occurred while executing the contract function "${s}".`,{cause:e,docsPath:i,metaMessages:[...e.metaMessages?[...e.metaMessages," "]:[],"Contract Call:",m].filter(Boolean)}),Object.defineProperty(this,"abi",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"args",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"contractAddress",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"formattedArgs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"functionName",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"sender",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ContractFunctionExecutionError"}),this.abi=t,this.args=n,this.cause=e,this.contractAddress=o,this.functionName=s,this.sender=c}};let ContractFunctionRevertedError=class ContractFunctionRevertedError extends m.G{constructor({abi:e,data:t,functionName:n,message:o}){let c,u,d,p,m;if(t&&"0x"!==t)try{m=(0,s.p)({abi:e,data:t});let{abiItem:n,errorName:o,args:c}=m;if("Error"===o)d=c[0];else if("Panic"===o){let[e]=c;d=i.$[e]}else{let e=n?(0,l.t)(n,{includeName:!0}):void 0,t=n&&c?formatAbiItemWithArgs({abiItem:n,args:c,includeFunctionName:!1,includeName:!1}):void 0;u=[e?`Error: ${e}`:"",t&&"()"!==t?` ${[...Array(o?.length??0).keys()].map(()=>" ").join("")}${t}`:""]}}catch(e){c=e}else o&&(d=o);c instanceof f.yP&&(p=c.signature,u=[`Unable to decode signature "${p}" as it was not found on the provided ABI.`,"Make sure you are using the correct ABI and that the error exists on it.",`You can look up the decoded signature here: https://openchain.xyz/signatures?query=${p}.`]),super(d&&"execution reverted"!==d||p?[`The contract function "${n}" reverted with the following ${p?"signature":"reason"}:`,d||p].join("\n"):`The contract function "${n}" reverted.`,{cause:c,metaMessages:u}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ContractFunctionRevertedError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"reason",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"signature",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=m,this.reason=d,this.signature=p}};let ContractFunctionZeroDataError=class ContractFunctionZeroDataError extends m.G{constructor({functionName:e}){super(`The contract function "${e}" returned no data ("0x").`,{metaMessages:["This could be due to any of the following:",` - The contract does not have the function "${e}",`," - The parameters passed to the contract function may be invalid, or"," - The address is not a contract."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ContractFunctionZeroDataError"})}};let RawContractError=class RawContractError extends m.G{constructor({data:e,message:t}){super(t||""),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:3}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"RawContractError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=e}}},66238:function(e,t,n){"use strict";n.d(t,{KD:function(){return RecursiveReadLimitExceededError},T_:function(){return NegativeOffsetError},lQ:function(){return PositionOutOfBoundsError}});var o=n(62027);let NegativeOffsetError=class NegativeOffsetError extends o.G{constructor({offset:e}){super(`Offset \`${e}\` cannot be negative.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"NegativeOffsetError"})}};let PositionOutOfBoundsError=class PositionOutOfBoundsError extends o.G{constructor({length:e,position:t}){super(`Position \`${t}\` is out of bounds (\`0 < position < ${e}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"PositionOutOfBoundsError"})}};let RecursiveReadLimitExceededError=class RecursiveReadLimitExceededError extends o.G{constructor({count:e,limit:t}){super(`Recursive read limit of \`${t}\` exceeded (recursive read count: \`${e}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"RecursiveReadLimitExceededError"})}}},69760:function(e,t,n){"use strict";n.d(t,{$s:function(){return SizeExceedsPaddingSizeError},W_:function(){return InvalidBytesLengthError},mV:function(){return SliceOffsetOutOfBoundsError}});var o=n(62027);let SliceOffsetOutOfBoundsError=class SliceOffsetOutOfBoundsError extends o.G{constructor({offset:e,position:t,size:n}){super(`Slice ${"start"===t?"starting":"ending"} at offset "${e}" is out-of-bounds (size: ${n}).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SliceOffsetOutOfBoundsError"})}};let SizeExceedsPaddingSizeError=class SizeExceedsPaddingSizeError extends o.G{constructor({size:e,targetSize:t,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} size (${e}) exceeds padding size (${t}).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SizeExceedsPaddingSizeError"})}};let InvalidBytesLengthError=class InvalidBytesLengthError extends o.G{constructor({size:e,targetSize:t,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} is expected to be ${t} ${n} long, but is ${e} ${n} long.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidBytesLengthError"})}}},87788:function(e,t,n){"use strict";n.d(t,{J5:function(){return IntegerOutOfRangeError},M6:function(){return SizeOverflowError},yr:function(){return InvalidBytesBooleanError}});var o=n(62027);let IntegerOutOfRangeError=class IntegerOutOfRangeError extends o.G{constructor({max:e,min:t,signed:n,size:o,value:i}){super(`Number "${i}" is not in safe ${o?`${8*o}-bit ${n?"signed":"unsigned"} `:""}integer range ${e?`(${t} to ${e})`:`(above ${t})`}`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"IntegerOutOfRangeError"})}};let InvalidBytesBooleanError=class InvalidBytesBooleanError extends o.G{constructor(e){super(`Bytes value "${e}" is not a valid boolean. The bytes array must contain a single byte of either a 0 or 1 value.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidBytesBooleanError"})}};let SizeOverflowError=class SizeOverflowError extends o.G{constructor({givenSize:e,maxSize:t}){super(`Size cannot exceed ${t} bytes. Given size: ${e} bytes.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SizeOverflowError"})}}},26445:function(e,t,n){"use strict";n.d(t,{C_:function(){return InsufficientFundsError},G$:function(){return FeeCapTooLowError},Hh:function(){return FeeCapTooHighError},M_:function(){return ExecutionRevertedError},WF:function(){return IntrinsicGasTooHighError},ZI:function(){return NonceTooHighError},cj:function(){return UnknownNodeError},cs:function(){return TipAboveFeeCapError},dR:function(){return IntrinsicGasTooLowError},pZ:function(){return TransactionTypeNotSupportedError},se:function(){return NonceMaxValueError},vU:function(){return NonceTooLowError}});var o=n(67795),i=n(62027);let ExecutionRevertedError=class ExecutionRevertedError extends i.G{constructor({cause:e,message:t}={}){let n=t?.replace("execution reverted: ","")?.replace("execution reverted","");super(`Execution reverted ${n?`with reason: ${n}`:"for an unknown reason"}.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ExecutionRevertedError"})}};Object.defineProperty(ExecutionRevertedError,"code",{enumerable:!0,configurable:!0,writable:!0,value:3}),Object.defineProperty(ExecutionRevertedError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/execution reverted/});let FeeCapTooHighError=class FeeCapTooHighError extends i.G{constructor({cause:e,maxFeePerGas:t}={}){super(`The fee cap (\`maxFeePerGas\`${t?` = ${(0,o.o)(t)} gwei`:""}) cannot be higher than the maximum allowed value (2^256-1).`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"FeeCapTooHigh"})}};Object.defineProperty(FeeCapTooHighError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/max fee per gas higher than 2\^256-1|fee cap higher than 2\^256-1/});let FeeCapTooLowError=class FeeCapTooLowError extends i.G{constructor({cause:e,maxFeePerGas:t}={}){super(`The fee cap (\`maxFeePerGas\`${t?` = ${(0,o.o)(t)}`:""} gwei) cannot be lower than the block base fee.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"FeeCapTooLow"})}};Object.defineProperty(FeeCapTooLowError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/max fee per gas less than block base fee|fee cap less than block base fee|transaction is outdated/});let NonceTooHighError=class NonceTooHighError extends i.G{constructor({cause:e,nonce:t}={}){super(`Nonce provided for the transaction ${t?`(${t}) `:""}is higher than the next one expected.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"NonceTooHighError"})}};Object.defineProperty(NonceTooHighError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/nonce too high/});let NonceTooLowError=class NonceTooLowError extends i.G{constructor({cause:e,nonce:t}={}){super(`Nonce provided for the transaction ${t?`(${t}) `:""}is lower than the current nonce of the account. +Valid types: "function", "event", "error"`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidDefinitionTypeError"})}}},26087:function(e,t,n){"use strict";n.d(t,{b:function(){return InvalidAddressError}});var o=n(62027);let InvalidAddressError=class InvalidAddressError extends o.G{constructor({address:e}){super(`Address "${e}" is invalid.`,{metaMessages:["- Address must be a hex value of 20 bytes (40 hex characters).","- Address must match its checksum counterpart."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAddressError"})}}},62027:function(e,t,n){"use strict";n.d(t,{G:function(){return BaseError}});var o=n(35280);let BaseError=class BaseError extends Error{constructor(e,t={}){super(),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ViemError"}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:(0,o.bo)()});let n=t.cause instanceof BaseError?t.cause.details:t.cause?.message?t.cause.message:t.details,i=t.cause instanceof BaseError&&t.cause.docsPath||t.docsPath;this.message=[e||"An error occurred.","",...t.metaMessages?[...t.metaMessages,""]:[],...i?[`Docs: https://viem.sh${i}${t.docsSlug?`#${t.docsSlug}`:""}`]:[],...n?[`Details: ${n}`]:[],`Version: ${this.version}`].join("\n"),t.cause&&(this.cause=t.cause),this.details=n,this.docsPath=i,this.metaMessages=t.metaMessages,this.shortMessage=e}walk(e){return function walk(e,t){return t?.(e)?e:e&&"object"==typeof e&&"cause"in e?walk(e.cause,t):t?null:e}(this,e)}}},80377:function(e,t,n){"use strict";n.d(t,{hJ:function(){return InvalidChainIdError},mm:function(){return ChainDoesNotSupportContract},pZ:function(){return ClientChainNotConfiguredError}});var o=n(62027);let ChainDoesNotSupportContract=class ChainDoesNotSupportContract extends o.G{constructor({blockNumber:e,chain:t,contract:n}){super(`Chain "${t.name}" does not support contract "${n.name}".`,{metaMessages:["This could be due to any of the following:",...e&&n.blockCreated&&n.blockCreated>e?[`- The contract "${n.name}" was not deployed until block ${n.blockCreated} (current block ${e}).`]:[`- The chain does not have the contract "${n.name}" configured.`]]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ChainDoesNotSupportContract"})}};let ClientChainNotConfiguredError=class ClientChainNotConfiguredError extends o.G{constructor(){super("No chain was provided to the Client."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ClientChainNotConfiguredError"})}};let InvalidChainIdError=class InvalidChainIdError extends o.G{constructor({chainId:e}){super("number"==typeof e?`Chain ID "${e}" is invalid.`:"Chain ID is invalid."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidChainIdError"})}}},97405:function(e,t,n){"use strict";n.d(t,{cg:function(){return CallExecutionError},uq:function(){return ContractFunctionExecutionError},Lu:function(){return ContractFunctionRevertedError},Dk:function(){return ContractFunctionZeroDataError},VQ:function(){return RawContractError}});var o=n(14503),i=n(21746),s=n(86899),l=n(80522),c=n(96070);function formatAbiItemWithArgs({abiItem:e,args:t,includeFunctionName:n=!0,includeName:o=!1}){if("name"in e&&"inputs"in e&&e.inputs)return`${n?e.name:""}(${e.inputs.map((e,n)=>`${o&&e.name?`${e.name}: `:""}${"object"==typeof t[n]?(0,c.P)(t[n]):t[n]}`).join(", ")})`}var u=n(40840),d=n(39625),p=n(67795),f=n(57412),m=n(62027),g=n(20443),b=n(33639),y=n(35280);let CallExecutionError=class CallExecutionError extends m.G{constructor(e,{account:t,docsPath:n,chain:i,data:s,gas:l,gasPrice:c,maxFeePerGas:u,maxPriorityFeePerGas:f,nonce:m,to:y,value:v,stateOverride:w}){let C=t?(0,o.T)(t):void 0,E=(0,b.xr)({from:C?.address,to:y,value:void 0!==v&&`${(0,d.d)(v)} ${i?.nativeCurrency?.symbol||"ETH"}`,data:s,gas:l,gasPrice:void 0!==c&&`${(0,p.o)(c)} gwei`,maxFeePerGas:void 0!==u&&`${(0,p.o)(u)} gwei`,maxPriorityFeePerGas:void 0!==f&&`${(0,p.o)(f)} gwei`,nonce:m});w&&(E+=` +${(0,g.Bj)(w)}`),super(e.shortMessage,{cause:e,docsPath:n,metaMessages:[...e.metaMessages?[...e.metaMessages," "]:[],"Raw Call Arguments:",E].filter(Boolean)}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"CallExecutionError"}),this.cause=e}};let ContractFunctionExecutionError=class ContractFunctionExecutionError extends m.G{constructor(e,{abi:t,args:n,contractAddress:o,docsPath:i,functionName:s,sender:c}){let d=(0,u.mE)({abi:t,args:n,name:s}),p=d?formatAbiItemWithArgs({abiItem:d,args:n,includeFunctionName:!1,includeName:!1}):void 0,f=d?(0,l.t)(d,{includeName:!0}):void 0,m=(0,b.xr)({address:o&&(0,y.CR)(o),function:f,args:p&&"()"!==p&&`${[...Array(s?.length??0).keys()].map(()=>" ").join("")}${p}`,sender:c});super(e.shortMessage||`An unknown error occurred while executing the contract function "${s}".`,{cause:e,docsPath:i,metaMessages:[...e.metaMessages?[...e.metaMessages," "]:[],"Contract Call:",m].filter(Boolean)}),Object.defineProperty(this,"abi",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"args",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"contractAddress",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"formattedArgs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"functionName",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"sender",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ContractFunctionExecutionError"}),this.abi=t,this.args=n,this.cause=e,this.contractAddress=o,this.functionName=s,this.sender=c}};let ContractFunctionRevertedError=class ContractFunctionRevertedError extends m.G{constructor({abi:e,data:t,functionName:n,message:o}){let c,u,d,p,m;if(t&&"0x"!==t)try{m=(0,s.p)({abi:e,data:t});let{abiItem:n,errorName:o,args:c}=m;if("Error"===o)d=c[0];else if("Panic"===o){let[e]=c;d=i.$[e]}else{let e=n?(0,l.t)(n,{includeName:!0}):void 0,t=n&&c?formatAbiItemWithArgs({abiItem:n,args:c,includeFunctionName:!1,includeName:!1}):void 0;u=[e?`Error: ${e}`:"",t&&"()"!==t?` ${[...Array(o?.length??0).keys()].map(()=>" ").join("")}${t}`:""]}}catch(e){c=e}else o&&(d=o);c instanceof f.yP&&(p=c.signature,u=[`Unable to decode signature "${p}" as it was not found on the provided ABI.`,"Make sure you are using the correct ABI and that the error exists on it.",`You can look up the decoded signature here: https://openchain.xyz/signatures?query=${p}.`]),super(d&&"execution reverted"!==d||p?[`The contract function "${n}" reverted with the following ${p?"signature":"reason"}:`,d||p].join("\n"):`The contract function "${n}" reverted.`,{cause:c,metaMessages:u}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ContractFunctionRevertedError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"reason",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"signature",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=m,this.reason=d,this.signature=p}};let ContractFunctionZeroDataError=class ContractFunctionZeroDataError extends m.G{constructor({functionName:e}){super(`The contract function "${e}" returned no data ("0x").`,{metaMessages:["This could be due to any of the following:",` - The contract does not have the function "${e}",`," - The parameters passed to the contract function may be invalid, or"," - The address is not a contract."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ContractFunctionZeroDataError"})}};let RawContractError=class RawContractError extends m.G{constructor({data:e,message:t}){super(t||""),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:3}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"RawContractError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=e}}},66238:function(e,t,n){"use strict";n.d(t,{KD:function(){return RecursiveReadLimitExceededError},T_:function(){return NegativeOffsetError},lQ:function(){return PositionOutOfBoundsError}});var o=n(62027);let NegativeOffsetError=class NegativeOffsetError extends o.G{constructor({offset:e}){super(`Offset \`${e}\` cannot be negative.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"NegativeOffsetError"})}};let PositionOutOfBoundsError=class PositionOutOfBoundsError extends o.G{constructor({length:e,position:t}){super(`Position \`${t}\` is out of bounds (\`0 < position < ${e}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"PositionOutOfBoundsError"})}};let RecursiveReadLimitExceededError=class RecursiveReadLimitExceededError extends o.G{constructor({count:e,limit:t}){super(`Recursive read limit of \`${t}\` exceeded (recursive read count: \`${e}\`).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"RecursiveReadLimitExceededError"})}}},69760:function(e,t,n){"use strict";n.d(t,{$s:function(){return SizeExceedsPaddingSizeError},W_:function(){return InvalidBytesLengthError},mV:function(){return SliceOffsetOutOfBoundsError}});var o=n(62027);let SliceOffsetOutOfBoundsError=class SliceOffsetOutOfBoundsError extends o.G{constructor({offset:e,position:t,size:n}){super(`Slice ${"start"===t?"starting":"ending"} at offset "${e}" is out-of-bounds (size: ${n}).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SliceOffsetOutOfBoundsError"})}};let SizeExceedsPaddingSizeError=class SizeExceedsPaddingSizeError extends o.G{constructor({size:e,targetSize:t,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} size (${e}) exceeds padding size (${t}).`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SizeExceedsPaddingSizeError"})}};let InvalidBytesLengthError=class InvalidBytesLengthError extends o.G{constructor({size:e,targetSize:t,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} is expected to be ${t} ${n} long, but is ${e} ${n} long.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidBytesLengthError"})}}},87788:function(e,t,n){"use strict";n.d(t,{J5:function(){return IntegerOutOfRangeError},M6:function(){return SizeOverflowError},yr:function(){return InvalidBytesBooleanError}});var o=n(62027);let IntegerOutOfRangeError=class IntegerOutOfRangeError extends o.G{constructor({max:e,min:t,signed:n,size:o,value:i}){super(`Number "${i}" is not in safe ${o?`${8*o}-bit ${n?"signed":"unsigned"} `:""}integer range ${e?`(${t} to ${e})`:`(above ${t})`}`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"IntegerOutOfRangeError"})}};let InvalidBytesBooleanError=class InvalidBytesBooleanError extends o.G{constructor(e){super(`Bytes value "${e}" is not a valid boolean. The bytes array must contain a single byte of either a 0 or 1 value.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidBytesBooleanError"})}};let SizeOverflowError=class SizeOverflowError extends o.G{constructor({givenSize:e,maxSize:t}){super(`Size cannot exceed ${t} bytes. Given size: ${e} bytes.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SizeOverflowError"})}}},26445:function(e,t,n){"use strict";n.d(t,{C_:function(){return InsufficientFundsError},G$:function(){return FeeCapTooLowError},Hh:function(){return FeeCapTooHighError},M_:function(){return ExecutionRevertedError},WF:function(){return IntrinsicGasTooHighError},ZI:function(){return NonceTooHighError},cj:function(){return UnknownNodeError},cs:function(){return TipAboveFeeCapError},dR:function(){return IntrinsicGasTooLowError},pZ:function(){return TransactionTypeNotSupportedError},se:function(){return NonceMaxValueError},vU:function(){return NonceTooLowError}});var o=n(67795),i=n(62027);let ExecutionRevertedError=class ExecutionRevertedError extends i.G{constructor({cause:e,message:t}={}){let n=t?.replace("execution reverted: ","")?.replace("execution reverted","");super(`Execution reverted ${n?`with reason: ${n}`:"for an unknown reason"}.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ExecutionRevertedError"})}};Object.defineProperty(ExecutionRevertedError,"code",{enumerable:!0,configurable:!0,writable:!0,value:3}),Object.defineProperty(ExecutionRevertedError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/execution reverted/});let FeeCapTooHighError=class FeeCapTooHighError extends i.G{constructor({cause:e,maxFeePerGas:t}={}){super(`The fee cap (\`maxFeePerGas\`${t?` = ${(0,o.o)(t)} gwei`:""}) cannot be higher than the maximum allowed value (2^256-1).`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"FeeCapTooHigh"})}};Object.defineProperty(FeeCapTooHighError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/max fee per gas higher than 2\^256-1|fee cap higher than 2\^256-1/});let FeeCapTooLowError=class FeeCapTooLowError extends i.G{constructor({cause:e,maxFeePerGas:t}={}){super(`The fee cap (\`maxFeePerGas\`${t?` = ${(0,o.o)(t)}`:""} gwei) cannot be lower than the block base fee.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"FeeCapTooLow"})}};Object.defineProperty(FeeCapTooLowError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/max fee per gas less than block base fee|fee cap less than block base fee|transaction is outdated/});let NonceTooHighError=class NonceTooHighError extends i.G{constructor({cause:e,nonce:t}={}){super(`Nonce provided for the transaction ${t?`(${t}) `:""}is higher than the next one expected.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"NonceTooHighError"})}};Object.defineProperty(NonceTooHighError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/nonce too high/});let NonceTooLowError=class NonceTooLowError extends i.G{constructor({cause:e,nonce:t}={}){super(`Nonce provided for the transaction ${t?`(${t}) `:""}is lower than the current nonce of the account. Try increasing the nonce or find the latest nonce with \`getTransactionCount\`.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"NonceTooLowError"})}};Object.defineProperty(NonceTooLowError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/nonce too low|transaction already imported|already known/});let NonceMaxValueError=class NonceMaxValueError extends i.G{constructor({cause:e,nonce:t}={}){super(`Nonce provided for the transaction ${t?`(${t}) `:""}exceeds the maximum allowed nonce.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"NonceMaxValueError"})}};Object.defineProperty(NonceMaxValueError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/nonce has max value/});let InsufficientFundsError=class InsufficientFundsError extends i.G{constructor({cause:e}={}){super("The total cost (gas * gas fee + value) of executing this transaction exceeds the balance of the account.",{cause:e,metaMessages:["This error could arise when the account does not have enough funds to:"," - pay for the total gas fee,"," - pay for the value to send."," ","The cost of the transaction is calculated as `gas * gas fee + value`, where:"," - `gas` is the amount of gas needed for transaction to execute,"," - `gas fee` is the gas fee,"," - `value` is the amount of ether to send to the recipient."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InsufficientFundsError"})}};Object.defineProperty(InsufficientFundsError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/insufficient funds/});let IntrinsicGasTooHighError=class IntrinsicGasTooHighError extends i.G{constructor({cause:e,gas:t}={}){super(`The amount of gas ${t?`(${t}) `:""}provided for the transaction exceeds the limit allowed for the block.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"IntrinsicGasTooHighError"})}};Object.defineProperty(IntrinsicGasTooHighError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/intrinsic gas too high|gas limit reached/});let IntrinsicGasTooLowError=class IntrinsicGasTooLowError extends i.G{constructor({cause:e,gas:t}={}){super(`The amount of gas ${t?`(${t}) `:""}provided for the transaction is too low.`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"IntrinsicGasTooLowError"})}};Object.defineProperty(IntrinsicGasTooLowError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/intrinsic gas too low/});let TransactionTypeNotSupportedError=class TransactionTypeNotSupportedError extends i.G{constructor({cause:e}){super("The transaction type is not supported for this chain.",{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"TransactionTypeNotSupportedError"})}};Object.defineProperty(TransactionTypeNotSupportedError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/transaction type not valid/});let TipAboveFeeCapError=class TipAboveFeeCapError extends i.G{constructor({cause:e,maxPriorityFeePerGas:t,maxFeePerGas:n}={}){super(`The provided tip (\`maxPriorityFeePerGas\`${t?` = ${(0,o.o)(t)} gwei`:""}) cannot be higher than the fee cap (\`maxFeePerGas\`${n?` = ${(0,o.o)(n)} gwei`:""}).`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"TipAboveFeeCapError"})}};Object.defineProperty(TipAboveFeeCapError,"nodeMessage",{enumerable:!0,configurable:!0,writable:!0,value:/max priority fee per gas higher than max fee per gas|tip higher than fee cap/});let UnknownNodeError=class UnknownNodeError extends i.G{constructor({cause:e}){super(`An error occurred while executing: ${e?.shortMessage}`,{cause:e}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownNodeError"})}}},78863:function(e,t,n){"use strict";n.d(t,{Gg:function(){return HttpRequestError},W5:function(){return TimeoutError},bs:function(){return RpcRequestError}});var o=n(96070),i=n(62027),s=n(35280);let HttpRequestError=class HttpRequestError extends i.G{constructor({body:e,details:t,headers:n,status:i,url:l}){super("HTTP request failed.",{details:t,metaMessages:[i&&`Status: ${i}`,`URL: ${(0,s.Gr)(l)}`,e&&`Request body: ${(0,o.P)(e)}`].filter(Boolean)}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"HttpRequestError"}),Object.defineProperty(this,"body",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"headers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"url",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.body=e,this.headers=n,this.status=i,this.url=l}};let RpcRequestError=class RpcRequestError extends i.G{constructor({body:e,error:t,url:n}){super("RPC Request failed.",{cause:t,details:t.message,metaMessages:[`URL: ${(0,s.Gr)(n)}`,`Request body: ${(0,o.P)(e)}`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"RpcRequestError"}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.code=t.code}};let TimeoutError=class TimeoutError extends i.G{constructor({body:e,url:t}){super("The request took too long to respond.",{details:"The request timed out.",metaMessages:[`URL: ${(0,s.Gr)(t)}`,`Request body: ${(0,o.P)(e)}`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"TimeoutError"})}}},39028:function(e,t,n){"use strict";n.d(t,{B:function(){return InvalidRequestRpcError},GD:function(){return JsonRpcVersionUnsupportedError},I0:function(){return ChainDisconnectedError},KB:function(){return TransactionRejectedRpcError},LX:function(){return MethodNotFoundRpcError},Og:function(){return ResourceNotFoundRpcError},PE:function(){return UnauthorizedProviderError},Pv:function(){return LimitExceededRpcError},Ts:function(){return UnsupportedProviderMethodError},XS:function(){return InternalRpcError},ab:function(){return UserRejectedRequestError},gS:function(){return MethodNotSupportedRpcError},ir:function(){return UnknownRpcError},nY:function(){return InvalidParamsRpcError},pT:function(){return ResourceUnavailableRpcError},s7:function(){return ParseRpcError},u5:function(){return ProviderDisconnectedError},x3:function(){return SwitchChainError},yR:function(){return InvalidInputRpcError}});var o=n(62027),i=n(78863);let RpcError=class RpcError extends o.G{constructor(e,{code:t,docsPath:n,metaMessages:o,shortMessage:s}){super(s,{cause:e,docsPath:n,metaMessages:o||e?.metaMessages}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"RpcError"}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=e.name,this.code=e instanceof i.bs?e.code:t??-1}};let ProviderRpcError=class ProviderRpcError extends RpcError{constructor(e,t){super(e,t),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ProviderRpcError"}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=t.data}};let ParseRpcError=class ParseRpcError extends RpcError{constructor(e){super(e,{code:ParseRpcError.code,shortMessage:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ParseRpcError"})}};Object.defineProperty(ParseRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32700});let InvalidRequestRpcError=class InvalidRequestRpcError extends RpcError{constructor(e){super(e,{code:InvalidRequestRpcError.code,shortMessage:"JSON is not a valid request object."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidRequestRpcError"})}};Object.defineProperty(InvalidRequestRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32600});let MethodNotFoundRpcError=class MethodNotFoundRpcError extends RpcError{constructor(e){super(e,{code:MethodNotFoundRpcError.code,shortMessage:"The method does not exist / is not available."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"MethodNotFoundRpcError"})}};Object.defineProperty(MethodNotFoundRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32601});let InvalidParamsRpcError=class InvalidParamsRpcError extends RpcError{constructor(e){super(e,{code:InvalidParamsRpcError.code,shortMessage:"Invalid parameters were provided to the RPC method.\nDouble check you have provided the correct parameters."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidParamsRpcError"})}};Object.defineProperty(InvalidParamsRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32602});let InternalRpcError=class InternalRpcError extends RpcError{constructor(e){super(e,{code:InternalRpcError.code,shortMessage:"An internal error was received."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InternalRpcError"})}};Object.defineProperty(InternalRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32603});let InvalidInputRpcError=class InvalidInputRpcError extends RpcError{constructor(e){super(e,{code:InvalidInputRpcError.code,shortMessage:"Missing or invalid parameters.\nDouble check you have provided the correct parameters."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidInputRpcError"})}};Object.defineProperty(InvalidInputRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32e3});let ResourceNotFoundRpcError=class ResourceNotFoundRpcError extends RpcError{constructor(e){super(e,{code:ResourceNotFoundRpcError.code,shortMessage:"Requested resource not found."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ResourceNotFoundRpcError"})}};Object.defineProperty(ResourceNotFoundRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32001});let ResourceUnavailableRpcError=class ResourceUnavailableRpcError extends RpcError{constructor(e){super(e,{code:ResourceUnavailableRpcError.code,shortMessage:"Requested resource not available."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ResourceUnavailableRpcError"})}};Object.defineProperty(ResourceUnavailableRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32002});let TransactionRejectedRpcError=class TransactionRejectedRpcError extends RpcError{constructor(e){super(e,{code:TransactionRejectedRpcError.code,shortMessage:"Transaction creation failed."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"TransactionRejectedRpcError"})}};Object.defineProperty(TransactionRejectedRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32003});let MethodNotSupportedRpcError=class MethodNotSupportedRpcError extends RpcError{constructor(e){super(e,{code:MethodNotSupportedRpcError.code,shortMessage:"Method is not implemented."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"MethodNotSupportedRpcError"})}};Object.defineProperty(MethodNotSupportedRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32004});let LimitExceededRpcError=class LimitExceededRpcError extends RpcError{constructor(e){super(e,{code:LimitExceededRpcError.code,shortMessage:"Request exceeds defined limit."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"LimitExceededRpcError"})}};Object.defineProperty(LimitExceededRpcError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32005});let JsonRpcVersionUnsupportedError=class JsonRpcVersionUnsupportedError extends RpcError{constructor(e){super(e,{code:JsonRpcVersionUnsupportedError.code,shortMessage:"Version of JSON-RPC protocol is not supported."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"JsonRpcVersionUnsupportedError"})}};Object.defineProperty(JsonRpcVersionUnsupportedError,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32006});let UserRejectedRequestError=class UserRejectedRequestError extends ProviderRpcError{constructor(e){super(e,{code:UserRejectedRequestError.code,shortMessage:"User rejected the request."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UserRejectedRequestError"})}};Object.defineProperty(UserRejectedRequestError,"code",{enumerable:!0,configurable:!0,writable:!0,value:4001});let UnauthorizedProviderError=class UnauthorizedProviderError extends ProviderRpcError{constructor(e){super(e,{code:UnauthorizedProviderError.code,shortMessage:"The requested method and/or account has not been authorized by the user."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnauthorizedProviderError"})}};Object.defineProperty(UnauthorizedProviderError,"code",{enumerable:!0,configurable:!0,writable:!0,value:4100});let UnsupportedProviderMethodError=class UnsupportedProviderMethodError extends ProviderRpcError{constructor(e){super(e,{code:UnsupportedProviderMethodError.code,shortMessage:"The Provider does not support the requested method."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnsupportedProviderMethodError"})}};Object.defineProperty(UnsupportedProviderMethodError,"code",{enumerable:!0,configurable:!0,writable:!0,value:4200});let ProviderDisconnectedError=class ProviderDisconnectedError extends ProviderRpcError{constructor(e){super(e,{code:ProviderDisconnectedError.code,shortMessage:"The Provider is disconnected from all chains."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ProviderDisconnectedError"})}};Object.defineProperty(ProviderDisconnectedError,"code",{enumerable:!0,configurable:!0,writable:!0,value:4900});let ChainDisconnectedError=class ChainDisconnectedError extends ProviderRpcError{constructor(e){super(e,{code:ChainDisconnectedError.code,shortMessage:"The Provider is not connected to the requested chain."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ChainDisconnectedError"})}};Object.defineProperty(ChainDisconnectedError,"code",{enumerable:!0,configurable:!0,writable:!0,value:4901});let SwitchChainError=class SwitchChainError extends ProviderRpcError{constructor(e){super(e,{code:SwitchChainError.code,shortMessage:"An error occurred when attempting to switch chain."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SwitchChainError"})}};Object.defineProperty(SwitchChainError,"code",{enumerable:!0,configurable:!0,writable:!0,value:4902});let UnknownRpcError=class UnknownRpcError extends RpcError{constructor(e){super(e,{shortMessage:"An unknown RPC error occurred."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownRpcError"})}}},20443:function(e,t,n){"use strict";n.d(t,{Bj:function(){return prettyStateOverride},Nc:function(){return AccountStateConflictError},Z8:function(){return StateAssignmentConflictError}});var o=n(62027);let AccountStateConflictError=class AccountStateConflictError extends o.G{constructor({address:e}){super(`State for account "${e}" is set multiple times.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AccountStateConflictError"})}};let StateAssignmentConflictError=class StateAssignmentConflictError extends o.G{constructor(){super("state and stateDiff are set on the same account."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"StateAssignmentConflictError"})}};function prettyStateMapping(e){return e.reduce((e,{slot:t,value:n})=>`${e} ${t}: ${n} `,"")}function prettyStateOverride(e){return e.reduce((e,{address:t,...n})=>{let o=`${e} ${t}: `;return n.nonce&&(o+=` nonce: ${n.nonce} `),n.balance&&(o+=` balance: ${n.balance} `),n.code&&(o+=` code: ${n.code} -`),n.state&&(o+=" state:\n"+prettyStateMapping(n.state)),n.stateDiff&&(o+=" stateDiff:\n"+prettyStateMapping(n.stateDiff)),o}," State Override:\n").slice(0,-1)}},33639:function(e,t,n){"use strict";n.d(t,{Bh:function(){return TransactionNotFoundError},JC:function(){return InvalidStorageKeySizeError},Yb:function(){return TransactionReceiptNotFoundError},j3:function(){return InvalidSerializableTransactionError},mc:function(){return WaitForTransactionReceiptTimeoutError},vl:function(){return InvalidLegacyVError},xY:function(){return FeeConflictError},xr:function(){return prettyPrint}});var o=n(62027);function prettyPrint(e){let t=Object.entries(e).map(([e,t])=>void 0===t||!1===t?null:[e,t]).filter(Boolean),n=t.reduce((e,[t])=>Math.max(e,t.length),0);return t.map(([e,t])=>` ${`${e}:`.padEnd(n+1)} ${t}`).join("\n")}let FeeConflictError=class FeeConflictError extends o.G{constructor(){super("Cannot specify both a `gasPrice` and a `maxFeePerGas`/`maxPriorityFeePerGas`.\nUse `maxFeePerGas`/`maxPriorityFeePerGas` for EIP-1559 compatible networks, and `gasPrice` for others."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"FeeConflictError"})}};let InvalidLegacyVError=class InvalidLegacyVError extends o.G{constructor({v:e}){super(`Invalid \`v\` value "${e}". Expected 27 or 28.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidLegacyVError"})}};let InvalidSerializableTransactionError=class InvalidSerializableTransactionError extends o.G{constructor({transaction:e}){super("Cannot infer a transaction type from provided transaction.",{metaMessages:["Provided Transaction:","{",prettyPrint(e),"}","","To infer the type, either provide:","- a `type` to the Transaction, or","- an EIP-1559 Transaction with `maxFeePerGas`, or","- an EIP-2930 Transaction with `gasPrice` & `accessList`, or","- an EIP-4844 Transaction with `blobs`, `blobVersionedHashes`, `sidecars`, or","- a Legacy Transaction with `gasPrice`"]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidSerializableTransactionError"})}};let InvalidStorageKeySizeError=class InvalidStorageKeySizeError extends o.G{constructor({storageKey:e}){super(`Size for storage key "${e}" is invalid. Expected 32 bytes. Got ${Math.floor((e.length-2)/2)} bytes.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidStorageKeySizeError"})}};let TransactionNotFoundError=class TransactionNotFoundError extends o.G{constructor({blockHash:e,blockNumber:t,blockTag:n,hash:o,index:i}){let s="Transaction";n&&void 0!==i&&(s=`Transaction at block time "${n}" at index "${i}"`),e&&void 0!==i&&(s=`Transaction at block hash "${e}" at index "${i}"`),t&&void 0!==i&&(s=`Transaction at block number "${t}" at index "${i}"`),o&&(s=`Transaction with hash "${o}"`),super(`${s} could not be found.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"TransactionNotFoundError"})}};let TransactionReceiptNotFoundError=class TransactionReceiptNotFoundError extends o.G{constructor({hash:e}){super(`Transaction receipt with hash "${e}" could not be found. The Transaction may not be processed on a block yet.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"TransactionReceiptNotFoundError"})}};let WaitForTransactionReceiptTimeoutError=class WaitForTransactionReceiptTimeoutError extends o.G{constructor({hash:e}){super(`Timed out while waiting for transaction with hash "${e}" to be confirmed.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"WaitForTransactionReceiptTimeoutError"})}}},35280:function(e,t,n){"use strict";n.d(t,{CR:function(){return getContractAddress},Gr:function(){return getUrl},bo:function(){return getVersion}});let getContractAddress=e=>e,getUrl=e=>e,getVersion=()=>"viem@2.8.14"},78398:function(e,t,n){"use strict";n.d(t,{r:function(){return decodeAbiParameters}});var o=n(57412),i=n(45775),s=n(11221),l=n(39135),c=n(3972),u=n(61836),d=n(87788),p=n(95946),f=n(92106);function bytesToNumber(e,t={}){void 0!==t.size&&(0,p.Yf)(e,{size:t.size});let n=(0,f.ci)(e,t);return(0,p.ly)(n,t)}var m=n(11187),b=n(45444);function decodeAbiParameters(e,t){let n="string"==typeof t?(0,m.nr)(t):t,g=(0,s.q)(n);if(0===(0,l.d)(n)&&e.length>0)throw new o.wb;if((0,l.d)(t)&&32>(0,l.d)(t))throw new o.xB({data:"string"==typeof t?t:(0,f.ci)(t),params:e,size:(0,l.d)(t)});let y=0,v=[];for(let t=0;t!e),i=o?[]:{},s=0;if(hasDynamicChild(t)){let l=bytesToNumber(e.readBytes(32)),c=n+l;for(let n=0;n1||n[0]>1)throw new d.yr(n);return!!n[0]}(e.readBytes(32),{size:32}),32];if(t.type.startsWith("bytes"))return function(e,t,{staticPosition:n}){let[o,i]=t.type.split("bytes");if(!i){let t=bytesToNumber(e.readBytes(32));e.setPosition(n+t);let o=bytesToNumber(e.readBytes(32));if(0===o)return e.setPosition(n+32),["0x",32];let i=e.readBytes(o);return e.setPosition(n+32),[(0,f.ci)(i),32]}let s=(0,f.ci)(e.readBytes(parseInt(i),32));return[s,32]}(e,t,{staticPosition:n});if(t.type.startsWith("uint")||t.type.startsWith("int"))return function(e,t){let n=t.type.startsWith("int"),o=parseInt(t.type.split("int")[1]||"256"),i=e.readBytes(32);return[o>48?function(e,t={}){void 0!==t.size&&(0,p.Yf)(e,{size:t.size});let n=(0,f.ci)(e,t);return(0,p.y_)(n,t)}(i,{signed:n}):bytesToNumber(i,{signed:n}),32]}(e,t);if("string"===t.type)return function(e,{staticPosition:t}){let n=bytesToNumber(e.readBytes(32)),o=t+n;e.setPosition(o);let i=bytesToNumber(e.readBytes(32));if(0===i)return e.setPosition(t+32),["",32];let s=e.readBytes(i,32),l=function(e,t={}){let n=e;return void 0!==t.size&&((0,p.Yf)(n,{size:t.size}),n=(0,u.f)(n,{dir:"right"})),new TextDecoder().decode(n)}((0,u.f)(s));return e.setPosition(t+32),[l,32]}(e,{staticPosition:n});throw new o.CI(t.type,{docsPath:"/docs/contract/decodeAbiParameters"})}(g,n,{staticPosition:0});y+=l,v.push(s)}return v}function hasDynamicChild(e){let{type:t}=e;if("string"===t||"bytes"===t||t.endsWith("[]"))return!0;if("tuple"===t)return e.components?.some(hasDynamicChild);let n=(0,b.S)(e.type);return!!(n&&hasDynamicChild({...e,type:n[1]}))}},86899:function(e,t,n){"use strict";n.d(t,{p:function(){return decodeErrorResult}});var o=n(21746),i=n(57412),s=n(3972),l=n(58034),c=n(78398),u=n(80522);function decodeErrorResult(e){let{abi:t,data:n}=e,d=(0,s.tP)(n,0,4);if("0x"===d)throw new i.wb;let p=[...t||[],o.Up,o.hZ],f=p.find(e=>"error"===e.type&&d===(0,l.C)((0,u.t)(e)));if(!f)throw new i.yP(d,{docsPath:"/docs/contract/decodeErrorResult"});return{abiItem:f,args:"inputs"in f&&f.inputs&&f.inputs.length>0?(0,c.r)(f.inputs,(0,s.tP)(n,4)):void 0,errorName:f.name}}},7210:function(e,t,n){"use strict";n.d(t,{k:function(){return decodeFunctionResult}});var o=n(57412),i=n(78398),s=n(40840);let l="/docs/contract/decodeFunctionResult";function decodeFunctionResult(e){let{abi:t,args:n,functionName:c,data:u}=e,d=t[0];if(c){let e=(0,s.mE)({abi:t,args:n,name:c});if(!e)throw new o.xL(c,{docsPath:l});d=e}if("function"!==d.type)throw new o.xL(void 0,{docsPath:l});if(!d.outputs)throw new o.MX(d.name,{docsPath:l});let p=(0,i.r)(d.outputs,u);return p&&p.length>1?p:p&&1===p.length?p[0]:void 0}},45444:function(e,t,n){"use strict";n.d(t,{E:function(){return encodeAbiParameters},S:function(){return getArrayComponents}});var o=n(57412),i=n(26087),s=n(62027),l=n(60480),c=n(57040),u=n(61769),d=n(39135),p=n(3972),f=n(92106);function encodeAbiParameters(e,t){if(e.length!==t.length)throw new o.fs({expectedLength:e.length,givenLength:t.length});let n=function({params:e,values:t}){let n=[];for(let m=0;m0?(0,c.zo)([t,e]):t}}if(s)return{dynamic:!0,encoded:e}}return{dynamic:!1,encoded:(0,c.zo)(l.map(({encoded:e})=>e))}}(t,{length:i,param:{...e,type:s}})}if("tuple"===e.type)return function(e,{param:t}){let n=!1,o=[];for(let i=0;ie))}}(t,{param:e});if("address"===e.type)return function(e){if(!(0,l.U)(e))throw new i.b({address:e});return{dynamic:!1,encoded:(0,u.gc)(e.toLowerCase())}}(t);if("bool"===e.type)return function(e){if("boolean"!=typeof e)throw new s.G(`Invalid boolean value: "${e}" (type: ${typeof e}). Expected: \`true\` or \`false\`.`);return{dynamic:!1,encoded:(0,u.gc)((0,f.C4)(e))}}(t);if(e.type.startsWith("uint")||e.type.startsWith("int")){let n=e.type.startsWith("int");return function(e,{signed:t}){return{dynamic:!1,encoded:(0,f.eC)(e,{size:32,signed:t})}}(t,{signed:n})}if(e.type.startsWith("bytes"))return function(e,{param:t}){let[,n]=t.type.split("bytes"),i=(0,d.d)(e);if(!n){let t=e;return i%32!=0&&(t=(0,u.gc)(t,{dir:"right",size:32*Math.ceil((e.length-2)/2/32)})),{dynamic:!0,encoded:(0,c.zo)([(0,u.gc)((0,f.eC)(i,{size:32})),t])}}if(i!==parseInt(n))throw new o.M4({expectedSize:parseInt(n),value:e});return{dynamic:!1,encoded:(0,u.gc)(e,{dir:"right"})}}(t,{param:e});if("string"===e.type)return function(e){let t=(0,f.$G)(e),n=Math.ceil((0,d.d)(t)/32),o=[];for(let e=0;e(function(e,{includeName:t}){return e.type.startsWith("tuple")?`(${formatAbiParams(e.components,{includeName:t})})${e.type.slice(5)}`:e.type+(t&&e.name?` ${e.name}`:"")})(e,{includeName:t})).join(t?", ":","):""}},40840:function(e,t,n){"use strict";n.d(t,{mE:function(){return getAbiItem}});var o=n(57412),i=n(15102),s=n(60480),l=n(96005),c=n(58034);function getAbiItem(e){let t;let{abi:n,args:u=[],name:d}=e,p=(0,i.v)(d,{strict:!1}),f=n.filter(e=>p?"function"===e.type?(0,c.C)(e)===d:"event"===e.type&&(0,l.n)(e)===d:"name"in e&&e.name===d);if(0!==f.length){if(1===f.length)return f[0];for(let e of f){if(!("inputs"in e))continue;if(!u||0===u.length){if(!e.inputs||0===e.inputs.length)return e;continue}if(!e.inputs||0===e.inputs.length||e.inputs.length!==u.length)continue;let n=u.every((t,n)=>{let o="inputs"in e&&e.inputs[n];return!!o&&function isArgOfType(e,t){let n=typeof e,o=t.type;switch(o){case"address":return(0,s.U)(e,{strict:!1});case"bool":return"boolean"===n;case"function":case"string":return"string"===n;default:if("tuple"===o&&"components"in t)return Object.values(t.components).every((t,n)=>isArgOfType(Object.values(e)[n],t));if(/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(o))return"number"===n||"bigint"===n;if(/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(o))return"string"===n||e instanceof Uint8Array;if(/[a-z]+[1-9]{0,3}(\[[0-9]{0,}\])+$/.test(o))return Array.isArray(e)&&e.every(e=>isArgOfType(e,{...t,type:o.replace(/(\[[0-9]{0,}\])$/,"")}));return!1}}(t,o)});if(n){if(t&&"inputs"in t&&t.inputs){let n=function getAmbiguousTypes(e,t,n){for(let o in e){let i=e[o],l=t[o];if("tuple"===i.type&&"tuple"===l.type&&"components"in i&&"components"in l)return getAmbiguousTypes(i.components,l.components,n[o]);let c=[i.type,l.type],u=!!(c.includes("address")&&c.includes("bytes20"))||!!(c.includes("address")&&c.includes("string")||c.includes("address")&&c.includes("bytes"))&&(0,s.U)(n[o],{strict:!1});if(u)return c}}(e.inputs,t.inputs,u);if(n)throw new o.S4({abiItem:e,type:n[0]},{abiItem:t,type:n[1]})}t=e}}return t||f[0]}}},45775:function(e,t,n){"use strict";n.d(t,{K:function(){return getAddress},x:function(){return checksumAddress}});var o=n(26087),i=n(11187),s=n(49550),l=n(60480);function checksumAddress(e,t){let n=t?`${t}${e.toLowerCase()}`:e.substring(2).toLowerCase(),o=(0,s.w)((0,i.qX)(n),"bytes"),l=(t?n.substring(`${t}0x`.length):n).split("");for(let e=0;e<40;e+=2)o[e>>1]>>4>=8&&l[e]&&(l[e]=l[e].toUpperCase()),(15&o[e>>1])>=8&&l[e+1]&&(l[e+1]=l[e+1].toUpperCase());return`0x${l.join("")}`}function getAddress(e,t){if(!(0,l.U)(e))throw new o.b({address:e});return checksumAddress(e,t)}},60480:function(e,t,n){"use strict";n.d(t,{U:function(){return isAddress}});let LruMap=class LruMap extends Map{constructor(e){super(),Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=e}set(e,t){return super.set(e,t),this.maxSize&&this.size>this.maxSize&&this.delete(this.keys().next().value),this}};var o=n(45775);let i=/^0x[a-fA-F0-9]{40}$/,s=new LruMap(8192);function isAddress(e,{strict:t=!0}={}){if(s.has(e))return s.get(e);let n=!!i.test(e)&&(e.toLowerCase()===e||!t||(0,o.x)(e)===e);return s.set(e,n),n}},86164:function(e,t,n){"use strict";function defineChain(e){return{formatters:void 0,fees:void 0,serializers:void 0,...e}}n.d(t,{a:function(){return defineChain}})},47864:function(e,t,n){"use strict";n.d(t,{L:function(){return getChainContractAddress}});var o=n(80377);function getChainContractAddress({blockNumber:e,chain:t,contract:n}){let i=t?.contracts?.[n];if(!i)throw new o.mm({chain:t,contract:{name:n}});if(e&&i.blockCreated&&i.blockCreated>e)throw new o.mm({blockNumber:e,chain:t,contract:{name:n,blockCreated:i.blockCreated}});return i.address}},11221:function(e,t,n){"use strict";n.d(t,{q:function(){return createCursor}});var o=n(66238);let i={bytes:new Uint8Array,dataView:new DataView(new ArrayBuffer(0)),position:0,positionReadCount:new Map,recursiveReadCount:0,recursiveReadLimit:1/0,assertReadLimit(){if(this.recursiveReadCount>=this.recursiveReadLimit)throw new o.KD({count:this.recursiveReadCount+1,limit:this.recursiveReadLimit})},assertPosition(e){if(e<0||e>this.bytes.length-1)throw new o.lQ({length:this.bytes.length,position:e})},decrementPosition(e){if(e<0)throw new o.T_({offset:e});let t=this.position-e;this.assertPosition(t),this.position=t},getReadCount(e){return this.positionReadCount.get(e||this.position)||0},incrementPosition(e){if(e<0)throw new o.T_({offset:e});let t=this.position+e;this.assertPosition(t),this.position=t},inspectByte(e){let t=e??this.position;return this.assertPosition(t),this.bytes[t]},inspectBytes(e,t){let n=t??this.position;return this.assertPosition(n+e-1),this.bytes.subarray(n,n+e)},inspectUint8(e){let t=e??this.position;return this.assertPosition(t),this.bytes[t]},inspectUint16(e){let t=e??this.position;return this.assertPosition(t+1),this.dataView.getUint16(t)},inspectUint24(e){let t=e??this.position;return this.assertPosition(t+2),(this.dataView.getUint16(t)<<8)+this.dataView.getUint8(t+2)},inspectUint32(e){let t=e??this.position;return this.assertPosition(t+3),this.dataView.getUint32(t)},pushByte(e){this.assertPosition(this.position),this.bytes[this.position]=e,this.position++},pushBytes(e){this.assertPosition(this.position+e.length-1),this.bytes.set(e,this.position),this.position+=e.length},pushUint8(e){this.assertPosition(this.position),this.bytes[this.position]=e,this.position++},pushUint16(e){this.assertPosition(this.position+1),this.dataView.setUint16(this.position,e),this.position+=2},pushUint24(e){this.assertPosition(this.position+2),this.dataView.setUint16(this.position,e>>8),this.dataView.setUint8(this.position+2,255&e),this.position+=3},pushUint32(e){this.assertPosition(this.position+3),this.dataView.setUint32(this.position,e),this.position+=4},readByte(){this.assertReadLimit(),this._touch();let e=this.inspectByte();return this.position++,e},readBytes(e,t){this.assertReadLimit(),this._touch();let n=this.inspectBytes(e);return this.position+=t??e,n},readUint8(){this.assertReadLimit(),this._touch();let e=this.inspectUint8();return this.position+=1,e},readUint16(){this.assertReadLimit(),this._touch();let e=this.inspectUint16();return this.position+=2,e},readUint24(){this.assertReadLimit(),this._touch();let e=this.inspectUint24();return this.position+=3,e},readUint32(){this.assertReadLimit(),this._touch();let e=this.inspectUint32();return this.position+=4,e},setPosition(e){let t=this.position;return this.assertPosition(e),this.position=e,()=>this.position=t},_touch(){if(this.recursiveReadLimit===1/0)return;let e=this.getReadCount();this.positionReadCount.set(this.position,e+1),e>0&&this.recursiveReadCount++}};function createCursor(e,{recursiveReadLimit:t=8192}={}){let n=Object.create(i);return n.bytes=e,n.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength),n.positionReadCount=new Map,n.recursiveReadLimit=t,n}},57040:function(e,t,n){"use strict";function concat(e){return"string"==typeof e[0]?concatHex(e):function(e){let t=0;for(let n of e)t+=n.length;let n=new Uint8Array(t),o=0;for(let t of e)n.set(t,o),o+=t.length;return n}(e)}function concatHex(e){return`0x${e.reduce((e,t)=>e+t.replace("0x",""),"")}`}n.d(t,{SM:function(){return concatHex},zo:function(){return concat}})},15102:function(e,t,n){"use strict";function isHex(e,{strict:t=!0}={}){return!!e&&"string"==typeof e&&(t?/^0x[0-9a-fA-F]*$/.test(e):e.startsWith("0x"))}n.d(t,{v:function(){return isHex}})},61769:function(e,t,n){"use strict";n.d(t,{gc:function(){return padHex},vk:function(){return pad}});var o=n(69760);function pad(e,{dir:t,size:n=32}={}){return"string"==typeof e?padHex(e,{dir:t,size:n}):function(e,{dir:t,size:n=32}={}){if(null===n)return e;if(e.length>n)throw new o.$s({size:e.length,targetSize:n,type:"bytes"});let i=new Uint8Array(n);for(let o=0;o2*n)throw new o.$s({size:Math.ceil(i.length/2),targetSize:n,type:"hex"});return`0x${i["right"===t?"padEnd":"padStart"](2*n,"0")}`}},39135:function(e,t,n){"use strict";n.d(t,{d:function(){return size}});var o=n(15102);function size(e){return(0,o.v)(e,{strict:!1})?Math.ceil((e.length-2)/2):e.length}},3972:function(e,t,n){"use strict";n.d(t,{T4:function(){return sliceBytes},tP:function(){return slice}});var o=n(69760),i=n(15102),s=n(39135);function slice(e,t,n,{strict:o}={}){return(0,i.v)(e,{strict:!1})?function(e,t,n,{strict:o}={}){assertStartOffset(e,t);let i=`0x${e.replace("0x","").slice((t??0)*2,(n??e.length)*2)}`;return o&&assertEndOffset(i,t,n),i}(e,t,n,{strict:o}):sliceBytes(e,t,n,{strict:o})}function assertStartOffset(e,t){if("number"==typeof t&&t>0&&t>(0,s.d)(e)-1)throw new o.mV({offset:t,position:"start",size:(0,s.d)(e)})}function assertEndOffset(e,t,n){if("number"==typeof t&&"number"==typeof n&&(0,s.d)(e)!==n-t)throw new o.mV({offset:n,position:"end",size:(0,s.d)(e)})}function sliceBytes(e,t,n,{strict:o}={}){assertStartOffset(e,t);let i=e.slice(t,n);return o&&assertEndOffset(i,t,n),i}},61836:function(e,t,n){"use strict";function trim(e,{dir:t="left"}={}){let n="string"==typeof e?e.replace("0x",""):e,o=0;for(let e=0;et)throw new o.M6({givenSize:(0,i.d)(e),maxSize:t})}function hexToBigInt(e,t={}){let{signed:n}=t;t.size&&assertSize(e,{size:t.size});let o=BigInt(e);if(!n)return o;let i=(e.length-2)/2,s=(1n<<8n*BigInt(i)-1n)-1n;return o<=s?o:o-BigInt(`0x${"f".padStart(2*i,"f")}`)-1n}function hexToNumber(e,t={}){return Number(hexToBigInt(e,t))}function hexToString(e,t={}){let n=(0,l.nr)(e);return t.size&&(assertSize(n,{size:t.size}),n=(0,s.f)(n,{dir:"right"})),new TextDecoder().decode(n)}},11187:function(e,t,n){"use strict";n.d(t,{O0:function(){return toBytes},nr:function(){return hexToBytes},qX:function(){return stringToBytes}});var o=n(62027),i=n(15102),s=n(61769),l=n(95946),c=n(92106);let u=new TextEncoder;function toBytes(e,t={}){return"number"==typeof e||"bigint"==typeof e?function(e,t){let n=(0,c.eC)(e,t);return hexToBytes(n)}(e,t):"boolean"==typeof e?function(e,t={}){let n=new Uint8Array(1);return(n[0]=Number(e),"number"==typeof t.size)?((0,l.Yf)(n,{size:t.size}),(0,s.vk)(n,{size:t.size})):n}(e,t):(0,i.v)(e)?hexToBytes(e,t):stringToBytes(e,t)}let d={zero:48,nine:57,A:65,F:70,a:97,f:102};function charCodeToBase16(e){return e>=d.zero&&e<=d.nine?e-d.zero:e>=d.A&&e<=d.F?e-(d.A-10):e>=d.a&&e<=d.f?e-(d.a-10):void 0}function hexToBytes(e,t={}){let n=e;t.size&&((0,l.Yf)(n,{size:t.size}),n=(0,s.vk)(n,{dir:"right",size:t.size}));let i=n.slice(2);i.length%2&&(i=`0${i}`);let c=i.length/2,u=new Uint8Array(c);for(let e=0,t=0;et.toString(16).padStart(2,"0"));function toHex(e,t={}){return"number"==typeof e||"bigint"==typeof e?numberToHex(e,t):"string"==typeof e?stringToHex(e,t):"boolean"==typeof e?boolToHex(e,t):bytesToHex(e,t)}function boolToHex(e,t={}){let n=`0x${Number(e)}`;return"number"==typeof t.size?((0,s.Yf)(n,{size:t.size}),(0,i.vk)(n,{size:t.size})):n}function bytesToHex(e,t={}){let n="";for(let t=0;tn||ce.code===i.M_.code):e;return s instanceof o.G?new i.M_({cause:e,message:s.details}):i.M_.nodeMessage.test(n)?new i.M_({cause:e,message:e.details}):i.Hh.nodeMessage.test(n)?new i.Hh({cause:e,maxFeePerGas:t?.maxFeePerGas}):i.G$.nodeMessage.test(n)?new i.G$({cause:e,maxFeePerGas:t?.maxFeePerGas}):i.ZI.nodeMessage.test(n)?new i.ZI({cause:e,nonce:t?.nonce}):i.vU.nodeMessage.test(n)?new i.vU({cause:e,nonce:t?.nonce}):i.se.nodeMessage.test(n)?new i.se({cause:e,nonce:t?.nonce}):i.C_.nodeMessage.test(n)?new i.C_({cause:e}):i.WF.nodeMessage.test(n)?new i.WF({cause:e,gas:t?.gas}):i.dR.nodeMessage.test(n)?new i.dR({cause:e,gas:t?.gas}):i.pZ.nodeMessage.test(n)?new i.pZ({cause:e}):i.cs.nodeMessage.test(n)?new i.cs({cause:e,maxFeePerGas:t?.maxFeePerGas,maxPriorityFeePerGas:t?.maxPriorityFeePerGas}):new i.cj({cause:e})}},43310:function(e,t,n){"use strict";n.d(t,{G:function(){return s},Z:function(){return formatBlock}});var o=n(21366),i=n(6073);function formatBlock(e){let t=e.transactions?.map(e=>"string"==typeof e?e:i.Tr(e));return{...e,baseFeePerGas:e.baseFeePerGas?BigInt(e.baseFeePerGas):null,blobGasUsed:e.blobGasUsed?BigInt(e.blobGasUsed):void 0,difficulty:e.difficulty?BigInt(e.difficulty):void 0,excessBlobGas:e.excessBlobGas?BigInt(e.excessBlobGas):void 0,gasLimit:e.gasLimit?BigInt(e.gasLimit):void 0,gasUsed:e.gasUsed?BigInt(e.gasUsed):void 0,hash:e.hash?e.hash:null,logsBloom:e.logsBloom?e.logsBloom:null,nonce:e.nonce?e.nonce:null,number:e.number?BigInt(e.number):null,size:e.size?BigInt(e.size):void 0,timestamp:e.timestamp?BigInt(e.timestamp):void 0,transactions:t,totalDifficulty:e.totalDifficulty?BigInt(e.totalDifficulty):null}}let s=(0,o.$)("block",formatBlock)},61163:function(e,t,n){"use strict";function extract(e,{format:t}){if(!t)return{};let n={},o=t(e||{});return!function extract_(t){let o=Object.keys(t);for(let i of o)i in e&&(n[i]=e[i]),t[i]&&"object"==typeof t[i]&&!Array.isArray(t[i])&&extract_(t[i])}(o),n}n.d(t,{K:function(){return extract}})},21366:function(e,t,n){"use strict";function defineFormatter(e,t){return({exclude:n,format:o})=>({exclude:n,format:e=>{let i=t(e);if(n)for(let e of n)delete i[e];return{...i,...o(e)}},type:e})}n.d(t,{$:function(){return defineFormatter}})},53992:function(e,t,n){"use strict";function formatLog(e,{args:t,eventName:n}={}){return{...e,blockHash:e.blockHash?e.blockHash:null,blockNumber:e.blockNumber?BigInt(e.blockNumber):null,logIndex:e.logIndex?Number(e.logIndex):null,transactionHash:e.transactionHash?e.transactionHash:null,transactionIndex:e.transactionIndex?Number(e.transactionIndex):null,...n?{args:t,eventName:n}:{}}}n.d(t,{U:function(){return formatLog}})},6073:function(e,t,n){"use strict";n.d(t,{Tr:function(){return formatTransaction},c8:function(){return s},y_:function(){return l}});var o=n(95946),i=n(21366);let s={"0x0":"legacy","0x1":"eip2930","0x2":"eip1559","0x3":"eip4844"};function formatTransaction(e){let t={...e,blockHash:e.blockHash?e.blockHash:null,blockNumber:e.blockNumber?BigInt(e.blockNumber):null,chainId:e.chainId?(0,o.ly)(e.chainId):void 0,gas:e.gas?BigInt(e.gas):void 0,gasPrice:e.gasPrice?BigInt(e.gasPrice):void 0,maxFeePerBlobGas:e.maxFeePerBlobGas?BigInt(e.maxFeePerBlobGas):void 0,maxFeePerGas:e.maxFeePerGas?BigInt(e.maxFeePerGas):void 0,maxPriorityFeePerGas:e.maxPriorityFeePerGas?BigInt(e.maxPriorityFeePerGas):void 0,nonce:e.nonce?(0,o.ly)(e.nonce):void 0,to:e.to?e.to:null,transactionIndex:e.transactionIndex?Number(e.transactionIndex):null,type:e.type?s[e.type]:void 0,typeHex:e.type?e.type:void 0,value:e.value?BigInt(e.value):void 0,v:e.v?BigInt(e.v):void 0};return t.yParity=(()=>{if(e.yParity)return Number(e.yParity);if("bigint"==typeof t.v){if(0n===t.v||27n===t.v)return 0;if(1n===t.v||28n===t.v)return 1;if(t.v>=35n)return t.v%2n===0n?1:0}})(),"legacy"===t.type&&(delete t.accessList,delete t.maxFeePerBlobGas,delete t.maxFeePerGas,delete t.maxPriorityFeePerGas,delete t.yParity),"eip2930"===t.type&&(delete t.maxFeePerBlobGas,delete t.maxFeePerGas,delete t.maxPriorityFeePerGas),"eip1559"===t.type&&delete t.maxFeePerBlobGas,t}let l=(0,i.$)("transaction",formatTransaction)},30866:function(e,t,n){"use strict";n.d(t,{d:function(){return u},f:function(){return formatTransactionReceipt}});var o=n(95946),i=n(21366),s=n(53992),l=n(6073);let c={"0x0":"reverted","0x1":"success"};function formatTransactionReceipt(e){let t={...e,blockNumber:e.blockNumber?BigInt(e.blockNumber):null,contractAddress:e.contractAddress?e.contractAddress:null,cumulativeGasUsed:e.cumulativeGasUsed?BigInt(e.cumulativeGasUsed):null,effectiveGasPrice:e.effectiveGasPrice?BigInt(e.effectiveGasPrice):null,gasUsed:e.gasUsed?BigInt(e.gasUsed):null,logs:e.logs?e.logs.map(e=>(0,s.U)(e)):null,to:e.to?e.to:null,transactionIndex:e.transactionIndex?(0,o.ly)(e.transactionIndex):null,status:e.status?c[e.status]:null,type:e.type?l.c8[e.type]||e.type:null};return e.blobGasPrice&&(t.blobGasPrice=BigInt(e.blobGasPrice)),e.blobGasUsed&&(t.blobGasUsed=BigInt(e.blobGasUsed)),t}let u=(0,i.$)("transactionReceipt",formatTransactionReceipt)},74688:function(e,t,n){"use strict";n.d(t,{iy:function(){return l},tG:function(){return formatTransactionRequest}});var o=n(92106),i=n(21366);let s={legacy:"0x0",eip2930:"0x1",eip1559:"0x2",eip4844:"0x3"};function formatTransactionRequest(e){let t={...e};return void 0!==e.blobs&&"string"!=typeof e.blobs[0]&&(t.blobs=e.blobs.map(e=>(0,o.ci)(e))),void 0!==e.gas&&(t.gas=(0,o.eC)(e.gas)),void 0!==e.gasPrice&&(t.gasPrice=(0,o.eC)(e.gasPrice)),void 0!==e.maxFeePerBlobGas&&(t.maxFeePerBlobGas=(0,o.eC)(e.maxFeePerBlobGas)),void 0!==e.maxFeePerGas&&(t.maxFeePerGas=(0,o.eC)(e.maxFeePerGas)),void 0!==e.maxPriorityFeePerGas&&(t.maxPriorityFeePerGas=(0,o.eC)(e.maxPriorityFeePerGas)),void 0!==e.nonce&&(t.nonce=(0,o.eC)(e.nonce)),void 0!==e.type&&(t.type=s[e.type]),void 0!==e.value&&(t.value=(0,o.eC)(e.value)),t}let l=(0,i.$)("transactionRequest",formatTransactionRequest)},49550:function(e,t,n){"use strict";n.d(t,{w:function(){return keccak256}});var o=n(22250),i=n(15102),s=n(11187),l=n(92106);function keccak256(e,t){let n=(0,o.fr)((0,i.v)(e,{strict:!1})?(0,s.O0)(e):e);return"bytes"===(t||"hex")?n:(0,l.NC)(n)}},96005:function(e,t,n){"use strict";n.d(t,{n:function(){return i}});var o=n(67684);let i=o.r},58034:function(e,t,n){"use strict";n.d(t,{C:function(){return toFunctionSelector}});var o=n(3972),i=n(67684);let toFunctionSelector=e=>(0,o.tP)((0,i.r)(e),0,4)},67684:function(e,t,n){"use strict";n.d(t,{r:function(){return toSignatureHash}});var o=n(11187),i=n(49550);let hash=e=>(0,i.w)((0,o.O0)(e)),s=/^tuple(?(\[(\d*)\])*)$/;function formatAbiParameters(e){let t="",n=e.length;for(let o=0;o{var t;let n="string"==typeof e?e:"function"===(t=e).type?`function ${t.name}(${formatAbiParameters(t.inputs)})${t.stateMutability&&"nonpayable"!==t.stateMutability?` ${t.stateMutability}`:""}${t.outputs.length?` returns (${formatAbiParameters(t.outputs)})`:""}`:"event"===t.type?`event ${t.name}(${formatAbiParameters(t.inputs)})`:"error"===t.type?`error ${t.name}(${formatAbiParameters(t.inputs)})`:"constructor"===t.type?`constructor(${formatAbiParameters(t.inputs)})${"payable"===t.stateMutability?" payable":""}`:"fallback"===t.type?"fallback()":"receive() external payable";return function(e){let t=!0,n="",o=0,i="",s=!1;for(let l=0;l{let t=getScheduler();flush();let n=t.map(({args:e})=>e);0!==n.length&&e(n).then(e=>{s&&Array.isArray(e)&&e.sort(s);for(let n=0;n{for(let n=0;no.delete(t),getBatchedArgs=()=>getScheduler().map(({args:e})=>e),getScheduler=()=>o.get(t)||[],setScheduler=e=>o.set(t,[...getScheduler(),e]);return{flush,async schedule(e){let t={},o=new Promise((e,n)=>{t.resolve=e,t.reject=n}),s=n?.([...getBatchedArgs(),e]);s&&exec();let l=getScheduler().length>0;return l?setScheduler({args:e,pendingPromise:t}):(setScheduler({args:e,pendingPromise:t}),setTimeout(exec,i)),o}}}},7760:function(e,t,n){"use strict";n.d(t,{J:function(){return withRetry}});var o=n(62914);function withRetry(e,{delay:t=100,retryCount:n=2,shouldRetry:i=()=>!0}={}){return new Promise((s,l)=>{let attemptRetry=async({count:c=0}={})=>{let retry=async({error:e})=>{let n="function"==typeof t?t({count:c,error:e}):t;n&&await (0,o.D)(n),attemptRetry({count:c+1})};try{let t=await e();s(t)}catch(e){if(cJSON.stringify(e,(e,n)=>{let o="bigint"==typeof n?n.toString():n;return"function"==typeof t?t(e,o):o},n)},47531:function(e,t,n){"use strict";n.d(t,{F:function(){return assertRequest}});var o=n(14503),i=n(26087),s=n(26445),l=n(33639),c=n(60480);function assertRequest(e){let{account:t,gasPrice:n,maxFeePerGas:u,maxPriorityFeePerGas:d,to:p}=e,f=t?(0,o.T)(t):void 0;if(f&&!(0,c.U)(f.address))throw new i.b({address:f.address});if(p&&!(0,c.U)(p))throw new i.b({address:p});if(void 0!==n&&(void 0!==u||void 0!==d))throw new l.xY;if(u&&u>2n**256n-1n)throw new s.Hh({maxFeePerGas:u});if(d&&u&&d>u)throw new s.cs({maxFeePerGas:u,maxPriorityFeePerGas:d})}},82994:function(e,t,n){"use strict";n.d(t,{l:function(){return getTransactionType}});var o=n(33639);function getTransactionType(e){if(e.type)return e.type;if(void 0!==e.blobs||void 0!==e.blobVersionedHashes||void 0!==e.maxFeePerBlobGas||void 0!==e.sidecars)return"eip4844";if(void 0!==e.maxFeePerGas||void 0!==e.maxPriorityFeePerGas)return"eip1559";if(void 0!==e.gasPrice)return void 0!==e.accessList?"eip2930":"legacy";throw new o.j3({transaction:e})}},39625:function(e,t,n){"use strict";n.d(t,{d:function(){return formatEther}});var o=n(84192),i=n(15229);function formatEther(e,t="wei"){return(0,i.b)(e,o.ez[t])}},67795:function(e,t,n){"use strict";n.d(t,{o:function(){return formatGwei}});var o=n(84192),i=n(15229);function formatGwei(e,t="wei"){return(0,i.b)(e,o.Zn[t])}},15229:function(e,t,n){"use strict";function formatUnits(e,t){let n=e.toString(),o=n.startsWith("-");o&&(n=n.slice(1));let[i,s]=[(n=n.padStart(t,"0")).slice(0,n.length-t),n.slice(n.length-t)];return s=s.replace(/(0+)$/,""),`${o?"-":""}${i||"0"}${s?`.${s}`:""}`}n.d(t,{b:function(){return formatUnits}})},62914:function(e,t,n){"use strict";async function wait(e){return new Promise(t=>setTimeout(t,e))}n.d(t,{D:function(){return wait}})},99931:function(e,t,n){"use strict";n.d(t,{V:function(){return s},F:function(){return WagmiProvider}});var o=n(67294);let i=!1;async function reconnect(e,t={}){let n;if(i)return[];i=!0,e.setState(e=>({...e,status:e.current?"reconnecting":"connecting"}));let o=[];if(t.connectors?.length)for(let n of t.connectors){let t;t="function"==typeof n?e._internal.connectors.setup(n):n,o.push(t)}else o.push(...e.connectors);try{n=await e.storage?.getItem("recentConnectorId")}catch{}let s={};for(let[,t]of e.state.connections)s[t.connector.id]=1;n&&(s[n]=0);let l=Object.keys(s).length>0?[...o].sort((e,t)=>(s[e.id]??10)-(s[t.id]??10)):o,c=!1,u=[],d=[];for(let t of l){let n=await t.getProvider();if(!n||d.some(e=>e===n))continue;let o=await t.isAuthorized();if(!o)continue;let i=await t.connect({isReconnecting:!0}).catch(()=>null);i&&(t.emitter.off("connect",e._internal.events.connect),t.emitter.on("change",e._internal.events.change),t.emitter.on("disconnect",e._internal.events.disconnect),e.setState(e=>{let n=new Map(c?e.connections:new Map).set(t.uid,{accounts:i.accounts,chainId:i.chainId,connector:t});return{...e,current:c?e.current:t.uid,connections:n}}),u.push({accounts:i.accounts,chainId:i.chainId,connector:t}),d.push(n),c=!0)}return("reconnecting"===e.state.status||"connecting"===e.state.status)&&(c?e.setState(e=>({...e,status:"connected"})):e.setState(e=>({...e,connections:new Map,current:void 0,status:"disconnected"}))),i=!1,u}function Hydrate(e){let{children:t,config:n,initialState:i,reconnectOnMount:s=!0}=e,{onMount:l}=function(e,t){let{initialState:n,reconnectOnMount:o}=t;return n&&!e._internal.store.persist.hasHydrated()&&e.setState({...n,connections:o?n.connections:new Map,status:o?"reconnecting":"disconnected"}),{async onMount(){if(e._internal.ssr){await e._internal.store.persist.rehydrate();let t=e._internal.mipd?.getProviders().map(e._internal.connectors.providerDetailToConnector).map(e._internal.connectors.setup);e._internal.connectors.setState(e=>[...e,...t??[]])}o?reconnect(e):e.storage&&e.setState(e=>({...e,connections:new Map}))}}}(n,{initialState:i,reconnectOnMount:s});n._internal.ssr||l();let c=(0,o.useRef)(!0);return(0,o.useEffect)(()=>{if(c.current&&n._internal.ssr)return l(),()=>{c.current=!1}},[]),t}let s=(0,o.createContext)(void 0);function WagmiProvider(e){let{children:t,config:n}=e;return(0,o.createElement)(Hydrate,e,(0,o.createElement)(s.Provider,{value:n},t))}},92321:function(e,t,n){"use strict";n.d(t,{m:function(){return useAccount}});var o=n(33397),i=n(52425),s=n(37122),l=n(74751),c=n(67294),u=n(52798);let isPlainObject=e=>"object"==typeof e&&!Array.isArray(e);function useAccount(e={}){let t=(0,s.Z)(e);return function(e,t,n=t,o=l.v){let i=(0,c.useRef)([]),s=(0,u.useSyncExternalStoreWithSelector)(e,t,n,e=>e,(e,t)=>{if(isPlainObject(e)&&isPlainObject(t)&&i.current.length){for(let n of i.current){let i=o(e[n],t[n]);if(!i)return!1}return!0}return o(e,t)});if(isPlainObject(s)){let e={...s};return Object.defineProperties(e,Object.entries(e).reduce((e,[t,n])=>({...e,[t]:{configurable:!1,enumerable:!0,get:()=>(i.current.includes(t)||i.current.push(t),n)}}),{})),e}return s}(e=>(0,o.u)(t,{onChange:e}),()=>(0,i.D)(t))}},37122:function(e,t,n){"use strict";n.d(t,{Z:function(){return useConfig}});var o=n(67294),i=n(99931),s=n(7066);let getVersion=()=>"wagmi@2.5.11";let BaseError=class BaseError extends s.G{constructor(){super(...arguments),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"WagmiError"})}get docsBaseUrl(){return"https://wagmi.sh/react"}get version(){return getVersion()}};let WagmiProviderNotFoundError=class WagmiProviderNotFoundError extends BaseError{constructor(){super("`useConfig` must be used within `WagmiProvider`.",{docsPath:"https://wagmi.sh/react/api/WagmiProvider"}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"WagmiProviderNotFoundError"})}};function useConfig(e={}){let t=e.config??(0,o.useContext)(i.V);if(!t)throw new WagmiProviderNotFoundError;return t}},55585:function(e,t,n){"use strict";n.d(t,{Q:function(){return useSignMessage}});var o=n(98029),i=n(14503),s=n(62027);let AccountNotFoundError=class AccountNotFoundError extends s.G{constructor({docsPath:e}={}){super("Could not find an Account to execute with this Action.\nPlease provide an Account with the `account` argument on the Action, or by supplying an `account` to the WalletClient.",{docsPath:e,docsSlug:"account"}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AccountNotFoundError"})}};var l=n(92106);async function signMessage(e,{account:t=e.account,message:n}){if(!t)throw new AccountNotFoundError({docsPath:"/docs/actions/wallet/signMessage"});let o=(0,i.T)(t);if("local"===o.type)return o.signMessage({message:n});let s="string"==typeof n?(0,l.$G)(n):n.raw instanceof Uint8Array?(0,l.NC)(n.raw):n.raw;return e.request({method:"personal_sign",params:[s,o.address]},{retryCount:0})}var c=n(81946),u=n(16189),d=n(91628),p=n(87675);async function getConnectorClient(e,t={}){let n;if(t.connector){let{connector:e}=t,[o,i]=await Promise.all([e.getAccounts(),e.getChainId()]);n={accounts:o,chainId:i,connector:e}}else n=e.state.connections.get(e.state.current);if(!n)throw new p.aH;let o=t.chainId??n.chainId,s=n.connector;if(s.getClient)return s.getClient({chainId:o});let l=(0,i.T)(t.account??n.accounts[0]),c=e.chains.find(e=>e.id===o),f=await n.connector.getProvider({chainId:o});if(t.account&&!n.accounts.includes(l.address))throw new p.JK({address:l.address,connector:s});return(0,u.e)({account:l,chain:c,name:"Connector Client",transport:e=>(function(e,t={}){let{key:n="custom",name:o="Custom Provider",retryDelay:i}=t;return({retryCount:s})=>(0,d.q)({key:n,name:o,request:e.request.bind(e),retryCount:t.retryCount??s,retryDelay:i,type:"custom"})})(f)({...e,retryCount:0})})}async function signMessage_signMessage(e,t){let n;let{account:o,connector:i,...s}=t;n="object"==typeof o&&"local"===o.type?e.getClient():await getConnectorClient(e,{account:o,connector:i});let l=(0,c.s)(n,signMessage,"signMessage");return l({...s,...o?{account:o}:{}})}var f=n(37122);function useSignMessage(e={}){let{mutation:t}=e,n=(0,f.Z)(e),{mutate:i,mutateAsync:s,...l}=(0,o.D)({...t,mutationFn:e=>signMessage_signMessage(n,e),mutationKey:["signMessage"]});return{...l,signMessage:i,signMessageAsync:s}}}},function(e){var __webpack_exec__=function(t){return e(e.s=t)};e.O(0,[9774,179],function(){return __webpack_exec__(6840),__webpack_exec__(59974)}),_N_E=e.O()}]); \ No newline at end of file +`),n.state&&(o+=" state:\n"+prettyStateMapping(n.state)),n.stateDiff&&(o+=" stateDiff:\n"+prettyStateMapping(n.stateDiff)),o}," State Override:\n").slice(0,-1)}},33639:function(e,t,n){"use strict";n.d(t,{Bh:function(){return TransactionNotFoundError},JC:function(){return InvalidStorageKeySizeError},Yb:function(){return TransactionReceiptNotFoundError},j3:function(){return InvalidSerializableTransactionError},mc:function(){return WaitForTransactionReceiptTimeoutError},vl:function(){return InvalidLegacyVError},xY:function(){return FeeConflictError},xr:function(){return prettyPrint}});var o=n(62027);function prettyPrint(e){let t=Object.entries(e).map(([e,t])=>void 0===t||!1===t?null:[e,t]).filter(Boolean),n=t.reduce((e,[t])=>Math.max(e,t.length),0);return t.map(([e,t])=>` ${`${e}:`.padEnd(n+1)} ${t}`).join("\n")}let FeeConflictError=class FeeConflictError extends o.G{constructor(){super("Cannot specify both a `gasPrice` and a `maxFeePerGas`/`maxPriorityFeePerGas`.\nUse `maxFeePerGas`/`maxPriorityFeePerGas` for EIP-1559 compatible networks, and `gasPrice` for others."),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"FeeConflictError"})}};let InvalidLegacyVError=class InvalidLegacyVError extends o.G{constructor({v:e}){super(`Invalid \`v\` value "${e}". Expected 27 or 28.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidLegacyVError"})}};let InvalidSerializableTransactionError=class InvalidSerializableTransactionError extends o.G{constructor({transaction:e}){super("Cannot infer a transaction type from provided transaction.",{metaMessages:["Provided Transaction:","{",prettyPrint(e),"}","","To infer the type, either provide:","- a `type` to the Transaction, or","- an EIP-1559 Transaction with `maxFeePerGas`, or","- an EIP-2930 Transaction with `gasPrice` & `accessList`, or","- an EIP-4844 Transaction with `blobs`, `blobVersionedHashes`, `sidecars`, or","- a Legacy Transaction with `gasPrice`"]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidSerializableTransactionError"})}};let InvalidStorageKeySizeError=class InvalidStorageKeySizeError extends o.G{constructor({storageKey:e}){super(`Size for storage key "${e}" is invalid. Expected 32 bytes. Got ${Math.floor((e.length-2)/2)} bytes.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidStorageKeySizeError"})}};let TransactionNotFoundError=class TransactionNotFoundError extends o.G{constructor({blockHash:e,blockNumber:t,blockTag:n,hash:o,index:i}){let s="Transaction";n&&void 0!==i&&(s=`Transaction at block time "${n}" at index "${i}"`),e&&void 0!==i&&(s=`Transaction at block hash "${e}" at index "${i}"`),t&&void 0!==i&&(s=`Transaction at block number "${t}" at index "${i}"`),o&&(s=`Transaction with hash "${o}"`),super(`${s} could not be found.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"TransactionNotFoundError"})}};let TransactionReceiptNotFoundError=class TransactionReceiptNotFoundError extends o.G{constructor({hash:e}){super(`Transaction receipt with hash "${e}" could not be found. The Transaction may not be processed on a block yet.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"TransactionReceiptNotFoundError"})}};let WaitForTransactionReceiptTimeoutError=class WaitForTransactionReceiptTimeoutError extends o.G{constructor({hash:e}){super(`Timed out while waiting for transaction with hash "${e}" to be confirmed.`),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"WaitForTransactionReceiptTimeoutError"})}}},35280:function(e,t,n){"use strict";n.d(t,{CR:function(){return getContractAddress},Gr:function(){return getUrl},bo:function(){return getVersion}});let getContractAddress=e=>e,getUrl=e=>e,getVersion=()=>"viem@2.8.14"},78398:function(e,t,n){"use strict";n.d(t,{r:function(){return decodeAbiParameters}});var o=n(57412),i=n(45775),s=n(11221),l=n(39135),c=n(3972),u=n(61836),d=n(87788),p=n(95946),f=n(92106);function bytesToNumber(e,t={}){void 0!==t.size&&(0,p.Yf)(e,{size:t.size});let n=(0,f.ci)(e,t);return(0,p.ly)(n,t)}var m=n(11187),g=n(45444);function decodeAbiParameters(e,t){let n="string"==typeof t?(0,m.nr)(t):t,b=(0,s.q)(n);if(0===(0,l.d)(n)&&e.length>0)throw new o.wb;if((0,l.d)(t)&&32>(0,l.d)(t))throw new o.xB({data:"string"==typeof t?t:(0,f.ci)(t),params:e,size:(0,l.d)(t)});let y=0,v=[];for(let t=0;t!e),i=o?[]:{},s=0;if(hasDynamicChild(t)){let l=bytesToNumber(e.readBytes(32)),c=n+l;for(let n=0;n1||n[0]>1)throw new d.yr(n);return!!n[0]}(e.readBytes(32),{size:32}),32];if(t.type.startsWith("bytes"))return function(e,t,{staticPosition:n}){let[o,i]=t.type.split("bytes");if(!i){let t=bytesToNumber(e.readBytes(32));e.setPosition(n+t);let o=bytesToNumber(e.readBytes(32));if(0===o)return e.setPosition(n+32),["0x",32];let i=e.readBytes(o);return e.setPosition(n+32),[(0,f.ci)(i),32]}let s=(0,f.ci)(e.readBytes(parseInt(i),32));return[s,32]}(e,t,{staticPosition:n});if(t.type.startsWith("uint")||t.type.startsWith("int"))return function(e,t){let n=t.type.startsWith("int"),o=parseInt(t.type.split("int")[1]||"256"),i=e.readBytes(32);return[o>48?function(e,t={}){void 0!==t.size&&(0,p.Yf)(e,{size:t.size});let n=(0,f.ci)(e,t);return(0,p.y_)(n,t)}(i,{signed:n}):bytesToNumber(i,{signed:n}),32]}(e,t);if("string"===t.type)return function(e,{staticPosition:t}){let n=bytesToNumber(e.readBytes(32)),o=t+n;e.setPosition(o);let i=bytesToNumber(e.readBytes(32));if(0===i)return e.setPosition(t+32),["",32];let s=e.readBytes(i,32),l=function(e,t={}){let n=e;return void 0!==t.size&&((0,p.Yf)(n,{size:t.size}),n=(0,u.f)(n,{dir:"right"})),new TextDecoder().decode(n)}((0,u.f)(s));return e.setPosition(t+32),[l,32]}(e,{staticPosition:n});throw new o.CI(t.type,{docsPath:"/docs/contract/decodeAbiParameters"})}(b,n,{staticPosition:0});y+=l,v.push(s)}return v}function hasDynamicChild(e){let{type:t}=e;if("string"===t||"bytes"===t||t.endsWith("[]"))return!0;if("tuple"===t)return e.components?.some(hasDynamicChild);let n=(0,g.S)(e.type);return!!(n&&hasDynamicChild({...e,type:n[1]}))}},86899:function(e,t,n){"use strict";n.d(t,{p:function(){return decodeErrorResult}});var o=n(21746),i=n(57412),s=n(3972),l=n(58034),c=n(78398),u=n(80522);function decodeErrorResult(e){let{abi:t,data:n}=e,d=(0,s.tP)(n,0,4);if("0x"===d)throw new i.wb;let p=[...t||[],o.Up,o.hZ],f=p.find(e=>"error"===e.type&&d===(0,l.C)((0,u.t)(e)));if(!f)throw new i.yP(d,{docsPath:"/docs/contract/decodeErrorResult"});return{abiItem:f,args:"inputs"in f&&f.inputs&&f.inputs.length>0?(0,c.r)(f.inputs,(0,s.tP)(n,4)):void 0,errorName:f.name}}},7210:function(e,t,n){"use strict";n.d(t,{k:function(){return decodeFunctionResult}});var o=n(57412),i=n(78398),s=n(40840);let l="/docs/contract/decodeFunctionResult";function decodeFunctionResult(e){let{abi:t,args:n,functionName:c,data:u}=e,d=t[0];if(c){let e=(0,s.mE)({abi:t,args:n,name:c});if(!e)throw new o.xL(c,{docsPath:l});d=e}if("function"!==d.type)throw new o.xL(void 0,{docsPath:l});if(!d.outputs)throw new o.MX(d.name,{docsPath:l});let p=(0,i.r)(d.outputs,u);return p&&p.length>1?p:p&&1===p.length?p[0]:void 0}},45444:function(e,t,n){"use strict";n.d(t,{E:function(){return encodeAbiParameters},S:function(){return getArrayComponents}});var o=n(57412),i=n(26087),s=n(62027),l=n(60480),c=n(57040),u=n(61769),d=n(39135),p=n(3972),f=n(92106);function encodeAbiParameters(e,t){if(e.length!==t.length)throw new o.fs({expectedLength:e.length,givenLength:t.length});let n=function({params:e,values:t}){let n=[];for(let m=0;m0?(0,c.zo)([t,e]):t}}if(s)return{dynamic:!0,encoded:e}}return{dynamic:!1,encoded:(0,c.zo)(l.map(({encoded:e})=>e))}}(t,{length:i,param:{...e,type:s}})}if("tuple"===e.type)return function(e,{param:t}){let n=!1,o=[];for(let i=0;ie))}}(t,{param:e});if("address"===e.type)return function(e){if(!(0,l.U)(e))throw new i.b({address:e});return{dynamic:!1,encoded:(0,u.gc)(e.toLowerCase())}}(t);if("bool"===e.type)return function(e){if("boolean"!=typeof e)throw new s.G(`Invalid boolean value: "${e}" (type: ${typeof e}). Expected: \`true\` or \`false\`.`);return{dynamic:!1,encoded:(0,u.gc)((0,f.C4)(e))}}(t);if(e.type.startsWith("uint")||e.type.startsWith("int")){let n=e.type.startsWith("int");return function(e,{signed:t}){return{dynamic:!1,encoded:(0,f.eC)(e,{size:32,signed:t})}}(t,{signed:n})}if(e.type.startsWith("bytes"))return function(e,{param:t}){let[,n]=t.type.split("bytes"),i=(0,d.d)(e);if(!n){let t=e;return i%32!=0&&(t=(0,u.gc)(t,{dir:"right",size:32*Math.ceil((e.length-2)/2/32)})),{dynamic:!0,encoded:(0,c.zo)([(0,u.gc)((0,f.eC)(i,{size:32})),t])}}if(i!==parseInt(n))throw new o.M4({expectedSize:parseInt(n),value:e});return{dynamic:!1,encoded:(0,u.gc)(e,{dir:"right"})}}(t,{param:e});if("string"===e.type)return function(e){let t=(0,f.$G)(e),n=Math.ceil((0,d.d)(t)/32),o=[];for(let e=0;e(function(e,{includeName:t}){return e.type.startsWith("tuple")?`(${formatAbiParams(e.components,{includeName:t})})${e.type.slice(5)}`:e.type+(t&&e.name?` ${e.name}`:"")})(e,{includeName:t})).join(t?", ":","):""}},40840:function(e,t,n){"use strict";n.d(t,{mE:function(){return getAbiItem}});var o=n(57412),i=n(15102),s=n(60480),l=n(96005),c=n(58034);function getAbiItem(e){let t;let{abi:n,args:u=[],name:d}=e,p=(0,i.v)(d,{strict:!1}),f=n.filter(e=>p?"function"===e.type?(0,c.C)(e)===d:"event"===e.type&&(0,l.n)(e)===d:"name"in e&&e.name===d);if(0!==f.length){if(1===f.length)return f[0];for(let e of f){if(!("inputs"in e))continue;if(!u||0===u.length){if(!e.inputs||0===e.inputs.length)return e;continue}if(!e.inputs||0===e.inputs.length||e.inputs.length!==u.length)continue;let n=u.every((t,n)=>{let o="inputs"in e&&e.inputs[n];return!!o&&function isArgOfType(e,t){let n=typeof e,o=t.type;switch(o){case"address":return(0,s.U)(e,{strict:!1});case"bool":return"boolean"===n;case"function":case"string":return"string"===n;default:if("tuple"===o&&"components"in t)return Object.values(t.components).every((t,n)=>isArgOfType(Object.values(e)[n],t));if(/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(o))return"number"===n||"bigint"===n;if(/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(o))return"string"===n||e instanceof Uint8Array;if(/[a-z]+[1-9]{0,3}(\[[0-9]{0,}\])+$/.test(o))return Array.isArray(e)&&e.every(e=>isArgOfType(e,{...t,type:o.replace(/(\[[0-9]{0,}\])$/,"")}));return!1}}(t,o)});if(n){if(t&&"inputs"in t&&t.inputs){let n=function getAmbiguousTypes(e,t,n){for(let o in e){let i=e[o],l=t[o];if("tuple"===i.type&&"tuple"===l.type&&"components"in i&&"components"in l)return getAmbiguousTypes(i.components,l.components,n[o]);let c=[i.type,l.type],u=!!(c.includes("address")&&c.includes("bytes20"))||!!(c.includes("address")&&c.includes("string")||c.includes("address")&&c.includes("bytes"))&&(0,s.U)(n[o],{strict:!1});if(u)return c}}(e.inputs,t.inputs,u);if(n)throw new o.S4({abiItem:e,type:n[0]},{abiItem:t,type:n[1]})}t=e}}return t||f[0]}}},45775:function(e,t,n){"use strict";n.d(t,{K:function(){return getAddress},x:function(){return checksumAddress}});var o=n(26087),i=n(11187),s=n(49550),l=n(60480);function checksumAddress(e,t){let n=t?`${t}${e.toLowerCase()}`:e.substring(2).toLowerCase(),o=(0,s.w)((0,i.qX)(n),"bytes"),l=(t?n.substring(`${t}0x`.length):n).split("");for(let e=0;e<40;e+=2)o[e>>1]>>4>=8&&l[e]&&(l[e]=l[e].toUpperCase()),(15&o[e>>1])>=8&&l[e+1]&&(l[e+1]=l[e+1].toUpperCase());return`0x${l.join("")}`}function getAddress(e,t){if(!(0,l.U)(e))throw new o.b({address:e});return checksumAddress(e,t)}},60480:function(e,t,n){"use strict";n.d(t,{U:function(){return isAddress}});let LruMap=class LruMap extends Map{constructor(e){super(),Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=e}set(e,t){return super.set(e,t),this.maxSize&&this.size>this.maxSize&&this.delete(this.keys().next().value),this}};var o=n(45775);let i=/^0x[a-fA-F0-9]{40}$/,s=new LruMap(8192);function isAddress(e,{strict:t=!0}={}){if(s.has(e))return s.get(e);let n=!!i.test(e)&&(e.toLowerCase()===e||!t||(0,o.x)(e)===e);return s.set(e,n),n}},86164:function(e,t,n){"use strict";function defineChain(e){return{formatters:void 0,fees:void 0,serializers:void 0,...e}}n.d(t,{a:function(){return defineChain}})},47864:function(e,t,n){"use strict";n.d(t,{L:function(){return getChainContractAddress}});var o=n(80377);function getChainContractAddress({blockNumber:e,chain:t,contract:n}){let i=t?.contracts?.[n];if(!i)throw new o.mm({chain:t,contract:{name:n}});if(e&&i.blockCreated&&i.blockCreated>e)throw new o.mm({blockNumber:e,chain:t,contract:{name:n,blockCreated:i.blockCreated}});return i.address}},11221:function(e,t,n){"use strict";n.d(t,{q:function(){return createCursor}});var o=n(66238);let i={bytes:new Uint8Array,dataView:new DataView(new ArrayBuffer(0)),position:0,positionReadCount:new Map,recursiveReadCount:0,recursiveReadLimit:1/0,assertReadLimit(){if(this.recursiveReadCount>=this.recursiveReadLimit)throw new o.KD({count:this.recursiveReadCount+1,limit:this.recursiveReadLimit})},assertPosition(e){if(e<0||e>this.bytes.length-1)throw new o.lQ({length:this.bytes.length,position:e})},decrementPosition(e){if(e<0)throw new o.T_({offset:e});let t=this.position-e;this.assertPosition(t),this.position=t},getReadCount(e){return this.positionReadCount.get(e||this.position)||0},incrementPosition(e){if(e<0)throw new o.T_({offset:e});let t=this.position+e;this.assertPosition(t),this.position=t},inspectByte(e){let t=e??this.position;return this.assertPosition(t),this.bytes[t]},inspectBytes(e,t){let n=t??this.position;return this.assertPosition(n+e-1),this.bytes.subarray(n,n+e)},inspectUint8(e){let t=e??this.position;return this.assertPosition(t),this.bytes[t]},inspectUint16(e){let t=e??this.position;return this.assertPosition(t+1),this.dataView.getUint16(t)},inspectUint24(e){let t=e??this.position;return this.assertPosition(t+2),(this.dataView.getUint16(t)<<8)+this.dataView.getUint8(t+2)},inspectUint32(e){let t=e??this.position;return this.assertPosition(t+3),this.dataView.getUint32(t)},pushByte(e){this.assertPosition(this.position),this.bytes[this.position]=e,this.position++},pushBytes(e){this.assertPosition(this.position+e.length-1),this.bytes.set(e,this.position),this.position+=e.length},pushUint8(e){this.assertPosition(this.position),this.bytes[this.position]=e,this.position++},pushUint16(e){this.assertPosition(this.position+1),this.dataView.setUint16(this.position,e),this.position+=2},pushUint24(e){this.assertPosition(this.position+2),this.dataView.setUint16(this.position,e>>8),this.dataView.setUint8(this.position+2,255&e),this.position+=3},pushUint32(e){this.assertPosition(this.position+3),this.dataView.setUint32(this.position,e),this.position+=4},readByte(){this.assertReadLimit(),this._touch();let e=this.inspectByte();return this.position++,e},readBytes(e,t){this.assertReadLimit(),this._touch();let n=this.inspectBytes(e);return this.position+=t??e,n},readUint8(){this.assertReadLimit(),this._touch();let e=this.inspectUint8();return this.position+=1,e},readUint16(){this.assertReadLimit(),this._touch();let e=this.inspectUint16();return this.position+=2,e},readUint24(){this.assertReadLimit(),this._touch();let e=this.inspectUint24();return this.position+=3,e},readUint32(){this.assertReadLimit(),this._touch();let e=this.inspectUint32();return this.position+=4,e},setPosition(e){let t=this.position;return this.assertPosition(e),this.position=e,()=>this.position=t},_touch(){if(this.recursiveReadLimit===1/0)return;let e=this.getReadCount();this.positionReadCount.set(this.position,e+1),e>0&&this.recursiveReadCount++}};function createCursor(e,{recursiveReadLimit:t=8192}={}){let n=Object.create(i);return n.bytes=e,n.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength),n.positionReadCount=new Map,n.recursiveReadLimit=t,n}},57040:function(e,t,n){"use strict";function concat(e){return"string"==typeof e[0]?concatHex(e):function(e){let t=0;for(let n of e)t+=n.length;let n=new Uint8Array(t),o=0;for(let t of e)n.set(t,o),o+=t.length;return n}(e)}function concatHex(e){return`0x${e.reduce((e,t)=>e+t.replace("0x",""),"")}`}n.d(t,{SM:function(){return concatHex},zo:function(){return concat}})},15102:function(e,t,n){"use strict";function isHex(e,{strict:t=!0}={}){return!!e&&"string"==typeof e&&(t?/^0x[0-9a-fA-F]*$/.test(e):e.startsWith("0x"))}n.d(t,{v:function(){return isHex}})},61769:function(e,t,n){"use strict";n.d(t,{gc:function(){return padHex},vk:function(){return pad}});var o=n(69760);function pad(e,{dir:t,size:n=32}={}){return"string"==typeof e?padHex(e,{dir:t,size:n}):function(e,{dir:t,size:n=32}={}){if(null===n)return e;if(e.length>n)throw new o.$s({size:e.length,targetSize:n,type:"bytes"});let i=new Uint8Array(n);for(let o=0;o2*n)throw new o.$s({size:Math.ceil(i.length/2),targetSize:n,type:"hex"});return`0x${i["right"===t?"padEnd":"padStart"](2*n,"0")}`}},39135:function(e,t,n){"use strict";n.d(t,{d:function(){return size}});var o=n(15102);function size(e){return(0,o.v)(e,{strict:!1})?Math.ceil((e.length-2)/2):e.length}},3972:function(e,t,n){"use strict";n.d(t,{T4:function(){return sliceBytes},tP:function(){return slice}});var o=n(69760),i=n(15102),s=n(39135);function slice(e,t,n,{strict:o}={}){return(0,i.v)(e,{strict:!1})?function(e,t,n,{strict:o}={}){assertStartOffset(e,t);let i=`0x${e.replace("0x","").slice((t??0)*2,(n??e.length)*2)}`;return o&&assertEndOffset(i,t,n),i}(e,t,n,{strict:o}):sliceBytes(e,t,n,{strict:o})}function assertStartOffset(e,t){if("number"==typeof t&&t>0&&t>(0,s.d)(e)-1)throw new o.mV({offset:t,position:"start",size:(0,s.d)(e)})}function assertEndOffset(e,t,n){if("number"==typeof t&&"number"==typeof n&&(0,s.d)(e)!==n-t)throw new o.mV({offset:n,position:"end",size:(0,s.d)(e)})}function sliceBytes(e,t,n,{strict:o}={}){assertStartOffset(e,t);let i=e.slice(t,n);return o&&assertEndOffset(i,t,n),i}},61836:function(e,t,n){"use strict";function trim(e,{dir:t="left"}={}){let n="string"==typeof e?e.replace("0x",""):e,o=0;for(let e=0;et)throw new o.M6({givenSize:(0,i.d)(e),maxSize:t})}function hexToBigInt(e,t={}){let{signed:n}=t;t.size&&assertSize(e,{size:t.size});let o=BigInt(e);if(!n)return o;let i=(e.length-2)/2,s=(1n<<8n*BigInt(i)-1n)-1n;return o<=s?o:o-BigInt(`0x${"f".padStart(2*i,"f")}`)-1n}function hexToNumber(e,t={}){return Number(hexToBigInt(e,t))}function hexToString(e,t={}){let n=(0,l.nr)(e);return t.size&&(assertSize(n,{size:t.size}),n=(0,s.f)(n,{dir:"right"})),new TextDecoder().decode(n)}},11187:function(e,t,n){"use strict";n.d(t,{O0:function(){return toBytes},nr:function(){return hexToBytes},qX:function(){return stringToBytes}});var o=n(62027),i=n(15102),s=n(61769),l=n(95946),c=n(92106);let u=new TextEncoder;function toBytes(e,t={}){return"number"==typeof e||"bigint"==typeof e?function(e,t){let n=(0,c.eC)(e,t);return hexToBytes(n)}(e,t):"boolean"==typeof e?function(e,t={}){let n=new Uint8Array(1);return(n[0]=Number(e),"number"==typeof t.size)?((0,l.Yf)(n,{size:t.size}),(0,s.vk)(n,{size:t.size})):n}(e,t):(0,i.v)(e)?hexToBytes(e,t):stringToBytes(e,t)}let d={zero:48,nine:57,A:65,F:70,a:97,f:102};function charCodeToBase16(e){return e>=d.zero&&e<=d.nine?e-d.zero:e>=d.A&&e<=d.F?e-(d.A-10):e>=d.a&&e<=d.f?e-(d.a-10):void 0}function hexToBytes(e,t={}){let n=e;t.size&&((0,l.Yf)(n,{size:t.size}),n=(0,s.vk)(n,{dir:"right",size:t.size}));let i=n.slice(2);i.length%2&&(i=`0${i}`);let c=i.length/2,u=new Uint8Array(c);for(let e=0,t=0;et.toString(16).padStart(2,"0"));function toHex(e,t={}){return"number"==typeof e||"bigint"==typeof e?numberToHex(e,t):"string"==typeof e?stringToHex(e,t):"boolean"==typeof e?boolToHex(e,t):bytesToHex(e,t)}function boolToHex(e,t={}){let n=`0x${Number(e)}`;return"number"==typeof t.size?((0,s.Yf)(n,{size:t.size}),(0,i.vk)(n,{size:t.size})):n}function bytesToHex(e,t={}){let n="";for(let t=0;tn||ce.code===i.M_.code):e;return s instanceof o.G?new i.M_({cause:e,message:s.details}):i.M_.nodeMessage.test(n)?new i.M_({cause:e,message:e.details}):i.Hh.nodeMessage.test(n)?new i.Hh({cause:e,maxFeePerGas:t?.maxFeePerGas}):i.G$.nodeMessage.test(n)?new i.G$({cause:e,maxFeePerGas:t?.maxFeePerGas}):i.ZI.nodeMessage.test(n)?new i.ZI({cause:e,nonce:t?.nonce}):i.vU.nodeMessage.test(n)?new i.vU({cause:e,nonce:t?.nonce}):i.se.nodeMessage.test(n)?new i.se({cause:e,nonce:t?.nonce}):i.C_.nodeMessage.test(n)?new i.C_({cause:e}):i.WF.nodeMessage.test(n)?new i.WF({cause:e,gas:t?.gas}):i.dR.nodeMessage.test(n)?new i.dR({cause:e,gas:t?.gas}):i.pZ.nodeMessage.test(n)?new i.pZ({cause:e}):i.cs.nodeMessage.test(n)?new i.cs({cause:e,maxFeePerGas:t?.maxFeePerGas,maxPriorityFeePerGas:t?.maxPriorityFeePerGas}):new i.cj({cause:e})}},43310:function(e,t,n){"use strict";n.d(t,{G:function(){return s},Z:function(){return formatBlock}});var o=n(21366),i=n(6073);function formatBlock(e){let t=e.transactions?.map(e=>"string"==typeof e?e:i.Tr(e));return{...e,baseFeePerGas:e.baseFeePerGas?BigInt(e.baseFeePerGas):null,blobGasUsed:e.blobGasUsed?BigInt(e.blobGasUsed):void 0,difficulty:e.difficulty?BigInt(e.difficulty):void 0,excessBlobGas:e.excessBlobGas?BigInt(e.excessBlobGas):void 0,gasLimit:e.gasLimit?BigInt(e.gasLimit):void 0,gasUsed:e.gasUsed?BigInt(e.gasUsed):void 0,hash:e.hash?e.hash:null,logsBloom:e.logsBloom?e.logsBloom:null,nonce:e.nonce?e.nonce:null,number:e.number?BigInt(e.number):null,size:e.size?BigInt(e.size):void 0,timestamp:e.timestamp?BigInt(e.timestamp):void 0,transactions:t,totalDifficulty:e.totalDifficulty?BigInt(e.totalDifficulty):null}}let s=(0,o.$)("block",formatBlock)},61163:function(e,t,n){"use strict";function extract(e,{format:t}){if(!t)return{};let n={},o=t(e||{});return!function extract_(t){let o=Object.keys(t);for(let i of o)i in e&&(n[i]=e[i]),t[i]&&"object"==typeof t[i]&&!Array.isArray(t[i])&&extract_(t[i])}(o),n}n.d(t,{K:function(){return extract}})},21366:function(e,t,n){"use strict";function defineFormatter(e,t){return({exclude:n,format:o})=>({exclude:n,format:e=>{let i=t(e);if(n)for(let e of n)delete i[e];return{...i,...o(e)}},type:e})}n.d(t,{$:function(){return defineFormatter}})},53992:function(e,t,n){"use strict";function formatLog(e,{args:t,eventName:n}={}){return{...e,blockHash:e.blockHash?e.blockHash:null,blockNumber:e.blockNumber?BigInt(e.blockNumber):null,logIndex:e.logIndex?Number(e.logIndex):null,transactionHash:e.transactionHash?e.transactionHash:null,transactionIndex:e.transactionIndex?Number(e.transactionIndex):null,...n?{args:t,eventName:n}:{}}}n.d(t,{U:function(){return formatLog}})},6073:function(e,t,n){"use strict";n.d(t,{Tr:function(){return formatTransaction},c8:function(){return s},y_:function(){return l}});var o=n(95946),i=n(21366);let s={"0x0":"legacy","0x1":"eip2930","0x2":"eip1559","0x3":"eip4844"};function formatTransaction(e){let t={...e,blockHash:e.blockHash?e.blockHash:null,blockNumber:e.blockNumber?BigInt(e.blockNumber):null,chainId:e.chainId?(0,o.ly)(e.chainId):void 0,gas:e.gas?BigInt(e.gas):void 0,gasPrice:e.gasPrice?BigInt(e.gasPrice):void 0,maxFeePerBlobGas:e.maxFeePerBlobGas?BigInt(e.maxFeePerBlobGas):void 0,maxFeePerGas:e.maxFeePerGas?BigInt(e.maxFeePerGas):void 0,maxPriorityFeePerGas:e.maxPriorityFeePerGas?BigInt(e.maxPriorityFeePerGas):void 0,nonce:e.nonce?(0,o.ly)(e.nonce):void 0,to:e.to?e.to:null,transactionIndex:e.transactionIndex?Number(e.transactionIndex):null,type:e.type?s[e.type]:void 0,typeHex:e.type?e.type:void 0,value:e.value?BigInt(e.value):void 0,v:e.v?BigInt(e.v):void 0};return t.yParity=(()=>{if(e.yParity)return Number(e.yParity);if("bigint"==typeof t.v){if(0n===t.v||27n===t.v)return 0;if(1n===t.v||28n===t.v)return 1;if(t.v>=35n)return t.v%2n===0n?1:0}})(),"legacy"===t.type&&(delete t.accessList,delete t.maxFeePerBlobGas,delete t.maxFeePerGas,delete t.maxPriorityFeePerGas,delete t.yParity),"eip2930"===t.type&&(delete t.maxFeePerBlobGas,delete t.maxFeePerGas,delete t.maxPriorityFeePerGas),"eip1559"===t.type&&delete t.maxFeePerBlobGas,t}let l=(0,i.$)("transaction",formatTransaction)},30866:function(e,t,n){"use strict";n.d(t,{d:function(){return u},f:function(){return formatTransactionReceipt}});var o=n(95946),i=n(21366),s=n(53992),l=n(6073);let c={"0x0":"reverted","0x1":"success"};function formatTransactionReceipt(e){let t={...e,blockNumber:e.blockNumber?BigInt(e.blockNumber):null,contractAddress:e.contractAddress?e.contractAddress:null,cumulativeGasUsed:e.cumulativeGasUsed?BigInt(e.cumulativeGasUsed):null,effectiveGasPrice:e.effectiveGasPrice?BigInt(e.effectiveGasPrice):null,gasUsed:e.gasUsed?BigInt(e.gasUsed):null,logs:e.logs?e.logs.map(e=>(0,s.U)(e)):null,to:e.to?e.to:null,transactionIndex:e.transactionIndex?(0,o.ly)(e.transactionIndex):null,status:e.status?c[e.status]:null,type:e.type?l.c8[e.type]||e.type:null};return e.blobGasPrice&&(t.blobGasPrice=BigInt(e.blobGasPrice)),e.blobGasUsed&&(t.blobGasUsed=BigInt(e.blobGasUsed)),t}let u=(0,i.$)("transactionReceipt",formatTransactionReceipt)},74688:function(e,t,n){"use strict";n.d(t,{iy:function(){return l},tG:function(){return formatTransactionRequest}});var o=n(92106),i=n(21366);let s={legacy:"0x0",eip2930:"0x1",eip1559:"0x2",eip4844:"0x3"};function formatTransactionRequest(e){let t={...e};return void 0!==e.blobs&&"string"!=typeof e.blobs[0]&&(t.blobs=e.blobs.map(e=>(0,o.ci)(e))),void 0!==e.gas&&(t.gas=(0,o.eC)(e.gas)),void 0!==e.gasPrice&&(t.gasPrice=(0,o.eC)(e.gasPrice)),void 0!==e.maxFeePerBlobGas&&(t.maxFeePerBlobGas=(0,o.eC)(e.maxFeePerBlobGas)),void 0!==e.maxFeePerGas&&(t.maxFeePerGas=(0,o.eC)(e.maxFeePerGas)),void 0!==e.maxPriorityFeePerGas&&(t.maxPriorityFeePerGas=(0,o.eC)(e.maxPriorityFeePerGas)),void 0!==e.nonce&&(t.nonce=(0,o.eC)(e.nonce)),void 0!==e.type&&(t.type=s[e.type]),void 0!==e.value&&(t.value=(0,o.eC)(e.value)),t}let l=(0,i.$)("transactionRequest",formatTransactionRequest)},49550:function(e,t,n){"use strict";n.d(t,{w:function(){return keccak256}});var o=n(22250),i=n(15102),s=n(11187),l=n(92106);function keccak256(e,t){let n=(0,o.fr)((0,i.v)(e,{strict:!1})?(0,s.O0)(e):e);return"bytes"===(t||"hex")?n:(0,l.NC)(n)}},96005:function(e,t,n){"use strict";n.d(t,{n:function(){return i}});var o=n(67684);let i=o.r},58034:function(e,t,n){"use strict";n.d(t,{C:function(){return toFunctionSelector}});var o=n(3972),i=n(67684);let toFunctionSelector=e=>(0,o.tP)((0,i.r)(e),0,4)},67684:function(e,t,n){"use strict";n.d(t,{r:function(){return toSignatureHash}});var o=n(11187),i=n(49550);let hash=e=>(0,i.w)((0,o.O0)(e)),s=/^tuple(?(\[(\d*)\])*)$/;function formatAbiParameters(e){let t="",n=e.length;for(let o=0;o{var t;let n="string"==typeof e?e:"function"===(t=e).type?`function ${t.name}(${formatAbiParameters(t.inputs)})${t.stateMutability&&"nonpayable"!==t.stateMutability?` ${t.stateMutability}`:""}${t.outputs.length?` returns (${formatAbiParameters(t.outputs)})`:""}`:"event"===t.type?`event ${t.name}(${formatAbiParameters(t.inputs)})`:"error"===t.type?`error ${t.name}(${formatAbiParameters(t.inputs)})`:"constructor"===t.type?`constructor(${formatAbiParameters(t.inputs)})${"payable"===t.stateMutability?" payable":""}`:"fallback"===t.type?"fallback()":"receive() external payable";return function(e){let t=!0,n="",o=0,i="",s=!1;for(let l=0;l{let t=getScheduler();flush();let n=t.map(({args:e})=>e);0!==n.length&&e(n).then(e=>{s&&Array.isArray(e)&&e.sort(s);for(let n=0;n{for(let n=0;no.delete(t),getBatchedArgs=()=>getScheduler().map(({args:e})=>e),getScheduler=()=>o.get(t)||[],setScheduler=e=>o.set(t,[...getScheduler(),e]);return{flush,async schedule(e){let t={},o=new Promise((e,n)=>{t.resolve=e,t.reject=n}),s=n?.([...getBatchedArgs(),e]);s&&exec();let l=getScheduler().length>0;return l?setScheduler({args:e,pendingPromise:t}):(setScheduler({args:e,pendingPromise:t}),setTimeout(exec,i)),o}}}},7760:function(e,t,n){"use strict";n.d(t,{J:function(){return withRetry}});var o=n(62914);function withRetry(e,{delay:t=100,retryCount:n=2,shouldRetry:i=()=>!0}={}){return new Promise((s,l)=>{let attemptRetry=async({count:c=0}={})=>{let retry=async({error:e})=>{let n="function"==typeof t?t({count:c,error:e}):t;n&&await (0,o.D)(n),attemptRetry({count:c+1})};try{let t=await e();s(t)}catch(e){if(cJSON.stringify(e,(e,n)=>{let o="bigint"==typeof n?n.toString():n;return"function"==typeof t?t(e,o):o},n)},47531:function(e,t,n){"use strict";n.d(t,{F:function(){return assertRequest}});var o=n(14503),i=n(26087),s=n(26445),l=n(33639),c=n(60480);function assertRequest(e){let{account:t,gasPrice:n,maxFeePerGas:u,maxPriorityFeePerGas:d,to:p}=e,f=t?(0,o.T)(t):void 0;if(f&&!(0,c.U)(f.address))throw new i.b({address:f.address});if(p&&!(0,c.U)(p))throw new i.b({address:p});if(void 0!==n&&(void 0!==u||void 0!==d))throw new l.xY;if(u&&u>2n**256n-1n)throw new s.Hh({maxFeePerGas:u});if(d&&u&&d>u)throw new s.cs({maxFeePerGas:u,maxPriorityFeePerGas:d})}},82994:function(e,t,n){"use strict";n.d(t,{l:function(){return getTransactionType}});var o=n(33639);function getTransactionType(e){if(e.type)return e.type;if(void 0!==e.blobs||void 0!==e.blobVersionedHashes||void 0!==e.maxFeePerBlobGas||void 0!==e.sidecars)return"eip4844";if(void 0!==e.maxFeePerGas||void 0!==e.maxPriorityFeePerGas)return"eip1559";if(void 0!==e.gasPrice)return void 0!==e.accessList?"eip2930":"legacy";throw new o.j3({transaction:e})}},39625:function(e,t,n){"use strict";n.d(t,{d:function(){return formatEther}});var o=n(84192),i=n(15229);function formatEther(e,t="wei"){return(0,i.b)(e,o.ez[t])}},67795:function(e,t,n){"use strict";n.d(t,{o:function(){return formatGwei}});var o=n(84192),i=n(15229);function formatGwei(e,t="wei"){return(0,i.b)(e,o.Zn[t])}},15229:function(e,t,n){"use strict";function formatUnits(e,t){let n=e.toString(),o=n.startsWith("-");o&&(n=n.slice(1));let[i,s]=[(n=n.padStart(t,"0")).slice(0,n.length-t),n.slice(n.length-t)];return s=s.replace(/(0+)$/,""),`${o?"-":""}${i||"0"}${s?`.${s}`:""}`}n.d(t,{b:function(){return formatUnits}})},62914:function(e,t,n){"use strict";async function wait(e){return new Promise(t=>setTimeout(t,e))}n.d(t,{D:function(){return wait}})},99931:function(e,t,n){"use strict";n.d(t,{V:function(){return s},F:function(){return WagmiProvider}});var o=n(67294);let i=!1;async function reconnect(e,t={}){let n;if(i)return[];i=!0,e.setState(e=>({...e,status:e.current?"reconnecting":"connecting"}));let o=[];if(t.connectors?.length)for(let n of t.connectors){let t;t="function"==typeof n?e._internal.connectors.setup(n):n,o.push(t)}else o.push(...e.connectors);try{n=await e.storage?.getItem("recentConnectorId")}catch{}let s={};for(let[,t]of e.state.connections)s[t.connector.id]=1;n&&(s[n]=0);let l=Object.keys(s).length>0?[...o].sort((e,t)=>(s[e.id]??10)-(s[t.id]??10)):o,c=!1,u=[],d=[];for(let t of l){let n=await t.getProvider();if(!n||d.some(e=>e===n))continue;let o=await t.isAuthorized();if(!o)continue;let i=await t.connect({isReconnecting:!0}).catch(()=>null);i&&(t.emitter.off("connect",e._internal.events.connect),t.emitter.on("change",e._internal.events.change),t.emitter.on("disconnect",e._internal.events.disconnect),e.setState(e=>{let n=new Map(c?e.connections:new Map).set(t.uid,{accounts:i.accounts,chainId:i.chainId,connector:t});return{...e,current:c?e.current:t.uid,connections:n}}),u.push({accounts:i.accounts,chainId:i.chainId,connector:t}),d.push(n),c=!0)}return("reconnecting"===e.state.status||"connecting"===e.state.status)&&(c?e.setState(e=>({...e,status:"connected"})):e.setState(e=>({...e,connections:new Map,current:void 0,status:"disconnected"}))),i=!1,u}function Hydrate(e){let{children:t,config:n,initialState:i,reconnectOnMount:s=!0}=e,{onMount:l}=function(e,t){let{initialState:n,reconnectOnMount:o}=t;return n&&!e._internal.store.persist.hasHydrated()&&e.setState({...n,connections:o?n.connections:new Map,status:o?"reconnecting":"disconnected"}),{async onMount(){if(e._internal.ssr){await e._internal.store.persist.rehydrate();let t=e._internal.mipd?.getProviders().map(e._internal.connectors.providerDetailToConnector).map(e._internal.connectors.setup);e._internal.connectors.setState(e=>[...e,...t??[]])}o?reconnect(e):e.storage&&e.setState(e=>({...e,connections:new Map}))}}}(n,{initialState:i,reconnectOnMount:s});n._internal.ssr||l();let c=(0,o.useRef)(!0);return(0,o.useEffect)(()=>{if(c.current&&n._internal.ssr)return l(),()=>{c.current=!1}},[]),t}let s=(0,o.createContext)(void 0);function WagmiProvider(e){let{children:t,config:n}=e;return(0,o.createElement)(Hydrate,e,(0,o.createElement)(s.Provider,{value:n},t))}},92321:function(e,t,n){"use strict";n.d(t,{m:function(){return useAccount}});var o=n(33397),i=n(52425),s=n(37122),l=n(74751),c=n(67294),u=n(52798);let isPlainObject=e=>"object"==typeof e&&!Array.isArray(e);function useAccount(e={}){let t=(0,s.Z)(e);return function(e,t,n=t,o=l.v){let i=(0,c.useRef)([]),s=(0,u.useSyncExternalStoreWithSelector)(e,t,n,e=>e,(e,t)=>{if(isPlainObject(e)&&isPlainObject(t)&&i.current.length){for(let n of i.current){let i=o(e[n],t[n]);if(!i)return!1}return!0}return o(e,t)});if(isPlainObject(s)){let e={...s};return Object.defineProperties(e,Object.entries(e).reduce((e,[t,n])=>({...e,[t]:{configurable:!1,enumerable:!0,get:()=>(i.current.includes(t)||i.current.push(t),n)}}),{})),e}return s}(e=>(0,o.u)(t,{onChange:e}),()=>(0,i.D)(t))}},37122:function(e,t,n){"use strict";n.d(t,{Z:function(){return useConfig}});var o=n(67294),i=n(99931),s=n(7066);let getVersion=()=>"wagmi@2.5.11";let BaseError=class BaseError extends s.G{constructor(){super(...arguments),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"WagmiError"})}get docsBaseUrl(){return"https://wagmi.sh/react"}get version(){return getVersion()}};let WagmiProviderNotFoundError=class WagmiProviderNotFoundError extends BaseError{constructor(){super("`useConfig` must be used within `WagmiProvider`.",{docsPath:"https://wagmi.sh/react/api/WagmiProvider"}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"WagmiProviderNotFoundError"})}};function useConfig(e={}){let t=e.config??(0,o.useContext)(i.V);if(!t)throw new WagmiProviderNotFoundError;return t}},55585:function(e,t,n){"use strict";n.d(t,{Q:function(){return useSignMessage}});var o=n(98029),i=n(14503),s=n(62027);let AccountNotFoundError=class AccountNotFoundError extends s.G{constructor({docsPath:e}={}){super("Could not find an Account to execute with this Action.\nPlease provide an Account with the `account` argument on the Action, or by supplying an `account` to the WalletClient.",{docsPath:e,docsSlug:"account"}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AccountNotFoundError"})}};var l=n(92106);async function signMessage(e,{account:t=e.account,message:n}){if(!t)throw new AccountNotFoundError({docsPath:"/docs/actions/wallet/signMessage"});let o=(0,i.T)(t);if("local"===o.type)return o.signMessage({message:n});let s="string"==typeof n?(0,l.$G)(n):n.raw instanceof Uint8Array?(0,l.NC)(n.raw):n.raw;return e.request({method:"personal_sign",params:[s,o.address]},{retryCount:0})}var c=n(81946),u=n(16189),d=n(91628),p=n(87675);async function getConnectorClient(e,t={}){let n;if(t.connector){let{connector:e}=t,[o,i]=await Promise.all([e.getAccounts(),e.getChainId()]);n={accounts:o,chainId:i,connector:e}}else n=e.state.connections.get(e.state.current);if(!n)throw new p.aH;let o=t.chainId??n.chainId,s=n.connector;if(s.getClient)return s.getClient({chainId:o});let l=(0,i.T)(t.account??n.accounts[0]),c=e.chains.find(e=>e.id===o),f=await n.connector.getProvider({chainId:o});if(t.account&&!n.accounts.includes(l.address))throw new p.JK({address:l.address,connector:s});return(0,u.e)({account:l,chain:c,name:"Connector Client",transport:e=>(function(e,t={}){let{key:n="custom",name:o="Custom Provider",retryDelay:i}=t;return({retryCount:s})=>(0,d.q)({key:n,name:o,request:e.request.bind(e),retryCount:t.retryCount??s,retryDelay:i,type:"custom"})})(f)({...e,retryCount:0})})}async function signMessage_signMessage(e,t){let n;let{account:o,connector:i,...s}=t;n="object"==typeof o&&"local"===o.type?e.getClient():await getConnectorClient(e,{account:o,connector:i});let l=(0,c.s)(n,signMessage,"signMessage");return l({...s,...o?{account:o}:{}})}var f=n(37122);function useSignMessage(e={}){let{mutation:t}=e,n=(0,f.Z)(e),{mutate:i,mutateAsync:s,...l}=(0,o.D)({...t,mutationFn:e=>signMessage_signMessage(n,e),mutationKey:["signMessage"]});return{...l,signMessage:i,signMessageAsync:s}}}},function(e){var __webpack_exec__=function(t){return e(e.s=t)};e.O(0,[9774,179],function(){return __webpack_exec__(6840),__webpack_exec__(59974)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/dist/dashboard/_next/static/chunks/pages/_error-e4216aab802f5810.js b/dist/controlpanel/_next/static/chunks/pages/_error-e4216aab802f5810.js similarity index 100% rename from dist/dashboard/_next/static/chunks/pages/_error-e4216aab802f5810.js rename to dist/controlpanel/_next/static/chunks/pages/_error-e4216aab802f5810.js diff --git a/dist/controlpanel/_next/static/chunks/pages/index-68352c78cef0caeb.js b/dist/controlpanel/_next/static/chunks/pages/index-68352c78cef0caeb.js new file mode 100644 index 000000000..fef030a2a --- /dev/null +++ b/dist/controlpanel/_next/static/chunks/pages/index-68352c78cef0caeb.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5405],{48312:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return t(87540)}])},87540:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return Home}});var a,r,l=t(85893),s=t(9008),o=t.n(s),i=t(25675),d=t.n(i),c={src:"/_next/static/media/logo-nodes.249ea9ed.svg",height:283,width:425,blurWidth:0,blurHeight:0},u=t(30378),h=t.n(u),x=t(89192),Navigation=()=>(0,l.jsxs)("div",{className:h().navbarParent,children:[(0,l.jsx)("div",{className:h().logoWrapper,children:(0,l.jsx)(d(),{src:c,alt:"Ocean Node Logo",height:70})}),(0,l.jsx)("div",{className:h().connectButtonWrapper,children:(0,l.jsx)(x.NL,{})})]}),j=t(94428),m=t.n(j),components_Footer=()=>{let e=new Date().getFullYear();return(0,l.jsxs)("div",{className:m().footerContainer,children:[(0,l.jsxs)("p",{children:["@ ",e,", Ocean Nodes"]}),(0,l.jsxs)("div",{className:m().footerLinks,children:[(0,l.jsx)("a",{href:"https://oceanprotocol.com/",target:"_blank",children:"Website"}),(0,l.jsx)("a",{href:"https://github.com/oceanprotocol/ocean-node",target:"_blank",children:"GitHub"}),(0,l.jsx)("a",{href:"https://discord.com/invite/TnXjkR5",target:"_blank",children:"Discord"})]})]})},p=t(67294),v=t(73301),f=t.n(v),_=t(59581),b=t(46085),g=t.n(b),N=t(69417),y=t(94054),C=t(50135),S=t(33841),Z=t(30638),I=t(23599),w=t(10586),P=t(50720),T=t(67971),k=t(27484),E=t.n(k),A={src:"/_next/static/media/download.0a4876ec.svg",height:30,width:30,blurWidth:0,blurHeight:0};function DownloadButton(){let[e,n]=(0,p.useState)(!1),[t,a]=(0,p.useState)(!1),[r,s]=(0,p.useState)(E()()),[o,i]=(0,p.useState)(E()()),[c,u]=(0,p.useState)(""),[h,x]=(0,p.useState)(""),[j,m]=(0,p.useState)(""),{signature:v,expiryTimestamp:f}=(0,_.O)(),b=(0,p.useCallback)(async()=>{let e=r?"&startTime=".concat(r.toISOString()):"",n=o?"&endTime=".concat(o.toISOString()):"",t=c?"&maxLogs=".concat(c):"",l=h&&"all"!==h?"&moduleName=".concat(h):"",s=j&&"all"!==j?'&level="'.concat(j,'"'):"";a(!0);try{if(!f||!v){console.error("Missing expiryTimestamp or signature");return}let r=await fetch("/logs?".concat(e).concat(n).concat(t).concat(l).concat(s),{headers:{"Content-Type":"application/json"},method:"POST",body:JSON.stringify({expiryTimestamp:f,signature:v})}),o=await r.json();if(o){let e="data:application/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(o)),n=document.createElement("a");n.setAttribute("href",e),n.setAttribute("download","LogsData.json"),document.body.appendChild(n),n.click(),n.remove()}a(!1)}catch(e){console.error(e),a(!1)}},[r,o,c,h,j]);return(0,l.jsxs)("div",{className:g().column,children:[(0,l.jsx)(N.Z,{type:"button",onClick:()=>n(!e),children:"Download Logs"}),e&&(0,l.jsxs)("div",{className:g().filters,children:[(0,l.jsxs)(P._,{dateAdapter:w.y,children:[(0,l.jsx)(y.Z,{fullWidth:!0,margin:"normal",children:(0,l.jsx)(T.x,{label:"Start Date",value:r,onChange:e=>s(e)})}),(0,l.jsx)(y.Z,{fullWidth:!0,margin:"normal",children:(0,l.jsx)(T.x,{label:"End Date",value:o,onChange:e=>i(e)})})]}),(0,l.jsx)(C.Z,{label:"Max Logs",type:"number",value:c,onChange:e=>u(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined"}),(0,l.jsxs)(y.Z,{fullWidth:!0,margin:"normal",children:[(0,l.jsx)(S.Z,{id:"select-module-name-label",children:"Module Name"}),(0,l.jsxs)(Z.Z,{labelId:"select-module-name-label",label:"Module Name",id:"module-name",value:h,onChange:e=>x(e.target.value),children:[(0,l.jsx)(I.Z,{value:"all",children:"all"}),(0,l.jsx)(I.Z,{value:"http",children:"http"}),(0,l.jsx)(I.Z,{value:"p2p",children:"p2p"}),(0,l.jsx)(I.Z,{value:"indexer",children:"indexer"}),(0,l.jsx)(I.Z,{value:"reindexer",children:"reindexer"}),(0,l.jsx)(I.Z,{value:"provider",children:"provider"}),(0,l.jsx)(I.Z,{value:"database",children:"database"}),(0,l.jsx)(I.Z,{value:"config",children:"config"}),(0,l.jsx)(I.Z,{value:"core",children:"core"}),(0,l.jsx)(I.Z,{value:"OceanNode",children:"OceanNode"})]})]}),(0,l.jsxs)(y.Z,{fullWidth:!0,margin:"normal",children:[(0,l.jsx)(S.Z,{id:"select-level-label",children:"Level"}),(0,l.jsxs)(Z.Z,{labelId:"select-level-label",label:"Level",id:"level",value:j,onChange:e=>m(e.target.value),children:[(0,l.jsx)(I.Z,{value:"all",children:"all"}),(0,l.jsx)(I.Z,{value:"error",children:"error"}),(0,l.jsx)(I.Z,{value:"warn",children:"warn"}),(0,l.jsx)(I.Z,{value:"info",children:"info"}),(0,l.jsx)(I.Z,{value:"http",children:"http"}),(0,l.jsx)(I.Z,{value:"verbose",children:"verbose"}),(0,l.jsx)(I.Z,{value:"debug",children:"debug"}),(0,l.jsx)(I.Z,{value:"silly",children:"silly"})]})]}),(0,l.jsx)(N.Z,{type:"button",onClick:b,variant:"outlined",startIcon:(0,l.jsx)(d(),{src:A,alt:"download button",width:24,height:24}),disabled:t,children:"Download"})]})]})}function StopNode(){let[e,n]=(0,p.useState)(!1),{signature:t,expiryTimestamp:a}=(0,_.O)();async function stopNode(){n(!0);try{a&&t&&await fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"stopNode",expiryTimestamp:a,signature:t})}),alert("The node has been stopped. The control panel will no longer be displayed."),window.location.reload()}catch(e){console.error("error",e)}finally{n(!1)}}return(0,l.jsx)(N.Z,{onClick:stopNode,variant:"outlined",color:"error",children:e?(0,l.jsx)(()=>(0,l.jsx)("span",{className:g().loader}),{}):(0,l.jsx)("div",{children:"Stop Node"})})}var O=t(92321),D=t(31536);function NetworkSelector(e){let{chainId:n,setChainId:t}=e,{networks:a}=(0,_.O)();return(0,l.jsxs)(y.Z,{fullWidth:!0,margin:"normal",variant:"outlined",children:[(0,l.jsx)(S.Z,{id:"network-select-label",children:"Network"}),(0,l.jsx)(Z.Z,{labelId:"network-select-label",id:"network-select",value:n||"",onChange:e=>t(e.target.value),label:"Network",children:Object.values(a).map(e=>(0,l.jsx)(I.Z,{value:e.chainId.toString(),children:e.network},e.chainId))})]})}(a=r||(r={})).DELIVERED="DELIVERED",a.PENDING="PENDING",a.FAILURE="FAILURE",a.SUCCESS="SUCCESS";let checkJobPool=async function(e){try{let n=await fetch("/api/services/jobs/"+(e||""),{headers:{Accept:"application/json","Content-Type":"application/json"},method:"GET"}),t=await n.json();return t.jobs}catch(e){console.error(e)}return[]};function getSeverityFromStatus(e){switch(e){case r.DELIVERED:return"info";case r.SUCCESS:return"success";case r.PENDING:return"warning";default:return"error"}}function isJobDone(e){return[r.SUCCESS,r.FAILURE].includes(e)}var R=t(8434);function JobStatusPanel(e){let n=e.job?function(e){switch(e){case r.DELIVERED:return"DodgerBlue";case r.PENDING:return"LightSlateGrey";case r.SUCCESS:return"ForestGreen";case r.FAILURE:return"OrangeRed";default:return"black"}}(e.job.status):"black";return(0,l.jsx)("div",{children:null!==e.job&&(0,l.jsxs)(R.Z,{sx:{bgcolor:n},variant:"filled",severity:e.severity,onClose:()=>{},children:["Job with id ",(0,l.jsx)("strong",{children:e.job.jobId})," has status"," ",(0,l.jsx)("strong",{children:e.job.status})]})})}var W=t(602);function ReIndexChain(){let[e,n]=(0,p.useState)(!1),[t,a]=(0,p.useState)(!1),[s,o]=(0,p.useState)(),{signature:i,expiryTimestamp:d}=(0,_.O)(),[c,u]=(0,p.useState)("info"),[h,x]=(0,p.useState)(null),j=null;async function reIndex(){a(!0);try{if(d&&i&&s){let e=await fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"reindexChain",chainId:s,expiryTimestamp:d,signature:i})});if(200===e.status){let t=await e.json();u(t.status===r.DELIVERED?"info":"error"),x(t),alert("Chain with ID ".concat(s," is now being reindexed."));let a=!1;j=setInterval(async()=>{let e=await checkJobPool(t.jobId);if(1===e.length){let n=e[0];u(getSeverityFromStatus(n.status)),a=isJobDone(n.status),x(n)}else x(null)},3e3),a&&j&&(0,W.clearInterval)(j),n(!1)}else alert("Error reindexing chain. Please try again.")}}catch(e){console.error("error",e)}finally{a(!1)}}return(0,l.jsxs)("div",{className:g().column,children:[(0,l.jsx)(N.Z,{type:"button",onClick:()=>n(!e),children:"ReIndex Chain"}),e&&(0,l.jsxs)("div",{className:g().filters,children:[(0,l.jsx)(NetworkSelector,{chainId:s,setChainId:o}),(0,l.jsx)(N.Z,{type:"button",onClick:reIndex,variant:"outlined",disabled:t,children:"ReIndex Chain"})]}),(0,l.jsx)(JobStatusPanel,{job:h,severity:c})]})}function ReIndexTransaction(){let[e,n]=(0,p.useState)(!1),[t,a]=(0,p.useState)(!1),[s,o]=(0,p.useState)(),[i,d]=(0,p.useState)(),{signature:c,expiryTimestamp:u}=(0,_.O)(),[h,x]=(0,p.useState)("info"),[j,m]=(0,p.useState)(null),v=null;async function reIndexTx(){a(!0);try{if(u&&c&&s&&i){let e=await fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"reindexTx",chainId:s,txId:i,expiryTimestamp:u,signature:c})});if(200===e.status){let t=await e.json();x(t.status===r.DELIVERED?"info":"error"),m(t),alert("Transaction with TX ID ".concat(i," on chain ").concat(s," is now being reindexed."));let a=!1;v=setInterval(async()=>{let e=await checkJobPool(t.jobId);if(1===e.length){let n=e[0];x(getSeverityFromStatus(n.status)),a=isJobDone(n.status),m(n)}else m(null)},3e3),a&&v&&clearInterval(v),n(!1)}else alert("Error reindexing transaction. Please try again.")}}catch(e){console.error("error",e)}finally{a(!1)}}return(0,l.jsxs)("div",{className:g().column,children:[(0,l.jsx)(N.Z,{type:"button",onClick:()=>n(!e),children:"ReIndex Transaction"}),e&&(0,l.jsxs)("div",{className:g().filters,children:[(0,l.jsx)(NetworkSelector,{chainId:s,setChainId:o}),(0,l.jsx)(C.Z,{label:"Transaction ID",value:i,onChange:e=>d(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined"}),(0,l.jsx)(N.Z,{type:"button",onClick:reIndexTx,variant:"outlined",disabled:t,children:"ReIndex Transaction"})]}),(0,l.jsx)(JobStatusPanel,{job:j,severity:h})]})}var L=t(58703),F=t(64666),B=t(37645),J=t(6514),H=t(58951),U=t(31425);function TransferFees(){let[e,n]=(0,p.useState)(!1),[t,a]=(0,p.useState)(!1),[r,s]=(0,p.useState)(""),[o,i]=(0,p.useState)(""),[d,c]=(0,p.useState)(""),[u,h]=(0,p.useState)(""),{signature:x,expiryTimestamp:j}=(0,_.O)(),[m,v]=(0,p.useState)(null),[f,b]=(0,p.useState)(!1),[y,S]=(0,p.useState)(!1),[Z,I]=(0,p.useState)(null),[w,P]=(0,p.useState)(null),validateInputs=()=>r&&o&&d&&u?isNaN(Number(d))?(v("Token amount must be a number."),!1):(v(null),!0):(v("All fields are required."),!1);async function transferFees(){if(validateInputs()){a(!0);try{let e=await fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"collectFees",chainId:r,tokenAddress:o,tokenAmount:d,destinationAddress:u,expiryTimestamp:j,signature:x})});if(200===e.status){let t=await e.json();(null==t?void 0:t.tx)&&(null==t?void 0:t.message)&&(P(t.tx),I(t.message),S(!0),b(!0),n(!1))}else v(e.statusText?e.statusText:"Error transferring fees. Please try again.")}catch(e){console.error("error",e),v("Error transferring fees. Please try again.")}finally{a(!1)}}}let handleDialogClose=()=>{S(!1)};return(0,l.jsxs)("div",{className:g().column,children:[(0,l.jsx)(N.Z,{variant:"text",onClick:()=>n(!e),children:"Transfer Fees"}),e&&(0,l.jsxs)("div",{className:g().filters,children:[(0,l.jsx)(C.Z,{label:"Chain ID",value:r,onChange:e=>s(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined",type:"number"}),(0,l.jsx)(C.Z,{label:"Token Address",value:o,onChange:e=>i(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined"}),(0,l.jsx)(C.Z,{label:"Token Amount",value:d,onChange:e=>c(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined",type:"number"}),(0,l.jsx)(C.Z,{label:"Destination Address",value:u,onChange:e=>h(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined"}),m&&(0,l.jsx)(R.Z,{severity:"error",children:m}),(0,l.jsx)(N.Z,{type:"button",onClick:transferFees,variant:"outlined",disabled:t,fullWidth:!0,children:"Transfer Fees"})]}),(0,l.jsx)(L.Z,{open:f,autoHideDuration:6e3,onClose:()=>b(!1),message:"Fees successfully transferred!"}),(0,l.jsxs)(F.Z,{open:y,onClose:handleDialogClose,"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[(0,l.jsx)(B.Z,{id:"alert-dialog-title",children:"Transfer Successful"}),(0,l.jsx)(J.Z,{children:(0,l.jsx)(H.Z,{id:"alert-dialog-description",children:Z&&(0,l.jsxs)("span",{children:[Z," ",(0,l.jsx)("br",{}),(0,l.jsx)("strong",{style:{marginTop:"10px",display:"block"},children:"Transaction Hash:"})," ",w]})})}),(0,l.jsx)(U.Z,{children:(0,l.jsx)(N.Z,{onClick:handleDialogClose,autoFocus:!0,children:"Close"})})]})]})}function AdminActions(){let{generateSignature:e,signature:n,validTimestamp:t,admin:a}=(0,_.O)(),{isConnected:r}=(0,O.m)();return(0,l.jsxs)("div",{className:g().root,children:[(0,l.jsx)("div",{className:g().title,children:"ADMIN ACTIONS"}),!r&&(0,l.jsx)(x.NL,{}),r&&!a&&(0,l.jsx)("div",{className:g().unauthorised,children:"Your account does not have admin access"}),(!n||!t)&&r&&a&&(0,l.jsx)("button",{type:"button",className:g().unlockButton,onClick:e,children:"Unlock"}),r&&n&&t&&r&&a&&(0,l.jsxs)(D.Z,{spacing:2,direction:"column",children:[(0,l.jsx)(DownloadButton,{}),(0,l.jsx)(ReIndexChain,{}),(0,l.jsx)(ReIndexTransaction,{}),(0,l.jsx)(TransferFees,{}),(0,l.jsx)(StopNode,{})]})]})}var Q=t(17044),G=t.n(Q);function Spinner(){return(0,l.jsx)("span",{className:G().loader})}var M=t(85108),q=t.n(M),V=t(75368),X=t.n(V),K={src:"/_next/static/media/copy.63713a04.svg",height:16,width:15,blurWidth:0,blurHeight:0};function Copy(e){let{text:n}=e,[t,a]=(0,p.useState)(!1),copyToClipboard=e=>{let n=document.createElement("textarea");n.value=e,document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n)};return(0,p.useEffect)(()=>{if(!t)return;let e=setTimeout(()=>{a(!1)},1e3);return()=>clearTimeout(e)},[t]),(0,l.jsxs)("div",{className:X().action,onClick:()=>{copyToClipboard(n),a(!0)},children:[(0,l.jsx)(d(),{src:K,alt:"icont-copy",className:X().icon}),t&&(0,l.jsx)("div",{className:X().feedback,children:"Copied!"})]})}var z=t(15861);function NodePeers(){let[e,n]=(0,p.useState)([]),[t,a]=(0,p.useState)(!0),[r,s]=(0,p.useState)(!1),fetchNodePeers=async()=>{a(!0);try{let e=await fetch("/getOceanPeers",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"GET"}),t=await e.json();n(t)}catch(e){console.error("error",e)}finally{a(!1)}};(0,p.useEffect)(()=>{fetchNodePeers();let e=setInterval(()=>{fetchNodePeers()},12e4);return()=>clearInterval(e)},[]);let o=r?e:e.slice(0,10);return(0,l.jsxs)("div",{className:q().nodes,children:[(0,l.jsxs)("div",{className:q().title24,children:["Connected Nodes (Total ",e.length,")"]}),t?(0,l.jsx)("div",{className:q().loaderContainer,children:(0,l.jsx)(Spinner,{})}):(0,l.jsxs)(l.Fragment,{children:[e.length>0?o.map(e=>(0,l.jsxs)("div",{className:q().nodeAddress,children:[e," ",(0,l.jsx)(Copy,{text:e})]},e)):(0,l.jsx)(z.Z,{variant:"body1",children:"There are no nodes connected"}),!r&&e.length>10&&(0,l.jsx)(N.Z,{onClick:()=>s(!0),variant:"text",color:"primary",children:"Show All"}),r&&e.length>10&&(0,l.jsx)(N.Z,{onClick:()=>s(!1),variant:"text",color:"primary",children:"Show Less"})]})]})}function SupportedStorage(e){let{data:n}=e;return(0,l.jsxs)("div",{className:f().indexer,children:[(0,l.jsx)("div",{className:f().title29,children:"SUPPORTED STORAGE"}),(0,l.jsxs)("div",{className:f().provider,children:[(0,l.jsxs)("div",{className:f().providerRow,children:[(0,l.jsx)("div",{className:f().providerTitle,children:(0,l.jsx)("b",{children:"arwave:"})}),(0,l.jsxs)("div",{children:[null==n?void 0:n.supportedStorage.arwave.toString()," "]})]}),(0,l.jsxs)("div",{className:f().providerRow,children:[(0,l.jsx)("div",{className:f().providerTitle,children:(0,l.jsx)("b",{children:"ipfs:"})}),(0,l.jsxs)("div",{children:[null==n?void 0:n.supportedStorage.ipfs.toString()," "]})]}),(0,l.jsxs)("div",{className:f().providerRow,children:[(0,l.jsx)("div",{className:f().providerTitle,children:(0,l.jsx)("b",{children:"url:"})}),(0,l.jsxs)("div",{children:[null==n?void 0:n.supportedStorage.url.toString()," "]})]})]})]})}function SupportedNetworks_SupportedStorage(e){let{data:n}=e;return(0,l.jsxs)("div",{className:f().indexer,children:[(0,l.jsx)("div",{className:f().title29,children:"SUPPORTED Networks"}),(0,l.jsx)("div",{className:f().provider,children:null==n?void 0:n.provider.map(e=>(0,l.jsxs)("div",{className:f().providerRow,children:[(0,l.jsx)("div",{className:f().providerTitle,children:(0,l.jsx)("b",{children:e.chainId})}),(0,l.jsxs)("div",{children:[e.network," "]})]}))})]})}var Y=t(93967),$=t.n(Y),ee=t(72882),en=t(7906),et=t(53184),ea=t(53816),er=t(53252),el=t(295),es=t(27061);function IndexQueue(){let[e,n]=(0,p.useState)([]),{networks:t}=(0,_.O)(),[a,r]=(0,p.useState)(!1),s=null;return(0,p.useEffect)(()=>{let fetchQueue=()=>{fetch("/api/services/indexQueue").then(e=>{400===e.status?(console.warn("Cannot fetch queue: Node is not running Indexer"),r(!0),s&&clearInterval(s)):e.json().then(e=>{let a=e.queue.map(e=>{let n=t.find(n=>n.chainId===e.chainId);return{txId:e.txId,chainId:e.chainId,chain:n?n.network:"Unknown Network"}});n(a)})}).catch(e=>{console.error("Error fetching queue:",e)})};fetchQueue();let e=1e4;return es.env.INDEXER_INTERVAL&&(e=Number(es.env.INDEXER_INTERVAL)),s=setInterval(fetchQueue,e),()=>{s&&clearInterval(s)}},[]),(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:f().title24,style:{paddingTop:"55px",paddingBottom:"55px"},children:"Indexing Queue"}),e.length>0?(0,l.jsx)(ee.Z,{children:(0,l.jsxs)(en.Z,{"aria-label":"simple table",children:[(0,l.jsx)(et.Z,{children:(0,l.jsxs)(ea.Z,{children:[(0,l.jsx)(er.Z,{children:(0,l.jsx)("b",{children:"Transaction ID"})}),(0,l.jsx)(er.Z,{align:"right",children:(0,l.jsx)("b",{children:"Network"})})]})}),(0,l.jsx)(el.Z,{children:e.map((e,n)=>(0,l.jsxs)(ea.Z,{children:[(0,l.jsx)(er.Z,{component:"th",scope:"row",children:e.txId}),(0,l.jsx)(er.Z,{align:"right",children:e.chain})]},n))})]})}):(0,l.jsx)("p",{children:"Indexing queue is empty."}),a&&(0,l.jsx)(R.Z,{className:f().indexerQueueAlert,severity:"warning",onClose:()=>{r(!1)},children:"Node is not running Indexer. No need to get queue at this point!"})]})}var eo=t(86886),ei=t(66242);function Indexer(e){let{data:n}=e;return(0,l.jsxs)("div",{className:$()([f().indexer,f().borderBottom]),children:[(0,l.jsx)("div",{className:f().title29,children:"INDEXER"}),(0,l.jsx)(eo.ZP,{container:!0,spacing:2,children:null==n?void 0:n.indexer.map(e=>(0,l.jsx)(eo.ZP,{item:!0,xs:12,sm:6,md:4,children:(0,l.jsxs)(ei.Z,{className:$()([f().indexBlock,e.delayed&&f().delayed]),sx:{marginBottom:4,borderRadius:"8px",position:"relative"},children:[(0,l.jsx)("h5",{children:e.network}),(0,l.jsxs)("div",{children:["ChainID: ",e.chainId]}),(0,l.jsxs)("div",{children:["BLOCK: ",e.block]})]},e.block)},e.block))}),(0,l.jsx)(IndexQueue,{})]})}function AdminAccounts(){let{allAdmins:e}=(0,_.O)();return(0,l.jsxs)("div",{className:f().indexer,children:[(0,l.jsx)("div",{className:f().title29,children:"Admin Accounts"}),(0,l.jsx)("div",{className:f().provider,children:e.map((e,n)=>(0,l.jsx)("div",{className:f().providerRow,children:e},n))})]})}function NodePlatform(e){let{platformData:n}=e;return(0,l.jsxs)("div",{className:f().indexer,children:[(0,l.jsx)("div",{className:f().title29,children:"PLATFORM"}),(0,l.jsx)("div",{className:f().provider,children:n.map(e=>(0,l.jsxs)("div",{className:f().providerRow,children:[(0,l.jsx)("div",{className:f().providerTitle,children:(0,l.jsxs)("b",{children:[e.key,":"]})}),(0,l.jsxs)("div",{children:[e.value," "]})]},e.value))})]})}var ed=t(5616),ec=t(67720);function ControlPanel(){let[e,n]=(0,p.useState)(),[t,a]=(0,p.useState)(!0),[r,s]=(0,p.useState)(""),{setAllAdmins:o,setNetworks:i}=(0,_.O)();(0,p.useEffect)(()=>{a(!0);try{fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"status"})}).then(e=>e.json()).then(e=>{n(e),o(e.allowedAdmins),i(e.indexer),a(!1)})}catch(e){a(!1),console.error("error",e)}},[]),(0,p.useEffect)(()=>{fetch("https://api.ipify.org?format=json").then(e=>e.json()).then(e=>{s(e.ip)}).catch(e=>{console.error("Failed to fetch IP address:",e)})},[]);let d=[{id:null==e?void 0:e.id,ip:r,indexerData:null==e?void 0:e.indexer}],c=[];return e&&Object.keys(null==e?void 0:e.platform).forEach(n=>{let t={key:n,value:JSON.stringify(null==e?void 0:e.platform[n])};c.push(t)}),(0,l.jsxs)("div",{className:f().root,children:[(0,l.jsx)(AdminActions,{}),(0,l.jsx)("div",{className:f().bodyContainer,children:t?(0,l.jsx)("div",{className:f().loaderContainer,children:(0,l.jsx)(Spinner,{})}):(0,l.jsxs)("div",{className:f().body,children:[(0,l.jsx)(()=>(0,l.jsxs)(ed.Z,{p:2,children:[(0,l.jsx)(z.Z,{variant:"h5",gutterBottom:!0,children:"NETWORK"}),(0,l.jsx)(ec.Z,{}),(0,l.jsxs)(ed.Z,{mt:2,mb:2,children:[(0,l.jsx)(z.Z,{variant:"h6",children:"HTTP Status"}),(0,l.jsxs)(z.Z,{variant:"body1",children:["HTTP - ",(null==e?void 0:e.http)?"UP":"DOWN"]})]}),(0,l.jsx)(ec.Z,{}),(0,l.jsxs)(ed.Z,{mt:2,mb:2,children:[(0,l.jsx)(z.Z,{variant:"h6",children:"P2P Status"}),(0,l.jsxs)(z.Z,{variant:"body1",children:["P2P - ",(null==e?void 0:e.p2p)?"UP":"DOWN"]})]}),(0,l.jsx)(ec.Z,{}),(0,l.jsxs)(ed.Z,{mt:2,mb:2,children:[(0,l.jsx)(z.Z,{variant:"h6",children:"NODE ID"}),d.map(e=>(0,l.jsxs)(ed.Z,{display:"flex",alignItems:"center",mb:1,children:[(0,l.jsx)(z.Z,{variant:"body1",className:f().node,children:e.id}),(0,l.jsx)(Copy,{text:null==e?void 0:e.id})]},e.id))]}),(0,l.jsx)(ec.Z,{}),(0,l.jsxs)(ed.Z,{mt:2,mb:2,children:[(0,l.jsx)(z.Z,{variant:"h6",children:"Address"}),(0,l.jsxs)(ed.Z,{display:"flex",alignItems:"center",children:[(0,l.jsx)(z.Z,{variant:"body1",className:f().node,children:null==e?void 0:e.address}),(0,l.jsx)(Copy,{text:null==e?void 0:e.address})]})]}),(0,l.jsx)(ec.Z,{}),(0,l.jsx)(ed.Z,{mt:2,children:(0,l.jsx)(NodePeers,{})})]}),{}),(0,l.jsx)(Indexer,{data:e}),(0,l.jsx)(SupportedNetworks_SupportedStorage,{data:e}),(0,l.jsx)(SupportedStorage,{data:e}),(0,l.jsx)(AdminAccounts,{}),(0,l.jsx)(NodePlatform,{platformData:c})]})})]})}function Home(){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(o(),{children:[(0,l.jsx)("title",{children:"Ocean Node Control Panel"}),(0,l.jsx)("meta",{name:"description",content:"Ocean Node Control Panel"}),(0,l.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),(0,l.jsx)("link",{rel:"icon",href:"/favicon.ico"})]}),(0,l.jsx)("header",{children:(0,l.jsx)(Navigation,{})}),(0,l.jsx)("main",{children:(0,l.jsx)(ControlPanel,{})}),(0,l.jsx)("footer",{children:(0,l.jsx)(components_Footer,{})})]})}},46085:function(e){e.exports={download:"Admin_download__ZZ4G0",unlockButton:"Admin_unlockButton__ke4Fn",buttonIcon:"Admin_buttonIcon___M4VS",loader:"Admin_loader__3WuLo",rotation:"Admin_rotation__lknWO",rotationBack:"Admin_rotationBack__qlWG_",root:"Admin_root__Q70by",title:"Admin_title__Xr7QQ",unauthorised:"Admin_unauthorised__6u5Bb"}},73301:function(e){e.exports={root:"ControlPanel_root__xgSoz",bodyContainer:"ControlPanel_bodyContainer__3gJmO",body:"ControlPanel_body__eJ4pu",details:"ControlPanel_details__FsHZf",columnP2P:"ControlPanel_columnP2P__E9d_w",columnHTTP:"ControlPanel_columnHTTP__H98wo",nodes:"ControlPanel_nodes__7wMOb",indexerQueueAlert:"ControlPanel_indexerQueueAlert__jqHbA",borderBottom:"ControlPanel_borderBottom__oU9PK",title29:"ControlPanel_title29__gz68F",title24:"ControlPanel_title24__7IKGZ",nodeAddress:"ControlPanel_nodeAddress__ZeK2z",node:"ControlPanel_node__zZlAF",indexer:"ControlPanel_indexer__TQbAJ",indexBlock:"ControlPanel_indexBlock__hRwv5",delayed:"ControlPanel_delayed__Y0IkO",provider:"ControlPanel_provider__AiLH1",providerRow:"ControlPanel_providerRow__iMvo9",providerTitle:"ControlPanel_providerTitle__aVYme",loaderContainer:"ControlPanel_loaderContainer__pvP_d",loader:"ControlPanel_loader__bbp5M",rotation:"ControlPanel_rotation__oC0WX"}},75368:function(e){e.exports={icon:"Copy_icon__BB7bs",feedback:"Copy_feedback__Wse_F",action:"Copy_action__IlKRq",button:"Copy_button__zsJoM"}},94428:function(e){e.exports={footerContainer:"style_footerContainer___mKsH",footerLinks:"style_footerLinks__1vBvO"}},30378:function(e){e.exports={navbarParent:"style_navbarParent__OgqE_",logoWrapper:"style_logoWrapper__ARfWA",connectButtonWrapper:"style_connectButtonWrapper__G4TF7"}},85108:function(e){e.exports={title24:"style_title24__8ssRQ",loaderContainer:"style_loaderContainer__dYPch",nodes:"style_nodes__ioZOx",nodeAddress:"style_nodeAddress__t2M8E"}},17044:function(e){e.exports={loader:"style_loader__s3fCW",rotation:"style_rotation__wALkg"}}},function(e){e.O(0,[5679,9774,2888,179],function(){return e(e.s=48312)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/dist/dashboard/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js b/dist/controlpanel/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js similarity index 100% rename from dist/dashboard/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js rename to dist/controlpanel/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js diff --git a/dist/dashboard/_next/static/chunks/webpack-fe817b75e2ea8908.js b/dist/controlpanel/_next/static/chunks/webpack-ec2fc339f6558e23.js similarity index 98% rename from dist/dashboard/_next/static/chunks/webpack-fe817b75e2ea8908.js rename to dist/controlpanel/_next/static/chunks/webpack-ec2fc339f6558e23.js index 51cd06ec5..f37260e70 100644 --- a/dist/dashboard/_next/static/chunks/webpack-fe817b75e2ea8908.js +++ b/dist/controlpanel/_next/static/chunks/webpack-ec2fc339f6558e23.js @@ -1 +1 @@ -!function(){"use strict";var e,r,_,t,c,a,n,u,i,f={},b={};function __webpack_require__(e){var r=b[e];if(void 0!==r)return r.exports;var _=b[e]={id:e,loaded:!1,exports:{}},t=!0;try{f[e].call(_.exports,_,_.exports,__webpack_require__),t=!1}finally{t&&delete b[e]}return _.loaded=!0,_.exports}__webpack_require__.m=f,__webpack_require__.amdO={},e=[],__webpack_require__.O=function(r,_,t,c){if(_){c=c||0;for(var a=e.length;a>0&&e[a-1][2]>c;a--)e[a]=e[a-1];e[a]=[_,t,c];return}for(var n=1/0,a=0;a=c&&Object.keys(__webpack_require__.O).every(function(e){return __webpack_require__.O[e](_[i])})?_.splice(i--,1):(u=!1,c0&&e[a-1][2]>c;a--)e[a]=e[a-1];e[a]=[_,t,c];return}for(var n=1/0,a=0;a=c&&Object.keys(__webpack_require__.O).every(function(e){return __webpack_require__.O[e](_[i])})?_.splice(i--,1):(u=!1,ch5{color:#3d4551;font-family:Helvetica;font-size:18px;font-style:normal;font-weight:700;line-height:150%;min-width:55px}.Dashboard_root__SCu4R{display:flex;flex-direction:row;gap:28px;position:relative;min-height:550px}.Dashboard_bodyContainer__Fs5NF{position:relative;width:100%}.Dashboard_body__kpkou{padding:40px 72px;border-radius:12px;background:#fff;width:100%}.Dashboard_details__TI_cX{display:flex;flex-direction:row;width:100%}.Dashboard_columnP2P__0zKqU{border-right:1.5px solid #eef1f5}.Dashboard_columnHTTP__lhw_5,.Dashboard_columnP2P__0zKqU{border-bottom:1.5px solid #eef1f5;width:50%}.Dashboard_columnP2P__0zKqU>div{padding:18px 18px 18px 0}.Dashboard_columnHTTP__lhw_5>div{padding:18px}.Dashboard_nodes__7r0Ge{display:flex;flex-direction:column;gap:15px;color:var(--Gray-Gray-500,#718096);font-family:Helvetica;font-size:18px;font-style:normal;font-weight:400;line-height:140%}.Dashboard_indexerQueueAlert__iCMHE{width:640}.Dashboard_borderBottom__5pTDi{border-bottom:1.5px solid #eef1f5}.Dashboard_title29__TBf_2{font-size:20px;margin-bottom:38px}.Dashboard_title24__q5w52,.Dashboard_title29__TBf_2{color:#3d4551;font-family:Helvetica;font-style:normal;font-weight:700;line-height:140%}.Dashboard_title24__q5w52{font-size:18px}.Dashboard_nodeAddress__jgxgu{display:flex;flex-direction:row;gap:18px}.Dashboard_nodeAddress__jgxgu>h5{color:#3d4551;font-family:Helvetica;font-size:18px;font-style:normal;font-weight:700;line-height:150%;min-width:55px}.Dashboard_node__UCu0_{display:flex;flex-direction:row;gap:18px}.Dashboard_node__UCu0_:hover{color:#333;cursor:pointer}.Dashboard_indexer__PpMWp{padding-bottom:55px;padding-top:55px}.Dashboard_indexBlock__Ng0C_{display:flex;flex-direction:column;gap:9px;padding:24px 28px;border-radius:8px;border:1px solid rgba(78,203,113,.7);border-top:10px solid rgba(38,194,81,.7);min-width:240px;color:#3d4551;font-family:Helvetica;font-size:16px;font-style:normal;font-weight:400;line-height:140%}.Dashboard_indexBlock__Ng0C_ h5{margin-bottom:18px;color:#3d4551;font-family:Helvetica;font-size:18px;font-style:normal;font-weight:700;line-height:150%}.Dashboard_delayed__3Tj7O{border:1px solid rgba(234,89,47,.9);border-top:10px solid rgba(234,89,47,.9)}.Dashboard_provider__wMZ4i{display:flex;flex-direction:column;gap:10px}.Dashboard_providerRow__k2QJ8{display:flex;flex-direction:row;gap:4px;font-weight:500}.Dashboard_providerTitle__5DXbm{min-width:100px}.Dashboard_loaderContainer__CAGjT{position:absolute;width:100%;height:100%;background-color:rgba(51,51,51,.2);display:flex;flex-direction:row;justify-content:center;align-items:center;border-radius:12px}.Dashboard_loader__p4KHC{width:48px;height:48px;border:2px solid #fff;border-radius:50%;display:inline-block;position:relative;box-sizing:border-box;animation:Dashboard_rotation__RIDl3 1s linear infinite}.Dashboard_loader__p4KHC:after,.Dashboard_loader__p4KHC:before{content:"";box-sizing:border-box;position:absolute;left:0;top:0;background:#ff3d00;width:6px;height:6px;transform:translate(150%,150%);border-radius:50%}.Dashboard_loader__p4KHC:before{left:auto;top:auto;right:0;bottom:0;transform:translate(-150%,-150%)}@keyframes Dashboard_rotation__RIDl3{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media screen and (max-width:700px){.Dashboard_root__SCu4R{flex-direction:column}.Dashboard_body__kpkou{max-width:none;width:90vw;margin:0 auto;padding:20px}.Dashboard_details__TI_cX{flex-direction:column}.Dashboard_columnHTTP__lhw_5{width:100%}.Dashboard_columnP2P__0zKqU{width:100%;border-right:0}} \ No newline at end of file +.style_navbarParent__OgqE_{display:flex;justify-content:space-between;align-items:center;color:var(--gray-700);background-color:#fff;border-radius:15px;box-shadow:0 7px 23px 0 rgba(0,0,0,.05);-webkit-backdrop-filter:blur(10.5px);backdrop-filter:blur(10.5px);padding:11px 24px;width:100%;margin:0 auto}.style_logoWrapper__ARfWA{flex-shrink:0;min-width:108px}.style_connectButtonWrapper__G4TF7{flex-shrink:0}@media screen and (max-width:700px){.style_navbarParent__OgqE_{width:90vw;margin:0 auto}}.style_footerContainer___mKsH{max-width:1244px;margin:0 auto}.style_footerContainer___mKsH,.style_footerLinks__1vBvO{display:flex;justify-content:space-between;align-items:center}.style_footerLinks__1vBvO{gap:60px}@media screen and (max-width:700px){.style_footerContainer___mKsH{flex-direction:column}.style_footerLinks__1vBvO{flex-direction:column;margin-top:12px;gap:12px}}.Admin_download__ZZ4G0{display:flex;flex-direction:row;justify-content:center;flex-wrap:nowrap;align-items:center;width:100%;gap:4px;color:#4a5360;font-family:Helvetica;font-size:16px;font-style:normal;font-weight:500;line-height:140%;text-align:left;background:transparent;border:transparent}.Admin_unlockButton__ke4Fn{padding:10px 20px;background-color:#007bff;border:none;color:#fff;text-transform:uppercase;font-weight:700;cursor:pointer;transition:background-color .3s,transform .2s;border-radius:4px;outline:none}.Admin_unlockButton__ke4Fn:hover{background-color:#0056b3;transform:scale(1.05)}.Admin_unlockButton__ke4Fn:active{transform:scale(.95)}.Admin_unlockButton__ke4Fn:focus{box-shadow:0 0 0 2px rgba(0,123,255,.5)}.Admin_buttonIcon___M4VS{color:#a0aec0}.Admin_download__ZZ4G0:hover{background-color:transparent;color:#000}.Admin_loader__3WuLo{width:48px;height:48px;border-color:#fff;border-style:solid solid dotted dotted;border-width:3px;border-radius:50%;display:inline-block;position:relative;box-sizing:border-box;animation:Admin_rotation__lknWO 2s linear infinite}.Admin_loader__3WuLo:after{content:"";box-sizing:border-box;position:absolute;left:0;right:0;top:0;bottom:0;margin:auto;border:3px #ff3d00;border-style:solid solid dotted;width:24px;height:24px;border-radius:50%;animation:Admin_rotationBack__qlWG_ 1s linear infinite;transform-origin:center center}@keyframes Admin_rotation__lknWO{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes Admin_rotationBack__qlWG_{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}.Admin_root__Q70by{border-radius:12px;background:#fff;max-width:320px;min-width:245px;display:flex;flex-direction:column;padding:20px}.Admin_title__Xr7QQ{color:#3d4551;font-family:Helvetica;font-size:20px;font-style:normal;font-weight:700;line-height:140%;margin-bottom:47px}.Admin_unauthorised__6u5Bb{color:#ff3d00}@media screen and (max-width:700px){.Admin_root__Q70by{max-width:none;width:90vw;margin:0 auto;padding:20px}}.style_loader__s3fCW{width:48px;height:48px;border:2px solid #fff;border-radius:50%;display:inline-block;position:relative;box-sizing:border-box;animation:style_rotation__wALkg 1s linear infinite}.style_loader__s3fCW:after,.style_loader__s3fCW:before{content:"";box-sizing:border-box;position:absolute;left:0;top:0;background:#ff3d00;width:6px;height:6px;transform:translate(150%,150%);border-radius:50%}.style_loader__s3fCW:before{left:auto;top:auto;right:0;bottom:0;transform:translate(-150%,-150%)}@keyframes style_rotation__wALkg{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.Copy_icon__BB7bs{background-color:transparent}.Copy_feedback__Wse_F{color:#000;font-size:10px}.Copy_action__IlKRq{display:flex;flex-direction:row;align-items:center;gap:10px}.Copy_action__IlKRq:hover{cursor:pointer}.Copy_button__zsJoM{background-color:transparent;border:none}.style_title24__8ssRQ{color:#3d4551;font-family:Helvetica;font-size:18px;font-style:normal;font-weight:700;line-height:140%}.style_loaderContainer__dYPch{position:absolute;width:100%;height:100%;background-color:rgba(51,51,51,.2);display:flex;flex-direction:row;justify-content:center;align-items:center;border-radius:12px}.style_nodes__ioZOx{display:flex;flex-direction:column;gap:15px;position:relative;color:var(--Gray-Gray-500,#718096);font-family:Helvetica;font-size:18px;font-style:normal;font-weight:400;line-height:140%}.style_nodeAddress__t2M8E{display:flex;flex-direction:row;gap:18px}.style_nodeAddress__t2M8E:hover{color:#333;cursor:pointer}.style_nodeAddress__t2M8E>h5{color:#3d4551;font-family:Helvetica;font-size:18px;font-style:normal;font-weight:700;line-height:150%;min-width:55px}.ControlPanel_root__xgSoz{display:flex;flex-direction:row;gap:28px;position:relative;min-height:550px}.ControlPanel_bodyContainer__3gJmO{position:relative;width:100%}.ControlPanel_body__eJ4pu{padding:40px 72px;border-radius:12px;background:#fff;width:100%}.ControlPanel_details__FsHZf{display:flex;flex-direction:row;width:100%}.ControlPanel_columnP2P__E9d_w{border-right:1.5px solid #eef1f5}.ControlPanel_columnHTTP__H98wo,.ControlPanel_columnP2P__E9d_w{border-bottom:1.5px solid #eef1f5;width:50%}.ControlPanel_columnP2P__E9d_w>div{padding:18px 18px 18px 0}.ControlPanel_columnHTTP__H98wo>div{padding:18px}.ControlPanel_nodes__7wMOb{display:flex;flex-direction:column;gap:15px;color:var(--Gray-Gray-500,#718096);font-family:Helvetica;font-size:18px;font-style:normal;font-weight:400;line-height:140%}.ControlPanel_indexerQueueAlert__jqHbA{width:640}.ControlPanel_borderBottom__oU9PK{border-bottom:1.5px solid #eef1f5}.ControlPanel_title29__gz68F{font-size:20px;margin-bottom:38px}.ControlPanel_title24__7IKGZ,.ControlPanel_title29__gz68F{color:#3d4551;font-family:Helvetica;font-style:normal;font-weight:700;line-height:140%}.ControlPanel_title24__7IKGZ{font-size:18px}.ControlPanel_nodeAddress__ZeK2z{display:flex;flex-direction:row;gap:18px}.ControlPanel_nodeAddress__ZeK2z>h5{color:#3d4551;font-family:Helvetica;font-size:18px;font-style:normal;font-weight:700;line-height:150%;min-width:55px}.ControlPanel_node__zZlAF{display:flex;flex-direction:row;gap:18px}.ControlPanel_node__zZlAF:hover{color:#333;cursor:pointer}.ControlPanel_indexer__TQbAJ{padding-bottom:55px;padding-top:55px}.ControlPanel_indexBlock__hRwv5{display:flex;flex-direction:column;gap:9px;padding:24px 28px;border-radius:8px;border:1px solid rgba(78,203,113,.7);border-top:10px solid rgba(38,194,81,.7);min-width:240px;color:#3d4551;font-family:Helvetica;font-size:16px;font-style:normal;font-weight:400;line-height:140%}.ControlPanel_indexBlock__hRwv5 h5{margin-bottom:18px;color:#3d4551;font-family:Helvetica;font-size:18px;font-style:normal;font-weight:700;line-height:150%}.ControlPanel_delayed__Y0IkO{border:1px solid rgba(234,89,47,.9);border-top:10px solid rgba(234,89,47,.9)}.ControlPanel_provider__AiLH1{display:flex;flex-direction:column;gap:10px}.ControlPanel_providerRow__iMvo9{display:flex;flex-direction:row;gap:4px;font-weight:500}.ControlPanel_providerTitle__aVYme{min-width:100px}.ControlPanel_loaderContainer__pvP_d{position:absolute;width:100%;height:100%;background-color:rgba(51,51,51,.2);display:flex;flex-direction:row;justify-content:center;align-items:center;border-radius:12px}.ControlPanel_loader__bbp5M{width:48px;height:48px;border:2px solid #fff;border-radius:50%;display:inline-block;position:relative;box-sizing:border-box;animation:ControlPanel_rotation__oC0WX 1s linear infinite}.ControlPanel_loader__bbp5M:after,.ControlPanel_loader__bbp5M:before{content:"";box-sizing:border-box;position:absolute;left:0;top:0;background:#ff3d00;width:6px;height:6px;transform:translate(150%,150%);border-radius:50%}.ControlPanel_loader__bbp5M:before{left:auto;top:auto;right:0;bottom:0;transform:translate(-150%,-150%)}@keyframes ControlPanel_rotation__oC0WX{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media screen and (max-width:700px){.ControlPanel_root__xgSoz{flex-direction:column}.ControlPanel_body__eJ4pu{max-width:none;width:90vw;margin:0 auto;padding:20px}.ControlPanel_details__FsHZf{flex-direction:column}.ControlPanel_columnHTTP__H98wo{width:100%}.ControlPanel_columnP2P__E9d_w{width:100%;border-right:0}} \ No newline at end of file diff --git a/dist/dashboard/_next/static/dWTZat63Weh2kEqjHUkGv/_buildManifest.js b/dist/controlpanel/_next/static/dbdm9KL_uDQpXQXjY0ctm/_buildManifest.js similarity index 64% rename from dist/dashboard/_next/static/dWTZat63Weh2kEqjHUkGv/_buildManifest.js rename to dist/controlpanel/_next/static/dbdm9KL_uDQpXQXjY0ctm/_buildManifest.js index 3019a6c81..cc4ded36e 100644 --- a/dist/dashboard/_next/static/dWTZat63Weh2kEqjHUkGv/_buildManifest.js +++ b/dist/controlpanel/_next/static/dbdm9KL_uDQpXQXjY0ctm/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/5679-bec633b225238aa1.js","static/css/a66f1c922ed6fd7f.css","static/chunks/pages/index-2dd5da6078999ac1.js"],"/_error":["static/chunks/pages/_error-e4216aab802f5810.js"],sortedPages:["/","/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/5679-bec633b225238aa1.js","static/css/8b9f4a8789776f9a.css","static/chunks/pages/index-68352c78cef0caeb.js"],"/_error":["static/chunks/pages/_error-e4216aab802f5810.js"],sortedPages:["/","/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/dist/dashboard/_next/static/dWTZat63Weh2kEqjHUkGv/_ssgManifest.js b/dist/controlpanel/_next/static/dbdm9KL_uDQpXQXjY0ctm/_ssgManifest.js similarity index 100% rename from dist/dashboard/_next/static/dWTZat63Weh2kEqjHUkGv/_ssgManifest.js rename to dist/controlpanel/_next/static/dbdm9KL_uDQpXQXjY0ctm/_ssgManifest.js diff --git a/dist/dashboard/_next/static/media/copy.63713a04.svg b/dist/controlpanel/_next/static/media/copy.63713a04.svg similarity index 100% rename from dist/dashboard/_next/static/media/copy.63713a04.svg rename to dist/controlpanel/_next/static/media/copy.63713a04.svg diff --git a/dist/dashboard/_next/static/media/download.0a4876ec.svg b/dist/controlpanel/_next/static/media/download.0a4876ec.svg similarity index 100% rename from dist/dashboard/_next/static/media/download.0a4876ec.svg rename to dist/controlpanel/_next/static/media/download.0a4876ec.svg diff --git a/dist/dashboard/_next/static/media/logo-nodes.249ea9ed.svg b/dist/controlpanel/_next/static/media/logo-nodes.249ea9ed.svg similarity index 100% rename from dist/dashboard/_next/static/media/logo-nodes.249ea9ed.svg rename to dist/controlpanel/_next/static/media/logo-nodes.249ea9ed.svg diff --git a/dist/controlpanel/index.html b/dist/controlpanel/index.html new file mode 100644 index 000000000..d72efd16f --- /dev/null +++ b/dist/controlpanel/index.html @@ -0,0 +1 @@ +Ocean Node Control Panel
Ocean Node Logo
ADMIN ACTIONS
\ No newline at end of file diff --git a/dist/dashboard/_next/static/chunks/pages/index-2dd5da6078999ac1.js b/dist/dashboard/_next/static/chunks/pages/index-2dd5da6078999ac1.js deleted file mode 100644 index f6395e505..000000000 --- a/dist/dashboard/_next/static/chunks/pages/index-2dd5da6078999ac1.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5405],{48312:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return t(30431)}])},30431:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return Home}});var a,r,s=t(85893),i=t(9008),l=t.n(i),o=t(25675),d=t.n(o),c={src:"/_next/static/media/logo-nodes.249ea9ed.svg",height:283,width:425,blurWidth:0,blurHeight:0},u=t(30378),h=t.n(u),x=t(89192),Navigation=()=>(0,s.jsxs)("div",{className:h().navbarParent,children:[(0,s.jsx)("div",{className:h().logoWrapper,children:(0,s.jsx)(d(),{src:c,alt:"Ocean Node Logo",height:70})}),(0,s.jsx)("div",{className:h().connectButtonWrapper,children:(0,s.jsx)(x.NL,{})})]}),j=t(94428),m=t.n(j),components_Footer=()=>{let e=new Date().getFullYear();return(0,s.jsxs)("div",{className:m().footerContainer,children:[(0,s.jsxs)("p",{children:["@ ",e,", Ocean Nodes"]}),(0,s.jsxs)("div",{className:m().footerLinks,children:[(0,s.jsx)("a",{href:"https://oceanprotocol.com/",target:"_blank",children:"Website"}),(0,s.jsx)("a",{href:"https://github.com/oceanprotocol/ocean-node",target:"_blank",children:"GitHub"}),(0,s.jsx)("a",{href:"https://discord.com/invite/TnXjkR5",target:"_blank",children:"Discord"})]})]})},p=t(67294),v=t(11706),b=t.n(v),_=t(59581),f=t(46085),g=t.n(f),N=t(69417),y=t(94054),S=t(50135),C=t(33841),Z=t(30638),I=t(23599),w=t(10586),T=t(50720),D=t(67971),k=t(27484),E=t.n(k),A={src:"/_next/static/media/download.0a4876ec.svg",height:30,width:30,blurWidth:0,blurHeight:0};function DownloadButton(){let[e,n]=(0,p.useState)(!1),[t,a]=(0,p.useState)(!1),[r,i]=(0,p.useState)(E()()),[l,o]=(0,p.useState)(E()()),[c,u]=(0,p.useState)(""),[h,x]=(0,p.useState)(""),[j,m]=(0,p.useState)(""),{signature:v,expiryTimestamp:b}=(0,_.O)(),f=(0,p.useCallback)(async()=>{let e=r?"&startTime=".concat(r.toISOString()):"",n=l?"&endTime=".concat(l.toISOString()):"",t=c?"&maxLogs=".concat(c):"",s=h&&"all"!==h?"&moduleName=".concat(h):"",i=j&&"all"!==j?'&level="'.concat(j,'"'):"";a(!0);try{if(!b||!v){console.error("Missing expiryTimestamp or signature");return}let r=await fetch("/logs?".concat(e).concat(n).concat(t).concat(s).concat(i),{headers:{"Content-Type":"application/json"},method:"POST",body:JSON.stringify({expiryTimestamp:b,signature:v})}),l=await r.json();if(l){let e="data:application/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(l)),n=document.createElement("a");n.setAttribute("href",e),n.setAttribute("download","LogsData.json"),document.body.appendChild(n),n.click(),n.remove()}a(!1)}catch(e){console.error(e),a(!1)}},[r,l,c,h,j]);return(0,s.jsxs)("div",{className:g().column,children:[(0,s.jsx)(N.Z,{type:"button",onClick:()=>n(!e),children:"Download Logs"}),e&&(0,s.jsxs)("div",{className:g().filters,children:[(0,s.jsxs)(T._,{dateAdapter:w.y,children:[(0,s.jsx)(y.Z,{fullWidth:!0,margin:"normal",children:(0,s.jsx)(D.x,{label:"Start Date",value:r,onChange:e=>i(e)})}),(0,s.jsx)(y.Z,{fullWidth:!0,margin:"normal",children:(0,s.jsx)(D.x,{label:"End Date",value:l,onChange:e=>o(e)})})]}),(0,s.jsx)(S.Z,{label:"Max Logs",type:"number",value:c,onChange:e=>u(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined"}),(0,s.jsxs)(y.Z,{fullWidth:!0,margin:"normal",children:[(0,s.jsx)(C.Z,{id:"select-module-name-label",children:"Module Name"}),(0,s.jsxs)(Z.Z,{labelId:"select-module-name-label",label:"Module Name",id:"module-name",value:h,onChange:e=>x(e.target.value),children:[(0,s.jsx)(I.Z,{value:"all",children:"all"}),(0,s.jsx)(I.Z,{value:"http",children:"http"}),(0,s.jsx)(I.Z,{value:"p2p",children:"p2p"}),(0,s.jsx)(I.Z,{value:"indexer",children:"indexer"}),(0,s.jsx)(I.Z,{value:"reindexer",children:"reindexer"}),(0,s.jsx)(I.Z,{value:"provider",children:"provider"}),(0,s.jsx)(I.Z,{value:"database",children:"database"}),(0,s.jsx)(I.Z,{value:"config",children:"config"}),(0,s.jsx)(I.Z,{value:"core",children:"core"}),(0,s.jsx)(I.Z,{value:"OceanNode",children:"OceanNode"})]})]}),(0,s.jsxs)(y.Z,{fullWidth:!0,margin:"normal",children:[(0,s.jsx)(C.Z,{id:"select-level-label",children:"Level"}),(0,s.jsxs)(Z.Z,{labelId:"select-level-label",label:"Level",id:"level",value:j,onChange:e=>m(e.target.value),children:[(0,s.jsx)(I.Z,{value:"all",children:"all"}),(0,s.jsx)(I.Z,{value:"error",children:"error"}),(0,s.jsx)(I.Z,{value:"warn",children:"warn"}),(0,s.jsx)(I.Z,{value:"info",children:"info"}),(0,s.jsx)(I.Z,{value:"http",children:"http"}),(0,s.jsx)(I.Z,{value:"verbose",children:"verbose"}),(0,s.jsx)(I.Z,{value:"debug",children:"debug"}),(0,s.jsx)(I.Z,{value:"silly",children:"silly"})]})]}),(0,s.jsx)(N.Z,{type:"button",onClick:f,variant:"outlined",startIcon:(0,s.jsx)(d(),{src:A,alt:"download button",width:24,height:24}),disabled:t,children:"Download"})]})]})}function StopNode(){let[e,n]=(0,p.useState)(!1),{signature:t,expiryTimestamp:a}=(0,_.O)();async function stopNode(){n(!0);try{a&&t&&await fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"stopNode",expiryTimestamp:a,signature:t})}),alert("The node has been stopped. The dashboard will no longer be displayed."),window.location.reload()}catch(e){console.error("error",e)}finally{n(!1)}}return(0,s.jsx)(N.Z,{onClick:stopNode,variant:"outlined",color:"error",children:e?(0,s.jsx)(()=>(0,s.jsx)("span",{className:g().loader}),{}):(0,s.jsx)("div",{children:"Stop Node"})})}var P=t(92321),O=t(31536);function NetworkSelector(e){let{chainId:n,setChainId:t}=e,{networks:a}=(0,_.O)();return(0,s.jsxs)(y.Z,{fullWidth:!0,margin:"normal",variant:"outlined",children:[(0,s.jsx)(C.Z,{id:"network-select-label",children:"Network"}),(0,s.jsx)(Z.Z,{labelId:"network-select-label",id:"network-select",value:n||"",onChange:e=>t(e.target.value),label:"Network",children:Object.values(a).map(e=>(0,s.jsx)(I.Z,{value:e.chainId.toString(),children:e.network},e.chainId))})]})}(a=r||(r={})).DELIVERED="DELIVERED",a.PENDING="PENDING",a.FAILURE="FAILURE",a.SUCCESS="SUCCESS";let checkJobPool=async function(e){try{let n=await fetch("/api/services/jobs/"+(e||""),{headers:{Accept:"application/json","Content-Type":"application/json"},method:"GET"}),t=await n.json();return t.jobs}catch(e){console.error(e)}return[]};function getSeverityFromStatus(e){switch(e){case r.DELIVERED:return"info";case r.SUCCESS:return"success";case r.PENDING:return"warning";default:return"error"}}function isJobDone(e){return[r.SUCCESS,r.FAILURE].includes(e)}var R=t(8434);function JobStatusPanel(e){let n=e.job?function(e){switch(e){case r.DELIVERED:return"DodgerBlue";case r.PENDING:return"LightSlateGrey";case r.SUCCESS:return"ForestGreen";case r.FAILURE:return"OrangeRed";default:return"black"}}(e.job.status):"black";return(0,s.jsx)("div",{children:null!==e.job&&(0,s.jsxs)(R.Z,{sx:{bgcolor:n},variant:"filled",severity:e.severity,onClose:()=>{},children:["Job with id ",(0,s.jsx)("strong",{children:e.job.jobId})," has status"," ",(0,s.jsx)("strong",{children:e.job.status})]})})}var W=t(602);function ReIndexChain(){let[e,n]=(0,p.useState)(!1),[t,a]=(0,p.useState)(!1),[i,l]=(0,p.useState)(),{signature:o,expiryTimestamp:d}=(0,_.O)(),[c,u]=(0,p.useState)("info"),[h,x]=(0,p.useState)(null),j=null;async function reIndex(){a(!0);try{if(d&&o&&i){let e=await fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"reindexChain",chainId:i,expiryTimestamp:d,signature:o})});if(200===e.status){let t=await e.json();u(t.status===r.DELIVERED?"info":"error"),x(t),alert("Chain with ID ".concat(i," is now being reindexed."));let a=!1;j=setInterval(async()=>{let e=await checkJobPool(t.jobId);if(1===e.length){let n=e[0];u(getSeverityFromStatus(n.status)),a=isJobDone(n.status),x(n)}else x(null)},3e3),a&&j&&(0,W.clearInterval)(j),n(!1)}else alert("Error reindexing chain. Please try again.")}}catch(e){console.error("error",e)}finally{a(!1)}}return(0,s.jsxs)("div",{className:g().column,children:[(0,s.jsx)(N.Z,{type:"button",onClick:()=>n(!e),children:"ReIndex Chain"}),e&&(0,s.jsxs)("div",{className:g().filters,children:[(0,s.jsx)(NetworkSelector,{chainId:i,setChainId:l}),(0,s.jsx)(N.Z,{type:"button",onClick:reIndex,variant:"outlined",disabled:t,children:"ReIndex Chain"})]}),(0,s.jsx)(JobStatusPanel,{job:h,severity:c})]})}function ReIndexTransaction(){let[e,n]=(0,p.useState)(!1),[t,a]=(0,p.useState)(!1),[i,l]=(0,p.useState)(),[o,d]=(0,p.useState)(),{signature:c,expiryTimestamp:u}=(0,_.O)(),[h,x]=(0,p.useState)("info"),[j,m]=(0,p.useState)(null),v=null;async function reIndexTx(){a(!0);try{if(u&&c&&i&&o){let e=await fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"reindexTx",chainId:i,txId:o,expiryTimestamp:u,signature:c})});if(200===e.status){let t=await e.json();x(t.status===r.DELIVERED?"info":"error"),m(t),alert("Transaction with TX ID ".concat(o," on chain ").concat(i," is now being reindexed."));let a=!1;v=setInterval(async()=>{let e=await checkJobPool(t.jobId);if(1===e.length){let n=e[0];x(getSeverityFromStatus(n.status)),a=isJobDone(n.status),m(n)}else m(null)},3e3),a&&v&&clearInterval(v),n(!1)}else alert("Error reindexing transaction. Please try again.")}}catch(e){console.error("error",e)}finally{a(!1)}}return(0,s.jsxs)("div",{className:g().column,children:[(0,s.jsx)(N.Z,{type:"button",onClick:()=>n(!e),children:"ReIndex Transaction"}),e&&(0,s.jsxs)("div",{className:g().filters,children:[(0,s.jsx)(NetworkSelector,{chainId:i,setChainId:l}),(0,s.jsx)(S.Z,{label:"Transaction ID",value:o,onChange:e=>d(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined"}),(0,s.jsx)(N.Z,{type:"button",onClick:reIndexTx,variant:"outlined",disabled:t,children:"ReIndex Transaction"})]}),(0,s.jsx)(JobStatusPanel,{job:j,severity:h})]})}var L=t(58703),F=t(64666),B=t(37645),J=t(6514),U=t(58951),G=t(31425);function TransferFees(){let[e,n]=(0,p.useState)(!1),[t,a]=(0,p.useState)(!1),[r,i]=(0,p.useState)(""),[l,o]=(0,p.useState)(""),[d,c]=(0,p.useState)(""),[u,h]=(0,p.useState)(""),{signature:x,expiryTimestamp:j}=(0,_.O)(),[m,v]=(0,p.useState)(null),[b,f]=(0,p.useState)(!1),[y,C]=(0,p.useState)(!1),[Z,I]=(0,p.useState)(null),[w,T]=(0,p.useState)(null),validateInputs=()=>r&&l&&d&&u?isNaN(Number(d))?(v("Token amount must be a number."),!1):(v(null),!0):(v("All fields are required."),!1);async function transferFees(){if(validateInputs()){a(!0);try{let e=await fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"collectFees",chainId:r,tokenAddress:l,tokenAmount:d,destinationAddress:u,expiryTimestamp:j,signature:x})});if(200===e.status){let t=await e.json();(null==t?void 0:t.tx)&&(null==t?void 0:t.message)&&(T(t.tx),I(t.message),C(!0),f(!0),n(!1))}else v(e.statusText?e.statusText:"Error transferring fees. Please try again.")}catch(e){console.error("error",e),v("Error transferring fees. Please try again.")}finally{a(!1)}}}let handleDialogClose=()=>{C(!1)};return(0,s.jsxs)("div",{className:g().column,children:[(0,s.jsx)(N.Z,{variant:"text",onClick:()=>n(!e),children:"Transfer Fees"}),e&&(0,s.jsxs)("div",{className:g().filters,children:[(0,s.jsx)(S.Z,{label:"Chain ID",value:r,onChange:e=>i(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined",type:"number"}),(0,s.jsx)(S.Z,{label:"Token Address",value:l,onChange:e=>o(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined"}),(0,s.jsx)(S.Z,{label:"Token Amount",value:d,onChange:e=>c(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined",type:"number"}),(0,s.jsx)(S.Z,{label:"Destination Address",value:u,onChange:e=>h(e.target.value),fullWidth:!0,margin:"normal",variant:"outlined"}),m&&(0,s.jsx)(R.Z,{severity:"error",children:m}),(0,s.jsx)(N.Z,{type:"button",onClick:transferFees,variant:"outlined",disabled:t,fullWidth:!0,children:"Transfer Fees"})]}),(0,s.jsx)(L.Z,{open:b,autoHideDuration:6e3,onClose:()=>f(!1),message:"Fees successfully transferred!"}),(0,s.jsxs)(F.Z,{open:y,onClose:handleDialogClose,"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[(0,s.jsx)(B.Z,{id:"alert-dialog-title",children:"Transfer Successful"}),(0,s.jsx)(J.Z,{children:(0,s.jsx)(U.Z,{id:"alert-dialog-description",children:Z&&(0,s.jsxs)("span",{children:[Z," ",(0,s.jsx)("br",{}),(0,s.jsx)("strong",{style:{marginTop:"10px",display:"block"},children:"Transaction Hash:"})," ",w]})})}),(0,s.jsx)(G.Z,{children:(0,s.jsx)(N.Z,{onClick:handleDialogClose,autoFocus:!0,children:"Close"})})]})]})}function AdminActions(){let{generateSignature:e,signature:n,validTimestamp:t,admin:a}=(0,_.O)(),{isConnected:r}=(0,P.m)();return(0,s.jsxs)("div",{className:g().root,children:[(0,s.jsx)("div",{className:g().title,children:"ADMIN ACTIONS"}),!r&&(0,s.jsx)(x.NL,{}),r&&!a&&(0,s.jsx)("div",{className:g().unauthorised,children:"Your account does not have admin access"}),(!n||!t)&&r&&a&&(0,s.jsx)("button",{type:"button",className:g().unlockButton,onClick:e,children:"Unlock"}),r&&n&&t&&r&&a&&(0,s.jsxs)(O.Z,{spacing:2,direction:"column",children:[(0,s.jsx)(DownloadButton,{}),(0,s.jsx)(ReIndexChain,{}),(0,s.jsx)(ReIndexTransaction,{}),(0,s.jsx)(TransferFees,{}),(0,s.jsx)(StopNode,{})]})]})}var H=t(17044),Q=t.n(H);function Spinner(){return(0,s.jsx)("span",{className:Q().loader})}var M=t(85108),q=t.n(M),X=t(75368),V=t.n(X),K={src:"/_next/static/media/copy.63713a04.svg",height:16,width:15,blurWidth:0,blurHeight:0};function Copy(e){let{text:n}=e,[t,a]=(0,p.useState)(!1),copyToClipboard=e=>{let n=document.createElement("textarea");n.value=e,document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n)};return(0,p.useEffect)(()=>{if(!t)return;let e=setTimeout(()=>{a(!1)},1e3);return()=>clearTimeout(e)},[t]),(0,s.jsxs)("div",{className:V().action,onClick:()=>{copyToClipboard(n),a(!0)},children:[(0,s.jsx)(d(),{src:K,alt:"icont-copy",className:V().icon}),t&&(0,s.jsx)("div",{className:V().feedback,children:"Copied!"})]})}var Y=t(15861);function NodePeers(){let[e,n]=(0,p.useState)([]),[t,a]=(0,p.useState)(!0),[r,i]=(0,p.useState)(!1),fetchNodePeers=async()=>{a(!0);try{let e=await fetch("/getOceanPeers",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"GET"}),t=await e.json();n(t)}catch(e){console.error("error",e)}finally{a(!1)}};(0,p.useEffect)(()=>{fetchNodePeers();let e=setInterval(()=>{fetchNodePeers()},12e4);return()=>clearInterval(e)},[]);let l=r?e:e.slice(0,10);return(0,s.jsxs)("div",{className:q().nodes,children:[(0,s.jsxs)("div",{className:q().title24,children:["Connected Nodes (Total ",e.length,")"]}),t?(0,s.jsx)("div",{className:q().loaderContainer,children:(0,s.jsx)(Spinner,{})}):(0,s.jsxs)(s.Fragment,{children:[e.length>0?l.map(e=>(0,s.jsxs)("div",{className:q().nodeAddress,children:[e," ",(0,s.jsx)(Copy,{text:e})]},e)):(0,s.jsx)(Y.Z,{variant:"body1",children:"There are no nodes connected"}),!r&&e.length>10&&(0,s.jsx)(N.Z,{onClick:()=>i(!0),variant:"text",color:"primary",children:"Show All"}),r&&e.length>10&&(0,s.jsx)(N.Z,{onClick:()=>i(!1),variant:"text",color:"primary",children:"Show Less"})]})]})}function SupportedStorage(e){let{data:n}=e;return(0,s.jsxs)("div",{className:b().indexer,children:[(0,s.jsx)("div",{className:b().title29,children:"SUPPORTED STORAGE"}),(0,s.jsxs)("div",{className:b().provider,children:[(0,s.jsxs)("div",{className:b().providerRow,children:[(0,s.jsx)("div",{className:b().providerTitle,children:(0,s.jsx)("b",{children:"arwave:"})}),(0,s.jsxs)("div",{children:[null==n?void 0:n.supportedStorage.arwave.toString()," "]})]}),(0,s.jsxs)("div",{className:b().providerRow,children:[(0,s.jsx)("div",{className:b().providerTitle,children:(0,s.jsx)("b",{children:"ipfs:"})}),(0,s.jsxs)("div",{children:[null==n?void 0:n.supportedStorage.ipfs.toString()," "]})]}),(0,s.jsxs)("div",{className:b().providerRow,children:[(0,s.jsx)("div",{className:b().providerTitle,children:(0,s.jsx)("b",{children:"url:"})}),(0,s.jsxs)("div",{children:[null==n?void 0:n.supportedStorage.url.toString()," "]})]})]})]})}function SupportedNetworks_SupportedStorage(e){let{data:n}=e;return(0,s.jsxs)("div",{className:b().indexer,children:[(0,s.jsx)("div",{className:b().title29,children:"SUPPORTED Networks"}),(0,s.jsx)("div",{className:b().provider,children:null==n?void 0:n.provider.map(e=>(0,s.jsxs)("div",{className:b().providerRow,children:[(0,s.jsx)("div",{className:b().providerTitle,children:(0,s.jsx)("b",{children:e.chainId})}),(0,s.jsxs)("div",{children:[e.network," "]})]}))})]})}var z=t(93967),$=t.n(z),ee=t(72882),en=t(7906),et=t(53184),ea=t(53816),er=t(53252),es=t(295),ei=t(27061);function IndexQueue(){let[e,n]=(0,p.useState)([]),{networks:t}=(0,_.O)(),[a,r]=(0,p.useState)(!1),i=null;return(0,p.useEffect)(()=>{let fetchQueue=()=>{fetch("/api/services/indexQueue").then(e=>{400===e.status?(console.warn("Cannot fetch queue: Node is not running Indexer"),r(!0),i&&clearInterval(i)):e.json().then(e=>{let a=e.queue.map(e=>{let n=t.find(n=>n.chainId===e.chainId);return{txId:e.txId,chainId:e.chainId,chain:n?n.network:"Unknown Network"}});n(a)})}).catch(e=>{console.error("Error fetching queue:",e)})};fetchQueue();let e=1e4;return ei.env.INDEXER_INTERVAL&&(e=Number(ei.env.INDEXER_INTERVAL)),i=setInterval(fetchQueue,e),()=>{i&&clearInterval(i)}},[]),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:b().title24,style:{paddingTop:"55px",paddingBottom:"55px"},children:"Indexing Queue"}),e.length>0?(0,s.jsx)(ee.Z,{children:(0,s.jsxs)(en.Z,{"aria-label":"simple table",children:[(0,s.jsx)(et.Z,{children:(0,s.jsxs)(ea.Z,{children:[(0,s.jsx)(er.Z,{children:(0,s.jsx)("b",{children:"Transaction ID"})}),(0,s.jsx)(er.Z,{align:"right",children:(0,s.jsx)("b",{children:"Network"})})]})}),(0,s.jsx)(es.Z,{children:e.map((e,n)=>(0,s.jsxs)(ea.Z,{children:[(0,s.jsx)(er.Z,{component:"th",scope:"row",children:e.txId}),(0,s.jsx)(er.Z,{align:"right",children:e.chain})]},n))})]})}):(0,s.jsx)("p",{children:"Indexing queue is empty."}),a&&(0,s.jsx)(R.Z,{className:b().indexerQueueAlert,severity:"warning",onClose:()=>{r(!1)},children:"Node is not running Indexer. No need to get queue at this point!"})]})}var el=t(86886),eo=t(66242);function Indexer(e){let{data:n}=e;return(0,s.jsxs)("div",{className:$()([b().indexer,b().borderBottom]),children:[(0,s.jsx)("div",{className:b().title29,children:"INDEXER"}),(0,s.jsx)(el.ZP,{container:!0,spacing:2,children:null==n?void 0:n.indexer.map(e=>(0,s.jsx)(el.ZP,{item:!0,xs:12,sm:6,md:4,children:(0,s.jsxs)(eo.Z,{className:$()([b().indexBlock,e.delayed&&b().delayed]),sx:{marginBottom:4,borderRadius:"8px",position:"relative"},children:[(0,s.jsx)("h5",{children:e.network}),(0,s.jsxs)("div",{children:["ChainID: ",e.chainId]}),(0,s.jsxs)("div",{children:["BLOCK: ",e.block]})]},e.block)},e.block))}),(0,s.jsx)(IndexQueue,{})]})}function AdminAccounts(){let{allAdmins:e}=(0,_.O)();return(0,s.jsxs)("div",{className:b().indexer,children:[(0,s.jsx)("div",{className:b().title29,children:"Admin Accounts"}),(0,s.jsx)("div",{className:b().provider,children:e.map((e,n)=>(0,s.jsx)("div",{className:b().providerRow,children:e},n))})]})}function NodePlatform(e){let{platformData:n}=e;return(0,s.jsxs)("div",{className:b().indexer,children:[(0,s.jsx)("div",{className:b().title29,children:"PLATFORM"}),(0,s.jsx)("div",{className:b().provider,children:n.map(e=>(0,s.jsxs)("div",{className:b().providerRow,children:[(0,s.jsx)("div",{className:b().providerTitle,children:(0,s.jsxs)("b",{children:[e.key,":"]})}),(0,s.jsxs)("div",{children:[e.value," "]})]},e.value))})]})}var ed=t(5616),ec=t(67720);function Dashboard(){let[e,n]=(0,p.useState)(),[t,a]=(0,p.useState)(!0),[r,i]=(0,p.useState)(""),{setAllAdmins:l,setNetworks:o}=(0,_.O)();(0,p.useEffect)(()=>{a(!0);try{fetch("/directCommand",{headers:{Accept:"application/json","Content-Type":"application/json"},method:"POST",body:JSON.stringify({command:"status"})}).then(e=>e.json()).then(e=>{n(e),l(e.allowedAdmins),o(e.indexer),a(!1)})}catch(e){a(!1),console.error("error",e)}},[]),(0,p.useEffect)(()=>{fetch("https://api.ipify.org?format=json").then(e=>e.json()).then(e=>{i(e.ip)}).catch(e=>{console.error("Failed to fetch IP address:",e)})},[]);let d=[{id:null==e?void 0:e.id,ip:r,indexerData:null==e?void 0:e.indexer}],c=[];return e&&Object.keys(null==e?void 0:e.platform).forEach(n=>{let t={key:n,value:JSON.stringify(null==e?void 0:e.platform[n])};c.push(t)}),(0,s.jsxs)("div",{className:b().root,children:[(0,s.jsx)(AdminActions,{}),(0,s.jsx)("div",{className:b().bodyContainer,children:t?(0,s.jsx)("div",{className:b().loaderContainer,children:(0,s.jsx)(Spinner,{})}):(0,s.jsxs)("div",{className:b().body,children:[(0,s.jsx)(()=>(0,s.jsxs)(ed.Z,{p:2,children:[(0,s.jsx)(Y.Z,{variant:"h5",gutterBottom:!0,children:"NETWORK"}),(0,s.jsx)(ec.Z,{}),(0,s.jsxs)(ed.Z,{mt:2,mb:2,children:[(0,s.jsx)(Y.Z,{variant:"h6",children:"HTTP Status"}),(0,s.jsxs)(Y.Z,{variant:"body1",children:["HTTP - ",(null==e?void 0:e.http)?"UP":"DOWN"]})]}),(0,s.jsx)(ec.Z,{}),(0,s.jsxs)(ed.Z,{mt:2,mb:2,children:[(0,s.jsx)(Y.Z,{variant:"h6",children:"P2P Status"}),(0,s.jsxs)(Y.Z,{variant:"body1",children:["P2P - ",(null==e?void 0:e.p2p)?"UP":"DOWN"]})]}),(0,s.jsx)(ec.Z,{}),(0,s.jsxs)(ed.Z,{mt:2,mb:2,children:[(0,s.jsx)(Y.Z,{variant:"h6",children:"NODE ID"}),d.map(e=>(0,s.jsxs)(ed.Z,{display:"flex",alignItems:"center",mb:1,children:[(0,s.jsx)(Y.Z,{variant:"body1",className:b().node,children:e.id}),(0,s.jsx)(Copy,{text:null==e?void 0:e.id})]},e.id))]}),(0,s.jsx)(ec.Z,{}),(0,s.jsxs)(ed.Z,{mt:2,mb:2,children:[(0,s.jsx)(Y.Z,{variant:"h6",children:"Address"}),(0,s.jsxs)(ed.Z,{display:"flex",alignItems:"center",children:[(0,s.jsx)(Y.Z,{variant:"body1",className:b().node,children:null==e?void 0:e.address}),(0,s.jsx)(Copy,{text:null==e?void 0:e.address})]})]}),(0,s.jsx)(ec.Z,{}),(0,s.jsx)(ed.Z,{mt:2,children:(0,s.jsx)(NodePeers,{})})]}),{}),(0,s.jsx)(Indexer,{data:e}),(0,s.jsx)(SupportedNetworks_SupportedStorage,{data:e}),(0,s.jsx)(SupportedStorage,{data:e}),(0,s.jsx)(AdminAccounts,{}),(0,s.jsx)(NodePlatform,{platformData:c})]})})]})}function Home(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(l(),{children:[(0,s.jsx)("title",{children:"Ocean nodes"}),(0,s.jsx)("meta",{name:"description",content:"Ocean nodes dashboard"}),(0,s.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),(0,s.jsx)("link",{rel:"icon",href:"/favicon.ico"})]}),(0,s.jsx)("header",{children:(0,s.jsx)(Navigation,{})}),(0,s.jsx)("main",{children:(0,s.jsx)(Dashboard,{})}),(0,s.jsx)("footer",{children:(0,s.jsx)(components_Footer,{})})]})}},46085:function(e){e.exports={download:"Admin_download__ZZ4G0",unlockButton:"Admin_unlockButton__ke4Fn",buttonIcon:"Admin_buttonIcon___M4VS",loader:"Admin_loader__3WuLo",rotation:"Admin_rotation__lknWO",rotationBack:"Admin_rotationBack__qlWG_",root:"Admin_root__Q70by",title:"Admin_title__Xr7QQ",unauthorised:"Admin_unauthorised__6u5Bb"}},75368:function(e){e.exports={icon:"Copy_icon__BB7bs",feedback:"Copy_feedback__Wse_F",action:"Copy_action__IlKRq",button:"Copy_button__zsJoM"}},11706:function(e){e.exports={root:"Dashboard_root__SCu4R",bodyContainer:"Dashboard_bodyContainer__Fs5NF",body:"Dashboard_body__kpkou",details:"Dashboard_details__TI_cX",columnP2P:"Dashboard_columnP2P__0zKqU",columnHTTP:"Dashboard_columnHTTP__lhw_5",nodes:"Dashboard_nodes__7r0Ge",indexerQueueAlert:"Dashboard_indexerQueueAlert__iCMHE",borderBottom:"Dashboard_borderBottom__5pTDi",title29:"Dashboard_title29__TBf_2",title24:"Dashboard_title24__q5w52",nodeAddress:"Dashboard_nodeAddress__jgxgu",node:"Dashboard_node__UCu0_",indexer:"Dashboard_indexer__PpMWp",indexBlock:"Dashboard_indexBlock__Ng0C_",delayed:"Dashboard_delayed__3Tj7O",provider:"Dashboard_provider__wMZ4i",providerRow:"Dashboard_providerRow__k2QJ8",providerTitle:"Dashboard_providerTitle__5DXbm",loaderContainer:"Dashboard_loaderContainer__CAGjT",loader:"Dashboard_loader__p4KHC",rotation:"Dashboard_rotation__RIDl3"}},94428:function(e){e.exports={footerContainer:"style_footerContainer___mKsH",footerLinks:"style_footerLinks__1vBvO"}},30378:function(e){e.exports={navbarParent:"style_navbarParent__OgqE_",logoWrapper:"style_logoWrapper__ARfWA",connectButtonWrapper:"style_connectButtonWrapper__G4TF7"}},85108:function(e){e.exports={title24:"style_title24__8ssRQ",loaderContainer:"style_loaderContainer__dYPch",nodes:"style_nodes__ioZOx",nodeAddress:"style_nodeAddress__t2M8E"}},17044:function(e){e.exports={loader:"style_loader__s3fCW",rotation:"style_rotation__wALkg"}}},function(e){e.O(0,[5679,9774,2888,179],function(){return e(e.s=48312)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/dist/dashboard/index.html b/dist/dashboard/index.html deleted file mode 100644 index 0215a33c6..000000000 --- a/dist/dashboard/index.html +++ /dev/null @@ -1 +0,0 @@ -Ocean nodes
Ocean Node Logo
ADMIN ACTIONS
\ No newline at end of file diff --git a/docs/API.md b/docs/API.md index 89a054bf9..108eeea3c 100644 --- a/docs/API.md +++ b/docs/API.md @@ -404,19 +404,58 @@ returns list of logs --- -## Advertise Did +## Get providers for a string -### `HTTP` GET /advertiseDid/?did=did:op:123" +### `HTTP` GET /getProvidersForString/?input=did:op:123" #### Description -returns empty if advertising did around peers was successful +returns list of nodes providing the specific element(s) (dids, c2d resources, etc) #### Query Parameters -| name | type | required | description | -| ---- | ------ | -------- | ------------------ | -| did | string | v | document id or did | +| name | type | required | description | +| ----- | ------ | -------- | ---------------------- | +| input | string | v | did, c2d resource, etc | + +## Get providers for a list of strings + +### `HTTP` POST /getProvidersForStrings?timeout=10" + +#### Description + +returns list of nodes providing all specific elements. + +#### Query Parameters + +| name | type | required | description | +| ------- | ------ | -------- | ---------------------- | +| timeout | string | optional | timeout in miliseconds | + +#### Request + +```json +["{\"c2d\":{\"free\":false,\"disk\":1}}", "{\"c2d\":{\"free\":false,\"cpu\":1}}"] +``` + +#### Response + +```json +[ + { + "id": "16Uiu2HAmENNgCY1QAdQrPxipgUCQjyookUgpnbgXua4ZMju4Rkou", + "multiaddrs": [ + "/ip4/10.255.255.254/tcp/41015/ws", + "/ip4/10.255.255.254/tcp/41347", + "/ip4/127.0.0.1/tcp/41015/ws", + "/ip4/127.0.0.1/tcp/41347", + "/ip4/172.27.58.101/tcp/41015/ws", + "/ip4/172.27.58.101/tcp/41347", + "/ip6/::1/tcp/37527" + ] + } +] +``` --- @@ -449,42 +488,58 @@ returns P2P peer --- -## Get P2P Peers +## find peer multiaddress -### `HTTP` GET /getP2PPeers +### `HTTP` GET /findPeer/? #### Description -returns list of all P2P peers +returns P2P peer multiaddresses if found in DHT + +#### Query Parameters + +| name | type | required | description | +| ------- | ------ | -------- | ----------- | +| peerId | string | v | peer id | +| timeout | int | optional | timeout | #### Response ``` -[ - { - "id": "PeerId", - "addresses": [{ multiaddr: "123", isCertified: true }], - "protocols": ["123", "123", "123"], - "metadata": {}, - "tags": {} - } -] +{ + "id": "16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP", + "multiaddrs": [ + "/ip4/127.0.0.1/tcp/9000", + "/ip4/127.0.0.1/tcp/9001/ws", + "/ip4/172.18.0.2/tcp/9000", + "/ip4/172.18.0.2/tcp/9001/ws", + "/ip6/::1/tcp/9002" + ] +} ``` --- -## Get Ocean Peers +## Get P2P Peers -### `HTTP` GET /getOceanPeers +### `HTTP` GET /getP2PPeers #### Description -returns list of ocean node peers +returns list of all P2P peers #### Response ``` -["PeerId", "PeerId", "PeerId"] +[ + { + "id": "PeerId", + "addresses": [{ multiaddr: "123", isCertified: true }], + "protocols": ["123", "123", "123"], + "metadata": {}, + "tags": {} + } +] ``` --- @@ -501,13 +556,14 @@ returns an empty object if it is valid otherwise an array with error #### Parameters -| name | type | required | description | -| ---------- | ------ | -------- | ------------------------------------------------- | -| command | string | v | command name | -| node | string | | if not present it means current node | -| id | string | v | document id or did | -| chainId | number | v | chain id of network on which document is provided | -| nftAddress | string | v | address of nft token | +| name | type | required | description | +| ---------- | -------- | -------- | ------------------------------------------------- | +| command | string | v | command name | +| node | string | | if not present it means current node | +| multiAddrs | string[] | | if passed, use this instead of peerStore & DHT | +| id | string | v | document id or did | +| chainId | number | v | chain id of network on which document is provided | +| nftAddress | string | v | address of nft token | #### Request @@ -1078,38 +1134,6 @@ byte array --- -## Echo - -### `HTTP` POST /directCommand - -### `P2P` command: echo - -#### Description - -returns OK - -#### Parameters - -| name | type | required | description | -| ------- | ------ | -------- | ------------------------------------ | -| command | string | v | command name | -| node | string | | if not present it means current node | - -#### Request - -```json -{ - "command": "echo", - "node": "PeerId" -} -``` - -#### Response - -``` -OK -``` - ## Get indexing queue ### `HTTP` GET /api/services/indexQueue @@ -1128,7 +1152,7 @@ returns the current indexing queue, as an array of objects ## PolicyServer Passthrough -### `HTTP` POST /PolicyServerPassthrough +### `HTTP` POST /api/services/PolicyServerPassthrough ### `P2P` command: PolicyServerPassthrough @@ -1173,3 +1197,342 @@ Forwards request to PolicyServer (if any) } } ``` + +--- + +## Fetch Config + +### `HTTP` GET /api/admin/config + +#### Description + +returns current node configuration with sensitive data hidden (admin only) + +#### Parameters + +| name | type | required | description | +| --------------- | ------ | -------- | -------------------------------------------- | +| expiryTimestamp | number | v | expiry timestamp for the request | +| signature | string | v | signed message to authenticate admin request | + +#### Request + +```json +{ + "expiryTimestamp": 1234567890, + "signature": "0x123" +} +``` + +#### Response + +```json +{ + "keys": { + "privateKey": "[*** HIDDEN CONTENT ***]" + }, + "chainIds": [1], + "rpcs": { "1": "https://eth-mainnet.g.alchemy.com/v2/..." }, + "...": "..." +} +``` + +--- + +## Update Config + +### `HTTP` POST /api/admin/config/update + +#### Description + +updates node configuration and reloads it gracefully (admin only) + +#### Parameters + +| name | type | required | description | +| --------------- | ------ | -------- | -------------------------------------------------- | +| expiryTimestamp | number | v | expiry timestamp for the request | +| signature | string | v | signed message to authenticate admin request | +| config | object | v | partial configuration object with fields to update | + +#### Request + +```json +{ + "expiryTimestamp": 1234567890, + "signature": "0x123", + "config": { + "chainIds": [1], + "rpcs": { "1": "https://eth-mainnet.g.alchemy.com/v2/..." } + } +} +``` + +#### Response + +```json +{ + "keys": { + "privateKey": "[*** HIDDEN CONTENT ***]" + }, + "chainIds": [1], + "rpcs": { "1": "https://eth-mainnet.g.alchemy.com/v2/..." }, + "...": "..." +} +``` + +--- + +# Compute + +For starters, you can find a list of algorithms in the [Ocean Algorithms repository](https://github.com/oceanprotocol/algo_dockers) and the docker images in the [Algo Dockerhub](https://hub.docker.com/r/oceanprotocol/algo_dockers/tags). + +## Compute object definitions + +### Dataset (`ComputeAsset` Interface) + +The `ComputeAsset` interface defines the structure of a compute asset in the Ocean Node. It can include information about the file object, document ID, service ID, transfer transaction ID, and user data. + +#### Properties + +- **fileObject**: Optional. An object of type `BaseFileObject` representing the file associated with the compute asset. +- **documentId**: Optional. A string representing the document ID of the compute asset. +- **serviceId**: Optional. A string representing the service ID associated with the compute asset. +- **transferTxId**: Optional. A string representing the transaction ID for the transfer of the compute asset. +- **userdata**: Optional. An object containing additional user-defined data related to the compute asset. + +```typescript +export interface ComputeAsset { + fileObject?: BaseFileObject + documentId?: string + serviceId?: string + transferTxId?: string + userdata?: { [key: string]: any } +} +``` + +This interface is used to encapsulate the details of a compute asset, which can be utilized in various compute-related operations within the Ocean Node. + +### `ComputeAlgorithm` Interface + +The `ComputeAlgorithm` interface defines the structure of a compute algorithm in the Ocean Node. +It can include information about the file object, document ID, service ID, transfer transaction ID, algorithm custom data, metadata and user data. + +#### Properties + +- **documentId**: Optional. A string representing the document ID of the compute algorithm. +- **serviceId**: Optional. A string representing the service ID associated with the compute algorithm. +- **fileObject**: Optional. An object of type `BaseFileObject` representing the file associated with the compute algorithm. +- **meta**: Optional. An object of type `MetadataAlgorithm` containing metadata related to the compute algorithm. +- **transferTxId**: Optional. A string representing the transaction ID for the transfer of the compute algorithm. +- **algocustomdata**: Optional. An object containing additional custom data related to the compute algorithm. +- **userdata**: Optional. An object containing additional user-defined data related to the compute algorithm. +- **envs**: Optional. Array of keys:values to be used as environment variables for algo. + +```typescript +export interface ComputeAlgorithm { + documentId?: string + serviceId?: string + fileObject?: BaseFileObject + meta?: MetadataAlgorithm + transferTxId?: string + algocustomdata?: { [key: string]: any } + userdata?: { [key: string]: any } +} +``` + +This interface is used to encapsulate the details of a compute algorithm, which can be utilized in various compute-related operations within the Ocean Node. + +## Compute commands + +### `HTTP` GET /api/services/computeEnvironments + +### `P2P` command: getComputeEnvironments + +#### Description + +fetch all compute environments + +#### Response + +```json +[ + { + "id": "0x7d187e4c751367be694497ead35e2937ece3c7f3b325dcb4f7571e5972d092bd-0xf173fdc0a9c7cc1c34f8aaf6b3aafe866795851b567436e1d4fbab17b0e26ca1", + "runningJobs": 0, + "consumerAddress": "0xf9C5B7eE7708efAc6dC6Bc7d4b0455eBbf22b519", + "platform": { "architecture": "x86_64", "os": "Ubuntu 22.04.3 LTS" }, + "fees": { "1": [[{ "feeToken": "0x123", "prices": [{ "id": "cpu", "price": 1 }] }]] }, + "storageExpiry": 604800, + "maxJobDuration": 3600, + "resources": [ + { "id": "cpu", "total": 16, "max": 16, "min": 1, "inUse": 0 }, + { + "id": "ram", + "total": 33617674240, + "max": 33617674240, + "min": 1000000000, + "inUse": 0 + }, + { "id": "disk", "total": 1000000000, "max": 1000000000, "min": 0, "inUse": 0 } + ], + "free": { + "maxJobDuration": 60, + "maxJobs": 3, + "resources": [ + { "id": "cpu", "max": 1, "inUse": 0 }, + { "id": "ram", "max": 1000000000, "inUse": 0 }, + { "id": "disk", "max": 1000000000, "inUse": 0 } + ] + }, + "runningfreeJobs": 0 + } +] +``` + +### `HTTP` POST /api/services/freeCompute + +### `P2P` command: freeStartCompute + +#### Description + +starts a free compute job and returns jobId if succesfull + +#### Parameters + +| name | type | required | description | +| ----------------- | ------ | -------- | ----------------------------------------------------------------------------- | +| command | string | v | command name | +| node | string | | if not present it means current node | +| consumerAddress | string | v | consumer address | +| signature | string | v | signature (msg=String(nonce) ) | +| nonce | string | v | nonce for the request | +| datasets | object | | list of ComputeAsset to be used as inputs | +| algorithm | object | | ComputeAlgorithm definition | +| environment | string | v | compute environment to use | +| resources | object | | optional list of required resources | +| metadata | object | | optional metadata for the job, data provided by the user | +| additionalViewers | object | | optional array of addresses that are allowed to fetch the result | +| queueMaxWaitTime | number | | optional max time in seconds a job can wait in the queue before being started | + +#### Request + +```json +{ + "command": "freeStartCompute", + "datasets": [], + "algorithm": { + "meta": { "container": { "image": "ubuntu", "entrypoint": "/bin/bash'" } } + }, + "consumerAddress": "0x00", + "signature": "123", + "nonce": 1, + "environment": "0x7d187e4c751367be694497ead35e2937ece3c7f3b325dcb4f7571e5972d092bd-0xbeaf12703d708f39ef98c3d8939ce458553254176dbb69fe83d535883c4cee38", + "resources": [{ "id": "cpu", "amount": 1 }], + "metadata": { "key": "value" } +} +``` + +#### Response + +```json +[ + { + "owner": "0x00", + "jobId": "0x7d187e4c751367be694497ead35e2937ece3c7f3b325dcb4f7571e5972d092bd-a4ad237d-dfd8-404c-a5d6-b8fc3a1f66d3", + "dateCreated": "1742291065.119", + "dateFinished": null, + "status": 0, + "statusText": "Job started", + "results": [], + "agreementId": null, + "expireTimestamp": 1742291065.119, + "environment": "0x7d187e4c751367be694497ead35e2937ece3c7f3b325dcb4f7571e5972d092bd-0xf173fdc0a9c7cc1c34f8aaf6b3aafe866795851b567436e1d4fbab17b0e26ca1", + "resources": [ + { "id": "cpu", "amount": 1 }, + { "id": "ram", "amount": 1000000000 }, + { "id": "disk", "amount": 0 } + ], + "isFree": true, + "metadata": { "key": "value" } + } +] +``` + +### `HTTP` GET /api/services/compute + +### `P2P` command: getComputeStatus + +#### Description + +returns job status + +#### Parameters + +Required at least one of the following parameters: + +| name | type | required | description | +| --------------- | ------ | -------- | ------------------------------------ | +| consumerAddress | string | | consumer address to use as filter | +| jobId | string | | jobId address to use as filter | +| agreementId | string | | agreementId address to use as filter | + +#### Response + +```json +[ + { + "owner": "0x00", + "did": null, + "jobId": "a4ad237d-dfd8-404c-a5d6-b8fc3a1f66d3", + "dateCreated": "1742291065.119", + "dateFinished": null, + "status": 0, + "statusText": "Job started", + "results": [], + "inputDID": null, + "algoDID": null, + "agreementId": null, + "expireTimestamp": 1742291065.119, + "environment": "0x7d187e4c751367be694497ead35e2937ece3c7f3b325dcb4f7571e5972d092bd-0xf173fdc0a9c7cc1c34f8aaf6b3aafe866795851b567436e1d4fbab17b0e26ca1", + "resources": [ + { + "id": "cpu", + "amount": 1 + }, + { + "id": "ram", + "amount": 1000000000 + }, + { + "id": "disk", + "amount": 1000000000 + } + ], + "isFree": true, + "metadata": { "key": "value" } + } +] +``` + +### `HTTP` GET /api/services/computeResult + +### `P2P` command: getComputeResult + +#### Description + +returns job result + +#### Parameters + +| name | type | required | description | +| --------------- | ------ | -------- | -------------------------------------------------------------- | +| consumerAddress | string | v | consumer address to use as filter | +| jobId | string | v | jobId address to use as filter | +| signature | string | v | signature (consumerAddress + jobId + index.toString() + nonce) | +| nonce | string | v | nonce for the request | +| index | number | v | index of result (0 for main result, 1 for logs) | + +#### Response + +File content diff --git a/docs/C2DV2.md b/docs/C2DV2.md deleted file mode 100644 index 1a835f81b..000000000 --- a/docs/C2DV2.md +++ /dev/null @@ -1,186 +0,0 @@ -# C2D V2 ARHITECTURE - -C2Dv2 continues the concept of bringing algo to the data, allowing both public and private use of datasets for use with algorithms. -Although the previous versions was relying on external components (Provider -> Operator Service (running in k8) -> multiple Operator-Engines (each running in it's own k8 namespace)), C2DV2 is embedded entirely in ocean-node. - -It has a modular approach, allowing multiple compute engines to be connected to the same ocean-node engine. This compute engines can be internal (docker or k8 (if ocean-node runs in a k8 env)), or external (in future, we could integrate projects like Bachalau, iExec, etc (TBD)) - -### Additional features - -- allow multiple c2d engines connected to same ocean-node -- allow multiple jobs(stages) in a workflow -- a job can depend(or not) on a previous stage -> parallel/serial jobs - -![No image](imgs/c2dv2-modules.png 'Arhitecture') - -## Workflows - -A workflow defines one or more jobs to be executed. Each job may have dependencies from a previous job - -``` -[ - index: number - jobId: generated by orchestrator - runAfter: if defined, wait for specific jobId to finish - input: [ - index: number - did?: string - serviceId?: string, - files?: filesObject - ], - algorithm: { - did?: string - serviceId?: string - files?: filesObject - rawcode?: string - container?: { - entrypoint: string - image: string - tag: string - } - } -] -``` - -## Orchestration layer - -Former known as "operator-service", this layer handles interactions between ocean-node core layer and different execution environments. - -In a nutshell, it should: - -- exposing list of compute environments for all engines -- exposing list of running jobs and limits (max concurrent jobs, etc) -- take a new job (created by startJob core handler) -- determine which module to use (docker, k8, Bachalau, etc) -- insert workflow in database -- signal engine handler to take over the job execution -- read workflow status when c2d getStatus core is called -- serve job results when c2d getJobResult is called - -Since, due to technical constrains, both internal modules (docker and k8) will use docker images for data provisioning (old pod-configuration) and results publishing (old pod-publishing), orchestration layer will also expose two new core commands: - -- c2dJobStatusUpdate (called by both pod-config and pob-publishing to update job status) -- c2dJobPublishResult (called by pod-publishing when results have to be uploaded) - -When any of pod-\*\* will call one of those endpoints, we must verify the signature and respond accordingly - -### Payment flow in Orchestration - -Will be based on a escrow contract. -Orchestrator will: - -- compute sum(maxDuration) from all jobs in the workflow -- calculate required fee (depend on previous step, token, environment, etc) -- lock amount in escrow contract -- wait until all jobs are finished (success or not) -- calculate actual duration spent -- compute proof -- withdraw payment & put proof and release the difference back to the customer. - -## C2D Engines - -A C2D Engine is a piece of code that handles c2d jobs that are running on a specific orchestration implementation. - -This documents focuses on internal compute engines: - Docker based (host with docker environment installed) - K8 based (if ocean-node runs inside a k8 cluster) - -An engine that uses external services (like Bachalau) has the same logic, but mostly likely will interact with remote APIs - -An engine is responsible for: - -- store workflows and each job status (so, on restart we can resume flows or continue running flow) -- queue new jobs - -### Docker engine - -This module requires docker service installed at the host level. - -It will leverage Docker API to: - -- create job volume (with quotas) -- start provisioning container (aka pod-configuration) -- monitor it's status -- create yml for algo, with hw constrains (cpu,ram) -- pass devices for gpu envs -- start algorithm container -- monitor algo health & timeout constrains -- stop algo if quota is exceeded -- start publishing container -- delete job volume - -``` -title C2Dv2 message flow for docker module -User -> Ocean-node: start c2d job -Ocean-node -> Orchestration-class: start c2d job -Orchestration-class -> Orchestration-class: determinte module and insert workflow, random private key in db -Orchestration-class -> Docker-engine: queue job -Docker-engine -> Docker_host_api: create job volume -Docker-engine -> Docker-engine: create yaml for pod-configuration, set private key -Docker-engine -> Docker_host_api: start pod-configuration -Pod_configuration -> Pod_configuration: starts ocean-node as pod-config -Pod_configuration -> Ocean-node: call c2dJobProvision -Ocean-node -> Pod_configuration: return workflow -Pod_configuration -> Pod_configuration : download inputs & algo -Pod_configuration -> Ocean-node: call c2dJobStatusUpdate -Ocean-node -> Docker-engine: download success, start algo -Docker-engine -> Docker-engine: create yaml for algo -Docker-engine -> Docker_host_api: start algo container -Docker-engine -> Docker-engine: monitor algo container, stop if timeout -Docker-engine -> Docker-engine: create yaml for pod-publishing, set private key -Docker-engine -> Docker_host_api: start pod-publishing -Docker_host_api -> Pod-Publishing: start as docker container -Pod-Publishing -> Pod-Publishing : prepare output -Pod-Publishing -> Ocean-node: call c2dJobPublishResult -Pod-Publishing -> Ocean-node: call c2dJobStatusUpdate - - -``` - -![No image](imgs/C2Dv2_message_flow_for_docker_module.png 'Arhitecture') - -### kubernetes engine - -This module requires access to k8 credentials (or autodetect them if ocean-node already runs in a k8 cluster). - -It will leverage K8 API to: - -- create job volume (with quotas) -- start provisioning container (aka pod-configuration) -- monitor it's status -- create yml for algo, with hw constrains (cpu,ram) -- pass devices for gpu envs -- start algorithm container -- monitor algo health & timeout constrains -- stop algo if quota is exceeded -- start publishing container -- delete job volume - -## POD-\* common description - -For a efficient communication between ocean-node and the two containers, the easiest way is to use p2p/http api. -Thus, all pod-\* will run a ocean-node instance (each will have a job generated random key), and they will connect to the main ocean-node instance. Main ocean-node instance peerNodeId or http API endpoint will be inserted in yaml. -Each pod-\*\* will use a private key, also exposed in yaml. - -So, each yml of pod-\* will contain the following envs: - nodePeerId ? - nodeHttpApi ? - privateKey - -### Pod-configuration - -In the past, pod-configuration was a standalone repo, built as docker image. -In this implementation, it will be ocean-node, with a different entrypoint (entry_configuration.js) - -Implementation: - -- call ocean-node/c2dJobProvision and get workflow's input section -- download all assets -- call ocean-node/c2dJobStatusUpdate core command to update status (provision finished or errors) - -### Pod-publishing - -In the past, pod-publishing was a standalone repo, built as docker image. -In this implementation, it will be ocean-node, with a different entrypoint (entry_publishing.js) - -Implementation: - -- read output folder -- if multiples files or folders are detected, create a zip with all those files/folders -- call ocean-node/c2dJobPublishResult core command and let ocean-node handle storage -- call ocean-node/c2dJobStatusUpdate core command to update job as done diff --git a/docs/GPU.md b/docs/GPU.md new file mode 100644 index 000000000..bfcb01df7 --- /dev/null +++ b/docs/GPU.md @@ -0,0 +1,484 @@ +Supporting GPUs for c2d jobs comes down to: + +- define gpu list for each c2d env +- pass docker args for each gpu +- set a price for each gpu + +## Nvidia GPU Example + +Start by installing nvidia cuda drivers (ie:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/), then install nvidia container toolkit (https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) + +Once that is done, check if you can get gpu details by running 'nvidia-smi': + +``` +root@gpu-1:/repos/ocean/ocean-node# nvidia-smi +Fri Apr 25 06:00:34 2025 ++-----------------------------------------------------------------------------------------+ +| NVIDIA-SMI 550.163.01 Driver Version: 550.163.01 CUDA Version: 12.4 | +|-----------------------------------------+------------------------+----------------------+ +| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | +| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | +| | | MIG M. | +|=========================================+========================+======================| +| 0 NVIDIA GeForce GTX 1060 3GB Off | 00000000:01:00.0 Off | N/A | +| 0% 39C P8 6W / 120W | 2MiB / 3072MiB | 0% Default | +| | | N/A | ++-----------------------------------------+------------------------+----------------------+ + ++-----------------------------------------------------------------------------------------+ +| Processes: | +| GPU GI CI PID Type Process name GPU Memory | +| ID ID Usage | +|=========================================================================================| +| No running processes found | ++-----------------------------------------------------------------------------------------+ +``` + +Now, time to get the id of the gpu: + +```bash +root@gpu-1:/repos/ocean/ocean-node# nvidia-smi --query-gpu=name,uuid --format=csv +name, uuid +NVIDIA GeForce GTX 1060 3GB, GPU-294c6802-bb2f-fedb-f9e0-a26b9142dd81 +``` + +Now, we can define the gpu for node: + +```json +{ + "id": "myGPU", + "description": "NVIDIA GeForce GTX 1060 3GB", + "type": "gpu", + "total": 1, + "init": { + "deviceRequests": { + "Driver": "nvidia", + "DeviceIDs": ["GPU-294c6802-bb2f-fedb-f9e0-a26b9142dd81"], + "Capabilities": [["gpu"]] + } + } +} +``` + +Don't forget to add it to fees definition and free definition (if desired). + +Here is the full definition of DOCKER_COMPUTE_ENVIRONMENTS: + +```json +[ + { + "socketPath": "/var/run/docker.sock", + "resources": [ + { + "id": "myGPU", + "description": "NVIDIA GeForce GTX 1060 3GB", + "type": "gpu", + "total": 1, + "init": { + "deviceRequests": { + "Driver": "nvidia", + "DeviceIDs": ["GPU-294c6802-bb2f-fedb-f9e0-a26b9142dd81"], + "Capabilities": [["gpu"]] + } + } + }, + { "id": "disk", "total": 1 } + ], + "storageExpiry": 604800, + "maxJobDuration": 3600, + "fees": { + "1": [ + { + "feeToken": "0x123", + "prices": [ + { "id": "cpu", "price": 1 }, + { "id": "nyGPU", "price": 3 } + ] + } + ] + }, + "free": { + "maxJobDuration": 60, + "maxJobs": 3, + "resources": [ + { "id": "cpu", "max": 1 }, + { "id": "ram", "max": 1 }, + { "id": "disk", "max": 1 }, + { "id": "myGPU", "max": 1 } + ] + } + } +] +``` + +And you should have it in your compute envs: + +```bash +root@gpu-1:/repos/ocean/ocean-node# curl http://localhost:8000/api/services/computeEnvironments +``` + +```json +[ + { + "id": "0xd6b10b27aab01a72070a5164c07d0517755838b9cb9857e2d5649287ec3aaaa2-0x66073c81f833deaa2f8e2a508f69cf78f8a99b17ba1a64f369af921750f93914", + "runningJobs": 0, + "consumerAddress": "0x00", + "platform": { "architecture": "x86_64", "os": "Ubuntu 22.04.3 LTS" }, + "fees": { + "1": [ + { + "feeToken": "0x123", + "prices": [ + { "id": "cpu", "price": 1 }, + { "id": "myGPU", "price": 3 } + ] + } + ] + }, + "storageExpiry": 604800, + "maxJobDuration": 3600, + "resources": [ + { "id": "cpu", "total": 8, "max": 8, "min": 1, "inUse": 0 }, + { + "id": "ram", + "total": 23, + "max": 23, + "min": 1, + "inUse": 0 + }, + { + "id": "myGPU", + "description": "NVIDIA GeForce GTX 1060 3GB", + "type": "gpu", + "total": 1, + "init": { + "deviceRequests": { + "Driver": "nvidia", + "DeviceIDs": ["GPU-294c6802-bb2f-fedb-f9e0-a26b9142dd81"], + "Capabilities": [["gpu"]] + } + }, + "max": 1, + "min": 0, + "inUse": 0 + }, + { "id": "disk", "total": 1, "max": 1, "min": 0, "inUse": 0 } + ], + "free": { + "maxJobDuration": 60, + "maxJobs": 3, + "resources": [ + { "id": "cpu", "max": 1, "inUse": 0 }, + { "id": "ram", "max": 1, "inUse": 0 }, + { "id": "disk", "max": 1, "inUse": 0 }, + { "id": "myGPU", "max": 1, "inUse": 0 } + ] + }, + "runningfreeJobs": 0 + } +] +``` + +Start a free job using: + +```json +{ + "command": "freeStartCompute", + "algorithm": { + "meta": { + "container": { + "image": "tensorflow/tensorflow", + "tag": "2.17.0-gpu", + "entrypoint": "python $ALGO" + }, + "rawcode": "import tensorflow as tf\nsess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))\nprint(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))\ngpus = tf.config.list_physical_devices('GPU')\nfor gpu in gpus:\n\tprint('Name:', gpu.name, ' Type:', gpu.device_type)" + } + }, + "consumerAddress": "0x00", + "signature": "123", + "nonce": 1, + "environment": "0xd6b10b27aab01a72070a5164c07d0517755838b9cb9857e2d5649287ec3aaaa2-0x66073c81f833deaa2f8e2a508f69cf78f8a99b17ba1a64f369af921750f93914", + "resources": [ + { + "id": "cpu", + "amount": 1 + }, + { + "id": "myGPU", + "amount": 1 + } + ] +} +``` + +And the output of `getComputeResult` should look like: + +```bash +2025-04-25 06:18:20.890217: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered +2025-04-25 06:18:21.192330: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered +2025-04-25 06:18:21.292230: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered +WARNING: All log messages before absl::InitializeLog() is called are written to STDERR +I0000 00:00:1745561915.985558 1 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355 +I0000 00:00:1745561915.993514 1 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355 +I0000 00:00:1745561915.993799 1 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355 +Num GPUs Available: 1 +Name: /physical_device:GPU:0 Type: GPU +``` + +## AMD Radeon 9070 XT ON WSL2 + +First, install ROCm (https://rocm.docs.amd.com/projects/radeon/en/latest/docs/install/wsl/install-radeon.html) + +Then define DOCKER_COMPUTE_ENVIRONMENTS with + +```json +[ + { + "socketPath": "/var/run/docker.sock", + "resources": [ + { + "id": "myGPU", + "description": "AMD Radeon RX 9070 XT", + "type": "gpu", + "total": 1, + "init": { + "advanced": { + "IpcMode": "host", + "ShmSize": 8589934592, + "CapAdd": ["SYS_PTRACE"], + "Devices": ["/dev/dxg", "/dev/dri/card0"], + "Binds": [ + "/usr/lib/wsl/lib/libdxcore.so:/usr/lib/libdxcore.so", + "/opt/rocm/lib/libhsa-runtime64.so.1:/opt/rocm/lib/libhsa-runtime64.so.1" + ], + "SecurityOpt": { + "seccomp": "unconfined" + } + } + } + }, + { + "id": "disk", + "total": 1 + } + ], + "storageExpiry": 604800, + "maxJobDuration": 3600, + "fees": { + "1": [ + { + "feeToken": "0x123", + "prices": [ + { + "id": "cpu", + "price": 1 + }, + { + "id": "nyGPU", + "price": 3 + } + ] + } + ] + }, + "free": { + "maxJobDuration": 60, + "maxJobs": 3, + "resources": [ + { + "id": "cpu", + "max": 1 + }, + { + "id": "ram", + "max": 1 + }, + { + "id": "disk", + "max": 1 + }, + { + "id": "myGPU", + "max": 1 + } + ] + } + } +] +``` + +aka + +```bash +export DOCKER_COMPUTE_ENVIRONMENTS="[{\"socketPath\":\"/var/run/docker.sock\",\"resources\":[{\"id\":\"myGPU\",\"description\":\"AMD Radeon RX 9070 XT\",\"type\":\"gpu\",\"total\":1,\"init\":{\"advanced\":{ +\"IpcMode\":\"host\",\"CapAdd\":[\"CAP_SYS_PTRACE\"],\"Devices\":[\"/dev/dxg\",\"/dev/dri/card0\"],\"Binds\":[\"/usr/lib/wsl/lib/libdxcore.so:/usr/lib/libdxcore.so\",\"/opt/rocm/lib/libhsa-runtime64.so.1:/opt/rocm/lib/libhsa-runtime64.so.1\"],\"SecurityOpt\":{\"seccomp\":\"unconfined\"}}}},{\"id\":\"disk\",\"total\":10}],\"storageExpiry\":604800,\"maxJobDuration\":3600,\"fees\":{\"1\":[{\"feeToken\":\"0x123\",\"prices\":[{\"id\":\"cpu\",\"price\":1},{\"id\":\"nyGPU\",\"price\":3}]}]},\"free\":{\"maxJobDuration\":60,\"maxJobs\":3,\"resources\":[{\"id\":\"cpu\",\"max\":1},{\"id\":\"ram\",\"max\":1},{\"id\":\"disk\",\"max\":1},{\"id\":\"myGPU\",\"max\":1}]}}]" +``` + +you should have it in your compute envs: + +```bash +root@gpu-1:/repos/ocean/ocean-node# curl http://localhost:8000/api/services/computeEnvironments +``` + +```json +[ + { + "id": "0xbb5773e734e1b188165dac88d9a3dc8ac28bc9f5624b45fa8bbd8fca043de7c1-0x2c2761f938cf186eeb81f71dee06ad7edb299493e39c316c390d0c0691e6585c", + "runningJobs": 0, + "consumerAddress": "0x00", + "platform": { + "architecture": "x86_64", + "os": "Ubuntu 24.04.2 LTS" + }, + "fees": { + "1": [ + { + "feeToken": "0x123", + "prices": [ + { + "id": "cpu", + "price": 1 + }, + { + "id": "nyGPU", + "price": 3 + } + ] + } + ] + }, + "storageExpiry": 604800, + "maxJobDuration": 3600, + "resources": [ + { + "id": "cpu", + "total": 16, + "max": 16, + "min": 1, + "inUse": 0 + }, + { + "id": "ram", + "total": 31, + "max": 31, + "min": 1, + "inUse": 0 + }, + { + "id": "myGPU", + "description": "AMD Radeon RX 9070 XT", + "type": "gpu", + "total": 1, + "init": { + "advanced": { + "IpcMode": "host", + "CapAdd": ["CAP_SYS_PTRACE"], + "Devices": ["/dev/dxg", "/dev/dri/card0"], + "Binds": [ + "/usr/lib/wsl/lib/libdxcore.so:/usr/lib/libdxcore.so", + "/opt/rocm/lib/libhsa-runtime64.so.1:/opt/rocm/lib/libhsa-runtime64.so.1" + ], + "SecurityOpt": { + "seccomp": "unconfined" + } + } + }, + "max": 1, + "min": 0, + "inUse": 0 + }, + { + "id": "disk", + "total": 10, + "max": 10, + "min": 0, + "inUse": 0 + } + ], + "free": { + "maxJobDuration": 60, + "maxJobs": 3, + "resources": [ + { + "id": "cpu", + "max": 1, + "inUse": 0 + }, + { + "id": "ram", + "max": 1, + "inUse": 0 + }, + { + "id": "disk", + "max": 1, + "inUse": 0 + }, + { + "id": "myGPU", + "max": 1, + "inUse": 0 + } + ] + }, + "runningfreeJobs": 0 + } +] +``` + +Start a free job with + +```json +{ + "command": "freeStartCompute", + "datasets": [ + { + "fileObject": { + "type": "url", + "url": "https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js", + "method": "get" + } + } + ], + "algorithm": { + "meta": { + "container": { + "image": "rocm/tensorflow", + "tag": "rocm6.4-py3.12-tf2.18-dev", + "entrypoint": "python $ALGO" + }, + "rawcode": "import tensorflow as tf\nsess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))\nprint(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))\ngpus = tf.config.list_physical_devices('GPU')\nfor gpu in gpus:\n\tprint('Name:', gpu.name, ' Type:', gpu.device_type)" + } + }, + "consumerAddress": "0x00", + "signature": "123", + "nonce": 1, + "environment": "0xbb5773e734e1b188165dac88d9a3dc8ac28bc9f5624b45fa8bbd8fca043de7c1-0x2c2761f938cf186eeb81f71dee06ad7edb299493e39c316c390d0c0691e6585c", + "resources": [ + { + "id": "cpu", + "amount": 1 + }, + { + "id": "myGPU", + "amount": 1 + } + ] +} +``` + +and get the results + +```bash +2025-04-25 15:16:15.218050: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. +To enable the following instructions: SSE3 SSE4.1 SSE4.2 AVX AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. +WARNING: All log messages before absl::InitializeLog() is called are written to STDERR +I0000 00:00:1745594260.720023 1 gpu_device.cc:2022] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 2874 MB memory: -> device: 0, name: AMD Radeon RX 9070 XT, pci bus id: 0000:0d:00.0 +2025-04-25 15:17:44.018225: I tensorflow/core/common_runtime/direct_session.cc:378] Device mapping: +/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: AMD Radeon RX 9070 XT, pci bus id: 0000:0d:00.0 + +Num GPUs Available: 1 +Name: /physical_device:GPU:0 Type: GPU +Warning: Resource leak detected by SharedSignalPool, 385 Signals leaked. +pid:1 tid:0x7f4476ac1740 [~VaMgr] frag_map_ size is not 1. +``` diff --git a/docs/dockerDeployment.md b/docs/dockerDeployment.md index ef1d675d9..5110c8b52 100644 --- a/docs/dockerDeployment.md +++ b/docs/dockerDeployment.md @@ -62,6 +62,23 @@ CONTAINER ID IMAGE COMMAND CREATE 858a59502302 typesense/typesense:26.0 "/opt/typesense-serv…" 17 seconds ago Up 10 seconds 0.0.0.0:8108->8108/tcp, :::8108->8108/tcp typesense ``` +## Upgrade Ocean Node + +Ocean Node container image is updated regularly. To upgrade to the latest version, run the following script. Required updated will be notified through our communication channels. + +```shell +$ ./scripts/ocean-node-update.sh +``` + +If script is not executed you can change permissions and execute it. + +```shell +$ chmod +x scripts/ocean-node-update.sh +$ ./scripts/ocean-node-update.sh +``` + +--- + Additional notes: - the docker compose file generated will have the following format. For all available configurations, refer to the [Environment Variables](https://github.com/oceanprotocol/ocean-node/blob/main/docs/env.md) documentation @@ -91,15 +108,16 @@ services: # ADDRESS_FILE: '' # NODE_ENV: '' # AUTHORIZED_DECRYPTERS: '' + # AUTHORIZED_DECRYPTERS_LIST: '' # OPERATOR_SERVICE_URL: '' INTERFACES: '["HTTP","P2P"]' # ALLOWED_VALIDATORS: '' # INDEXER_NETWORKS: '[]' ALLOWED_ADMINS: '["<>"]' # INDEXER_INTERVAL: '' - DASHBOARD: 'true' + CONTROL_PANEL: 'true' # RATE_DENY_LIST: '' - # MAX_REQ_PER_SECOND: '' + # MAX_REQ_PER_MINUTE: '' # MAX_CHECKSUM_LENGTH: '' # LOG_LEVEL: '' HTTP_API_PORT: '8000' diff --git a/docs/env.md b/docs/env.md index a20500736..c9d38e3e6 100644 --- a/docs/env.md +++ b/docs/env.md @@ -5,6 +5,7 @@ Environmental variables are also tracked in `ENVIRONMENT_VARIABLES` within `src/ ## Core - `PRIVATE_KEY` (Required): The private key for the node, required for node operations. Example: `"0x1d751ded5a32226054cd2e71261039b65afb9ee1c746d055dd699b1150a5befc"` +- `CONFIG_PATH`: Absolute path to JSON config file - `RPCS`: JSON object defining RPC endpoints for various networks. Example: `"{ \"11155420\":{ \"rpc\":\"https://sepolia.optimism.io\", \"fallbackRPCs\": [\"https://public.stackup.sh/api/v1/node/optimism-sepolia\"], \"chainId\": 11155420, \"network\": \"optimism-sepolia\", \"chunkSize\": 1000 }}"` - `DB_URL`: URL for connecting to the database. Required for running a database with the node. Example: `"http://localhost:8108/?apiKey=xyz"` - `IPFS_GATEWAY`: The gateway URL for IPFS, used for downloading files from IPFS. Example: `"https://ipfs.io/"` @@ -15,16 +16,43 @@ Environmental variables are also tracked in `ENVIRONMENT_VARIABLES` within `src/ - `ADDRESS_FILE`: File location where Ocean contract addresses are saved. Example: `"ADDRESS_FILE=${HOME}/.ocean/ocean-contracts/artifacts/address.json"` - `NODE_ENV`: Typically used to specify the environment (e.g., development, production) the node is running in. Example: `'development'` - `AUTHORIZED_DECRYPTERS`: A JSON array of addresses that are authorized to decrypt data. Example: `"['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']"` +- `AUTHORIZED_DECRYPTERS_LIST`: AccessList contract addresses (per chain). If present, only accounts present on the given access lists can decrypt data. Example: `"{ \"8996\": [\"0x967da4048cD07aB37855c090aAF366e4ce1b9F48\",\"0x388C818CA8B9251b393131C08a736A67ccB19297\"] }"` - `OPERATOR_SERVICE_URL`: Configures C2D cluster URLs for the node. Example: `"[\"http://example.c2d.cluster1.com\",\"http://example.cd2.cluster2.com\"]"` - `INTERFACES`: Network interfaces the node supports, e.g., HTTP and P2P. By default, if not specified, both are supported. Example: `"[\"HTTP\",\"P2P\"]"` - `ALLOWED_VALIDATORS`: Array of addresses for allowed validators to verify asset signatures before indexing. Example: `"[\"0x123\",\"0x456\"]"` +- `ALLOWED_VALIDATORS_LIST`: Array of access list addresses (per chain) for allowed validators to verify asset signatures before indexing. Example: `"{ \"8996\": [\"0x123\",\"0x456\"]"` - `INDEXER_INTERVAL`: Sets the interval in milliseconds for the indexer to crawl. The default is 30 seconds if not set. Example: `10000` - `INDEXER_NETWORKS`: Specifies the networks the Indexer will crawl. If not set, the Indexer will index all networks defined in the RPCS environment variable. If set to an empty string, indexing will be disabled. Example: `[1, 137]` - `ALLOWED_ADMINS`: Sets the public address of accounts which have access to admin endpoints e.g. shutting down the node. Example: `"[\"0x967da4048cD07aB37855c090aAF366e4ce1b9F48\",\"0x388C818CA8B9251b393131C08a736A67ccB19297\"]"` -- `DASHBOARD`: If `false` the dashboard will not run. If not set or `true` the dashboard will start with the node. Example: `false` +- `ALLOWED_ADMINS_LIST`: Array of access list addresses (per chain) for accounts that have access to admin endpoints. Example: `"{ \"8996\": [\"0x123\",\"0x456\"]"` +- `CONTROL_PANEL`: If `false` the control panel will not run. If not set or `true` the control panel will start with the node. Example: `false` - `RATE_DENY_LIST`: Blocked list of IPs and peer IDs. Example: `"{ \"peers\": [\"16Uiu2HAkuYfgjXoGcSSLSpRPD6XtUgV71t5RqmTmcqdbmrWY9MJo\"], \"ips\": [\"127.0.0.1\"] }"` -- `MAX_REQ_PER_SECOND`: Number of requests per second allowed by the same client. Example: `3` +- `MAX_REQ_PER_MINUTE`: Number of requests per minute allowed by the same client (IP or Peer id). Example: `30` +- `MAX_CONNECTIONS_PER_MINUTE`: Max number of requests allowed per minute (all clients). Example: `120` - `MAX_CHECKSUM_LENGTH`: Define the maximum length for a file if checksum is required (Mb). Example: `10` +- `IS_BOOTSTRAP`: Is this node to be used as bootstrap node or not. Default is `false`. +- `AUTHORIZED_PUBLISHERS`: Authorized list of publishers. If present, Node will only index assets published by the accounts in the list. Example: `"[\"0x967da4048cD07aB37855c090aAF366e4ce1b9F48\",\"0x388C818CA8B9251b393131C08a736A67ccB19297\"]"` +- `AUTHORIZED_PUBLISHERS_LIST`: AccessList contract addresses (per chain). If present, Node will only index assets published by the accounts present on the given access lists. Example: `"{ \"8996\": [\"0x967da4048cD07aB37855c090aAF366e4ce1b9F48\",\"0x388C818CA8B9251b393131C08a736A67ccB19297\"] }"` +- `VALIDATE_UNSIGNED_DDO`: If set to `false`, the node will not validate unsigned DDOs and will request a signed message with the publisher address, nonce and signature. Default is `true`. Example: `false` +- `JWT_SECRET`: Secret used to sign JWT tokens. Default is `ocean-node-secret`. Example: `"my-secret-jwt-token"` + +## Database + +- `DB_URL`: URL for connecting to the database. Required for running a database with the node. Example: `"http://localhost:8108/?apiKey=xyz"` +- `DB_USERNAME`: Username for database authentication. Optional if not using authentication. Example: `"elastic"` +- `DB_PASSWORD`: Password for database authentication. Optional if not using authentication. Example: `"password123"` +- `ELASTICSEARCH_REQUEST_TIMEOUT`: Request timeout in milliseconds for Elasticsearch operations. Default is `60000`. Example: `60000` +- `ELASTICSEARCH_PING_TIMEOUT`: Ping timeout in milliseconds for Elasticsearch health checks. Default is `5000`. Example: `5000` +- `ELASTICSEARCH_RESURRECT_STRATEGY`: Strategy for bringing failed Elasticsearch nodes back online. Options are 'ping', 'optimistic', or 'none'. Default is `ping`. Example: `"ping"` +- `ELASTICSEARCH_MAX_RETRIES`: Maximum number of retry attempts for failed Elasticsearch operations. Default is `5`. Example: `5` +- `ELASTICSEARCH_SNIFF_ON_START`: Enable cluster node discovery on Elasticsearch client startup. Default is `true`. Example: `true` +- `ELASTICSEARCH_SNIFF_INTERVAL`: Interval in milliseconds for periodic cluster health monitoring and node discovery. Set to 'false' to disable. Default is `30000`. Example: `30000` +- `ELASTICSEARCH_SNIFF_ON_CONNECTION_FAULT`: Enable automatic cluster node discovery when connection faults occur. Default is `true`. Example: `true` +- `ELASTICSEARCH_HEALTH_CHECK_INTERVAL`: Interval in milliseconds for proactive connection health monitoring. Default is `60000`. Example: `60000` + +## Payments + +- `ESCROW_CLAIM_TIMEOUT`: Amount of time reserved to claim a escrow payment, in seconds. Defaults to `3600`. Example: `3600` ## Logs @@ -53,7 +81,7 @@ Environmental variables are also tracked in `ENVIRONMENT_VARIABLES` within `src/ - `P2P_pubsubPeerDiscoveryInterval`: Interval (in ms) for discovery using pubsub. Defaults to `10000` (three seconds). Example: `10000` - `P2P_dhtMaxInboundStreams`: Maximum number of DHT inbound streams. Defaults to `500`. Example: `500` - `P2P_dhtMaxOutboundStreams`: Maximum number of DHT outbound streams. Defaults to `500`. Example: `500` -- `P2P_ENABLE_DHT_SERVER`: Enable DHT server mode. This should be enabled for bootstrapers & well established nodes. Default: `false` +- `P2P_DHT_FILTER`: Filter address in DHT. 0 = (Default) No filter 1. Filter private ddresses. 2. Filter public addresses - `P2P_mDNSInterval`: Interval (in ms) for discovery using mDNS. Defaults to `20000` (20 seconds). Example: `20000` - `P2P_connectionsMaxParallelDials`: Maximum number of parallel dials. Defaults to `150`. Example: `150` - `P2P_connectionsDialTimeout`: Timeout for dial commands. Defaults to `10000` (10 seconds). Example: `10000` @@ -83,3 +111,103 @@ Environmental variables are also tracked in `ENVIRONMENT_VARIABLES` within `src/ - `NODE1_PRIVATE_KEY`: Used on test environments, specifically CI, represents the private key for node 1. Example: `"0xfd5c1ccea015b6d663618850824154a3b3fb2882c46cefb05b9a93fea8c3d215"` - `NODE2_PRIVATE_KEY`: Used on test environments, specifically CI, represents the private key for node 2. Example: `"0x1263dc73bef43a9da06149c7e598f52025bf4027f1d6c13896b71e81bb9233fb"` + +## Cron Jobs + +- `CRON_DELETE_DB_LOGS`: Delete old logs from database Cron expression. Example: `0 0 * * *` (runs every day at midnight) +- `CRON_CLEANUP_C2D_STORAGE`: Clear c2d expired resources/storage and delete old jobs. Example: `*/5 * * * *` (runs every 5 minutes) + +## Compute + +The `DOCKER_COMPUTE_ENVIRONMENTS` environment variable is used to configure Docker-based compute environments in Ocean Node. This guide will walk you through the options available for defining `DOCKER_COMPUTE_ENVIRONMENTS` and how to set it up correctly. + +Example Configuration +The `DOCKER_COMPUTE_ENVIRONMENTS` environment variable should be a JSON array of objects, where each object represents a Docker compute environment configuration. Below is an example configuration: + +`Disk` and `Ram` resources are always expressed in GB. + +```json +[ + { + "socketPath": "/var/run/docker.sock", + "resources": [ + { + "id": "disk", + "total": 10 + } + ], + "storageExpiry": 604800, + "maxJobDuration": 3600, + "access": { + "addresses": ["0x123", "0x456"], + "accessLists": [] + }, + "fees": { + "1": [ + { + "feeToken": "0x123", + "prices": [ + { + "id": "cpu", + "price": 1 + } + ] + } + ] + }, + "free": { + "maxJobDuration": 60, + "maxJobs": 3, + "access": { + "addresses": [], + "accessLists": ["0x789"] + }, + "resources": [ + { + "id": "cpu", + "max": 1 + }, + { + "id": "ram", + "max": 1 + }, + { + "id": "disk", + "max": 1 + } + ] + } + } +] +``` + +#### Configuration Options + +- **socketPath**: Path to the Docker socket (e.g., docker.sock). +- **storageExpiry**: Amount of seconds for storage expiry.(Mandatory) +- **maxJobDuration**: Maximum duration in seconds for a job.(Mandatory) +- **access**: Access control configuration for paid compute jobs. If both `addresses` and `accessLists` are empty, all addresses are allowed. + - **addresses**: Array of Ethereum addresses allowed to run compute jobs. If empty and no access lists are configured, all addresses are allowed. + - **accessLists**: Array of AccessList contract addresses. Users holding NFTs from these contracts can run compute jobs. Checked across all supported networks. +- **fees**: Fee structure for the compute environment. + - **feeToken**: Token address for the fee. + - **prices**: Array of resource pricing information. + - **id**: Resource type (e.g., `cpu`, `ram`, `disk`). + - **price**: Price per unit of the resource. +- **resources**: Array of resources available in the compute environment. + - **id**: Resource type (e.g., `cpu`, `ram`, `disk`). + - **total**: Total number of the resource available. + - **min**: Minimum number of the resource needed for a job. + - **max**: Maximum number of the resource for a job. +- **free**: Optional configuration for free jobs. + - **storageExpiry**: Amount of seconds for storage expiry for free jobs. + - **maxJobDuration**: Maximum duration in seconds for a free job. + - **maxJobs**: Maximum number of simultaneous free jobs. + - **access**: Access control configuration for free compute jobs. Works the same as the main `access` field. + - **addresses**: Array of Ethereum addresses allowed to run free compute jobs. + - **accessLists**: Array of AccessList contract addresses for free compute access control. + - **resources**: Array of resources available for free jobs. + - **id**: Resource type (e.g., `cpu`, `ram`, `disk`). + - **total**: Total number of the resource available. + - **min**: Minimum number of the resource needed for a job. + - **max**: Maximum number of the resource for a job. diff --git a/docs/imgs/C2Dv2_message_flow_for_docker_module.png b/docs/imgs/C2Dv2_message_flow_for_docker_module.png deleted file mode 100644 index 889088aa0..000000000 Binary files a/docs/imgs/C2Dv2_message_flow_for_docker_module.png and /dev/null differ diff --git a/docs/imgs/c2dv2-modules.png b/docs/imgs/c2dv2-modules.png deleted file mode 100644 index 1bb7e2da6..000000000 Binary files a/docs/imgs/c2dv2-modules.png and /dev/null differ diff --git a/elasticsearch-compose.yml b/elasticsearch-compose.yml new file mode 100644 index 000000000..504eb2cf1 --- /dev/null +++ b/elasticsearch-compose.yml @@ -0,0 +1,17 @@ +services: + elasticsearch: + image: elasticsearch:8.5.1 + ports: + - 9200:9200 + - 9300:9300 + volumes: + - esdata:/usr/share/elasticsearch/data + environment: + ES_JAVA_OPTS: "-Xms512m -Xmx512m" + MAX_MAP_COUNT: "64000" + discovery.type: "single-node" + ELASTIC_PASSWORD: "changeme" + xpack.security.enabled: "false" + xpack.security.http.ssl.enabled: "false" +volumes: + esdata: diff --git a/package-lock.json b/package-lock.json index 7c66c68ba..9e970154e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ocean-node", - "version": "0.2.0", - "lockfileVersion": 3, + "version": "0.2.3", + "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ocean-node", - "version": "0.2.0", + "version": "0.2.3", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-s3": "^3.554.0", @@ -19,10 +19,7 @@ "@libp2p/circuit-relay-v2": "^1.1.1", "@libp2p/crypto": "^4.1.5", "@libp2p/dcutr": "^1.1.1", - "@libp2p/floodsub": "^9.1.1", "@libp2p/identify": "^2.1.1", - "@libp2p/interface": "^1.6.0", - "@libp2p/interface-address-manager": "^3.0.1", "@libp2p/kad-dht": "^12.1.1", "@libp2p/mdns": "^10.1.1", "@libp2p/peer-id": "^4.1.4", @@ -34,63 +31,52 @@ "@libp2p/upnp-nat": "^1.2.1", "@libp2p/websockets": "^8.1.1", "@multiformats/multiaddr": "^10.2.0", - "@oceanprotocol/contracts": "^2.2.0", - "@rdfjs/dataset": "^2.0.1", - "@rdfjs/types": "^1.1.0", - "@types/lodash.clonedeep": "^4.5.7", - "@types/n3": "^1.16.4", - "@types/rdf-ext": "^2.2.5", - "@types/rdf-utils-fs": "^2.1.5", - "@types/rdfjs__data-model": "^2.0.7", - "@types/rdfjs__dataset": "^2.0.7", - "@types/rdfjs__parser-jsonld": "^2.1.6", - "@types/rdfjs__to-ntriples": "^2.0.6", - "@zazuko/env-node": "^2.1.3", - "aegir": "^37.3.0", - "aws-sdk": "^2.1591.0", - "axios": "^1.7.4", + "@oceanprotocol/contracts": "^2.5.0", + "@oceanprotocol/ddo-js": "^0.1.4", + "aws-sdk": "^2.1693.0", + "axios": "^1.12.0", "base58-js": "^2.0.0", "cors": "^2.8.5", "delay": "^5.0.0", + "dockerode": "^4.0.5", "dotenv": "^16.3.1", "eciesjs": "^0.4.5", "eth-crypto": "^2.6.0", - "ethers": "^6.8.1", + "ethers": "^6.14.1", "express": "^4.21.1", + "humanhash": "^1.0.4", "hyperdiff": "^2.0.16", - "ip": "^2.0.1", + "ipaddr.js": "^2.3.0", "it-pipe": "^3.0.1", + "jsonwebtoken": "^9.0.2", "libp2p": "^1.8.0", - "lodash.clonedeep": "^4.5.0", + "lodash": "^4.17.21", "lzma-purejs-requirejs": "^1.0.0", - "n3": "^1.17.2", "node-cron": "^3.0.3", - "private-ip": "^3.0.2", - "rdf-utils-fs": "^3.0.0", - "rdf-validate-shacl": "^0.5.5", - "rdflib": "^2.2.33", - "shacl-engine": "^0.1.2", - "sinon": "^17.0.1", "sqlite3": "^5.1.7", "stream-concat": "^1.0.0", - "ts-node": "^10.9.1", - "tsoa": "^5.1.1", + "tar": "^7.4.3", "uint8arrays": "^4.0.6", "url-join": "^5.0.0", "winston": "^3.11.0", "winston-daily-rotate-file": "^4.7.1", - "winston-transport": "^4.6.0" + "winston-transport": "^4.6.0", + "zod": "^3.25.76" }, "devDependencies": { "@types/chai": "^4.3.10", "@types/cors": "^2.8.17", + "@types/dockerode": "^3.3.31", "@types/express": "^4.17.17", "@types/ip": "^1.1.3", - "@types/lzma-native": "^4.0.4", - "@types/mocha": "^10.0.4", + "@types/jsonwebtoken": "^9.0.9", + "@types/lodash": "^4.17.21", + "@types/mocha": "^10.0.10", "@types/node": "^20.14.2", "@types/node-cron": "^3.0.11", "@types/rdfjs__formats-common": "^3.1.5", + "@types/sinon": "^17.0.4", + "@types/tar-stream": "^3.1.4", "@typescript-eslint/eslint-plugin": "^6.8.0", "@typescript-eslint/parser": "^6.8.0", "auto-changelog": "^2.4.0", @@ -101,16 +87,24 @@ "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-promise": "^6.1.1", - "mocha": "^10.2.0", + "mocha": "^11.1.0", + "nyc": "^17.1.0", "prettier": "^3.0.3", - "release-it": "^17.6.0", - "tsx": "^3.12.8" + "release-it": "^19.0.6", + "sinon": "^19.0.2", + "tsx": "^4.19.3" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/@achingbrain/nat-port-mapper": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@achingbrain/nat-port-mapper/-/nat-port-mapper-1.0.13.tgz", - "integrity": "sha512-B5GL6ILDek72OjoEyFGEuuNYaEOYxO06Ulhcaf/5iQ4EO8uaZWS+OkolYST7L+ecJrkjfaSNmSAsWRRuh+1Z5A==", "license": "Apache-2.0 OR MIT", "dependencies": { "@achingbrain/ssdp": "^4.0.1", @@ -125,8 +119,6 @@ }, "node_modules/@achingbrain/ssdp": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@achingbrain/ssdp/-/ssdp-4.0.6.tgz", - "integrity": "sha512-Y4JE2L9150i50V6lg/Y8+ilhxRpUZKKv+PKo68Aj7MjPfaUAar6ZHilF9h4/Zb3q0fqGMXNc9o11cQLNI8J8bA==", "license": "Apache-2.0 OR MIT", "dependencies": { "event-iterator": "^2.0.0", @@ -142,27 +134,17 @@ "license": "MIT" }, "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "version": "2.2.1", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/@arr/every": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", - "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", @@ -366,678 +348,654 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.629.0.tgz", - "integrity": "sha512-Q0YXKdUA7NboPl94JOKD4clHHuERG1Kwy0JPbU+3Hvmz/UuwUGBmlfaRAqd9y4LXsTv/2xKtFPW9R+nBfy9mwA==", + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.948.0.tgz", + "integrity": "sha512-uvEjds8aYA9SzhBS8RKDtsDUhNV9VhqKiHTcmvhM7gJO92q0WTn8/QeFTdNyLc6RxpiDyz+uBxS7PcdNiZzqfA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.629.0", - "@aws-sdk/client-sts": "3.629.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.629.0", - "@aws-sdk/middleware-bucket-endpoint": "3.620.0", - "@aws-sdk/middleware-expect-continue": "3.620.0", - "@aws-sdk/middleware-flexible-checksums": "3.620.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-location-constraint": "3.609.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-sdk-s3": "3.629.0", - "@aws-sdk/middleware-ssec": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/signature-v4-multi-region": "3.629.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@aws-sdk/xml-builder": "3.609.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/eventstream-serde-browser": "^3.0.6", - "@smithy/eventstream-serde-config-resolver": "^3.0.3", - "@smithy/eventstream-serde-node": "^3.0.5", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-blob-browser": "^3.1.2", - "@smithy/hash-node": "^3.0.3", - "@smithy/hash-stream-node": "^3.1.2", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/md5-js": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/credential-provider-node": "3.948.0", + "@aws-sdk/middleware-bucket-endpoint": "3.936.0", + "@aws-sdk/middleware-expect-continue": "3.936.0", + "@aws-sdk/middleware-flexible-checksums": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-location-constraint": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-sdk-s3": "3.947.0", + "@aws-sdk/middleware-ssec": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/signature-v4-multi-region": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/eventstream-serde-browser": "^4.2.5", + "@smithy/eventstream-serde-config-resolver": "^4.3.5", + "@smithy/eventstream-serde-node": "^4.2.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-blob-browser": "^4.2.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/hash-stream-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/md5-js": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.5", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.629.0.tgz", - "integrity": "sha512-2w8xU4O0Grca5HmT2dXZ5fF0g39RxODtmoqHJDsK5DSt750LqDG4w3ktmBvQs3+SrpkkJOjlX5v/hb2PCxVbww==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.629.0.tgz", - "integrity": "sha512-3if0LauNJPqubGYf8vnlkp+B3yAeKRuRNxfNbHlE6l510xWGcKK/ZsEmiFmfePzKKSRrDh/cxMFMScgOrXptNg==", + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.948.0.tgz", + "integrity": "sha512-iWjchXy8bIAVBUsKnbfKYXRwhLgRg3EqCQ5FTr3JbR+QR75rZm4ZOYXlvHGztVTmtAZ+PQVA1Y4zO7v7N87C0A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.629.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.629.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.629.0.tgz", - "integrity": "sha512-RjOs371YwnSVGxhPjuluJKaxl4gcPYTAky0nPjwBime0i9/iS9nI8R8l5j7k7ec9tpFWjBPvNnThCU07pvjdzw==", + "node_modules/@aws-sdk/core": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.947.0.tgz", + "integrity": "sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.629.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.629.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/core": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.629.0.tgz", - "integrity": "sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ==", + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.947.0.tgz", + "integrity": "sha512-VR2V6dRELmzwAsCpK4GqxUi6UW5WNhAXS9F9AzWi5jvijwJo3nH92YNJUP4quMpgFZxJHEWyXLWgPjh9u0zYOA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.3.2", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.4.1", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.947.0.tgz", + "integrity": "sha512-inF09lh9SlHj63Vmr5d+LmwPXZc2IbK8lAruhOr3KLsZAIHEgHgGPXWDC2ukTEMzg0pkexQ6FOhXXad6klK4RA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.622.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz", - "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.948.0.tgz", + "integrity": "sha512-Cl//Qh88e8HBL7yYkJNpF5eq76IO6rq8GsatKcfVBm7RFVxCqYEPSSBtkHdbtNwQdRQqAMXc6E/lEB/CZUDxnA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/credential-provider-env": "3.947.0", + "@aws-sdk/credential-provider-http": "3.947.0", + "@aws-sdk/credential-provider-login": "3.948.0", + "@aws-sdk/credential-provider-process": "3.947.0", + "@aws-sdk/credential-provider-sso": "3.948.0", + "@aws-sdk/credential-provider-web-identity": "3.948.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.629.0.tgz", - "integrity": "sha512-r9fI7BABARvVDp77DBUImQzYdvarAIdhbvpCEZib0rlpvfWu3zxE9KZcapCAAi0MPjxeDfb7RMehFQIkAP7mYw==", + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.948.0.tgz", + "integrity": "sha512-gcKO2b6eeTuZGp3Vvgr/9OxajMrD3W+FZ2FCyJox363ZgMoYJsyNid1vuZrEuAGkx0jvveLXfwiVS0UXyPkgtw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.622.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.629.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.629.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.629.0.tgz", - "integrity": "sha512-868hnVOLlXOBHk91Rl0jZIRgr/M4WJCa0nOrW9A9yidsQxuZp9P0vshDmm4hMvNZadmPIfo0Rra2MpA4RELoCw==", + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.948.0.tgz", + "integrity": "sha512-ep5vRLnrRdcsP17Ef31sNN4g8Nqk/4JBydcUJuFRbGuyQtrZZrVT81UeH2xhz6d0BK6ejafDB9+ZpBjXuWT5/Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.622.0", - "@aws-sdk/credential-provider-ini": "3.629.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.629.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/credential-provider-env": "3.947.0", + "@aws-sdk/credential-provider-http": "3.947.0", + "@aws-sdk/credential-provider-ini": "3.948.0", + "@aws-sdk/credential-provider-process": "3.947.0", + "@aws-sdk/credential-provider-sso": "3.948.0", + "@aws-sdk/credential-provider-web-identity": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.947.0.tgz", + "integrity": "sha512-WpanFbHe08SP1hAJNeDdBDVz9SGgMu/gc0XJ9u3uNpW99nKZjDpvPRAdW7WLA4K6essMjxWkguIGNOpij6Do2Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.629.0.tgz", - "integrity": "sha512-Lf4XOuj6jamxgGZGrVojERh5S+NS2t2S4CUOnAu6tJ5U0GPlpjhINUKlcVxJBpsIXudMGW1nkumAd3+kazCPig==", + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.948.0.tgz", + "integrity": "sha512-gqLhX1L+zb/ZDnnYbILQqJ46j735StfWV5PbDjxRzBKS7GzsiYoaf6MyHseEopmWrez5zl5l6aWzig7UpzSeQQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.629.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/client-sso": "3.948.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/token-providers": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", - "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.948.0.tgz", + "integrity": "sha512-MvYQlXVoJyfF3/SmnNzOVEtANRAiJIObEUYYyjTqKZTmcRIVVky0tPuG26XnB8LmTYgtESwJIZJj/Eyyc9WURQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", - "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.936.0.tgz", + "integrity": "sha512-XLSVVfAorUxZh6dzF+HTOp4R1B5EQcdpGcPliWr0KUj2jukgjZEcqbBmjyMF/p9bmyQsONX80iURF1HLAlW0qg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", - "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.936.0.tgz", + "integrity": "sha512-Eb4ELAC23bEQLJmUMYnPWcjD3FZIsmz2svDiXEcxRkQU9r7NRID7pM7C5NPH94wOfiCk0b2Y8rVyFXW0lGQwbA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", - "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.947.0.tgz", + "integrity": "sha512-kXXxS2raNESNO+zR0L4YInVjhcGGNI2Mx0AE1ThRhDkAt2se3a+rGf9equ9YvOqA1m8Jl/GSI8cXYvSxXmS9Ag==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", - "@aws-sdk/types": "3.609.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", + "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", - "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.936.0.tgz", + "integrity": "sha512-SCMPenDtQMd9o5da9JzkHz838w3327iqXk3cbNnXWqnNRx6unyW8FL0DZ84gIY12kAyVHz5WEqlWuekc15ehfw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", + "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.948.0.tgz", + "integrity": "sha512-Qa8Zj+EAqA0VlAVvxpRnpBpIWJI9KUwaioY1vkeNVwXPlNaz9y9zCKVM9iU9OZ5HXpoUg6TnhATAHXHAE8+QsQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.936.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.629.0.tgz", - "integrity": "sha512-FRXLcnPWXBoq/T9mnGnrpqhrSKNSm22rqJ0L7P14KESmbGuwhF/7ELYYxXIpgnIpb/CIUVmIU5EE8lsW1VTe8A==", + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.947.0.tgz", + "integrity": "sha512-DS2tm5YBKhPW2PthrRBDr6eufChbwXe0NjtTZcYDfUCXf0OR+W6cIqyKguwHMJ+IyYdey30AfVw9/Lb5KB8U8A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.629.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/core": "^2.3.2", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", - "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.936.0.tgz", + "integrity": "sha512-/GLC9lZdVp05ozRik5KsuODR/N7j+W+2TbfdFL3iS+7un+gnP6hC8RDOZd6WhpZp7drXQ9guKiTAxkZQwzS8DA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz", - "integrity": "sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==", + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.947.0.tgz", + "integrity": "sha512-7rpKV8YNgCP2R4F9RjWZFcD2R+SO/0R4VHIbY9iZJdH2MzzJ8ZG7h8dZ2m8QkQd1fjx4wrFJGGPJUTYXPV3baA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@smithy/core": "^3.18.7", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.948.0.tgz", + "integrity": "sha512-zcbJfBsB6h254o3NuoEkf0+UY1GpE9ioiQdENWv7odo69s8iaGBEQ4BDpsIMqcuiiUXw1uKIVNxCB1gUGYz8lw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", + "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@aws-sdk/types": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.629.0.tgz", - "integrity": "sha512-GPX6dnmuLGDFp7CsGqGCzleEoNyr9ekgOzSBtcL5nKX++NruxO7f1QzJAbcYvz0gdKvz958UO0EKsGM6hnkTSg==", + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.947.0.tgz", + "integrity": "sha512-UaYmzoxf9q3mabIA2hc4T6x5YSFUG2BpNjAZ207EA1bnQMiK+d6vZvb83t7dIWL/U1de1sGV19c1C81Jf14rrA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.629.0", - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/middleware-sdk-s3": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.948.0.tgz", + "integrity": "sha512-V487/kM4Teq5dcr1t5K6eoUKuqlGr9FRWL3MIMukMERJXHZvio6kox60FZ/YtciRHRI75u14YUqm2Dzddcu3+A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", + "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", - "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz", + "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz", - "integrity": "sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", + "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-endpoints": "^3.2.5", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", + "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", + "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.947.0.tgz", + "integrity": "sha512-+vhHoDrdbb+zerV4noQk1DHaUMNzWFWPpPYjVTwW2186k5BEJIecAMChYkghRrBVJ3KPWP1+JnZwOd72F3d4rQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -1049,56 +1007,70 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", - "integrity": "sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", + "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.9.0", + "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1115,68 +1087,36 @@ }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -1186,67 +1126,41 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, "license": "ISC" }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", - "semver": "^6.3.1" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1255,1548 +1169,1442 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" - }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.28.5" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "node_modules/@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "node_modules/@babel/traverse": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "license": "Apache-2.0" }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@bergos/jsonparse": { + "version": "1.4.1", + "engines": [ + "node >= 0.2.0" + ], "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "buffer": "^6.0.3" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", + "node_modules/@chainsafe/as-chacha20poly1305": { + "version": "0.1.0", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.4.1", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/is-ip": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/@chainsafe/libp2p-gossipsub": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-13.2.0.tgz", + "integrity": "sha512-yKGXIJMLeNLa/XeI57HvQKhf1f4LRgBuV1Lrzv9Vo685Szr+qaBATUbMk/aLxpN2rMgibDIS5F8yaeuIUVPh8Q==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@libp2p/crypto": "^4.0.1", + "@libp2p/interface": "^1.5.0", + "@libp2p/interface-internal": "^1.0.7", + "@libp2p/peer-id": "^4.0.5", + "@libp2p/pubsub": "^9.0.8", + "@multiformats/multiaddr": "^12.1.14", + "denque": "^2.1.0", + "it-length-prefixed": "^9.0.4", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "multiformats": "^13.0.1", + "protons-runtime": "5.4.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.0.1" }, "engines": { - "node": ">=4" + "npm": ">=8.7.0" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@multiformats/multiaddr": { + "version": "12.5.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.5.1.tgz", + "integrity": "sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { - "color-name": "1.1.3" + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@multiformats/dns": "^1.0.3", + "abort-error": "^1.0.1", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" } }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/multiformats": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz", + "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==", + "license": "Apache-2.0 OR MIT" }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", + "node_modules/@chainsafe/libp2p-noise": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-15.1.0.tgz", + "integrity": "sha512-84S/Uk7ZZRYpSlE5d1odMmQTl5g5Da8etgcf4QI7arTAHkvBs3il7yGHIPt4wV4EV0qIMG+XjdGIYihRXfI2/w==", "dependencies": { - "has-flag": "^3.0.0" + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^0.4.1", + "@libp2p/crypto": "^4.0.0", + "@libp2p/interface": "^1.5.0", + "@libp2p/peer-id": "^4.0.0", + "@noble/ciphers": "^0.5.1", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "it-length-prefixed": "^9.0.1", + "it-length-prefixed-stream": "^1.0.0", + "it-pair": "^2.0.6", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.0", + "wherearewe": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", - "license": "MIT", + "node_modules/@chainsafe/libp2p-noise/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "node_modules/@chainsafe/libp2p-noise/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", "dependencies": { - "@babel/types": "^7.25.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" + "multiformats": "^13.0.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", - "license": "MIT", + "node_modules/@chainsafe/libp2p-yamux": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-6.0.2.tgz", + "integrity": "sha512-S5OkLHqYhEVMQQ4BTgnRANEIbGTQhaC23glCgBwGdeoTRtMpIozwDiPfljFLCm0RYWdCRJw9oFztO95KUHjptA==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@libp2p/interface": "^1.1.3", + "@libp2p/utils": "^5.2.5", + "get-iterator": "^2.0.1", + "it-foreach": "^2.0.6", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "uint8arraylist": "^2.4.8" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "node_modules/@chainsafe/netmask": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@chainsafe/is-ip": "^2.0.1" } }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.7.tgz", - "integrity": "sha512-CcmFwUJ3tKhLjPdt4NP+SHMshebytF8ZTYOv5ZDpkzq2sin80Wb5vJrGt8fhPrORQCfoSa0LAxC/DW+GAC5+Hw==", + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-default-from": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "license": "MIT", + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "license": "MIT", + "node_modules/@elastic/elasticsearch": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.14.0.tgz", + "integrity": "sha512-MGrgCI4y+Ozssf5Q2IkVJlqt5bUMnKIICG2qxeOfrJNrVugMCBCAQypyesmSSocAtNm8IX3LxfJ3jQlFHmKe2w==", + "license": "Apache-2.0", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" + "@elastic/transport": "^8.6.0", + "tslib": "^2.4.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", - "license": "MIT", + "node_modules/@elastic/transport": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@elastic/transport/-/transport-8.7.0.tgz", + "integrity": "sha512-IqXT7a8DZPJtqP2qmX1I2QKmxYyN27kvSW4g6pInESE1SuGwZDp2FxHJ6W2kwmYOJwQdAt+2aWwzXO5jHo9l4A==", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@opentelemetry/api": "1.x", + "debug": "^4.3.4", + "hpagent": "^1.0.0", + "ms": "^2.1.3", + "secure-json-parse": "^2.4.0", + "tslib": "^2.4.0", + "undici": "^6.12.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "node_modules/@elastic/transport/node_modules/undici": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18.17" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz", - "integrity": "sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw==", + "node_modules/@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", - "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", + "node_modules/@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "cpu": [ + "loong64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "cpu": [ + "mips64el" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", - "globals": "^11.1.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "cpu": [ + "riscv64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "cpu": [ + "s390x" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "node_modules/@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", - "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-flow": "^7.24.7" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-object-assign": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.24.7.tgz", - "integrity": "sha512-DOzAi77P9jSyPijHS7Z8vH0wLRcZH6wWxuIZgLAiy8FWOkcKMJmnyHjy2JM94k6A0QxlA/hlLh+R9T3GEryjNQ==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "node_modules/@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", - "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.25.2" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", - "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", - "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "regenerator-transform": "^0.15.2" - }, "engines": { - "node": ">=6.9.0" + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "node_modules/@eslint/js": { + "version": "8.52.0", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@ethereumjs/common": { + "version": "2.6.5", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", - "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bignumber/node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", "license": "MIT" }, - "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" + "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "license": "MIT" - }, - "node_modules/@bergos/jsonparse": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@bergos/jsonparse/-/jsonparse-1.4.1.tgz", - "integrity": "sha512-vXIT0nzZGX/+yMD5bx2VhTzc92H55tPoehh1BW/FZHOndWGFddrH3MAfdx39FRc7irABirW6EQaGxIJYV6CGuA==", - "engines": [ - "node >= 0.2.0" + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], "license": "MIT", "dependencies": { - "buffer": "^6.0.3" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/@chainsafe/as-chacha20poly1305": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@chainsafe/as-chacha20poly1305/-/as-chacha20poly1305-0.1.0.tgz", - "integrity": "sha512-BpNcL8/lji/GM3+vZ/bgRWqJ1q5kwvTFmGPk7pxm/QQZDbaMI98waOHjEymTjq2JmdD/INdNBFOVSyJofXg7ew==", - "license": "Apache-2.0" - }, - "node_modules/@chainsafe/as-sha256": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.2.tgz", - "integrity": "sha512-HJ8GZBRjLeWtRsAXf3EbNsNzmTGpzTFjfpSf4yHkLYC+E52DhT6hwz+7qpj6I/EmFzSUm5tYYvT9K8GZokLQCQ==", - "license": "Apache-2.0" - }, - "node_modules/@chainsafe/is-ip": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.2.tgz", - "integrity": "sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA==", + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", "license": "MIT" }, - "node_modules/@chainsafe/libp2p-gossipsub": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-13.1.1.tgz", - "integrity": "sha512-4/9M6N6kUy4Ek/mynRp251fIJdhM0PTKZzUDH4DvSJsmciGenEOUgXQkyYh9Ui1dbuI6dmU/vVLKqmIkaRCtqg==", - "license": "Apache-2.0", + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@libp2p/crypto": "^4.0.1", - "@libp2p/interface": "^1.5.0", - "@libp2p/interface-internal": "^1.0.7", - "@libp2p/peer-id": "^4.0.5", - "@libp2p/pubsub": "^9.0.8", - "@multiformats/multiaddr": "^12.1.14", - "denque": "^2.1.0", - "it-length-prefixed": "^9.0.4", - "it-pipe": "^3.0.1", - "it-pushable": "^3.2.3", - "multiformats": "^13.0.1", - "protons-runtime": "5.4.0", - "uint8arraylist": "^2.4.8", - "uint8arrays": "^5.0.1" - }, - "engines": { - "npm": ">=8.7.0" + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" } }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@multiformats/multiaddr": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", - "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@chainsafe/is-ip": "^2.0.1", - "@chainsafe/netmask": "^2.0.0", - "@libp2p/interface": "^1.0.0", - "@multiformats/dns": "^1.0.3", - "multiformats": "^13.0.0", - "uint8-varint": "^2.0.1", - "uint8arrays": "^5.0.0" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "multiformats": "^13.0.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" } }, - "node_modules/@chainsafe/libp2p-noise": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-15.1.1.tgz", - "integrity": "sha512-66EPS8gFTkb1jVCiJoY3+ulG/ZTef7kiNZZZvUOUzsLIZYQTi+7pIDBpgmolzSXdsFb8I2hl5mZsvcbzVZB5gg==", - "license": "Apache-2.0 OR MIT", + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@chainsafe/as-chacha20poly1305": "^0.1.0", - "@chainsafe/as-sha256": "^0.4.1", - "@libp2p/crypto": "^4.0.0", - "@libp2p/interface": "^1.5.0", - "@libp2p/peer-id": "^4.0.0", - "@noble/ciphers": "^0.6.0", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "it-length-prefixed": "^9.0.1", - "it-length-prefixed-stream": "^1.0.0", - "it-pair": "^2.0.6", - "it-pipe": "^3.0.1", - "it-stream-types": "^2.0.1", - "protons-runtime": "^5.0.0", - "uint8arraylist": "^2.4.3", - "uint8arrays": "^5.0.0", - "wherearewe": "^2.0.1" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainsafe/libp2p-noise/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "multiformats": "^13.0.0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" } }, - "node_modules/@chainsafe/libp2p-yamux": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-6.0.2.tgz", - "integrity": "sha512-S5OkLHqYhEVMQQ4BTgnRANEIbGTQhaC23glCgBwGdeoTRtMpIozwDiPfljFLCm0RYWdCRJw9oFztO95KUHjptA==", - "license": "Apache-2.0 OR MIT", + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@libp2p/interface": "^1.1.3", - "@libp2p/utils": "^5.2.5", - "get-iterator": "^2.0.1", - "it-foreach": "^2.0.6", - "it-pipe": "^3.0.1", - "it-pushable": "^3.2.3", - "uint8arraylist": "^2.4.8" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainsafe/netmask": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz", - "integrity": "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==", + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@chainsafe/is-ip": "^2.0.1" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">=0.1.90" + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@ethersproject/signing-key/node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "license": "MIT" + }, + "node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", - "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", - "license": "BSD-3-Clause", - "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/@elastic/elasticsearch": { - "version": "8.16.1", - "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.16.1.tgz", - "integrity": "sha512-ddBaY9ITag4egeYNY+uGWi7QZSX2x+SWTEum1bvfspbEU/G5Q3g6sdlBAkg29NWIpINH6FEnaanGeO7XjNvSHQ==", - "license": "Apache-2.0", - "dependencies": { - "@elastic/transport": "^8.9.1", - "apache-arrow": "^18.0.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@elastic/transport": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@elastic/transport/-/transport-8.9.1.tgz", - "integrity": "sha512-jasKNQeOb1vNf9aEYg+8zXmetaFjApDTSCC4QTl6aTixvyiRiSLcCiB8P6Q0lY9JIII/BhqNl8WbpFnsKitntw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "1.x", - "debug": "^4.3.4", - "hpagent": "^1.0.0", - "ms": "^2.1.3", - "secure-json-parse": "^2.4.0", - "tslib": "^2.4.0", - "undici": "^6.12.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@elastic/transport/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/@elastic/transport/node_modules/undici": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz", - "integrity": "sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/@electron/get/node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@electron/get/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@electron/get/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/get/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@electron/get/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.8.tgz", - "integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==", - "license": "MIT", - "dependencies": { - "comment-parser": "1.2.4", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "1.1.1" - }, - "engines": { - "node": "^12 || ^14 || ^16" - } - }, - "node_modules/@es-joy/jsdoccomment/node_modules/jsdoc-type-pratt-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", - "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", "funding": [ { "type": "individual", @@ -2809,21 +2617,21 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", "funding": [ { "type": "individual", @@ -2836,19 +2644,15 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", "funding": [ { "type": "individual", @@ -2861,17 +2665,27 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", "funding": [ { "type": "individual", @@ -2884,17 +2698,17 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", "funding": [ { "type": "individual", @@ -2907,735 +2721,578 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@fastify/busboy": { + "version": "2.0.0", "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.2.tgz", + "integrity": "sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==", + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" } }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@ethersproject/bignumber/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" - }, - "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" } }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { - "node": ">=8.3.0" + "node": ">=18" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "@types/node": ">=18" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "@types/node": { "optional": true } } }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/signing-key/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" - }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { - "node": ">=14" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@frogcat/ttl2jsonld": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@frogcat/ttl2jsonld/-/ttl2jsonld-0.0.9.tgz", - "integrity": "sha512-oT3Abc9sEnwcCx9cTgRCTbz+Y/9fvbqfW22A5V4ChoQ8/P++2eAvlWgUghFoNm2V9U3/CCDSP9HTGJ51D+n1Uw==", + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, "license": "MIT", - "bin": { - "ttl2jsonld": "bin/cli.js" + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "license": "MIT", - "optional": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "license": "Apache-2.0", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=12" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "brace-expansion": "^1.1.7" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "license": "Apache-2.0", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": ">=12.22" + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "license": "BSD-3-Clause" + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true, - "license": "ISC" + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@inquirer/figures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", - "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", - "dev": true, - "license": "MIT", + "node_modules/@isaacs/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "license": "ISC", "dependencies": { "camelcase": "^5.3.1", @@ -3650,8 +3307,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -3659,8 +3315,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -3671,9 +3326,10 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -3685,8 +3341,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -3697,8 +3352,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -3712,8 +3366,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -3724,8 +3377,7 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3733,14 +3385,12 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3748,8 +3398,6 @@ }, "node_modules/@jclem/logfmt2": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@jclem/logfmt2/-/logfmt2-2.4.3.tgz", - "integrity": "sha512-d7zluLlx+JRtVICF0+ghcrVdXBdE3eXrpIuFdcCcWxA3ABOyemkTySG4ha2AdsWFwAnh8tkB1vtyeZsWAbLumg==", "license": "MIT", "engines": { "node": ">= 14.x", @@ -3757,9 +3405,10 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -3771,9 +3420,8 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "version": "3.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -3783,52 +3431,58 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.4.15", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/@kikobeats/time-span": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@kikobeats/time-span/-/time-span-1.0.5.tgz", - "integrity": "sha512-txRAdmi35N1wnsLS1AO5mTlbY5Cv5/61WXqek2y3L9Q7u4mgdUVq819so5xe753hL5gYeLzlWoJ/VJfXg9nx8g==", + "version": "1.0.3", "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "version": "2.0.4", "license": "MIT" }, "node_modules/@libp2p/autonat": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/autonat/-/autonat-1.1.4.tgz", - "integrity": "sha512-yt/sUisqBLZPM/0lvpRo0enIEIbdyuSraIu4xRlGkdqqAXSo9T6CJppXxNi9VKTmlmD39WYYNP41Ilt3SvQhRQ==", - "license": "Apache-2.0 OR MIT", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/autonat/-/autonat-1.1.1.tgz", + "integrity": "sha512-x5gBMfYOiv3Yjc6cmtQJkr4lH7bKhtbzB+bPiJekSZzwnSFok5DBg6yBxktde+M+QOUQcNGQHUCeWU2fifP6IQ==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/utils": "^5.4.8", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5", "@multiformats/multiaddr": "^12.2.3", "it-first": "^3.0.6", "it-length-prefixed": "^9.0.4", @@ -3843,7 +3497,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -3854,23 +3507,26 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/autonat/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/autonat/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/bootstrap": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-10.1.4.tgz", - "integrity": "sha512-bt4Tz/DMKnlvZhF4d9Nkv/K7qgnoDBM/N0zwjA/aQg1vSq54/Szc2K3cIDAv9/r9dM4ckDRmIZZENr/bwcIIKw==", - "license": "Apache-2.0 OR MIT", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-10.1.1.tgz", + "integrity": "sha512-pm7LyIQnKjGjmLq89IvwRWJIkB90bUspVl3WMTq7boPeZ3Keo+RlNFSJHL5YtDZa/Jvu/iQR+SVxSmjrKdzn8w==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/peer-id": "^4.2.3", + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-id": "^4.2.0", "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.2.3" } @@ -3879,7 +3535,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -3890,27 +3545,30 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/bootstrap/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/bootstrap/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/circuit-relay-v2": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/circuit-relay-v2/-/circuit-relay-v2-1.1.4.tgz", - "integrity": "sha512-WLiisIvRWVSJLzb4MO1aqDOD2A7s99OgpfeKKt9nxSaq34WeQS9aGN9YxSczYkum9hBTdnLJZZDQrd6SId6NbQ==", - "license": "Apache-2.0 OR MIT", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/circuit-relay-v2/-/circuit-relay-v2-1.1.1.tgz", + "integrity": "sha512-Tj4BWZBKdoCIKkHlF/z6RFNzdqECtSaC5AKiUcB20Ggb4GDrCTRzCv05cMeS2jb4hhky259DXynKUrg1V7tG7Q==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/peer-collections": "^5.2.8", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/peer-record": "^7.0.24", - "@libp2p/utils": "^5.4.8", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/peer-record": "^7.0.21", + "@libp2p/utils": "^5.4.5", "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.2.3", "any-signal": "^4.1.1", @@ -3929,7 +3587,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -3940,22 +3597,25 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/circuit-relay-v2/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/circuit-relay-v2/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/crypto": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-4.1.8.tgz", - "integrity": "sha512-j8d1gOS6ypt6CSYgBTJKSTGsht3SFPkhfOkGND6sUCl1w9pRslDlvFnU9UrNHLMiaNmVHaeS9B2IKzKMbLX92Q==", - "license": "Apache-2.0 OR MIT", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-4.1.5.tgz", + "integrity": "sha512-iQyFljvVza7npzrJNjOCqP1DlvDcGyOxCjlzU0gCLb4Jt0ZyTQDosk3wV7r3hAqCCeoBpm/CB5viJGixhkKgIQ==", "dependencies": { - "@libp2p/interface": "^1.6.3", + "@libp2p/interface": "^1.6.0", "@noble/curves": "^1.4.0", "@noble/hashes": "^1.4.0", "asn1js": "^3.0.5", @@ -3965,24 +3625,49 @@ "uint8arrays": "^5.1.0" } }, + "node_modules/@libp2p/crypto/node_modules/@noble/curves": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", + "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@libp2p/crypto/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@libp2p/crypto/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/crypto/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/dcutr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/dcutr/-/dcutr-1.1.4.tgz", - "integrity": "sha512-NjIiAoi5q2Y2q0eON+VCdm8ec2Be1Q9q1vcL6z7RyBWwIkk6PPy8RvBaI6GcGKjk251jLrN6vz2yoL7vWRht2A==", - "license": "Apache-2.0 OR MIT", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/dcutr/-/dcutr-1.1.1.tgz", + "integrity": "sha512-4rADvCkMF2yhxSUu8vJUVp/oKO1ISr2RPx59kqpWrtsEu1cNnxKTl/a3/xutzS+BErCiAldOffu8TDPWxYfMag==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/utils": "^5.4.8", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/utils": "^5.4.5", "@multiformats/multiaddr": "^12.2.3", "@multiformats/multiaddr-matcher": "^1.2.1", "delay": "^6.0.0", @@ -3995,7 +3680,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4008,8 +3692,6 @@ }, "node_modules/@libp2p/dcutr/node_modules/delay": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-6.0.0.tgz", - "integrity": "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw==", "license": "MIT", "engines": { "node": ">=16" @@ -4018,47 +3700,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@libp2p/dcutr/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" - } - }, - "node_modules/@libp2p/floodsub": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/floodsub/-/floodsub-9.1.4.tgz", - "integrity": "sha512-epH/OUYkKzQv3o1PX7mveWQMLAy/ImQ5ep823wwuRhIDFKUsNBSROIBHjEbBO6F7twDs59nDxTfNOhKJzcTzAQ==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/pubsub": "^9.0.25", - "protons-runtime": "^5.4.0", - "uint8arraylist": "^2.4.8", - "uint8arrays": "^5.1.0" - } + "node_modules/@libp2p/dcutr/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" }, - "node_modules/@libp2p/floodsub/node_modules/uint8arrays": { + "node_modules/@libp2p/dcutr/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/identify": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-2.1.4.tgz", - "integrity": "sha512-w2JkmoZkXT3OJnTuyBPlEBicj1J1n90pcusZbs+YIiJ+mhsOvNKnQhJgCG8Q6wnTimcBjinqhRRp0hiaHqX7VQ==", - "license": "Apache-2.0 OR MIT", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-2.1.1.tgz", + "integrity": "sha512-vNaz2sKJh7wzNdDnkDn9RBPL7WhotGd78ogkDmr3N5J8V50wSXjA556tHa8eO5dqtyTTHZ0TTa6C0BPW/vxGng==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/peer-record": "^7.0.24", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/peer-record": "^7.0.21", "@multiformats/multiaddr": "^12.2.3", "@multiformats/multiaddr-matcher": "^1.2.1", "it-drain": "^3.0.7", @@ -4074,7 +3737,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4085,20 +3747,23 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/identify/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/identify/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/interface": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-1.6.3.tgz", - "integrity": "sha512-Tm8W5Q2FsjcSdeA5BvP/GTUq/lp3SjeW6GPmWbbIasBJdv67UGHahu8YDFTME90IxTijnikkfGNkOPsd/4UuvA==", - "license": "Apache-2.0 OR MIT", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-1.6.0.tgz", + "integrity": "sha512-PqcWA/wQFwk8bcevwUez5KYd0FKhKrOJOfKy+qGzDnKsPN3c0W6m/yiYXE7VJ6rAynL9ITxRddub3hEktthVCg==", "dependencies": { "@multiformats/multiaddr": "^12.2.3", "it-pushable": "^3.2.3", @@ -4108,51 +3773,13 @@ "uint8arraylist": "^2.4.8" } }, - "node_modules/@libp2p/interface-address-manager": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-address-manager/-/interface-address-manager-3.0.1.tgz", - "integrity": "sha512-8N1nfOtZ/CnZ/cL0Bnj59fhcSs7orI4evmNVsv2DM1VaNHXqc9tPy8JmQE2HRjrUXeUPwtzzG2eoP7l0ZYdC0g==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "@multiformats/multiaddr": "^12.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/interface-address-manager/node_modules/@multiformats/multiaddr": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", - "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "@chainsafe/is-ip": "^2.0.1", - "@chainsafe/netmask": "^2.0.0", - "@libp2p/interface": "^1.0.0", - "@multiformats/dns": "^1.0.3", - "multiformats": "^13.0.0", - "uint8-varint": "^2.0.1", - "uint8arrays": "^5.0.0" - } - }, - "node_modules/@libp2p/interface-address-manager/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" - } - }, "node_modules/@libp2p/interface-internal": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-1.3.3.tgz", - "integrity": "sha512-xng1cBGDhSZmCu0kUEv3363oSgpoPmvpDr11wumhKNEgGOwBVbEr0v7serYcrlORxFmyUBW8y98CkPRJxskPLA==", - "license": "Apache-2.0 OR MIT", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-1.3.0.tgz", + "integrity": "sha512-M2s/iCJ3+bKOcKkzeycCEkVA7fpZfVnptVm2DdKV1gYvC4ClVT21Hq4Ki2TZA/kibb7clWi5LTeed2jvMwj3pg==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/peer-collections": "^5.2.8", + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-collections": "^5.2.5", "@multiformats/multiaddr": "^12.2.3", "progress-events": "^1.0.0", "uint8arraylist": "^2.4.8" @@ -4162,7 +3789,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4173,11 +3799,15 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/interface-internal/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/interface-internal/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } @@ -4186,7 +3816,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4197,28 +3826,31 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/interface/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/interface/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/kad-dht": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-12.1.4.tgz", - "integrity": "sha512-TWg3WB/Ghqz2vVOBxZz3PD0gDw1j24GlcQiJw5AieXMY1va8ZxkYyJtpHluhPpjLnlI4zxNLbE30A05Tp6XD4w==", - "license": "Apache-2.0 OR MIT", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-12.1.1.tgz", + "integrity": "sha512-h9l1z8Pg43yHWhMfn0YN2xtwXpNUPkfj09Ims3+QZ5Yz4YUdrJ6pr2g9ZiE55my/dOEyKmCffO8mieCz8b2jxQ==", "dependencies": { - "@libp2p/crypto": "^4.1.8", - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/peer-collections": "^5.2.8", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/record": "^4.0.4", - "@libp2p/utils": "^5.4.8", + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/record": "^4.0.3", + "@libp2p/utils": "^5.4.5", "@multiformats/multiaddr": "^12.2.3", "any-signal": "^4.1.1", "hashlru": "^2.3.0", @@ -4248,7 +3880,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4259,33 +3890,35 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/kad-dht/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@libp2p/kad-dht/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/logger": { - "version": "4.0.19", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.19.tgz", - "integrity": "sha512-VKpIMbjzs60AaTezh55iEDPJ0W2icbkJkBXSlAMycCT4C+RYxOTRgevasw3mDB6+Lj9etM0nfa4vutoG4fsYCw==", - "license": "Apache-2.0 OR MIT", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.16.tgz", + "integrity": "sha512-yk+vL8QX7WoTwcfjDghvA3OZjwqiM4/VHxhr6kXfs691nE7czgdCbnBEJOwgfbR8IJpy39z9BDstoACMNmNEWQ==", "dependencies": { - "@libp2p/interface": "^1.6.3", + "@libp2p/interface": "^1.6.0", "@multiformats/multiaddr": "^12.2.3", + "debug": "^4.3.4", "interface-datastore": "^8.2.11", - "multiformats": "^13.1.0", - "weald": "^1.0.2" + "multiformats": "^13.1.0" } }, "node_modules/@libp2p/logger/node_modules/@multiformats/multiaddr": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4296,25 +3929,28 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/logger/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/logger/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/mdns": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-10.1.4.tgz", - "integrity": "sha512-OlvfOGdNw9jPpTwgS9TYskNNn8kiqVDAIT42XOL9aLIXlX6Uqx1LlKphoWUxL01TsSIBUX5asKdnbGPpV/qqLA==", - "license": "Apache-2.0 OR MIT", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-10.1.1.tgz", + "integrity": "sha512-XtOv8EWx/nSFrMjFEAUjxt6OO74hny6miEovyTK6XoX7f0iWss307Umro362RyumsC6UNt7J5IXsMQ/MOAxLog==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/utils": "^5.4.8", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5", "@multiformats/multiaddr": "^12.2.3", "@types/multicast-dns": "^7.2.4", "dns-packet": "^5.6.1", @@ -4325,7 +3961,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4336,22 +3971,25 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/mdns/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@libp2p/mdns/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/multistream-select": { - "version": "5.1.16", - "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-5.1.16.tgz", - "integrity": "sha512-0IUecYYu++gimGRzG324A6+NE9Vk/6Wvmp2xegfLjUZRegpFbHup3UvFEGxTkpHmsoswJMMTPHQyCNJFga+Z7Q==", - "license": "Apache-2.0 OR MIT", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-5.1.13.tgz", + "integrity": "sha512-p1OL9ESDwmhMXSRBRuEBkth77E/co5rO6UUIhm06rjmaYws4YJlgAgH7OsjtWYDb6LSJxh8Kp3B0/uvJoH+rSQ==", "dependencies": { - "@libp2p/interface": "^1.6.3", + "@libp2p/interface": "^1.6.0", "it-length-prefixed": "^9.0.4", "it-length-prefixed-stream": "^1.1.7", "it-stream-types": "^2.0.1", @@ -4362,79 +4000,87 @@ "uint8arrays": "^5.1.0" } }, + "node_modules/@libp2p/multistream-select/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/multistream-select/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/peer-collections": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-5.2.8.tgz", - "integrity": "sha512-dIakIFms3GgFYg4lVgl9afAm+OAxGTofz4KdFnVrlNW1z6VFhTbnRtvTweR6woSr2es1+Fu6WutmZ+62Fn0iOQ==", - "license": "Apache-2.0 OR MIT", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-5.2.5.tgz", + "integrity": "sha512-ZwR1VCIMYdH/YnsU7LyQEI0xCsKC3hZFnU+JAx0Js+uyL4me0KKofgGmy2Hz25qPVlbaLPOL3LWwEf397AqdsQ==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/utils": "^5.4.8" + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5" } }, "node_modules/@libp2p/peer-id": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-4.2.3.tgz", - "integrity": "sha512-hRqPzcYOz/5q6QvHYdmPMGeFZCjC/9qxQ/+jstSDMnY1DuKEXCre2+tCpG9OeRAFyPBbs5isfaqbY3zNZV2pqA==", - "license": "Apache-2.0 OR MIT", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-4.2.0.tgz", + "integrity": "sha512-VCScUTVuPNkoZmddM5NtuI0tuFZhFG6ypk7tX1svumA+9sEIx9x4duNIb/Rt+E7E7fDINcBnqxiQpBRUCRtDBQ==", "dependencies": { - "@libp2p/interface": "^1.6.3", + "@libp2p/interface": "^1.6.0", "multiformats": "^13.1.0", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/peer-id-factory": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-4.2.3.tgz", - "integrity": "sha512-4ryh3M4UH+nwlM1o3y3iCpW2jTxjj+Hgb6UNI1nFxZGLA6MI+En8kKiroa970xiVvsA+Xmas8B9gWeMFrZKBKg==", - "license": "Apache-2.0 OR MIT", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-4.2.0.tgz", + "integrity": "sha512-iyUnUgcSirGL13uEKAuFJUqLYT2DHWH9hxwBN/KSk1ati4jYYDqJb3zUmhgjEbs5jnx9AZ+c1oZYkVu5ta7BCA==", "dependencies": { - "@libp2p/crypto": "^4.1.8", - "@libp2p/interface": "^1.6.3", - "@libp2p/peer-id": "^4.2.3", + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-id": "^4.2.0", "protons-runtime": "^5.4.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, + "node_modules/@libp2p/peer-id-factory/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/peer-id-factory/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, + "node_modules/@libp2p/peer-id/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/peer-id/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/peer-record": { - "version": "7.0.24", - "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-7.0.24.tgz", - "integrity": "sha512-2LYvLqr3XDjA5u2LGD/3IvdgdrwOYdMzQnzr612/Q+yVS+36CN0dAIqU74OEWx+XeeUJSBQnQ0ryBQq/arbXuA==", - "license": "Apache-2.0 OR MIT", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-7.0.21.tgz", + "integrity": "sha512-wIeadVfNsCv6p8zCMiAyqS5qUeuzVGiN2Y4h+vv/ucyJAjxnKIjdwxppl1rT1gJ6ycSKWcZuUoOaD5WIaSrTkg==", "dependencies": { - "@libp2p/crypto": "^4.1.8", - "@libp2p/interface": "^1.6.3", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/utils": "^5.4.8", + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5", "@multiformats/multiaddr": "^12.2.3", "protons-runtime": "^5.4.0", "uint8-varint": "^2.0.4", @@ -4446,7 +4092,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4457,25 +4102,28 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/peer-record/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/peer-record/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/peer-store": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-10.1.4.tgz", - "integrity": "sha512-D/lqEaWZV8xEBQ7b0ZEFYtaa6+LjXjs+PRrFpmnvyuz86o9KQedVoJPufT4g0nKIeQZUtdRfkzWNnwD+fru64g==", - "license": "Apache-2.0 OR MIT", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-10.1.1.tgz", + "integrity": "sha512-2lYlTIm3bEZkIzwwHHJjup3kzkV10NOOsGjkVgZQPH0xGXO4V7Bdh7Wlr5t3YyuMC8Ph4VwVVM293Bzh6rrj+A==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/peer-collections": "^5.2.8", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/peer-record": "^7.0.24", + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/peer-record": "^7.0.21", "@multiformats/multiaddr": "^12.2.3", "interface-datastore": "^8.2.11", "it-all": "^3.0.6", @@ -4490,7 +4138,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4501,24 +4148,27 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/peer-store/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/peer-store/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/ping": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-1.1.4.tgz", - "integrity": "sha512-biwYtLaEHky2hsLzVZnPzrwME2WwaMu2MG+poKepxS36Ib9EM7XPGVUjpoafCQBM+Z67AMiFpKVtk3k9Kb24Gw==", - "license": "Apache-2.0 OR MIT", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-1.1.1.tgz", + "integrity": "sha512-5hJTkpfewmTk5PHcsr29ldJSViwZltQD7PGrJa+0woRPS0iEXHk5hNMvfYnNR/sv0XyRTjZmHtvhaI9S83Lpkw==", "dependencies": { - "@libp2p/crypto": "^4.1.8", - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", "@multiformats/multiaddr": "^12.2.3", "it-first": "^3.0.6", "it-pipe": "^3.0.1", @@ -4529,7 +4179,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4540,27 +4189,30 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/ping/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@libp2p/ping/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/pubsub": { - "version": "9.0.25", - "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-9.0.25.tgz", - "integrity": "sha512-IpAN2O/Xcqk0hXDv37zLGvzyQtR4o0xiZl3IC/P7QFikFf+mrmh80Zz447LhmHdRI/BpAwES0NYYCfjBDHu5+Q==", - "license": "Apache-2.0 OR MIT", + "version": "9.0.22", + "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-9.0.22.tgz", + "integrity": "sha512-aMFUgq22Piv/0NrXoQlb9cy5aMqPegd1Jc0NQ2UvvhVR9m+tQW29y3czm9P7goacGnhFe8m/YONfcDhynX69Vw==", "dependencies": { - "@libp2p/crypto": "^4.1.8", - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/peer-collections": "^5.2.8", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/utils": "^5.4.8", + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5", "it-length-prefixed": "^9.0.4", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", @@ -4574,7 +4226,6 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/@libp2p/pubsub-peer-discovery/-/pubsub-peer-discovery-10.0.2.tgz", "integrity": "sha512-7DLasMSo443nxPJ+X95tXazXgO96K2/TafoexDxi4QVWIKgkmK+HyoFRcmwog2pjhA1/KQUsPu8S8wH6Ns9Oow==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@libp2p/interface": "^1.0.1", "@libp2p/interface-internal": "^1.0.1", @@ -4586,66 +4237,76 @@ } }, "node_modules/@libp2p/pubsub-peer-discovery/node_modules/@multiformats/multiaddr": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", - "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "version": "12.1.11", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", "@libp2p/interface": "^1.0.0", - "@multiformats/dns": "^1.0.3", - "multiformats": "^13.0.0", + "dns-over-http-resolver": "3.0.0", + "multiformats": "^12.0.1", "uint8-varint": "^2.0.1", - "uint8arrays": "^5.0.0" + "uint8arrays": "^4.0.2" } }, - "node_modules/@libp2p/pubsub-peer-discovery/node_modules/@multiformats/multiaddr/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "node_modules/@libp2p/pubsub-peer-discovery/node_modules/dns-over-http-resolver": { + "version": "3.0.0", "license": "Apache-2.0 OR MIT", "dependencies": { - "multiformats": "^13.0.0" + "debug": "^4.3.4", + "receptacle": "^1.3.2" + } + }, + "node_modules/@libp2p/pubsub-peer-discovery/node_modules/uint8arrays": { + "version": "4.0.10", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^12.0.1" } }, + "node_modules/@libp2p/pubsub/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@libp2p/pubsub/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/record": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/record/-/record-4.0.4.tgz", - "integrity": "sha512-wEEeHXGNIcc8HtGbgGMuSHbboUWMxKG7OxALFwkE+KACgfRJZTESOp6XIdZnyC0r9lfEFsjF01pFKBTzoBmWEQ==", - "license": "Apache-2.0 OR MIT", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/record/-/record-4.0.3.tgz", + "integrity": "sha512-UiyC4MFasDwQHw+7CVUsCqvu4y5pYDZER9wPm9Rm8dlmlOn8GoXKF6CSKWx5rOk744EPaCNjwAMv9sD0u3IfUw==", "dependencies": { "protons-runtime": "^5.4.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, + "node_modules/@libp2p/record/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@libp2p/record/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/tcp": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-9.1.4.tgz", - "integrity": "sha512-0j/aYdMFLhLWUodtyuBt5+smzkmXCiczOxNOwKyTVUuoMMcAPCLxACqCy8213qiwpJ3qP5ZTTTs/JJMgWRC7ag==", - "license": "Apache-2.0 OR MIT", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-9.1.1.tgz", + "integrity": "sha512-vVwHwL9EOPNvPqTS0uQXnNnVYw0MEtIeV72yVffecw8hp1QpuRuVtinCEfdT0Pf2Ecfh0f6YHGR4cliWK4pqUQ==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/utils": "^5.4.8", + "@libp2p/interface": "^1.6.0", + "@libp2p/utils": "^5.4.5", "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.2.3", "@types/sinon": "^17.0.3", @@ -4657,7 +4318,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4668,25 +4328,28 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/tcp/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/tcp/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/upnp-nat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@libp2p/upnp-nat/-/upnp-nat-1.2.4.tgz", - "integrity": "sha512-oI0yAg7GKpiPy4u2u/34wYPJ/CLBraIA5dUh21ZGy3TH88eaTOYfyHSfGw9AI0IT/012xxkpqbA+h5+V+qDoBQ==", - "license": "Apache-2.0 OR MIT", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@libp2p/upnp-nat/-/upnp-nat-1.2.1.tgz", + "integrity": "sha512-wCE0gxm/W8yE4JAdvZ3f6pTySfebi85FhLhqzQBWWHLSCs4c2PsPt7WCFHaXgPobmPbWXvoESVwV+wCKUhJc3w==", "dependencies": { "@achingbrain/nat-port-mapper": "^1.0.13", - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/utils": "^5.4.8", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/utils": "^5.4.5", "@multiformats/multiaddr": "^12.2.3", "wherearewe": "^2.0.1" } @@ -4695,7 +4358,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4706,25 +4368,28 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/upnp-nat/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@libp2p/upnp-nat/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/utils": { - "version": "5.4.8", - "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-5.4.8.tgz", - "integrity": "sha512-3ysAjrheDvcrUd8RWOCwa6Hm+5FMsYOlPq9IPllfD0jOyHO2RHc/huvAmjBg/PWrTdUyx1nWQf9wmdQFgTDUDQ==", - "license": "Apache-2.0 OR MIT", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-5.4.5.tgz", + "integrity": "sha512-PInUa1jZFILeBl0ilV0bLQkfZFp8chtYZbgiY3lGTX1sPQgl1nZDLjVg7F7/lpW0+FWZaACqEJKtHpUOTLrQow==", "dependencies": { "@chainsafe/is-ip": "^2.0.2", - "@libp2p/crypto": "^4.1.8", - "@libp2p/interface": "^1.6.3", - "@libp2p/logger": "^4.0.19", + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/logger": "^4.0.16", "@multiformats/multiaddr": "^12.2.3", "@multiformats/multiaddr-matcher": "^1.2.1", "@sindresorhus/fnv1a": "^3.1.0", @@ -4748,7 +4413,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4763,7 +4427,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/delay/-/delay-6.0.0.tgz", "integrity": "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw==", - "license": "MIT", "engines": { "node": ">=16" }, @@ -4771,23 +4434,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@libp2p/utils/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/utils/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@libp2p/websockets": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-8.1.4.tgz", - "integrity": "sha512-VWVgIo8t4VTzTI+orfGQxeHSXNWQL6dF//nH2p3nI5Z0saR6lrv5pNTsXbIhrZukGRFGgSwqGsd8bGhEohKNrQ==", - "license": "Apache-2.0 OR MIT", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-8.1.1.tgz", + "integrity": "sha512-Iwh+bZnDlft5rVEfJCddtUFRYRT2OARUm60UuD10bYndwnJM3f/kMWXPo0EoE3nULpejOS5VCcR6/Ipm3PIUiw==", "dependencies": { - "@libp2p/interface": "^1.6.3", - "@libp2p/utils": "^5.4.8", + "@libp2p/interface": "^1.6.0", + "@libp2p/utils": "^5.4.5", "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.2.3", "@multiformats/multiaddr-to-uri": "^10.0.1", @@ -4804,7 +4470,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4815,45 +4480,23 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@libp2p/websockets/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, "node_modules/@libp2p/websockets/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, - "node_modules/@ljharb/resumer": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.1.3.tgz", - "integrity": "sha512-d+tsDgfkj9X5QTriqM4lKesCkMMJC3IrbPKHvayP00ELx2axdXvDfWkqjxrLXIzGcQzmj7VAUT1wopqARTvafw==", - "license": "MIT", - "dependencies": { - "@ljharb/through": "^2.3.13", - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/@multiformats/dns": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz", "integrity": "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@types/dns-packet": "^5.6.5", "buffer": "^6.0.3", @@ -4864,52 +4507,56 @@ "uint8arrays": "^5.0.2" } }, + "node_modules/@multiformats/dns/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@multiformats/dns/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@multiformats/mafmt": { "version": "12.1.6", - "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.6.tgz", - "integrity": "sha512-tlJRfL21X+AKn9b5i5VnaTD6bNttpSpcqwKVmDmSHLwxoz97fAHaepqFOk/l1fIu94nImIXneNbhsJx/RQNIww==", "license": "Apache-2.0 OR MIT", "dependencies": { "@multiformats/multiaddr": "^12.0.0" } }, + "node_modules/@multiformats/mafmt/node_modules/@libp2p/interface": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6.tgz", + "integrity": "sha512-Lzc5cS/hXuoXhuAbVIxJIHLCYmfPcbU0vVgrpMoiP1Qb2Q3ETU4A46GB8s8mWXgSU6tr9RcqerUqzFYD6+OAag==", + "dependencies": { + "@multiformats/multiaddr": "^12.1.5", + "abortable-iterator": "^5.0.1", + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "multiformats": "^12.0.1", + "p-defer": "^4.0.0", + "race-signal": "^1.0.0", + "uint8arraylist": "^2.4.3" + } + }, "node_modules/@multiformats/mafmt/node_modules/@multiformats/multiaddr": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", - "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "version": "12.1.8", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", - "@libp2p/interface": "^1.0.0", - "@multiformats/dns": "^1.0.3", - "multiformats": "^13.0.0", + "@libp2p/interface": "^0.1.1", + "dns-over-http-resolver": "^2.1.0", + "multiformats": "^12.0.1", "uint8-varint": "^2.0.1", - "uint8arrays": "^5.0.0" - } - }, - "node_modules/@multiformats/mafmt/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" + "uint8arrays": "^4.0.2" } }, "node_modules/@multiformats/multiaddr": { "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-10.5.0.tgz", - "integrity": "sha512-u4qHMyv25iAqCb9twJROoN1M8UDm8bureOCIzwz03fVhwJzV6DpgH1eFz9UAzDn7CpSShQ9SLS5MiC4hJjTfig==", "license": "Apache-2.0 OR MIT", "dependencies": { "dns-over-http-resolver": "^2.1.0", @@ -4928,42 +4575,67 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-1.2.4.tgz", "integrity": "sha512-GgpqzQFL4Mj8t7cLNHC5nuYUuSm0kTtSUyYswiyWwTSUY3XwRAMx0UiFWQg+ETk0u+/IvFaHxfnyEoH3tasvwg==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@multiformats/multiaddr": "^12.0.0", "multiformats": "^13.0.0" } }, + "node_modules/@multiformats/multiaddr-matcher/node_modules/@libp2p/interface": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6.tgz", + "integrity": "sha512-Lzc5cS/hXuoXhuAbVIxJIHLCYmfPcbU0vVgrpMoiP1Qb2Q3ETU4A46GB8s8mWXgSU6tr9RcqerUqzFYD6+OAag==", + "dependencies": { + "@multiformats/multiaddr": "^12.1.5", + "abortable-iterator": "^5.0.1", + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "multiformats": "^12.0.1", + "p-defer": "^4.0.0", + "race-signal": "^1.0.0", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@multiformats/multiaddr-matcher/node_modules/@libp2p/interface/node_modules/multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@multiformats/multiaddr-matcher/node_modules/@multiformats/multiaddr": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", - "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "version": "12.1.8", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", - "@libp2p/interface": "^1.0.0", - "@multiformats/dns": "^1.0.3", - "multiformats": "^13.0.0", + "@libp2p/interface": "^0.1.1", + "dns-over-http-resolver": "^2.1.0", + "multiformats": "^12.0.1", "uint8-varint": "^2.0.1", - "uint8arrays": "^5.0.0" + "uint8arrays": "^4.0.2" } }, - "node_modules/@multiformats/multiaddr-matcher/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" + "node_modules/@multiformats/multiaddr-matcher/node_modules/@multiformats/multiaddr/node_modules/multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, + "node_modules/@multiformats/multiaddr-matcher/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@multiformats/multiaddr-to-uri": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-10.1.0.tgz", "integrity": "sha512-ZNwSAx3ssBWwd4y0LKrOsq9xG7LBHboQxnUdSduNc2fTh/NS1UjA2slgUy6KHxH5k9S2DSus0iU2CoyJyN0/pg==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@multiformats/multiaddr": "^12.3.0" } @@ -4972,7 +4644,6 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", @@ -4983,55 +4654,50 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@multiformats/multiaddr-to-uri/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, "node_modules/@multiformats/multiaddr-to-uri/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/@multiformats/multiaddr/node_modules/multiformats": { "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", "license": "(Apache-2.0 AND MIT)" }, "node_modules/@multiformats/multiaddr/node_modules/uint8arrays": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", "license": "MIT", "dependencies": { "multiformats": "^9.4.2" } }, "node_modules/@noble/ciphers": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.6.0.tgz", - "integrity": "sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==", - "license": "MIT", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", + "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.5.0.tgz", - "integrity": "sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==", + "version": "1.2.0", "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "@noble/hashes": "1.3.2" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "version": "1.3.2", "license": "MIT", "engines": { "node": ">= 16" @@ -5042,8 +4708,7 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -5055,8 +4720,7 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -5064,8 +4728,7 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -5075,11 +4738,20 @@ "node": ">= 8" } }, + "node_modules/@nodeutils/defaults-deep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nodeutils/defaults-deep/-/defaults-deep-1.1.0.tgz", + "integrity": "sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash": "^4.15.0" + } + }, "node_modules/@npmcli/fs": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "license": "ISC", "optional": true, "dependencies": { "@gar/promisify": "^1.0.1", @@ -5091,7 +4763,6 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", - "license": "MIT", "optional": true, "dependencies": { "mkdirp": "^1.0.4", @@ -5102,170 +4773,317 @@ } }, "node_modules/@oceanprotocol/contracts": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-2.2.1.tgz", - "integrity": "sha512-ub+CuN61seLtUvdTm/iFCyF6+wG5iCovhLaDQywKJw3RuM4gzSnxeOkBf0n0sf1ZJOGuhVcPZXHOfybtUPqVjA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-2.5.0.tgz", + "integrity": "sha512-w7YwpmqvQRBmdY/4LMLmsFDFPt+dpNZGmqxfhq9mOHSSFKg0G9cYoVZ+GV6yyp8tdUNHs9IteQooPO2kg3HCXA==", "license": "Apache-2.0" }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "license": "MIT", + "node_modules/@oceanprotocol/ddo-js": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@oceanprotocol/ddo-js/-/ddo-js-0.1.4.tgz", + "integrity": "sha512-+9nOslJCYMiIldIQ8dixdSjBjrrlqzb9q+nRQXqn60ZIi45AoR4ajv1LdqPwScCmoeLZgMxiZsnUXq/suDSLNg==", + "license": "Apache-2.0", "dependencies": { - "@octokit/types": "^6.0.3" + "@rdfjs/formats-common": "^3.1.0", + "@types/rdfjs__formats-common": "^3.1.5", + "@zazuko/env-node": "^2.1.4", + "chai": "^5.1.2", + "ethers": "^6.15.0", + "rdf-literal": "^2.0.0", + "rdf-validate-shacl": "^0.5.6" } }, - "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "node_modules/@oceanprotocol/ddo-js/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", "license": "MIT", "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@types/node": "*" } }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "node_modules/@oceanprotocol/ddo-js/node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "license": "MIT", - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "engines": { + "node": ">=12" } }, - "node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "node_modules/@oceanprotocol/ddo-js/node_modules/chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "license": "MIT", "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "node_modules/@oceanprotocol/ddo-js/node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "license": "MIT", - "dependencies": { - "@octokit/types": "^6.40.0" - }, - "peerDependencies": { - "@octokit/core": ">=2" + "engines": { + "node": ">= 16" } }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "node_modules/@oceanprotocol/ddo-js/node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "license": "MIT", - "peerDependencies": { - "@octokit/core": ">=3" + "engines": { + "node": ">=6" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "node_modules/@oceanprotocol/ddo-js/node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "license": "MIT" + }, + "node_modules/@oceanprotocol/ddo-js/node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "license": "MIT", - "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" + "engines": { + "node": ">= 14.16" } }, - "node_modules/@octokit/plugin-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", + "node_modules/@oceanprotocol/ddo-js/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", "license": "MIT", "dependencies": { - "@octokit/types": "^6.0.3", - "bottleneck": "^2.15.3" + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, - "node_modules/@octokit/plugin-throttling": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz", - "integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==", + "node_modules/@oceanprotocol/ddo-js/node_modules/rdf-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-2.0.0.tgz", + "integrity": "sha512-jlQ+h7EvnXmncmk8OzOYR8T3gNfd4g0LQXbflHkEkancic8dh0Tdt5RiRq8vUFndjIeNHt1RWeA5TAj6rgrtng==", "license": "MIT", "dependencies": { - "@octokit/types": "^6.0.1", - "bottleneck": "^2.15.3" + "rdf-data-factory": "^2.0.0" }, - "peerDependencies": { - "@octokit/core": "^3.5.0" + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, - "node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "license": "MIT", + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", + "dev": true, + "license": "MIT", "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" } }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "node_modules/@octokit/endpoint": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.2.tgz", + "integrity": "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==", + "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" } }, - "node_modules/@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "node_modules/@octokit/graphql": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", + "dev": true, "license": "MIT", "dependencies": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" } }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "node_modules/@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.2.1.tgz", + "integrity": "sha512-Tj4PkZyIL6eBMYcG/76QGsedF0+dWVeLhYprTmuFVVxzDW7PQh23tM0TP0z+1MvSkxB29YFZwnUX+cXfTiSdyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^15.0.1" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-26.0.0.tgz", + "integrity": "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.2.tgz", + "integrity": "sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^26.0.0" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", + "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-16.1.1.tgz", + "integrity": "sha512-VztDkhM0ketQYSh5Im3IcKWFZl7VIrrsCaHbDINkdYeiiAsJzjhS2xRFCSJgfN6VOcsoW4laMtsmf3HcNqIimg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^15.0.1" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-26.0.0.tgz", + "integrity": "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==", + "dev": true, "license": "MIT" }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.2.tgz", + "integrity": "sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^26.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.7.tgz", + "integrity": "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^11.0.2", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request-error": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/rest": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.0.tgz", + "integrity": "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^7.0.2", + "@octokit/plugin-paginate-rest": "^13.0.1", + "@octokit/plugin-request-log": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "dev": true, "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^12.11.0" + "@octokit/openapi-types": "^27.0.0" } }, "node_modules/@opentelemetry/api": { @@ -5277,24 +5095,41 @@ "node": ">=8.0.0" } }, - "node_modules/@phenomnomnominal/tsquery": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.2.0.tgz", - "integrity": "sha512-hR2U3uVcrrdkuG30ItQ+uFDs4ncZAybxWG0OjTE8ptPzVoU7GVeXpy+vMU8zX9EbmjGeITPw/su5HjYQyAH8bA==", + "node_modules/@phun-ky/typeof": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@phun-ky/typeof/-/typeof-2.0.3.tgz", + "integrity": "sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==", + "dev": true, "license": "MIT", - "dependencies": { - "esquery": "^1.0.1" + "engines": { + "node": "^20.9.0 || >=22.0.0", + "npm": ">=10.8.2" }, - "peerDependencies": { - "typescript": "^3 || ^4" + "funding": { + "url": "https://github.com/phun-ky/typeof?sponsor=1" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", "dev": true, "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -5302,63 +5137,89 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "4.2.10" + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=12.22.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@polka/send-type": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@polka/send-type/-/send-type-0.5.2.tgz", - "integrity": "sha512-jGXalKihnhGQmMQ+xxfxrRfI2cWs38TIZuwgYpnbQDD4r9TkOiU3ocjAS+6CqqMNQNAu9Ul2iHU5YFRDODak2w==", - "license": "MIT" + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" }, - "node_modules/@polka/url": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", - "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==", - "license": "MIT" + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" }, "node_modules/@rdfjs/data-model": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-2.0.2.tgz", - "integrity": "sha512-v5LRNkLRJazMCGU7VtEzhz5wKwz/IrOdJEKapCtd35HuFbQfeGpoJP6QOXGyFHhWwKmtG+UMlZzYFyNDVE1m6g==", + "version": "2.0.1", "license": "MIT", "bin": { "rdfjs-data-model-test": "bin/test.js" @@ -5376,24 +5237,49 @@ "node_modules/@rdfjs/environment": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@rdfjs/environment/-/environment-1.0.0.tgz", - "integrity": "sha512-+S5YjSvfoQR5r7YQCRCCVHvIEyrWia7FJv2gqM3s5EDfotoAQmFeBagApa9c/eQFi5EiNhmBECE5nB8LIxTaHg==", - "license": "MIT" + "integrity": "sha512-+S5YjSvfoQR5r7YQCRCCVHvIEyrWia7FJv2gqM3s5EDfotoAQmFeBagApa9c/eQFi5EiNhmBECE5nB8LIxTaHg==" }, "node_modules/@rdfjs/fetch-lite": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/@rdfjs/fetch-lite/-/fetch-lite-3.2.3.tgz", "integrity": "sha512-CZfUsBekFIDYCoXBW59ehgYctIluqatWB0YqCJoA8scENuo5IHPXdPMiLt1YVqUnxQ4STwEBOUoIiaCVxwfOFg==", - "license": "MIT", "dependencies": { "is-stream": "^4.0.1", "nodeify-fetch": "^3.1.0", "readable-stream": "^4.5.2" } }, + "node_modules/@rdfjs/fetch-lite/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@rdfjs/fetch-lite/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@rdfjs/formats": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@rdfjs/formats/-/formats-4.0.0.tgz", - "integrity": "sha512-9e0DX+iWi8d958Px6Ggb1otl/EhfyvlfWcop+lS0aZlsGV2YK9Phl5lzCUYTfTefSyyQk8tJd5XN52hhDLb5Wg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/formats/-/formats-4.0.1.tgz", + "integrity": "sha512-Rg53vP+x1bnGAqJNKgEzJEUPDhj+tCpzb6wdmfLoVFq4XoZ589+cg2ScFDUMMyAVsgKXvSWjDhQ9f9ab254ZxA==", "license": "MIT", "dependencies": { "@rdfjs/parser-jsonld": "^2.1.0", @@ -5403,13 +5289,11 @@ "@rdfjs/serializer-ntriples": "^2.0.0", "@rdfjs/serializer-turtle": "^1.1.1", "@rdfjs/sink-map": "^2.0.0", - "rdfxml-streaming-parser": "^2.3.0" + "rdfxml-streaming-parser": "^3.0.1" } }, "node_modules/@rdfjs/formats-common": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rdfjs/formats-common/-/formats-common-3.1.0.tgz", - "integrity": "sha512-wgz5za/Uls+pttLdLl/aH0m0LQNgjqpWwk9exNs2Smmb2CosynRo4S0+CxeNOVZh4zeUm7oAlr1CK/tyg4Ff6g==", "license": "MIT", "dependencies": { "@rdfjs/parser-jsonld": "^2.0.0", @@ -5420,88 +5304,246 @@ "rdfxml-streaming-parser": "^2.2.0" } }, - "node_modules/@rdfjs/namespace": { + "node_modules/@rdfjs/formats/node_modules/@rdfjs/types": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-2.0.1.tgz", - "integrity": "sha512-U85NWVGnL3gWvOZ4eXwUcv3/bom7PAcutSBQqmVWvOaslPy+kDzAJCH1WYBLpdQd4yMmJ+bpJcDl9rcHtXeixg==", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", "license": "MIT", "dependencies": { - "@rdfjs/data-model": "^2.0.1" + "@types/node": "*" } }, - "node_modules/@rdfjs/parser-jsonld": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@rdfjs/parser-jsonld/-/parser-jsonld-2.1.1.tgz", - "integrity": "sha512-bddq04r/p7booWk+5IqcTlWpDljy8Sv1cdFynpzawNruZTD99n3eSj7LCHPBUzqnpXc1Dnt8tgXiqB02WSYtiw==", + "node_modules/@rdfjs/formats/node_modules/@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", "license": "MIT", "dependencies": { - "@rdfjs/data-model": "^2.0.2", - "@rdfjs/sink": "^2.0.1", - "duplex-to": "^2.0.0", - "jsonld-streaming-parser": "^3.3.0", - "readable-stream": "^4.5.2" + "@types/node": "*", + "safe-buffer": "~5.1.1" } }, - "node_modules/@rdfjs/parser-n3": { + "node_modules/@rdfjs/formats/node_modules/rdf-data-factory": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@rdfjs/parser-n3/-/parser-n3-2.0.2.tgz", - "integrity": "sha512-rrrvyh+kkj9ndwep2h6nYmugIfggDOC9uGpmDAHn/I/z52K7dHxi7xOkPPrezTsIbgNvFhV3zS7mzyObRxcLWA==", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", "license": "MIT", "dependencies": { - "@rdfjs/data-model": "^2.0.2", - "@rdfjs/sink": "^2.0.1", - "duplex-to": "^2.0.0", - "n3": "^1.17.2", - "readable-stream": "^4.5.2" + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, - "node_modules/@rdfjs/prefix-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@rdfjs/prefix-map/-/prefix-map-0.1.2.tgz", - "integrity": "sha512-qapFYVPYyYepg0sFy7T512667iZsN9a3RNcyNBTBV+O8wrU3v/URQZOipCTNrEm1BXzZ7KCK1Yi8HrE1y+uRuQ==", + "node_modules/@rdfjs/formats/node_modules/rdfxml-streaming-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-3.0.1.tgz", + "integrity": "sha512-lJtJ85xEJHc5BXohOPtxjYMEbGK3uiRxROwJLVNGanjuKLT9BWJluoNr3RzS9vQNmjkQwhhYmrbIftw1WUOj7Q==", "license": "MIT", "dependencies": { - "readable-stream": "^4.3.0" + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^4.0.18", + "buffer": "^6.0.3", + "rdf-data-factory": "^2.0.0", + "readable-stream": "^4.4.2", + "relative-to-absolute-iri": "^1.0.0", + "validate-iri": "^1.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, - "node_modules/@rdfjs/serializer-jsonld": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld/-/serializer-jsonld-2.0.1.tgz", - "integrity": "sha512-O8WzdY7THsse/nMsrMLd2e51ADHO2SIUrkiZ9Va/8W3lXeeeiwDRPMppWy/i9yL4q6EM8iMW1riV7E0mK3fsBQ==", + "node_modules/@rdfjs/formats/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", "dependencies": { - "@rdfjs/sink": "^2.0.1", - "readable-stream": "^4.5.2" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@rdfjs/serializer-jsonld-ext": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld-ext/-/serializer-jsonld-ext-4.0.0.tgz", - "integrity": "sha512-HP5DCmhyfVuQuk58AO5vzNY+dIFVHe2oHY8NX2K+3XmrTmu/yzrFzPbDeU9Cwr71XC4RifEMoksIg+8jnhxmfQ==", + "node_modules/@rdfjs/formats/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/@rdfjs/namespace": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "@rdfjs/sink": "^2.0.0", - "jsonld": "^8.1.0", - "readable-stream": "^4.3.0", - "stream-chunks": "^1.0.0" + "@rdfjs/data-model": "^2.0.0" } }, - "node_modules/@rdfjs/serializer-ntriples": { + "node_modules/@rdfjs/parser-jsonld": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/sink": "^2.0.0", + "duplex-to": "^2.0.0", + "jsonld-streaming-parser": "^3.0.0", + "readable-stream": "^4.2.0" + } + }, + "node_modules/@rdfjs/parser-jsonld/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@rdfjs/parser-n3": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/serializer-ntriples/-/serializer-ntriples-2.0.1.tgz", - "integrity": "sha512-G1ZI0qaN/MUHxeCwr59JscO2LdyIb6MNQdXOv7NFBZuodyHsxxhJRFmMVn+3SEXeNJbVeEEbWBrLglCUgJ8XjQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/sink": "^2.0.0", + "duplex-to": "^2.0.0", + "n3": "^1.16.2", + "readable-stream": "^4.2.0" + } + }, + "node_modules/@rdfjs/parser-n3/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@rdfjs/prefix-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/prefix-map/-/prefix-map-0.1.2.tgz", + "integrity": "sha512-qapFYVPYyYepg0sFy7T512667iZsN9a3RNcyNBTBV+O8wrU3v/URQZOipCTNrEm1BXzZ7KCK1Yi8HrE1y+uRuQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "^4.3.0" + } + }, + "node_modules/@rdfjs/prefix-map/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@rdfjs/serializer-jsonld": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@rdfjs/sink": "^2.0.0", + "readable-stream": "^4.2.0" + } + }, + "node_modules/@rdfjs/serializer-jsonld-ext": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld-ext/-/serializer-jsonld-ext-4.0.1.tgz", + "integrity": "sha512-eGNAdhsV8wkmCadyIN+PBfsN+BIiqplAd5VMc++wf5McsVi/vPNrWcBINdrNnlegml8nLUy0rlKztCQ/4pxW8w==", "license": "MIT", "dependencies": { "@rdfjs/sink": "^2.0.1", - "@rdfjs/to-ntriples": "^3.0.1", + "jsonld": "^8.3.3", + "readable-stream": "^4.7.0", + "stream-chunks": "^1.0.0" + } + }, + "node_modules/@rdfjs/serializer-jsonld-ext/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@rdfjs/serializer-jsonld/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@rdfjs/serializer-ntriples": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@rdfjs/to-ntriples": "^2.0.0", "duplex-to": "^2.0.0", - "readable-stream": "^4.5.2" + "readable-stream": "^4.2.0" + } + }, + "node_modules/@rdfjs/serializer-ntriples/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@rdfjs/serializer-turtle": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@rdfjs/serializer-turtle/-/serializer-turtle-1.1.4.tgz", - "integrity": "sha512-fw58pfAuIZblNzf8Gwl6mxfNkPH+/4Q1GwF0GFaSHg9yT0sQ1S+EzaqEVXl0MLPquEKTAMJFBs1fkdwUNq8Qww==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-turtle/-/serializer-turtle-1.1.5.tgz", + "integrity": "sha512-uvIFUOuMuk8JrJnng/tWKIQ+8XI6YLEms75YdvZ49LtIyyfbDqKz76EybgnD/zZYfMhVVkguKtheBC9h08g1PQ==", "license": "MIT", "dependencies": { "@rdfjs/data-model": "^2.0.1", @@ -5515,40 +5557,52 @@ "stream-chunks": "^1.0.0" } }, + "node_modules/@rdfjs/serializer-turtle/node_modules/@rdfjs/to-ntriples": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-3.0.1.tgz", + "integrity": "sha512-gjoPAvh4j7AbGMjcDn/8R4cW+d/FPtbfbMM0uQXkyfBFtNUW2iVgrqsgJ65roLc54Y9A2TTFaeeTGSvY9a0HCQ==", + "license": "MIT" + }, + "node_modules/@rdfjs/serializer-turtle/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@rdfjs/sink": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/sink/-/sink-2.0.1.tgz", - "integrity": "sha512-smzIFGF6EH1sLAJR9F3p2wMNrN44JjPeYAoITTJLqtuNC319K7IXaJ+qNLBGTtapZ/jvpx2Tks0TjcH9KrAvEA==", "license": "MIT" }, "node_modules/@rdfjs/sink-map": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/sink-map/-/sink-map-2.0.1.tgz", - "integrity": "sha512-BwCTTsMN/tfQl6QzD2oHn9A08e4af+hlzAz/d5XXrlOkYMEDUAqFuh2Odj9EbayhAEeN4wA743Mj2yC0/s69rg==", "license": "MIT" }, "node_modules/@rdfjs/term-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@rdfjs/term-map/-/term-map-2.0.2.tgz", - "integrity": "sha512-EJ2FmmdEUsSR/tU1nrizRLWzH24YzhuvesrbUWxC3Fs0ilYNdtTbg0RaFJDUnJF3HkbNBQe8Zrt/uvU/hcKnHg==", + "version": "2.0.0", "license": "MIT", "dependencies": { - "@rdfjs/to-ntriples": "^3.0.1" + "@rdfjs/to-ntriples": "^2.0.0" } }, "node_modules/@rdfjs/term-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@rdfjs/term-set/-/term-set-2.0.3.tgz", - "integrity": "sha512-DyXrKWEx+mtAFUZVU7bc3Va6/KZ8PsIp0RVdyWT9jfDgI/HCvNisZaBtAcm+SYTC45o+7WLkbudkk1bfaKVB0A==", + "version": "2.0.1", "license": "MIT", "dependencies": { - "@rdfjs/to-ntriples": "^3.0.1" + "@rdfjs/to-ntriples": "^2.0.0" } }, "node_modules/@rdfjs/to-ntriples": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-3.0.1.tgz", - "integrity": "sha512-gjoPAvh4j7AbGMjcDn/8R4cW+d/FPtbfbMM0uQXkyfBFtNUW2iVgrqsgJ65roLc54Y9A2TTFaeeTGSvY9a0HCQ==", + "version": "2.0.0", "license": "MIT" }, "node_modules/@rdfjs/traverser": { @@ -5560,6 +5614,12 @@ "@rdfjs/to-ntriples": "^3.0.1" } }, + "node_modules/@rdfjs/traverser/node_modules/@rdfjs/to-ntriples": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-3.0.1.tgz", + "integrity": "sha512-gjoPAvh4j7AbGMjcDn/8R4cW+d/FPtbfbMM0uQXkyfBFtNUW2iVgrqsgJ65roLc54Y9A2TTFaeeTGSvY9a0HCQ==", + "license": "MIT" + }, "node_modules/@rdfjs/tree": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@rdfjs/tree/-/tree-0.2.1.tgz", @@ -5572,18 +5632,23 @@ } }, "node_modules/@rdfjs/types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.0.tgz", - "integrity": "sha512-5zm8bN2/CC634dTcn/0AhTRLaQRjXDZs3QfcAsQKNturHT7XVWcKy/8p3P5gXl+YkZTAmy7T5M/LyiT/jbkENw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", "license": "MIT", "dependencies": { "@types/node": "*" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@rubensworks/saxes": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@rubensworks/saxes/-/saxes-6.0.1.tgz", - "integrity": "sha512-UW4OTIsOtJ5KSXo2Tchi4lhZqu+tlHrOAs4nNti7CrtB53kAZl3/hyrTi6HkMihxdbDM6m2Zc3swc/ZewEe1xw==", "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" @@ -5592,3842 +5657,3317 @@ "node": ">=v12.22.12" } }, - "node_modules/@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", - "license": "MIT", - "dependencies": { - "any-observable": "^0.3.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "rxjs": { - "optional": true - }, - "zen-observable": { - "optional": true - } - } - }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "license": "MIT" }, - "node_modules/@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", - "license": "MIT", - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, + "node_modules/@sindresorhus/fnv1a": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/fnv1a/-/fnv1a-3.1.0.tgz", + "integrity": "sha512-KV321z5m/0nuAg83W1dPLy85HpHDk7Sdi4fJbwvacWsEhAh+rZUW4ZfGcXmUIvjZg4ss2bcwNlRhJ7GBEUG08w==", "engines": { - "node": ">=14.17" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "semantic-release": ">=18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/commit-analyzer": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", - "license": "MIT", + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "type-detect": "4.0.8" } }, - "node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" + } + }, + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=14.17" + "node": ">=4" } }, - "node_modules/@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", - "license": "MIT", + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", + "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", + "license": "Apache-2.0", "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/git/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz", + "integrity": "sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==", + "license": "Apache-2.0", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/git/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz", + "integrity": "sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/git/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/@smithy/config-resolver": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", + "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10.17.0" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/git/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@smithy/core": { + "version": "3.18.7", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.7.tgz", + "integrity": "sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.6", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/git/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/git/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", + "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", + "license": "Apache-2.0", "dependencies": { - "path-key": "^3.0.0" + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/git/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.5.tgz", + "integrity": "sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==", + "license": "Apache-2.0", "dependencies": { - "mimic-fn": "^2.1.0" + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.9.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/git/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.5.tgz", + "integrity": "sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/github": { - "name": "@achingbrain/semantic-release-github", - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@achingbrain/semantic-release-github/-/semantic-release-github-0.0.0.tgz", - "integrity": "sha512-HES6WrXTaPpIvsABCn3aM12AjqgV6aEPDMw8oaXGD702T6ZqQ98dQGlq1wt3IzX2yBQbNcFrwK8eVC0M1nz4uw==", - "license": "MIT", - "dependencies": { - "@octokit/plugin-retry": "^3.0.9", - "@octokit/plugin-throttling": "^3.6.2", - "@octokit/rest": "^18.0.0", - "@semantic-release/error": "^2.2.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "fs-extra": "^10.0.0", - "globby": "^11.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "issue-parser": "^6.0.0", - "lodash": "^4.17.4", - "mime": "^3.0.0", - "p-filter": "^2.0.0", - "url-join": "^4.0.0" + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.5.tgz", + "integrity": "sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/github/node_modules/@semantic-release/error": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz", - "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==", - "license": "MIT" - }, - "node_modules/@semantic-release/github/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.5.tgz", + "integrity": "sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==", + "license": "Apache-2.0", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/github/node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "license": "MIT" - }, - "node_modules/@semantic-release/npm": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", - "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", - "license": "MIT", + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.5.tgz", + "integrity": "sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==", + "license": "Apache-2.0", "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "execa": "^5.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.15", - "nerf-dart": "^1.0.0", - "normalize-url": "^6.0.0", - "npm": "^8.3.0", - "rc": "^1.2.8", - "read-pkg": "^5.0.0", - "registry-auth-token": "^5.0.0", - "semver": "^7.1.2", - "tempy": "^1.0.0" + "@smithy/eventstream-codec": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16 || ^14.17" - }, - "peerDependencies": { - "semantic-release": ">=19.0.0" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", + "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", + "node_modules/@smithy/hash-blob-browser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.6.tgz", + "integrity": "sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==", + "license": "Apache-2.0", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "@smithy/chunked-blob-reader": "^5.2.0", + "@smithy/chunked-blob-reader-native": "^4.2.1", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@smithy/hash-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", + "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/@smithy/hash-stream-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.5.tgz", + "integrity": "sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==", "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10.17.0" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", + "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", "dependencies": { - "path-key": "^3.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", + "node_modules/@smithy/md5-js": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.5.tgz", + "integrity": "sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==", + "license": "Apache-2.0", "dependencies": { - "mimic-fn": "^2.1.0" + "@smithy/types": "^4.9.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", + "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", - "license": "MIT", + "node_modules/@smithy/middleware-endpoint": { + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.14.tgz", + "integrity": "sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==", + "license": "Apache-2.0", "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" + "@smithy/core": "^3.18.7", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-middleware": "^4.2.5", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node_modules/@smithy/middleware-retry": { + "version": "4.4.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.14.tgz", + "integrity": "sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", + "node_modules/@smithy/middleware-serde": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", + "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", + "license": "Apache-2.0", "dependencies": { - "crypto-random-string": "^2.0.0" + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", - "integrity": "sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w==", - "license": "MIT", + "node_modules/@smithy/middleware-stack": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", + "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", + "license": "Apache-2.0", "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "get-stream": "^6.0.0", - "import-from": "^4.0.0", - "into-stream": "^6.0.0", - "lodash": "^4.17.4", - "read-pkg-up": "^7.0.0" + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", + "node_modules/@smithy/node-config-provider": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", + "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", + "license": "Apache-2.0", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@smithy/node-http-handler": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", + "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", + "node_modules/@smithy/property-provider": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", + "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", + "license": "Apache-2.0", "dependencies": { - "p-locate": "^4.1.0" + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", + "node_modules/@smithy/protocol-http": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", + "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", + "license": "Apache-2.0", "dependencies": { - "p-try": "^2.0.0" + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", + "node_modules/@smithy/querystring-builder": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", + "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", + "license": "Apache-2.0", "dependencies": { - "p-limit": "^2.2.0" + "@smithy/types": "^4.9.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "license": "MIT", + "node_modules/@smithy/querystring-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", + "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", + "license": "Apache-2.0", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sindresorhus/fnv1a": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/fnv1a/-/fnv1a-3.1.0.tgz", - "integrity": "sha512-KV321z5m/0nuAg83W1dPLy85HpHDk7Sdi4fJbwvacWsEhAh+rZUW4ZfGcXmUIvjZg4ss2bcwNlRhJ7GBEUG08w==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/commons/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", - "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^2.0.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/samsam/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "node_modules/@smithy/service-error-classification": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", + "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@smithy/types": "^4.9.0" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", - "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", - "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" + "node": ">=18.0.0" } }, - "node_modules/@smithy/config-resolver": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", + "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/core": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz", - "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==", + "node_modules/@smithy/signature-v4": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", + "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", - "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "node_modules/@smithy/smithy-client": { + "version": "4.9.10", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.10.tgz", + "integrity": "sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@smithy/core": "^3.18.7", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz", - "integrity": "sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "tslib": "^2.6.2" + "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz", - "integrity": "sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ==", + "node_modules/@smithy/types": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", + "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.5", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz", - "integrity": "sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ==", + "node_modules/@smithy/url-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", + "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/querystring-parser": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz", - "integrity": "sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ==", + "node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.5", - "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz", - "integrity": "sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ==", + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^3.1.2", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz", - "integrity": "sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/chunked-blob-reader": "^3.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-stream-node": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz", - "integrity": "sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g==", + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/invalid-dependency": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/md5-js": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.3.tgz", - "integrity": "sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-content-length": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", - "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.13.tgz", + "integrity": "sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.16.tgz", + "integrity": "sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", + "@smithy/config-resolver": "^4.4.3", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz", - "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==", + "node_modules/@smithy/util-endpoints": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", + "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "node_modules/@smithy/util-middleware": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", + "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@smithy/util-retry": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", + "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "node_modules/@smithy/util-stream": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", + "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "node_modules/@smithy/util-waiter": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.5.tgz", + "integrity": "sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", + "@smithy/abort-controller": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@smithy/service-error-classification": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", - "license": "Apache-2.0", + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tpluscode/rdf-ns-builders": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tpluscode/rdf-ns-builders/-/rdf-ns-builders-4.3.0.tgz", + "integrity": "sha512-x3uh9mYwAU+PrALaDKhVjml1TCCWWduo6J8rybd9SMEEAoooXq1MYb13MRputjRT/kYaFyCND7LMobzhxZ/+bg==", "dependencies": { - "@smithy/types": "^3.3.0" - }, - "engines": { - "node": ">=16.0.0" + "@rdfjs/data-model": "^2", + "@rdfjs/namespace": "^2", + "@rdfjs/types": "*", + "@types/rdfjs__namespace": "^2.0.2", + "@zazuko/prefixes": "^2.0.1" } }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "license": "Apache-2.0", + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/node": "*" } }, - "node_modules/@smithy/signature-v4": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", - "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", - "license": "Apache-2.0", + "node_modules/@types/body-parser": { + "version": "1.19.4", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@smithy/smithy-client": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz", - "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==", - "license": "Apache-2.0", + "node_modules/@types/chai": { + "version": "4.3.10", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/clownface": { + "version": "2.0.7", + "license": "MIT", + "peer": true, "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@rdfjs/types": ">=1.0.0", + "@types/rdfjs__environment": "*" } }, - "node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "license": "Apache-2.0", + "node_modules/@types/connect": { + "version": "3.4.37", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/node": "*" } }, - "node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "license": "Apache-2.0", + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@types/node": "*" } }, - "node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "license": "Apache-2.0", + "node_modules/@types/dns-packet": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz", + "integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/node": "*" } }, - "node_modules/@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", - "license": "Apache-2.0", + "node_modules/@types/docker-modem": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", + "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@types/node": "*", + "@types/ssh2": "*" } }, - "node_modules/@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", - "license": "Apache-2.0", + "node_modules/@types/dockerode": { + "version": "3.3.31", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.31.tgz", + "integrity": "sha512-42R9eoVqJDSvVspV89g7RwRqfNExgievLNWoHkg7NoWIqAmavIbgQBb4oc0qRtHkxE+I3Xxvqv7qVXFABKPBTg==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/docker-modem": "*", + "@types/node": "*", + "@types/ssh2": "*" } }, - "node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "license": "Apache-2.0", + "node_modules/@types/express": { + "version": "4.17.20", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", - "license": "Apache-2.0", + "node_modules/@types/express-serve-static-core": { + "version": "4.17.39", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz", - "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==", - "license": "Apache-2.0", + "node_modules/@types/http-errors": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-link-header": { + "version": "1.0.5", + "license": "MIT", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" + "@types/node": "*" } }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz", - "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==", - "license": "Apache-2.0", + "node_modules/@types/ip": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.3.tgz", + "integrity": "sha512-64waoJgkXFTYnCYDUWgSATJ/dXEBanVkaP5d4Sbk7P6U7cTTMhxVyROTckc6JKdwCrgnAjZMn0k3177aQxtDEA==", + "dev": true, "dependencies": { - "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" + "@types/node": "*" } }, - "node_modules/@smithy/util-endpoints": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", - "license": "Apache-2.0", + "node_modules/@types/json-schema": { + "version": "7.0.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonld": { + "version": "1.5.13", + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/ms": "*", + "@types/node": "*" } }, - "node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "license": "Apache-2.0", + "node_modules/@types/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/multicast-dns": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@types/multicast-dns/-/multicast-dns-7.2.4.tgz", + "integrity": "sha512-ib5K4cIDR4Ro5SR3Sx/LROkMDa0BHz0OPaCBL/OSPDsAXEGZ3/KQeS6poBKYVN7BfjXDL9lWNwzyHVgt/wkyCw==", "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/dns-packet": "*", + "@types/node": "*" } }, - "node_modules/@smithy/util-middleware": { + "node_modules/@types/murmurhash3js-revisited": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@types/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.3.tgz", + "integrity": "sha512-QvlqvYtGBYIDeO8dFdY4djkRubcrc+yTJtBc7n8VZPlJDUS/00A+PssbvERM8f9bYRmcaSEHPZgZojeQj7kzAA==" + }, + "node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "undici-types": "~5.26.4" } }, - "node_modules/@smithy/util-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", - "license": "Apache-2.0", + "node_modules/@types/node-cron": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.11.tgz", + "integrity": "sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==", + "dev": true + }, + "node_modules/@types/parse-path": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", + "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.1", + "license": "MIT", "dependencies": { - "@smithy/service-error-classification": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@types/node": "*" } }, - "node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "license": "Apache-2.0", + "node_modules/@types/qs": { + "version": "6.9.9", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/rdf-dataset-ext": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/rdf-dataset-ext/-/rdf-dataset-ext-1.0.8.tgz", + "integrity": "sha512-ngMGOzAm+yvrfTzFhlmPNa9lfWO72IkdqYRR+HNIPX3x+RPLf6qRpAi8GAZCg0rkpGt2JJqDQF3FgVxE6ykr/w==", + "license": "MIT", + "peer": true, "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@rdfjs/types": ">=1.0.0", + "@types/readable-stream": "*" } }, - "node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "license": "Apache-2.0", + "node_modules/@types/rdfjs__data-model": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/rdfjs__data-model/-/rdfjs__data-model-2.0.9.tgz", + "integrity": "sha512-rgQSlM9jr7XMZdC0xUIr0zsxf5FvdB4cxxzv+MlHm6uJGip5qi0q+BluNhakAzaM2I56nKLDqSE3I/XuOaHGnA==", + "license": "MIT", + "peer": true, "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@rdfjs/types": "*" } }, - "node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "license": "Apache-2.0", + "node_modules/@types/rdfjs__dataset": { + "version": "2.0.7", + "license": "MIT", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@rdfjs/types": "*" } }, - "node_modules/@smithy/util-waiter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", - "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", - "license": "Apache-2.0", + "node_modules/@types/rdfjs__environment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/rdfjs__environment/-/rdfjs__environment-1.0.0.tgz", + "integrity": "sha512-MDcnv3qfJvbHoEpUQXj5muT8g3e+xz1D8sGevrq3+Q4TzeEvQf5ijGX5l8485XFYrN/OBApgzXkHMZC04/kd5w==", + "peer": true, "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@rdfjs/types": "*", + "@types/node": "*" } }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "license": "Apache-2.0", + "node_modules/@types/rdfjs__fetch-lite": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/rdfjs__fetch-lite/-/rdfjs__fetch-lite-3.0.11.tgz", + "integrity": "sha512-1bHxBn62bmTPq/HY9Jr+iKCdBp8RTEJ4WA0ycihghRF8zWQfw6T7E5CqdPi4nncmgF70LOz7jF/4jeLGdb6H2A==", + "license": "MIT", + "peer": true, "dependencies": { - "tslib": "^2.8.0" + "@rdfjs/types": "*", + "@types/node": "*", + "@types/rdfjs__formats": "*" } }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "license": "MIT", + "node_modules/@types/rdfjs__formats": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdfjs__formats/-/rdfjs__formats-4.0.1.tgz", + "integrity": "sha512-Zj7hQEn5HeCj+pJCWshY2gqBcdBdwyc2j20Ht3PH91pkdRuG2AlGDD3N9PQ1oZ3+J6Q96rAlhxUbjQUp9+s3FQ==", + "peer": true, "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__parser-jsonld": "*", + "@types/rdfjs__parser-n3": "*", + "@types/rdfjs__serializer-jsonld": "*", + "@types/rdfjs__serializer-jsonld-ext": "*", + "@types/rdfjs__serializer-ntriples": "*", + "@types/rdfjs__serializer-turtle": "*", + "@types/rdfjs__sink-map": "*", + "rdfxml-streaming-parser": ">=2" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@types/rdfjs__formats-common": { + "version": "3.1.5", "license": "MIT", - "engines": { - "node": ">= 10" + "dependencies": { + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__parser-jsonld": "*", + "@types/rdfjs__parser-n3": "*", + "@types/rdfjs__serializer-jsonld": "*", + "@types/rdfjs__serializer-ntriples": "*", + "@types/rdfjs__sink-map": "*", + "rdfxml-streaming-parser": ">=2" } }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tpluscode/rdf-ns-builders": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tpluscode/rdf-ns-builders/-/rdf-ns-builders-4.3.0.tgz", - "integrity": "sha512-x3uh9mYwAU+PrALaDKhVjml1TCCWWduo6J8rybd9SMEEAoooXq1MYb13MRputjRT/kYaFyCND7LMobzhxZ/+bg==", + "node_modules/@types/rdfjs__namespace": { + "version": "2.0.10", "license": "MIT", "dependencies": { - "@rdfjs/data-model": "^2", - "@rdfjs/namespace": "^2", - "@rdfjs/types": "*", - "@types/rdfjs__namespace": "^2.0.2", - "@zazuko/prefixes": "^2.0.1" + "@rdfjs/types": "*" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "license": "MIT" - }, - "node_modules/@tsoa/cli": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-5.1.1.tgz", - "integrity": "sha512-krvp6Qr2yPUfj6bJRs0vwQhLANeINzyusNnzgSoerDfBBBnjZ+VhvR4rWguAcLc1kgP/kFAJz5kIp4iqLFmILQ==", + "node_modules/@types/rdfjs__parser-jsonld": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/rdfjs__parser-jsonld/-/rdfjs__parser-jsonld-2.1.7.tgz", + "integrity": "sha512-n35K+c1Y95580N202Jxly6xjFE953FF+Y2mwxok6zLfMo4rgIfgMBElnNwpja0IeYXTuzGm1tEz7va3lItGrTg==", "license": "MIT", "dependencies": { - "@tsoa/runtime": "^5.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^10.1.0", - "glob": "^8.0.3", - "handlebars": "^4.7.7", - "merge": "^2.1.1", - "minimatch": "^5.1.0", - "typescript": "^4.9.5", - "validator": "^13.7.0", - "yamljs": "^0.3.0", - "yargs": "^17.5.1" - }, - "bin": { - "tsoa": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "yarn": ">=1.9.4" + "@rdfjs/types": ">=1.0.0", + "@types/jsonld": "*" } }, - "node_modules/@tsoa/cli/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@types/rdfjs__parser-n3": { + "version": "2.0.6", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "@rdfjs/types": ">=1.0.0" } }, - "node_modules/@tsoa/cli/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", + "node_modules/@types/rdfjs__prefix-map": { + "version": "0.1.5", + "license": "MIT", + "peer": true, "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "@rdfjs/types": "*" } }, - "node_modules/@tsoa/runtime": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@tsoa/runtime/-/runtime-5.0.0.tgz", - "integrity": "sha512-DY0x7ZhNRF9FcwCZXQQbQhVj3bfZe0LScNyqp0c8PhDTj0gRMjY4ESVpihopRzhQtamReJoDRg3FhEu4BlSVtA==", + "node_modules/@types/rdfjs__serializer-jsonld": { + "version": "2.0.5", "license": "MIT", "dependencies": { - "@types/multer": "^1.4.7", - "promise.any": "^2.0.5", - "reflect-metadata": "^0.1.13", - "validator": "^13.7.0" - }, - "engines": { - "node": ">=12.0.0", - "yarn": ">=1.9.4" + "@rdfjs/types": ">=1.0.0" } }, - "node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "license": "MIT", + "node_modules/@types/rdfjs__serializer-jsonld-ext": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld-ext/-/rdfjs__serializer-jsonld-ext-4.0.1.tgz", + "integrity": "sha512-jgbQ/1kV7nESKG7SY8FJED6K4OFznr6Sz3ybF1ncpBR7TUBTuy3InpZOVRK4Wjpy2zi84iIAzJ1CIIo9NZh2Xw==", + "peer": true, "dependencies": { + "@rdfjs/types": ">=1.0.0", + "@types/jsonld": "*", "@types/node": "*" } }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "node_modules/@types/rdfjs__serializer-ntriples": { + "version": "2.0.6", "license": "MIT", "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@rdfjs/types": ">=1.0.0" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "license": "MIT", + "node_modules/@types/rdfjs__serializer-turtle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-turtle/-/rdfjs__serializer-turtle-1.1.0.tgz", + "integrity": "sha512-NGHnbz5985UwS/YS6WL/FkS94B+QiVTdsfvJCqPwLmY3E7UeClw91c2KbiphZUR/uh7uwLwxeKKhV2T1gYgT5Q==", + "peer": true, "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", + "@rdfjs/types": ">=1.0.0", "@types/node": "*", - "@types/responselike": "^1.0.0" + "@types/rdfjs__prefix-map": "*" } }, - "node_modules/@types/chai": { - "version": "4.3.17", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.17.tgz", - "integrity": "sha512-zmZ21EWzR71B4Sscphjief5djsLre50M6lI622OSySTmn9DB3j+C3kWroHfBQWXbOBwbgg/M8CG/hUxDLIloow==", - "license": "MIT" - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "node_modules/@types/rdfjs__sink-map": { + "version": "2.0.5", "license": "MIT", "dependencies": { - "@types/chai": "*" + "@rdfjs/types": "*" } }, - "node_modules/@types/chai-string": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@types/chai-string/-/chai-string-1.4.5.tgz", - "integrity": "sha512-IecXRMSnpUvRnTztdpSdjcmcW7EdNme65bfDCQMi7XrSEPGmyDYYTEfc5fcactWDA6ioSm8o7NUqg9QxjBCCEw==", + "node_modules/@types/rdfjs__term-map": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/rdfjs__term-map/-/rdfjs__term-map-2.0.10.tgz", + "integrity": "sha512-YlpYkya+Xq9fmcw+BMi1SCh+w2sBu7G0/qd2+ZhB4QIK3V1xq2o3EOAZnlahyQdwrW9t5+Ihw8IVVvZsJvDOTA==", "license": "MIT", + "peer": true, "dependencies": { - "@types/chai": "*" + "@rdfjs/types": "*" } }, - "node_modules/@types/chai-subset": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", - "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", + "node_modules/@types/rdfjs__term-set": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/rdfjs__term-set/-/rdfjs__term-set-2.0.9.tgz", + "integrity": "sha512-RRXs5DwFGanZyT705f7KLSiN68gUVUtGWTp508CXJhLfD7AWmilqc1BLgLUoac48h3pnh9w5lRhwFm6fj1ZE5Q==", "license": "MIT", + "peer": true, "dependencies": { - "@types/chai": "*" + "@rdfjs/types": "*" } }, - "node_modules/@types/clownface": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/clownface/-/clownface-2.0.8.tgz", - "integrity": "sha512-vomfitsRIuvw9zp/Xph8/AHPRBQ+7Ji/OnQUC3TOem+KzG/z2rCeEjpZH23wP7t0gjXZHPiZU1syFkf/oP3v8w==", + "node_modules/@types/rdfjs__traverser": { + "version": "0.1.5", "license": "MIT", "peer": true, "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/rdfjs__environment": "*" + "@rdfjs/types": "*" } }, - "node_modules/@types/command-line-args": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", - "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", - "license": "MIT" + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } }, - "node_modules/@types/command-line-usage": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", - "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", "license": "MIT" }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@types/secp256k1": { + "version": "4.0.5", "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "node_modules/@types/semver": { + "version": "7.5.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.3", "dev": true, "license": "MIT", "dependencies": { + "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "node_modules/@types/serve-static": { + "version": "1.15.4", + "dev": true, "license": "MIT", "dependencies": { - "@types/ms": "*" + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" } }, - "node_modules/@types/dns-packet": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz", - "integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==", + "node_modules/@types/sinon": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.4.tgz", + "integrity": "sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==", "license": "MIT", "dependencies": { - "@types/node": "*" + "@types/sinonjs__fake-timers": "*" } }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.4", + "license": "MIT" + }, + "node_modules/@types/ssh2": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.1.tgz", + "integrity": "sha512-ZIbEqKAsi5gj35y4P4vkJYly642wIbY6PqoN0xiyQGshKUGXR9WQjF/iF9mXBQ8uBKy3ezfsCkcoHKhd0BzuDA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "@types/node": "^18.11.18" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "node_modules/@types/ssh2/node_modules/@types/node": { + "version": "18.19.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.54.tgz", + "integrity": "sha512-+BRgt0G5gYjTvdLac9sIeE0iZcJxi4Jc4PV5EUzqi+88jmQLr+fRZdv2tCTV7IHKSGxM6SaLoOXQWWUiLUItMw==", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "undici-types": "~5.26.4" } }, - "node_modules/@types/extend": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/extend/-/extend-3.0.4.tgz", - "integrity": "sha512-ArMouDUTJEz1SQRpFsT2rIw7DeqICFv5aaVzLSIYMYQSLcwcGOfT3VyglQs/p7K3F7fT4zxr0NWxYZIdifD6dA==", - "license": "MIT" + "node_modules/@types/tar-stream": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-3.1.4.tgz", + "integrity": "sha512-921gW0+g29mCJX0fRvqeHzBlE/XclDaAG0Ousy1LCghsOhvaKacDeRGEVzQP9IPfKn8Vysy7FEXAIxycpc/CMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "node_modules/@types/triple-beam": { + "version": "1.3.4", "license": "MIT" }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/http-link-header": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", - "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", + "node_modules/@types/ws": { + "version": "8.5.10", "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/ip": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.3.tgz", - "integrity": "sha512-64waoJgkXFTYnCYDUWgSATJ/dXEBanVkaP5d4Sbk7P6U7cTTMhxVyROTckc6JKdwCrgnAjZMn0k3177aQxtDEA==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.9.1", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "license": "MIT" - }, - "node_modules/@types/jsonld": { - "version": "1.5.15", - "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.15.tgz", - "integrity": "sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==", - "license": "MIT" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/type-utils": "6.9.1", + "@typescript-eslint/utils": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@types/lodash": { - "version": "4.17.7", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", - "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", - "license": "MIT" - }, - "node_modules/@types/lodash.clonedeep": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz", - "integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==", - "license": "MIT", + "node_modules/@typescript-eslint/parser": { + "version": "6.9.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@types/lodash": "*" + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@types/lzma-native": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/lzma-native/-/lzma-native-4.0.4.tgz", - "integrity": "sha512-9nwec86WAT3wUhjx9iV0AQ06xyDyiN/D9CAk3ZzNLb8zFjjo4EDBliN2uo7CFcBDJ64oXfX4sa+p6fpGpzy/4A==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.9.1", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/@typescript-eslint/type-utils": { + "version": "6.9.1", + "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2" + "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/utils": "6.9.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "license": "MIT" - }, - "node_modules/@types/mocha": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", - "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "license": "MIT" - }, - "node_modules/@types/multer": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz", - "integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==", + "node_modules/@typescript-eslint/types": { + "version": "6.9.1", + "dev": true, "license": "MIT", - "dependencies": { - "@types/express": "*" + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/multicast-dns": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@types/multicast-dns/-/multicast-dns-7.2.4.tgz", - "integrity": "sha512-ib5K4cIDR4Ro5SR3Sx/LROkMDa0BHz0OPaCBL/OSPDsAXEGZ3/KQeS6poBKYVN7BfjXDL9lWNwzyHVgt/wkyCw==", - "license": "MIT", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.9.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@types/dns-packet": "*", - "@types/node": "*" + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@types/murmurhash3js-revisited": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.3.tgz", - "integrity": "sha512-QvlqvYtGBYIDeO8dFdY4djkRubcrc+yTJtBc7n8VZPlJDUS/00A+PssbvERM8f9bYRmcaSEHPZgZojeQj7kzAA==", - "license": "MIT" - }, - "node_modules/@types/n3": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.16.4.tgz", - "integrity": "sha512-6PmHRYCCdjbbBV2UVC/HjtL6/5Orx9ku2CQjuojucuHvNvPmnm6+02B18YGhHfvU25qmX2jPXyYPHsMNkn+w2w==", + "node_modules/@typescript-eslint/utils": { + "version": "6.9.1", + "dev": true, "license": "MIT", "dependencies": { - "@rdfjs/types": "^1.1.0", - "@types/node": "*" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/typescript-estree": "6.9.1", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@types/node": { - "version": "20.14.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz", - "integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.9.1", + "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "@typescript-eslint/types": "6.9.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/node-cron": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.11.tgz", - "integrity": "sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "license": "MIT" + "node_modules/@vocabulary/sh": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vocabulary/sh/-/sh-1.1.5.tgz", + "integrity": "sha512-8R4uxHLpwmp6l6szZdCtfQx0wRy64OHuOsYTDfhCsbJ773Uv6nCM2bYBtjjirZHN+2m3uHQWgtWOdvuu1jwmOA==", + "peerDependencies": { + "@rdfjs/types": "^1.0.0" + } }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" + "node_modules/@zazuko/env-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@zazuko/env-core/-/env-core-1.1.2.tgz", + "integrity": "sha512-mnLG40utuT7jPBPLs6fJ0puhfagnXSj+S8t9+zUGs3YlrOq/7b2zr64Hi3p3etwDdApaQ0VgQuNIY9doaruS1Q==", + "dependencies": { + "@rdfjs/environment": "^1.0.0" + }, + "peerDependencies": { + "@types/rdfjs__environment": "^1.0.0" + } }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "node_modules/@zazuko/env-node": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@zazuko/env-node/-/env-node-2.1.5.tgz", + "integrity": "sha512-qYrePSWiz9XOB5R0NfvuaogmPP8gLcMsl18G7sYW1h6RB4l3aiofAr4YAKTK+bpJgGjeivDDi64lsQjF2F6p0g==", "license": "MIT", "dependencies": { - "@types/node": "*" + "@rdfjs/fetch-lite": "^3.2.2", + "@rdfjs/formats": "^4.0.0", + "@zazuko/env": "^2.5.3", + "@zazuko/rdf-utils-fs": "^3.3.0" + }, + "peerDependencies": { + "@types/rdfjs__fetch-lite": "^3.0.11", + "@types/rdfjs__formats": "^4.0.1" } }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/rdf-dataset-ext": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/rdf-dataset-ext/-/rdf-dataset-ext-1.0.8.tgz", - "integrity": "sha512-ngMGOzAm+yvrfTzFhlmPNa9lfWO72IkdqYRR+HNIPX3x+RPLf6qRpAi8GAZCg0rkpGt2JJqDQF3FgVxE6ykr/w==", + "node_modules/@zazuko/env-node/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", "license": "MIT", "peer": true, "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/readable-stream": "*" + "@types/node": "*" } }, - "node_modules/@types/rdf-ext": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@types/rdf-ext/-/rdf-ext-2.5.0.tgz", - "integrity": "sha512-d+O6WnpKTHULLYZ/EeHfCnpt38J+w5QmAQ3Bsijdk0p+RIbEhoVh9XvXzs/H6Os3rxltiQOUm2Bg/+JqLmQcEg==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@types/rdfjs__data-model": "*", - "@types/rdfjs__dataset": "*", - "@types/rdfjs__environment": "*", - "@types/rdfjs__fetch-lite": "*", - "@types/rdfjs__formats": "*", - "@types/rdfjs__namespace": "*", - "@types/rdfjs__prefix-map": "*", - "@types/rdfjs__score": "*", - "@types/rdfjs__term-map": "*", - "@types/rdfjs__term-set": "*", - "@types/rdfjs__traverser": "*" - } - }, - "node_modules/@types/rdf-utils-fs": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/rdf-utils-fs/-/rdf-utils-fs-2.1.5.tgz", - "integrity": "sha512-JE4GrR0whgLZWYQakjxGxWwHgxNmRO1hI7TgDs6Ry4tMM7CDlAexaAF6zcrz7RGjKXmNsZjXWs430AVtuESfRQ==", + "node_modules/@zazuko/env-node/node_modules/@zazuko/env": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@zazuko/env/-/env-2.5.3.tgz", + "integrity": "sha512-kivvYoXGFjva1CuXeK/jaaWMy9eXhhFmuSfSJGVW2wH7XbcZehJObjPXEVlZ3kKLCFhuv96j8Ot3SkbYaOtuLA==", "license": "MIT", "dependencies": { - "@rdfjs/types": ">=1.0.0" - } - }, - "node_modules/@types/rdfjs__data-model": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/rdfjs__data-model/-/rdfjs__data-model-2.0.8.tgz", - "integrity": "sha512-7OVjhmA8QPEdRReHFieKuqn2mbYx3ndEIEmh/6FkeJC8QCMJGVeSuRKEUVXbZGwP0rDKZuhQGozaRv3O1z1gPQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "^1.0.1" + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/dataset": "^2.0.1", + "@rdfjs/formats": "^4.0.0", + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-map": "^2.0.0", + "@rdfjs/term-set": "^2.0.1", + "@rdfjs/traverser": "^0.1.2", + "@tpluscode/rdf-ns-builders": "^4.1.0", + "@zazuko/env-core": "^1.1.2", + "@zazuko/prefixes": "^2.1.0", + "clownface": "^2.0.2", + "get-stream": "^9.0.1", + "rdf-dataset-ext": "^1.1.0" + }, + "peerDependencies": { + "@rdfjs/types": "^2", + "@types/clownface": "^2.0.0", + "@types/rdf-dataset-ext": "^1.0.8", + "@types/rdfjs__data-model": "^2.0.9", + "@types/rdfjs__dataset": "^2.0.7", + "@types/rdfjs__environment": "^1.0.0", + "@types/rdfjs__formats": "^4.0.1", + "@types/rdfjs__namespace": "^2.0.10", + "@types/rdfjs__term-map": "^2.0.10", + "@types/rdfjs__term-set": "^2.0.9", + "@types/rdfjs__traverser": "^0.1.5" } }, - "node_modules/@types/rdfjs__dataset": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/rdfjs__dataset/-/rdfjs__dataset-2.0.7.tgz", - "integrity": "sha512-+GaYIL9C7N1N0HyH+obU4IXuL7DX+fXuf827aUQ2Vx2UghO47+OTxo2v3seEQj/1YHoHBfQFk5Y4P6Q7Ht4Hqw==", + "node_modules/@zazuko/env-node/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "license": "MIT", "dependencies": { - "@rdfjs/types": "*" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/rdfjs__environment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/rdfjs__environment/-/rdfjs__environment-1.0.0.tgz", - "integrity": "sha512-MDcnv3qfJvbHoEpUQXj5muT8g3e+xz1D8sGevrq3+Q4TzeEvQf5ijGX5l8485XFYrN/OBApgzXkHMZC04/kd5w==", + "node_modules/@zazuko/env-node/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@types/node": "*" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/rdfjs__fetch-lite": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/rdfjs__fetch-lite/-/rdfjs__fetch-lite-3.0.10.tgz", - "integrity": "sha512-5EokVEj3eJGBknxM3pFV8y6w/ZVMAqZkmHKFLz6zgLxonCmC/bHHXeCTZGE1+5Heji/4vc84vinZMaQ1+n7t6Q==", - "license": "MIT", + "node_modules/@zazuko/prefixes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@zazuko/prefixes/-/prefixes-2.2.0.tgz", + "integrity": "sha512-mmRS+urGVMcAP5edzFq0V+B2PbbpEklP7BZGVF0+82ClczTwgpIL1tZy2mRfudwRYoAe+WkyWXDnlArPpdzLIg==" + }, + "node_modules/@zazuko/rdf-utils-fs": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@zazuko/rdf-utils-fs/-/rdf-utils-fs-3.3.1.tgz", + "integrity": "sha512-4HjTbJUwiCFanMMcaaZkLIkWUdVjXSQstAyxnfzsUOmh8Q43iVBL+mYAl17zoi47III0POL6hitRsN1JJ5tUFg==", "dependencies": { + "readable-stream": ">=3.6.0" + }, + "peerDependencies": { "@rdfjs/types": "*", - "@types/node": "*", - "@types/rdfjs__formats": "*" + "@types/rdfjs__environment": "0 - 1", + "@types/rdfjs__formats": "^4" } }, - "node_modules/@types/rdfjs__formats": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/rdfjs__formats/-/rdfjs__formats-4.0.1.tgz", - "integrity": "sha512-Zj7hQEn5HeCj+pJCWshY2gqBcdBdwyc2j20Ht3PH91pkdRuG2AlGDD3N9PQ1oZ3+J6Q96rAlhxUbjQUp9+s3FQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/node": "*", - "@types/rdfjs__parser-jsonld": "*", - "@types/rdfjs__parser-n3": "*", - "@types/rdfjs__serializer-jsonld": "*", - "@types/rdfjs__serializer-jsonld-ext": "*", - "@types/rdfjs__serializer-ntriples": "*", - "@types/rdfjs__serializer-turtle": "*", - "@types/rdfjs__sink-map": "*", - "rdfxml-streaming-parser": ">=2" - } + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true }, - "node_modules/@types/rdfjs__formats-common": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/rdfjs__formats-common/-/rdfjs__formats-common-3.1.5.tgz", - "integrity": "sha512-Zt74nSd9NemOq90/2cMrBVwnHJIXHFFDS7tkY4Slei1eRoQJpws059Lx9O+mqaFspkD3r81Enu/5CiNfQg9V7g==", - "dev": true, + "node_modules/abort-controller": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/node": "*", - "@types/rdfjs__parser-jsonld": "*", - "@types/rdfjs__parser-n3": "*", - "@types/rdfjs__serializer-jsonld": "*", - "@types/rdfjs__serializer-ntriples": "*", - "@types/rdfjs__sink-map": "*", - "rdfxml-streaming-parser": ">=2" + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" } }, - "node_modules/@types/rdfjs__namespace": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/rdfjs__namespace/-/rdfjs__namespace-2.0.10.tgz", - "integrity": "sha512-xoVzEIOxcpyteEmzaj94MSBbrBFs+vqv05joMhzLEiPRwsBBDnhkdBCaaDxR1Tf7wOW0kB2R1IYe4C3vEBFPgA==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" - } + "node_modules/abort-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz", + "integrity": "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg==", + "license": "Apache-2.0 OR MIT" }, - "node_modules/@types/rdfjs__parser-jsonld": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/rdfjs__parser-jsonld/-/rdfjs__parser-jsonld-2.1.7.tgz", - "integrity": "sha512-n35K+c1Y95580N202Jxly6xjFE953FF+Y2mwxok6zLfMo4rgIfgMBElnNwpja0IeYXTuzGm1tEz7va3lItGrTg==", - "license": "MIT", + "node_modules/abortable-iterator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-5.0.1.tgz", + "integrity": "sha512-hlZ5Z8UwqrKsJcelVPEqDduZowJPBQJ9ZhBC2FXpja3lXy8X6MoI5uMzIgmrA8+3jcVnp8TF/tx+IBBqYJNUrg==", "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/jsonld": "*" + "get-iterator": "^2.0.0", + "it-stream-types": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@types/rdfjs__parser-n3": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/rdfjs__parser-n3/-/rdfjs__parser-n3-2.0.6.tgz", - "integrity": "sha512-VHfdq7BDV6iMCtHkzTFSOuUWnqGlMUmEF0UZyK4+g9SzLWvc6TMcU5TYwQPQIz/e0s7dZ+xomxx6mVtIzsRQ/A==", + "node_modules/accepts": { + "version": "1.3.8", "license": "MIT", "dependencies": { - "@rdfjs/types": ">=1.0.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/rdfjs__prefix-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@types/rdfjs__prefix-map/-/rdfjs__prefix-map-0.1.5.tgz", - "integrity": "sha512-RAwyS/2dT9X79QwM0F8KLweTfuBoe6xtiAlU7wKPB+/t/sfk6A50LYtAWaDVP5qBjcu50UkKkZT+VR47CiLkfg==", + "node_modules/acorn": { + "version": "8.11.2", + "dev": true, "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@types/rdfjs__score": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@types/rdfjs__score/-/rdfjs__score-0.1.6.tgz", - "integrity": "sha512-TZZaI0PntOUnfA6vKsVlgeYuyiGvtlMygu0ycmmFn5quldbDWzIIxadciTIaBQBcPXmJHcnXiS8/mbZ9FkX4hQ==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@types/rdfjs__serializer-jsonld": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld/-/rdfjs__serializer-jsonld-2.0.5.tgz", - "integrity": "sha512-ubdLD9QgZzAt+65NSPzh2qWCPWcGYlHEWgkP6uRwfm7JC48Xh/QjzwOTG13MTomOkQqcN4R7PIG0j3Ca8iyNWQ==", + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", "license": "MIT", + "optional": true, "dependencies": { - "@rdfjs/types": ">=1.0.0" + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/@types/rdfjs__serializer-jsonld-ext": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld-ext/-/rdfjs__serializer-jsonld-ext-4.0.1.tgz", - "integrity": "sha512-jgbQ/1kV7nESKG7SY8FJED6K4OFznr6Sz3ybF1ncpBR7TUBTuy3InpZOVRK4Wjpy2zi84iIAzJ1CIIo9NZh2Xw==", - "license": "MIT", + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "optional": true, "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/jsonld": "*", - "@types/node": "*" + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" } }, - "node_modules/@types/rdfjs__serializer-ntriples": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-ntriples/-/rdfjs__serializer-ntriples-2.0.6.tgz", - "integrity": "sha512-Nn3e3eyuymLvbI5MFzI7ODD/X6ZGpbB9fLaWOB00RtFHd2vttk3wQL2fzzsZZQPJ/ihC/xlFE4cNQkO6SoHa7w==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "devOptional": true, "license": "MIT", "dependencies": { - "@rdfjs/types": ">=1.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/rdfjs__serializer-turtle": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-turtle/-/rdfjs__serializer-turtle-1.1.0.tgz", - "integrity": "sha512-NGHnbz5985UwS/YS6WL/FkS94B+QiVTdsfvJCqPwLmY3E7UeClw91c2KbiphZUR/uh7uwLwxeKKhV2T1gYgT5Q==", + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, "license": "MIT", "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/node": "*", - "@types/rdfjs__prefix-map": "*" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@types/rdfjs__sink-map": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/rdfjs__sink-map/-/rdfjs__sink-map-2.0.5.tgz", - "integrity": "sha512-ycUBlOMbp9YpjrBrMwGv3uiqulOWgodess06cinYLxomOTc2ET9rEQklgM5rJqnu5WMsVP8SFG3fFw36/5hADQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" + "node_modules/amdefine": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.1.tgz", + "integrity": "sha512-cE/769sItEDt5sSdqmrWMsat+XaA5FJiEou+ZwlY7ef/Jf/517k6nYyUIRPR2o/QbpBg4FiYXj9GyRGNg5f/bg==", + "engines": { + "node": ">=0.4.2" } }, - "node_modules/@types/rdfjs__term-map": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/rdfjs__term-map/-/rdfjs__term-map-2.0.10.tgz", - "integrity": "sha512-YlpYkya+Xq9fmcw+BMi1SCh+w2sBu7G0/qd2+ZhB4QIK3V1xq2o3EOAZnlahyQdwrW9t5+Ihw8IVVvZsJvDOTA==", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" + "engines": { + "node": ">=6" } }, - "node_modules/@types/rdfjs__term-set": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@types/rdfjs__term-set/-/rdfjs__term-set-2.0.9.tgz", - "integrity": "sha512-RRXs5DwFGanZyT705f7KLSiN68gUVUtGWTp508CXJhLfD7AWmilqc1BLgLUoac48h3pnh9w5lRhwFm6fj1ZE5Q==", + "node_modules/ansi-regex": { + "version": "5.0.1", "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/rdfjs__to-ntriples": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/rdfjs__to-ntriples/-/rdfjs__to-ntriples-2.0.6.tgz", - "integrity": "sha512-6Y7iNDU93ORX5vNqnEM/CefOsxl2di8ZyaHw3Q0U1nqtCijmubUzXAqd4AIHIGiWQfi1v+bi9bNk5ztVeMAyLg==", + "node_modules/ansi-styles": { + "version": "4.3.0", "license": "MIT", "dependencies": { - "@rdfjs/types": ">=1.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/rdfjs__traverser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@types/rdfjs__traverser/-/rdfjs__traverser-0.1.5.tgz", - "integrity": "sha512-tTpiM6lAddw+bGRDjhzwdpo1EQK73m8gYgMVNfO4OsevnuLZvQJeCJBckpuDC4H5HVAEwCapI0UlH9dVnZ9u5g==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" + "node_modules/any-signal": { + "version": "4.1.1", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@types/readable-stream": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.15.tgz", - "integrity": "sha512-oAZ3kw+kJFkEqyh7xORZOku1YAKvsFTogRY8kVl4vHpEKiDkfnSA/My8haRE7fvmix5Zyy+1pwzOi7yycGLBJw==", - "license": "MIT", - "peer": true, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "node_modules/append-transform": { + "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "license": "MIT" - }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "node_modules/archy": { + "version": "1.0.0", + "dev": true, "license": "MIT" }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "license": "MIT", + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "optional": true, "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" }, - "node_modules/@types/sinon": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", - "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, "license": "MIT", "dependencies": { - "@types/sinonjs__fake-timers": "*" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "license": "MIT" - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "node_modules/array-flatten": { + "version": "1.1.1", "license": "MIT" }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "license": "BSD-2-Clause", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" + "safer-buffer": "~2.1.0" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "license": "Apache-2.0", + "node_modules/asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "dependencies": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "node_modules/assertion-error": { + "version": "1.1.0", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "*" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "tslib": "^2.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=4" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "dependencies": { + "retry": "0.13.1" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/auto-changelog": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz", + "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "commander": "^7.2.0", + "handlebars": "^4.7.7", + "node-fetch": "^2.6.1", + "parse-github-url": "^1.0.2", + "semver": "^7.3.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "auto-changelog": "src/index.js" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=8.3" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "node_modules/auto-changelog/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": ">= 10" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "license": "ISC" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "license": "ISC" + "node_modules/aws-sdk": { + "version": "2.1693.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1693.0.tgz", + "integrity": "sha512-cJmb8xEnVLT+R6fBS5sn/EFJiX7tUnDaPtOPZ1vFbOJtd0fnZn/Ky2XGgsvvoeliWeH7mL3TWSX5zXXGSQV6gQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "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.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } }, - "node_modules/@vocabulary/sh": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@vocabulary/sh/-/sh-1.1.5.tgz", - "integrity": "sha512-8R4uxHLpwmp6l6szZdCtfQx0wRy64OHuOsYTDfhCsbJ773Uv6nCM2bYBtjjirZHN+2m3uHQWgtWOdvuu1jwmOA==", + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "license": "MIT", - "peerDependencies": { - "@rdfjs/types": "^1.0.0" + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "node_modules/aws-sdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=0.4.x" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "license": "BSD-2-Clause" + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "license": "BSD-3-Clause" }, - "node_modules/@zazuko/env": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@zazuko/env/-/env-2.2.1.tgz", - "integrity": "sha512-GqM/461f50Px1a8Sx3tfViZkACY9gZGe3iOizF9pIeRd7Ilx+xH+VNk9rmMlKPnk600m1LixrxGuirT28zQxVQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/dataset": "^2.0.1", - "@rdfjs/formats": "^4.0.0", - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/term-set": "^2.0.1", - "@rdfjs/traverser": "^0.1.2", - "@tpluscode/rdf-ns-builders": "^4.1.0", - "@zazuko/env-core": "^1.1.2", - "@zazuko/prefixes": "^2.1.0", - "clownface": "^2.0.2", - "get-stream": "^9.0.1", - "rdf-dataset-ext": "^1.1.0" - }, - "peerDependencies": { - "@rdfjs/types": "^1.1.0", - "@types/clownface": "^2.0.0", - "@types/rdf-dataset-ext": "^1", - "@types/rdfjs__data-model": "^2.0.7", - "@types/rdfjs__dataset": "^2.0.7", - "@types/rdfjs__environment": "^1.0.0", - "@types/rdfjs__formats": "^4.0.0", - "@types/rdfjs__namespace": "^2.0.10", - "@types/rdfjs__term-map": "^2.0.9", - "@types/rdfjs__term-set": "^2.0.8", - "@types/rdfjs__traverser": "^0.1.3" - } + "node_modules/aws-sdk/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" }, - "node_modules/@zazuko/env-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@zazuko/env-core/-/env-core-1.1.2.tgz", - "integrity": "sha512-mnLG40utuT7jPBPLs6fJ0puhfagnXSj+S8t9+zUGs3YlrOq/7b2zr64Hi3p3etwDdApaQ0VgQuNIY9doaruS1Q==", - "dependencies": { - "@rdfjs/environment": "^1.0.0" - }, - "peerDependencies": { - "@types/rdfjs__environment": "^1.0.0" - } + "node_modules/aws-sdk/node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "license": "ISC" }, - "node_modules/@zazuko/env-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@zazuko/env-node/-/env-node-2.1.3.tgz", - "integrity": "sha512-vaYbkMe0DsvpWEWBQpWPJ0mEYiFhwDGw8Caso1MmASUbHY/gH2tAA6BDv4LsCK/BrU4gWftUWz6uEsRP3FmdHA==", - "license": "MIT", + "node_modules/axios": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.0.tgz", + "integrity": "sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==", "dependencies": { - "@rdfjs/fetch-lite": "^3.2.2", - "@rdfjs/formats": "^4.0.0", - "@zazuko/env": "^2.1.1", - "@zazuko/rdf-utils-fs": "^3.3.0" - }, - "peerDependencies": { - "@types/rdfjs__fetch-lite": "^3.0.6" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" } }, - "node_modules/@zazuko/prefixes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@zazuko/prefixes/-/prefixes-2.2.0.tgz", - "integrity": "sha512-mmRS+urGVMcAP5edzFq0V+B2PbbpEklP7BZGVF0+82ClczTwgpIL1tZy2mRfudwRYoAe+WkyWXDnlArPpdzLIg==", + "node_modules/balanced-match": { + "version": "1.0.2", "license": "MIT" }, - "node_modules/@zazuko/rdf-utils-fs": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@zazuko/rdf-utils-fs/-/rdf-utils-fs-3.3.1.tgz", - "integrity": "sha512-4HjTbJUwiCFanMMcaaZkLIkWUdVjXSQstAyxnfzsUOmh8Q43iVBL+mYAl17zoi47III0POL6hitRsN1JJ5tUFg==", + "node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "license": "MIT", "dependencies": { - "readable-stream": ">=3.6.0" - }, - "peerDependencies": { - "@rdfjs/types": "*", - "@types/rdfjs__environment": "0 - 1", - "@types/rdfjs__formats": "^4" + "safe-buffer": "^5.0.1" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC", - "optional": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/base58-js": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, "engines": { - "node": ">=6.5" + "node": ">= 8" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, "engines": { - "node": ">= 0.6" + "node": ">=10.0.0" } }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" + }, + "node_modules/before-after-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "dev": true, + "license": "Unlicense", "engines": { - "node": ">=0.4.0" + "node": ">=0.6" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "node_modules/bindings": { + "version": "1.5.0", "license": "MIT", "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" + "file-uri-to-path": "1.0.0" } }, - "node_modules/aegir": { - "version": "37.12.1", - "resolved": "https://registry.npmjs.org/aegir/-/aegir-37.12.1.tgz", - "integrity": "sha512-ZvINVE3tBeKkgoWw2kXYfCP728MY1N13DP+qap13opXs59SJpxPYKE4P1WJ5y3+acqVftK+1FhpJTVVJb/FhcQ==", - "license": "Apache-2.0 OR MIT", + "node_modules/blakejs": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", "dependencies": { - "@electron/get": "^2.0.0", - "@polka/send-type": "^0.5.2", - "@semantic-release/changelog": "^6.0.1", - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/git": "^10.0.1", - "@semantic-release/github": "https://registry.npmjs.org/@achingbrain/semantic-release-github/-/semantic-release-github-0.0.0.tgz", - "@semantic-release/npm": "^9.0.1", - "@semantic-release/release-notes-generator": "^10.0.3", - "@types/chai": "^4.2.16", - "@types/chai-as-promised": "^7.1.3", - "@types/chai-string": "^1.4.2", - "@types/chai-subset": "^1.3.3", - "@types/mocha": "^10.0.0", - "@types/node": "^18.11.15", - "@types/sinon": "^10.0.0", - "@typescript-eslint/eslint-plugin": "^5.18.0", - "buffer": "^6.0.3", - "bytes": "^3.1.0", - "c8": "^7.7.0", - "chai": "^4.3.4", - "chai-as-promised": "^7.1.1", - "chai-bites": "^0.1.2", - "chai-parentheses": "^0.0.2", - "chai-string": "^1.5.0", - "chai-subset": "^1.6.0", - "conventional-changelog-conventionalcommits": "^5.0.0", - "cors": "^2.8.5", - "dependency-check": "^5.0.0-2", - "detective-cjs": "^4.0.0", - "detective-es6": "^3.0.0", - "diff": "^5.1.0", - "electron-mocha-main": "^11.0.3", - "env-paths": "^3.0.0", - "esbuild": "^0.16.1", - "eslint": "^7.32.0", - "eslint-config-ipfs": "^2.1.0", - "eslint-plugin-etc": "^1.1.7", - "eslint-plugin-import": "^2.18.0", - "eslint-plugin-jsdoc": "^36.0.8", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^5.1.0", - "execa": "^6.1.0", - "extract-zip": "^2.0.1", - "fs-extra": "^11.1.0", - "gh-pages": "^4.0.0", - "globby": "^13.1.1", - "it-glob": "^1.0.1", - "kleur": "^4.1.4", - "lilconfig": "^2.0.5", - "listr": "~0.14.2", - "mdast-util-from-markdown": "^1.2.0", - "mdast-util-gfm": "^2.0.1", - "mdast-util-gfm-footnote": "^1.0.1", - "mdast-util-gfm-strikethrough": "^1.0.1", - "mdast-util-gfm-table": "^1.0.4", - "mdast-util-gfm-task-list-item": "^1.0.1", - "mdast-util-to-markdown": "^1.3.0", - "mdast-util-toc": "^6.1.0", - "merge-options": "^3.0.4", - "micromark-extension-gfm": "^2.0.1", - "micromark-extension-gfm-footnote": "^1.0.4", - "micromark-extension-gfm-strikethrough": "^1.0.4", - "micromark-extension-gfm-table": "^1.0.5", - "micromark-extension-gfm-task-list-item": "^1.0.3", - "mocha": "^10.0.0", - "npm-package-json-lint": "^6.3.0", - "nyc": "^15.1.0", - "p-map": "^5.3.0", - "p-retry": "^5.1.2", - "pascalcase": "^2.0.0", - "path": "^0.12.7", - "playwright-test": "^8.1.0", - "polka": "^0.5.2", - "premove": "^4.0.0", - "prompt": "^1.2.2", - "proper-lockfile": "^4.1.2", - "react-native-test-runner": "^5.0.0", - "read-pkg-up": "^9.1.0", - "rimraf": "^3.0.2", - "semantic-release": "^19.0.2", - "semantic-release-monorepo": "^7.0.5", - "semver": "^7.3.8", - "source-map-support": "^0.5.20", - "strip-bom": "^5.0.0", - "strip-json-comments": "^5.0.0", - "tempy": "^2.0.0", - "typedoc": "^0.23.21", - "typedoc-plugin-mdn-links": "^2.0.0", - "typedoc-plugin-missing-exports": "^1.0.0", - "typescript": "^4.6.3", - "uint8arrays": "^4.0.2", - "undici": "^5.0.0", - "update-notifier": "^6.0.2", - "wherearewe": "^2.0.1", - "yargs": "^17.1.1", - "yargs-parser": "^21.1.1" - }, - "bin": { - "aegir": "src/index.js" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/aegir/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.10.4" + "ms": "2.0.0" } }, - "node_modules/aegir/node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/bowser": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", + "license": "MIT" + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "big-integer": "^1.6.44" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 5.10.0" } }, - "node_modules/aegir/node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/aegir/node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/aegir/node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "deprecated": "Use @eslint/config-array instead", - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=10.10.0" + "node": ">=8" } }, - "node_modules/aegir/node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "deprecated": "Use @eslint/object-schema instead", - "license": "BSD-3-Clause" + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "dev": true, + "license": "ISC" }, - "node_modules/aegir/node_modules/@types/node": { - "version": "18.19.44", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.44.tgz", - "integrity": "sha512-ZsbGerYg72WMXUIE9fYxtvfzLEuq6q8mKERdWFnqTmOvudMxnz+CBNRoOwJ2kNpFOncrKjT1hZwxjlFgQ9qvQA==", + "node_modules/browserify-aes": { + "version": "1.2.0", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/aegir/node_modules/@types/sinon": { - "version": "10.0.20", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.20.tgz", - "integrity": "sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg==", + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "@types/sinonjs__fake-timers": "*" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/aegir/node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "node_modules/bs58": { + "version": "4.0.1", "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "base-x": "^3.0.2" } }, - "node_modules/aegir/node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "license": "BSD-2-Clause", - "peer": true, + "node_modules/bs58check": { + "version": "2.1.2", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/aegir/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "optional": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=10.0.0" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" } }, - "node_modules/aegir/node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "node_modules/bundle-name": { + "version": "3.0.0", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "run-applescript": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c12": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.1.tgz", + "integrity": "sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" }, "peerDependencies": { - "eslint": "*" + "magicast": "^0.3.5" }, "peerDependenciesMeta": { - "typescript": { + "magicast": { "optional": true } } }, - "node_modules/aegir/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/c12/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 14.16.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/aegir/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/c12/node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "dev": true, "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://dotenvx.com" } }, - "node_modules/aegir/node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/c12/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 14.18.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/aegir/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "license": "MIT", + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">= 10" } }, - "node_modules/aegir/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "license": "MIT", + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aegir/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "node_modules/cacache/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/aegir/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "node_modules/cacache/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "engines": { + "node": ">=8" } }, - "node_modules/aegir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/caching-transform": { + "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/aegir/node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aegir/node_modules/eslint-etc": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/eslint-etc/-/eslint-etc-4.2.6.tgz", - "integrity": "sha512-/gg8U0SgBz6OQ2QKsvhmSF1WTL53nSD5qYHx/reNPnaKAUfH6qR0AIZQ7NNCRRSICRFagqf1nO8A7WmRFwcAJQ==", - "license": "MIT", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dependencies": { - "@typescript-eslint/experimental-utils": "^4.0.0", - "tsutils": "^3.17.1", - "tsutils-etc": "^1.3.4" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0", - "typescript": "^3.0.0 || ^4.0.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/aegir/node_modules/eslint-plugin-etc": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-etc/-/eslint-plugin-etc-1.5.4.tgz", - "integrity": "sha512-FXpRHz5CGpT11pLln73JME4zHtopYKB7rlpvv5mcjEIJQJZazwswVF5WuGQxkm4cvlOpnFkfpatHICTRqTUkeA==", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { - "@phenomnomnominal/tsquery": "^4.0.0", - "@typescript-eslint/experimental-utils": "^4.0.0", - "eslint-etc": "^4.0.4", - "requireindex": "~1.2.0", - "tslib": "^2.0.0", - "tsutils": "^3.0.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^ 7.0.0", - "typescript": "^3.0.0 || ^4.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aegir/node_modules/eslint-plugin-jsdoc": { - "version": "36.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.1.tgz", - "integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@es-joy/jsdoccomment": "0.10.8", - "comment-parser": "1.2.4", - "debug": "^4.3.2", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "^1.1.1", - "lodash": "^4.17.21", - "regextras": "^0.8.0", - "semver": "^7.3.5", - "spdx-expression-parse": "^3.0.1" - }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": "^12 || ^14 || ^16" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0" + "node": ">=6" } }, - "node_modules/aegir/node_modules/eslint-plugin-promise": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", - "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", - "license": "ISC", + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.0.0" + "node": ">=6" } }, - "node_modules/aegir/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", + "node_modules/caniuse-lite": { + "version": "1.0.30001695", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", + "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "license": "Apache-2.0" + }, + "node_modules/chai": { + "version": "4.3.10", + "dev": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "assertion-error": "^1.1.0", + "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.8" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/aegir/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/aegir/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "license": "Apache-2.0", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/aegir/node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" }, - "node_modules/aegir/node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/check-error": { + "version": "1.0.3", + "dev": true, "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { - "node": ">= 4" + "node": "*" } }, - "node_modules/aegir/node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=8" + "node": ">= 8.10.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/aegir/node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "license": "BSD-2-Clause", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "is-glob": "^4.0.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 6" } }, - "node_modules/aegir/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "license": "Apache-2.0", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/aegir/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", + "node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/aegir/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.10" } }, - "node_modules/aegir/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, "license": "MIT", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, + "consola": "^3.2.3" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "devOptional": true, + "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/aegir/node_modules/globby/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aegir/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/cli-spinners": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz", + "integrity": "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==", + "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "engines": { + "node": ">=18.20" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aegir/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">= 12" } }, - "node_modules/aegir/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", "dependencies": { - "debug": "4" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=12" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", "license": "MIT", - "optional": true, "dependencies": { - "humanize-ms": "^1.2.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/clone-regexp": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "is-regexp": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", + "node_modules/clownface": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clownface/-/clownface-2.0.2.tgz", + "integrity": "sha512-HjTYqVXiCrw4FmoAWF46aQ3c2OmdVLoqZrAGkowdWWUoBBIcBht55pOxkyvoVe2BsPE/HqMzfnu51JpgqM4KEg==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/environment": "0 - 1", + "@rdfjs/namespace": "^2.0.0" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "node_modules/color": { + "version": "3.2.1", "license": "MIT", - "peerDependencies": { - "ajv": ">=5.0.0" + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, - "node_modules/amdefine": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.1.tgz", - "integrity": "sha512-cE/769sItEDt5sSdqmrWMsat+XaA5FJiEou+ZwlY7ef/Jf/517k6nYyUIRPR2o/QbpBg4FiYXj9GyRGNg5f/bg==", - "license": "BSD-3-Clause AND MIT", + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=0.4.2" + "node": ">=7.0.0" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "license": "MIT", "dependencies": { - "string-width": "^4.1.0" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" } }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "color-name": "1.1.3" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "node_modules/colorspace": { + "version": "1.1.4", "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, "license": "MIT" }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/concat-map": { + "version": "0.0.1", + "devOptional": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "8.2.2", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" }, "engines": { - "node": ">=8" + "node": "^14.13.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true, "license": "MIT" }, - "node_modules/any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/any-signal": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz", - "integrity": "sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA==", - "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", + "node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/apache-arrow": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-18.0.0.tgz", - "integrity": "sha512-gFlPaqN9osetbB83zC29AbbZqGiCuFH1vyyPseJ+B7SIbfBtESV62mMT/CkiIt77W6ykC/nTWFzTXFs0Uldg4g==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.11", - "@types/command-line-args": "^5.2.3", - "@types/command-line-usage": "^5.0.4", - "@types/node": "^20.13.0", - "command-line-args": "^5.2.1", - "command-line-usage": "^7.0.1", - "flatbuffers": "^24.3.25", - "json-bignum": "^0.0.3", - "tslib": "^2.6.2" - }, - "bin": { - "arrow2csv": "bin/arrow2csv.js" + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "node_modules/convert-hrtime": { + "version": "5.0.0", "license": "MIT", - "dependencies": { - "default-require-extensions": "^3.0.0" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "license": "ISC", - "optional": true + "node_modules/cookie-signature": { + "version": "1.0.6", + "license": "MIT" }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "node_modules/core-util-is": { + "version": "1.0.3", "license": "MIT" }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.10" } }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "hasInstallScript": true, "optional": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "buildcheck": "~0.0.6", + "nan": "^2.19.0" }, "engines": { - "node": ">= 6" + "node": ">=10.0.0" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", - "license": "MIT" - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "node_modules/cpu-features/node_modules/nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", "license": "MIT", - "engines": { - "node": ">=6" - } + "optional": true }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "license": "MIT" + "node_modules/create-hmac": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } }, - "node_modules/array-includes": { + "node_modules/cross-fetch": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node-fetch": "^2.6.12" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/d": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/array.prototype.every": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.6.tgz", - "integrity": "sha512-gNEqZD97w6bfQRNmHkFv7rNnGM+VWyHZT+h/rf9C+22owcXuENr66Lfo0phItpU5KoXW6Owb34q2+8MnSIZ57w==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0", - "is-string": "^1.0.7" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9436,38 +8976,34 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9476,234 +9012,266 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "node_modules/datastore-core": { + "version": "9.2.9", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.9.tgz", + "integrity": "sha512-wraWTPsbtdE7FFaVo3pwPuTB/zXsgwGGAm8BgBYwYAuzZCTS0MfXmd/HH1vR9s0/NFFjOVmBkGiWCvKxZ+QjVw==", + "dependencies": { + "@libp2p/logger": "^4.0.6", + "err-code": "^3.0.1", + "interface-datastore": "^8.0.0", + "interface-store": "^5.0.0", + "it-drain": "^3.0.5", + "it-filter": "^3.0.4", + "it-map": "^3.0.5", + "it-merge": "^3.0.3", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-sort": "^3.0.4", + "it-take": "^3.0.4" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "@babel/runtime": "^7.21.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.11" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/array.prototype.map": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.7.tgz", - "integrity": "sha512-XpcFfLoBEAhezrrNw1V+yLXkE7M6uR7xJEsxbG6c/V9v043qurwVJB9r9UTnoSioFDoz1i1VOydpWGmJpfVZbg==", + "node_modules/debug-fabulous": { + "version": "2.0.2", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-array-method-boxes-properly": "^1.0.0", - "es-object-atoms": "^1.0.0", - "is-string": "^1.0.7" + "debug": "^4", + "memoizee": "0.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "node_modules/debug-logfmt": { + "version": "1.2.0", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" + "@jclem/logfmt2": "~2.4.3", + "@kikobeats/time-span": "~1.0.2", + "debug-fabulous": "~2.0.2", + "pretty-ms": "~7.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 8" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/asn1js": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", - "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", - "license": "BSD-3-Clause", + "node_modules/deep-eql": { + "version": "4.1.3", + "dev": true, + "license": "MIT", "dependencies": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" + "type-detect": "^4.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=6" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/deep-extend": { + "version": "0.6.0", "license": "MIT", "engines": { - "node": "*" + "node": ">=4.0.0" } }, - "node_modules/ast-module-types": { + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", - "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", + "dev": true, "license": "MIT", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, "engines": { - "node": ">=12.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "node_modules/default-browser-id": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.0.1" + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "dev": true, "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/default-gateway": { + "version": "7.2.2", + "license": "BSD-2-Clause", "dependencies": { - "lodash": "^4.17.14" + "execa": "^7.1.1" + }, + "engines": { + "node": ">= 16" } }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dev": true, + "node_modules/default-gateway/node_modules/execa": { + "version": "7.2.0", "license": "MIT", "dependencies": { - "retry": "0.13.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", + "node_modules/default-gateway/node_modules/human-signals": { + "version": "4.3.1", + "license": "Apache-2.0", "engines": { - "node": ">= 4.0.0" + "node": ">=14.18.0" } }, - "node_modules/auto-changelog": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz", - "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==", + "node_modules/default-require-extensions": { + "version": "3.0.1", "dev": true, "license": "MIT", "dependencies": { - "commander": "^7.2.0", - "handlebars": "^4.7.7", - "node-fetch": "^2.6.1", - "parse-github-url": "^1.0.2", - "semver": "^7.3.5" - }, - "bin": { - "auto-changelog": "src/index.js" + "strip-bom": "^4.0.0" }, "engines": { - "node": ">=8.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/auto-changelog/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/default-require-extensions/node_modules/strip-bom": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9712,835 +9280,685 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-sdk": { - "version": "2.1675.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1675.0.tgz", - "integrity": "sha512-gkqNAP0m3gDpnZCKL2OLdwAG+SjYT9MURGfTkixAWHIPDYD4OQf3sCcZNBTTTeOvOXus/tJIpgafKHD9DCIOCQ==", - "hasInstallScript": true, - "license": "Apache-2.0", - "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.6.2" - }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aws-sdk/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "node_modules/define-properties": { + "version": "1.2.1", + "dev": true, "license": "MIT", "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-sdk/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true, "license": "MIT" }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "node_modules/delay": { + "version": "5.0.0", "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/babel-plugin-transform-inline-environment-variables": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-0.4.4.tgz", - "integrity": "sha512-bJILBtn5a11SmtR2j/3mBOjX4K3weC6cq+NNZ7hG22wCAqpc3qtj/iN7dSe9HDiS46lgp1nHsQgeYrea/RUe+g==", - "license": "MIT" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true, "license": "MIT" }, - "node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/base58-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-2.0.0.tgz", - "integrity": "sha512-nAV5d32QXuGcGptSApkKpC1gGakWBnfJMNjKrYTBh4tb0szfZF+ooueFLy8T4VrY+o4SrE/TyrtUnRZcwZchaA==", - "license": "MIT", + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=10.0.0" + "node": ">=0.3.1" } }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "license": "MIT" - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "license": "Apache-2.0" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" } }, - "node_modules/bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", - "license": "MIT", - "optional": true, + "node_modules/dns-over-http-resolver": { + "version": "2.1.3", + "license": "Apache-2.0 OR MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "debug": "^4.3.1", + "native-fetch": "^4.0.2", + "receptacle": "^1.3.2", + "undici": "^5.12.0" } }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "node_modules/dns-packet": { + "version": "5.6.1", "license": "MIT", "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", + "node_modules/docker-modem": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.6.tgz", + "integrity": "sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==", + "license": "Apache-2.0", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" }, "engines": { - "node": ">= 6" + "node": ">= 8.0" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", + "node_modules/dockerode": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.5.tgz", + "integrity": "sha512-ZPmKSr1k1571Mrh7oIBS/j0AqAccoecY2yH420ni5j1KyNMgnoTh4Nu4FWunh0HZIJmRSmSysJjBIpa/zyWUEA==", + "license": "Apache-2.0", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "@balena/dockerignore": "^1.0.2", + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.13", + "docker-modem": "^5.0.6", + "protobufjs": "^7.3.2", + "tar-fs": "~2.1.2", + "uuid": "^10.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 8.0" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/dockerode/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "license": "MIT", - "optional": true - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "license": "MIT" - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "license": "MIT" - }, - "node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0.0" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", + "node_modules/dotenv": { + "version": "16.3.1", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" + "node_modules/duplex-to": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/eccrypto": { + "version": "1.1.6", + "hasInstallScript": true, + "license": "CC0-1.0", + "dependencies": { + "acorn": "7.1.1", + "elliptic": "6.5.4", + "es6-promise": "4.2.8", + "nan": "2.14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "secp256k1": "3.7.1" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "node_modules/eccrypto/node_modules/acorn": { + "version": "7.1.1", "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "bin": { + "acorn": "bin/acorn" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" + "node_modules/eccrypto/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT", + "optional": true }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/eccrypto/node_modules/secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/eciesjs": { + "version": "0.4.5", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "@noble/ciphers": "^0.3.0", + "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.3.2" }, "engines": { - "node": ">=12" - }, + "node": ">=16.0.0" + } + }, + "node_modules/eciesjs/node_modules/@noble/ciphers": { + "version": "0.3.0", + "license": "MIT", "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/electron-to-chromium": { + "version": "1.5.83", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz", + "integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, "dependencies": { - "balanced-match": "^1.0.0" + "iconv-lite": "^0.6.2" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, "dependencies": { - "fill-range": "^7.1.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "license": "ISC" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/end-of-stream": { + "version": "1.4.4", "license": "MIT", "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "once": "^1.4.0" } }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/err-code": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, - "bin": { - "browserslist": "cli.js" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">= 0.4" } }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" + "engines": { + "node": ">= 0.4" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, "license": "MIT", "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "license": "MIT", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { - "node": "*" + "node": ">= 0.4" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "license": "MIT" - }, - "node_modules/buffer/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { - "run-applescript": "^7.0.0" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/c8": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", - "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/c8/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/c8/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/c8/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/c8/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } + "node_modules/es6-error": { + "version": "4.1.1", + "dev": true, + "license": "MIT" }, - "node_modules/c8/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/es6-iterator": { + "version": "2.0.3", "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/c8/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" - } + "node_modules/es6-promise": { + "version": "4.2.8", + "license": "MIT" }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "node_modules/es6-symbol": { + "version": "3.1.3", "license": "ISC", - "optional": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "optional": true, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "node_modules/cacache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": "*" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/cacache/node_modules/p-map": { + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { "node": ">=10" }, @@ -10548,1807 +9966,1696 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "license": "MIT", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=8" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "node_modules/eslint": { + "version": "8.52.0", + "dev": true, "license": "MIT", "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.52.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", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/eslint-config-oceanprotocol": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-oceanprotocol/-/eslint-config-oceanprotocol-2.0.4.tgz", + "integrity": "sha512-VdCtlvjTHzlhErmy8BYCGj3r4/iSJDxseeQTISe5DSyrWaPJpMv728KxBvu+WsCWfuI2WzErAX1HDE/HjmcI6w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "eslint": "^8.23.1", + "eslint-config-prettier": "^8.5.0", + "eslint-config-standard": "^17.0.0", + "eslint-config-standard-react": "^11.0.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.3.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-react": "^7.31.8", + "eslint-plugin-security": "^1.5.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/eslint-config-oceanprotocol/node_modules/eslint-config-prettier": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", + "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node_modules/eslint-config-oceanprotocol/node_modules/eslint-plugin-prettier": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", + "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", + "dev": true, "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/camelcase-keys/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "consulting", + "url": "https://feross.org/support" } ], - "license": "CC-BY-4.0" - }, - "node_modules/canonicalize": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", - "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", - "license": "Apache-2.0" - }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", "license": "MIT", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" + "engines": { + "node": ">=12.0.0" }, - "bin": { - "cdl": "bin/cdl.js" + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "node_modules/eslint-config-standard-react": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-11.0.1.tgz", + "integrity": "sha512-4WlBynOqBZJRaX81CBcIGDHqUiqxvw4j/DbEIICz8QkMs3xEncoPgAoysiqCSsg71X92uhaBc8sgqB96smaMmg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-react": "^7.21.5" } }, - "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "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.1.0" - }, - "engines": { - "node": ">=4" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "license": "WTFPL", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" + "ms": "^2.1.1" } }, - "node_modules/chai-bites": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/chai-bites/-/chai-bites-0.1.2.tgz", - "integrity": "sha512-eZVKGTywFkRuMle/UkiT9OXU4y4WeNy0yKe2t5iclIW3Yn9X3l7iWZoSeTjTpeQ1SIMn3In0rctjVCaRuKCmng==", - "license": "Apache-2.0", + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, "engines": { - "node": ">=10" + "node": ">=4" }, - "peerDependencies": { - "chai": ">=2 <5" - } - }, - "node_modules/chai-parentheses": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/chai-parentheses/-/chai-parentheses-0.0.2.tgz", - "integrity": "sha512-pdBOsH31vzWKYHr8JYTlsP+TFx7RTTm/2hQYbpxFd1WQ/X58ryrLBINRL2C1OWje8bi42NQqNZl2RooFPrsBqA==", - "license": "MIT" - }, - "node_modules/chai-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz", - "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==", - "license": "MIT", - "peerDependencies": { - "chai": "^4.1.2" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/chai-subset": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/chai-subset/-/chai-subset-1.6.0.tgz", - "integrity": "sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8.10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">=4" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, - "license": "MIT" - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "license": "MIT", "dependencies": { - "get-func-name": "^2.0.2" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": "*" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "ms": "^2.1.1" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "is-glob": "^4.0.1" + "esutils": "^2.0.2" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT" - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, "engines": { - "node": ">=10" + "node": ">=12.22.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^2.0.0" + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" }, "engines": { - "node": ">=4" + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8.10.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "node_modules/eslint-plugin-node/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "license": "MIT", "dependencies": { - "string-width": "^4.2.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": "10.* || >= 12.*" + "node": ">=6" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", + "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" }, "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==", - "license": "MIT", - "dependencies": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" + "node": "^14.18.0 || >=16.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", "dev": true, "license": "ISC", "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "esutils": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "license": "MIT", - "engines": { - "node": ">=0.8" + "node_modules/eslint-plugin-security": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz", + "integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-regex": "^2.1.1" } }, - "node_modules/clone-regexp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz", - "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==", - "license": "MIT", + "node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "is-regexp": "^3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, "license": "MIT", "dependencies": { - "mimic-response": "^1.0.0" + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clownface": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clownface/-/clownface-2.0.2.tgz", - "integrity": "sha512-HjTYqVXiCrw4FmoAWF46aQ3c2OmdVLoqZrAGkowdWWUoBBIcBht55pOxkyvoVe2BsPE/HqMzfnu51JpgqM4KEg==", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/environment": "0 - 1", - "@rdfjs/namespace": "^2.0.0" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "license": "MIT", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/color-convert": { + "node_modules/esniff": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" + "node_modules/esniff/node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "license": "ISC", - "optional": true, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", "bin": { - "color-support": "bin.js" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "license": "MIT", + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "license": "MIT", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" + "node": ">=4" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", + "node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "delayed-stream": "~1.0.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10" } }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "license": "MIT", + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=4.0" } }, - "node_modules/command-line-usage": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^4.1.0", - "typical": "^7.1.1" - }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=12.20.0" + "node": ">=4.0" } }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "license": "MIT", + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=12.17" + "node": ">=0.10.0" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", - "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", + "node_modules/eta": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-4.0.1.tgz", + "integrity": "sha512-0h0oBEsF6qAJU7eu9ztvJoTo8D2PAq/4FvXVIQA1fek3WOTe6KPsVJycekG1+g1N6mfpblkheoGwaUhMtnlH4A==", + "dev": true, "license": "MIT", "engines": { - "node": ">=12.17" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/bgub/eta?sponsor=1" } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/comment-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", - "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">= 0.6" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "license": "MIT" - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "node_modules/eth-crypto": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eth-crypto/-/eth-crypto-2.8.0.tgz", + "integrity": "sha512-QtVmfLZK+N0k4+RA65ORbVCBM2ndzPM0Q/VFhkYYrGY16+4OAwuxG+eyFlWyDO3HBFMlPnMLa69OZCKOoQkcdQ==", "license": "MIT", "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" + "@babel/runtime": "7.27.0", + "@ethereumjs/tx": "3.5.2", + "@types/bn.js": "5.1.6", + "eccrypto": "1.1.6", + "ethereumjs-util": "7.1.5", + "ethers": "5.8.0", + "secp256k1": "5.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/pubkey" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/eth-crypto/node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/eth-crypto/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", "license": "MIT" }, - "node_modules/concurrently": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", - "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", - "dev": true, + "node_modules/eth-crypto/node_modules/secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" }, "engines": { - "node": "^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/ethereum-cryptography": { + "version": "0.1.3", "license": "MIT", "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } + "node_modules/ethereum-cryptography/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" }, - "node_modules/configstore/node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "node_modules/ethereum-cryptography/node_modules/secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/configstore/node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC", - "optional": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "license": "MPL-2.0", "dependencies": { - "safe-buffer": "5.2.1" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, "engines": { - "node": ">= 0.6" + "node": ">=10.0.0" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { + "node_modules/ethereumjs-util/node_modules/bn.js": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "license": "MIT" + }, + "node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT" - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", - "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", - "license": "ISC", "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" } }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "license": "MIT", "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=10" + "undici-types": "~6.19.2" } }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "license": "MIT", - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "license": "MIT", - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "node": ">=10.0.0" }, - "bin": { - "conventional-commits-parser": "cli.js" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/convert-hrtime": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", - "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", + "node_modules/event-emitter": { + "version": "0.3.5", "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "node_modules/event-iterator": { + "version": "2.0.0", "license": "MIT" }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "node_modules/event-target-shim": { + "version": "5.0.1", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "node_modules/eventemitter3": { + "version": "5.0.1", "license": "MIT" }, - "node_modules/core-js-compat": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", - "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", + "node_modules/events": { + "version": "3.3.0", "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": ">=0.8.x" } }, - "node_modules/core-util-is": { + "node_modules/evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=14" + "node": ">=16.17" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/cp-file": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", - "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", + "node_modules/execa/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cp-file/node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "license": "MIT", - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cp-file/node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/cpy": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-9.0.1.tgz", - "integrity": "sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==", + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "license": "MIT", "dependencies": { - "arrify": "^3.0.0", - "cp-file": "^9.1.0", - "globby": "^13.1.1", - "junk": "^4.0.0", - "micromatch": "^4.0.4", - "nested-error-stacks": "^2.1.0", - "p-filter": "^3.0.0", - "p-map": "^5.3.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": "^12.20.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.10.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/cpy/node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/cpy/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/express/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "side-channel": "^1.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cpy/node_modules/p-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", - "license": "MIT", + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ext": { + "version": "1.7.0", + "license": "ISC", "dependencies": { - "p-map": "^5.1.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "^2.7.2" } }, - "node_modules/cpy/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "license": "ISC" + }, + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.6.0" } }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" }, "engines": { - "node": ">=0.8" + "node": ">= 6" } }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "license": "MIT", "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "license": "MIT", + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "reusify": "^1.0.4" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "node_modules/fecha": { + "version": "4.2.3", "license": "MIT" }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/fetch-blob": { + "version": "3.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">= 8" + "node": "^12.20 || >= 14.13" } }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^1.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/file-stream-rotator": { + "version": "0.6.1", + "license": "MIT", + "dependencies": { + "moment": "^2.29.1" } }, - "node_modules/cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", - "engines": { - "node": ">=0.4.0" - } + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "license": "ISC", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.12" + "node": ">=8" } }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", - "dev": true, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">= 14" + "node": ">= 0.8" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "2.0.0" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/datastore-core": { - "version": "9.2.9", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.9.tgz", - "integrity": "sha512-wraWTPsbtdE7FFaVo3pwPuTB/zXsgwGGAm8BgBYwYAuzZCTS0MfXmd/HH1vR9s0/NFFjOVmBkGiWCvKxZ+QjVw==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "@libp2p/logger": "^4.0.6", - "err-code": "^3.0.1", - "interface-datastore": "^8.0.0", - "interface-store": "^5.0.0", - "it-drain": "^3.0.5", - "it-filter": "^3.0.4", - "it-map": "^3.0.5", - "it-merge": "^3.0.3", - "it-pipe": "^3.0.1", - "it-pushable": "^3.2.3", - "it-sort": "^3.0.4", - "it-take": "^3.0.4" + "node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/datastore-core/node_modules/interface-store": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.8.tgz", - "integrity": "sha512-7na81Uxkl0vqk0CBPO5PvyTkdaJBaezwUJGsMOz7riPOq0rJt+7W31iaopaMICWea/iykUsvNlPx/Tc+MxC3/w==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/flat-cache": { + "version": "3.1.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "node": ">=12.0.0" } }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "license": "MIT", - "engines": { - "node": "*" - } + "node_modules/flatted": { + "version": "3.2.9", + "dev": true, + "license": "ISC" }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "node_modules/fn.name": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, "engines": { - "node": ">=6.0" + "node": ">=4.0" }, "peerDependenciesMeta": { - "supports-color": { + "debug": { "optional": true } } }, - "node_modules/debug-fabulous": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-2.0.2.tgz", - "integrity": "sha512-XfAbX8/owqC+pjIg0/+3V1gp8TugJT7StX/TE1TYedjrRf7h7SgUAL/+gKoAQGPCLbSU5L5LPvDg4/cGn1E/WA==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { - "debug": "^4", - "memoizee": "0.4" + "is-callable": "^1.2.7" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/debug-logfmt": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/debug-logfmt/-/debug-logfmt-1.2.2.tgz", - "integrity": "sha512-MAPU+m9lzLMkxI8k6/kJ/MGLGNtHOsW8RHriLkRxe/jFFW2iXmiGGUG9aYTRIWo5ejOFqLB10HqZ6+TN4toQFQ==", - "license": "MIT", + "node_modules/foreground-child": { + "version": "2.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "@jclem/logfmt2": "~2.4.3", - "@kikobeats/time-span": "~1.0.2", - "debug-fabulous": "~2.0.2", - "pretty-ms": "~7.0.1" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">= 8" + "node": ">=8.0.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "license": "MIT", + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "node_modules/formdata-polyfill": { + "version": "4.0.10", "license": "MIT", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "fetch-blob": "^3.1.2" }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.20.0" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/forwarded": { + "version": "0.2.0", "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">= 0.6" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, + "node_modules/freeport-promise": { + "version": "2.0.0", + "license": "Apache-2.0 OR MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "license": "MIT", + "node_modules/fromentries": { + "version": "1.3.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { - "type-detect": "^4.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/fs.realpath": { + "version": "1.0.0", + "devOptional": true, + "license": "ISC" }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4.0.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/function-bind": { + "version": "1.1.2", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dev": true, + "node_modules/function-timeout": { + "version": "0.1.1", "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, "engines": { - "node": ">=18" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-gateway": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-7.2.2.tgz", - "integrity": "sha512-AD7TrdNNPXRZIGw63dw+lnGmT4v7ggZC5NHNJgAYWm5njrwoze1q5JSAW9YuLy2tjnoLUG/r8FEB93MCh9QJPg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^7.1.1" - }, - "engines": { - "node": ">= 16" + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-gateway/node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "license": "MIT", + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "optional": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/default-gateway/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "license": "Apache-2.0", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.18.0" + "node": ">=6.9.0" } }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "license": "MIT", + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/default-require-extensions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, "license": "MIT", - "dependencies": { - "strip-bom": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-require-extensions/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/get-func-name": { + "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "license": "MIT", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dependencies": { - "clone": "^1.0.2" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defer-to-connect": { + "node_modules/get-iterator": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, + "node_modules/get-stream": { + "version": "6.0.1", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -12357,1128 +11664,939 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, "license": "MIT", "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "node_modules/get-uri/node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/del/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "giget": "dist/cli.mjs" } }, - "node_modules/delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "node_modules/git-up": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^9.2.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/git-url-parse": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT", - "optional": true - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10" + "dependencies": { + "git-up": "^8.1.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, - "node_modules/dependency-check": { - "version": "5.0.0-7", - "resolved": "https://registry.npmjs.org/dependency-check/-/dependency-check-5.0.0-7.tgz", - "integrity": "sha512-OZhz4TDlDUYiEnP1/3Q7hFlA2ViUCXNV7h9D7MrApSfmZj27MNZFdmBfYCQ1hldheILriZ+pbg/QW8wIlV1ahg==", - "deprecated": "dependency-check has been deprecated in favor of the knip module", - "license": "BSD-3-Clause", + "node_modules/glob": { + "version": "7.2.0", + "devOptional": true, + "license": "ISC", "dependencies": { - "debug": "^4.3.1", - "globby": "^12.0.2", - "is-relative": "^1.0.0", - "meow": "^10.1.3", - "picomatch": "^2.3.1", - "pkg-up": "^4.0.0", - "pony-cause": "^2.0.0", - "precinct": "^8.2.0", - "read-pkg": "^7.0.0", - "resolve": "^1.19.0" - }, - "bin": { - "dependency-check": "cli.cjs" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - } - }, - "node_modules/dependency-check/node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "license": "MIT", - "engines": { - "node": ">=12" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dependency-check/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/dependency-check/node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "node_modules/globals": { + "version": "13.23.0", + "dev": true, "license": "MIT", "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dependency-check/node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dependency-check/node_modules/globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", + "node_modules/globby": { + "version": "11.1.0", + "dev": true, "license": "MIT", "dependencies": { - "array-union": "^3.0.1", + "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", "merge2": "^1.4.1", - "slash": "^4.0.0" + "slash": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dependency-check/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "license": "MIT", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dependency-check/node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "devOptional": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=0.4.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/dependency-check/node_modules/read-pkg": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - }, "engines": { - "node": ">=12.20" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dependency-check/node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/dependency-check/node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dependency-check/node_modules/read-pkg/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dependency-check/node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, "license": "MIT", "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" + "dunder-proto": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dependency-check/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dependency-check/node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "license": "MIT", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "min-indent": "^1.0.1" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dependency-check/node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true }, - "node_modules/dependency-check/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dependency-check/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "license": "ISC" + "node_modules/hash-base/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/hash-base/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT", - "optional": true + "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, - "node_modules/detective-amd": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.2.tgz", - "integrity": "sha512-jffU26dyqJ37JHR/o44La6CxtrDf3Rt9tvd2IbImJYxWKTMdBjctp37qoZ6ZcY80RHg+kzWz4bXn39e4P7cctQ==", + "node_modules/hash-base/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { - "ast-module-types": "^3.0.0", - "escodegen": "^2.0.0", - "get-amd-module-type": "^3.0.0", - "node-source-walk": "^4.2.0" - }, - "bin": { - "detective-amd": "bin/cli.js" - }, - "engines": { - "node": ">=6.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/detective-amd/node_modules/ast-module-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", - "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } + "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, - "node_modules/detective-amd/node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", + "node_modules/hash.js": { + "version": "1.1.7", "license": "MIT", "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=6.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/detective-cjs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-4.1.0.tgz", - "integrity": "sha512-QxzMwt5MfPLwS7mG30zvnmOvHLx5vyVvjsAV6gQOyuMoBR5G1DhS1eJZ4P10AlH+HSnk93mTcrg3l39+24XCtg==", + "node_modules/hasha": { + "version": "5.2.2", + "dev": true, "license": "MIT", "dependencies": { - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detective-es6": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-3.0.1.tgz", - "integrity": "sha512-evPeYIEdK1jK3Oji5p0hX4sPV/1vK+o4ihcWZkMQE6voypSW/cIBiynOLxQk5KOOQbdP8oOAsYqouMTYO5l1sw==", + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "node-source-walk": "^5.0.0" - }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detective-less": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", - "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", - "license": "MIT", - "dependencies": { - "debug": "^4.0.0", - "gonzales-pe": "^4.2.3", - "node-source-walk": "^4.0.0" - }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 6.0" + "node": ">=8" } }, - "node_modules/detective-less/node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", - "license": "MIT", + "node_modules/hashlru": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { - "@babel/parser": "^7.0.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" } }, - "node_modules/detective-postcss": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", - "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.1", - "is-url": "^1.2.4", - "postcss": "^8.1.7", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" } }, - "node_modules/detective-sass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.2.tgz", - "integrity": "sha512-DNVYbaSlmti/eztFGSfBw4nZvwsTaVXEQ4NsT/uFckxhJrNRFUh24d76KzoCC3aarvpZP9m8sC2L1XbLej4F7g==", + "node_modules/hmac-drbg": { + "version": "1.0.1", "license": "MIT", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">=6.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/detective-sass/node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", "license": "MIT", - "dependencies": { - "@babel/parser": "^7.0.0" - }, "engines": { - "node": ">=6.0" + "node": ">=14" } }, - "node_modules/detective-scss": { + "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.2.tgz", - "integrity": "sha512-hDWnWh/l0tht/7JQltumpVea/inmkBaanJUcXRB9kEEXVwVUMuZd6z7eusQ6GcBFrfifu3pX/XPyD7StjbAiBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^4.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=6.0" + "node": ">= 0.8" } }, - "node_modules/detective-scss/node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", + "node_modules/http-link-header": { + "version": "1.1.1", "license": "MIT", - "dependencies": { - "@babel/parser": "^7.0.0" - }, "engines": { - "node": ">=6.0" + "node": ">=6.0.0" } }, - "node_modules/detective-stylus": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.3.tgz", - "integrity": "sha512-4/bfIU5kqjwugymoxLXXLltzQNeQfxGoLm2eIaqtnkWxqbhap9puDVpJPVDx96hnptdERzS5Cy6p9N8/08A69Q==", - "license": "MIT" - }, - "node_modules/detective-typescript": { + "node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.2.tgz", - "integrity": "sha512-unqovnhxzvkCz3m1/W4QW4qGsvXCU06aU2BAm8tkza+xLnp9SOFnob2QsTxUv5PdnQKfDvWcv9YeOeFckWejwA==", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "^4.33.0", - "ast-module-types": "^2.7.1", - "node-source-walk": "^4.2.0", - "typescript": "^3.9.10" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": "^10.13 || >=12.0.0" + "node": ">= 14" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, "license": "MIT", "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 14" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", "license": "MIT", + "optional": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 6" } }, - "node_modules/detective-typescript/node_modules/ast-module-types": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", - "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==", - "license": "MIT" - }, - "node_modules/detective-typescript/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=16.17.0" } }, - "node_modules/detective-typescript/node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", - "license": "MIT", + "node_modules/humanhash": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/humanhash/-/humanhash-1.0.4.tgz", + "integrity": "sha512-fxOhEl/Ezv7PobYOTomDmQKWaSC0hk0mzl5et5McPtr+6LRBP7LYoeFLPjKW6xOSGmMNLj50BufrrgX+M5EvEA==", + "license": "Unlicense", "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=6.0" + "uuid": "^3.3.2" } }, - "node_modules/detective-typescript/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "license": "Apache-2.0", + "node_modules/humanhash/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "uuid": "bin/uuid" } }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/hyperdiff": { + "version": "2.0.18", "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "debug-logfmt": "~1.2.0", + "lodash": "~4.17.21" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/dns-over-http-resolver": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-2.1.3.tgz", - "integrity": "sha512-zjRYFhq+CsxPAouQWzOsxNMvEN+SHisjzhX8EMxd2Y0EG3thvn6wXQgMJLnTDImkhe4jhLbOQpXtL10nALBOSA==", - "license": "Apache-2.0 OR MIT", + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", "dependencies": { - "debug": "^4.3.1", - "native-fetch": "^4.0.2", - "receptacle": "^1.3.2", - "undici": "^5.12.0" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 4" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dotignore": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "devOptional": true, "license": "MIT", - "dependencies": { - "minimatch": "^3.0.4" - }, - "bin": { - "ignored": "bin/ignored" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/dotignore/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/indent-string": { + "version": "4.0.0", + "devOptional": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/dotignore/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "devOptional": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==", + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "12.9.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.9.6.tgz", + "integrity": "sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/prompts": "^7.8.6", + "@inquirer/type": "^3.0.8", + "mute-stream": "^2.0.0", + "run-async": "^4.0.5", + "rxjs": "^7.8.2" }, "engines": { - "node": ">=0.10" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/duplex-to": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/duplex-to/-/duplex-to-2.0.0.tgz", - "integrity": "sha512-f2nMnk11mwDptEFBTv2mcWHpF4ENAbuQ63yTiSy/99rG4Exsxsf0GJhJYq/AHF2cdMYswSx23LPuoijBflpquQ==", - "license": "MIT" - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "license": "BSD-3-Clause", + "node_modules/interface-datastore": { + "version": "8.2.11", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.11.tgz", + "integrity": "sha512-9E0iXehfp/j0UbZ2mvlYB4K9pP7uQBCppfuy8WHs1EHF6wLQrM9+zwyX+8Qt6HnH4GKZRyXX/CNXm6oD4+QYgA==", "dependencies": { - "readable-stream": "^2.0.2" + "interface-store": "^5.0.0", + "uint8arrays": "^5.0.2" } }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" + "node_modules/interface-datastore/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", + "node_modules/interface-datastore/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "multiformats": "^13.0.0" } }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/interface-store": { + "version": "5.1.4", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/eccrypto": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.6.tgz", - "integrity": "sha512-d78ivVEzu7Tn0ZphUUaL43+jVPKTMPFGtmgtz1D0LrFn7cY3K8CdrvibuLz2AAkHBLKZtR8DMbB2ukRYFk987A==", - "hasInstallScript": true, - "license": "CC0-1.0", + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "devOptional": true, "dependencies": { - "acorn": "7.1.1", - "elliptic": "6.5.4", - "es6-promise": "4.2.8", - "nan": "2.14.0" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, - "optionalDependencies": { - "secp256k1": "3.7.1" + "engines": { + "node": ">= 12" } }, - "node_modules/eccrypto/node_modules/acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "node_modules/ip-regex": { + "version": "5.0.0", "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">= 10" } }, - "node_modules/eccrypto/node_modules/secp256k1": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", - "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", - "hasInstallScript": true, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "license": "MIT", - "optional": true, "dependencies": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.4.1", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=4.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eciesjs": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.7.tgz", - "integrity": "sha512-4JQahOkBdDy27jjW4q3FJQigHlcwZXx28sCtBQkBamF2XUdcNXrInpgrr8h205MtVIS0CMHufyIKGVjtjxQ2ZA==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, "license": "MIT", "dependencies": { - "@noble/ciphers": "^0.5.3", - "@noble/curves": "^1.4.0", - "@noble/hashes": "^1.4.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eciesjs/node_modules/@noble/ciphers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", - "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-mocha-main": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/electron-mocha-main/-/electron-mocha-main-11.0.3.tgz", - "integrity": "sha512-F9tfE9cvTpyXYGH/8g2ZtrhNjZdF2amnM9u7CIJ59Lcs0uHjlaVFrlIKNegS05ZwkajPAWkiB2KkpHco8GhD9g==", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1", - "electron-window": "^0.8.0", - "fs-extra": "^10.0.0", - "mocha": "^9.1.1", - "wherearewe": "^1.0.0", - "which": "^2.0.2", - "yargs": "^16.2.0" - }, - "bin": { - "electron-mocha": "bin/electron-mocha" + "has-bigints": "^1.0.2" }, "engines": { - "node": ">= 7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/electron-mocha-main/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/electron-mocha-main/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "hasown": "^2.0.2" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "license": "BSD-3-Clause", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, "engines": { - "node": ">=0.3.1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": "*" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-mocha-main/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, + "node_modules/is-electron": { + "version": "2.2.2", + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/electron-mocha-main/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "call-bound": "^1.0.3" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", @@ -13487,1914 +12605,1563 @@ "node": ">=8" } }, - "node_modules/electron-mocha-main/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron-mocha-main/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "license": "ISC", + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/electron-mocha-main/node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "license": "MIT", - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "node_modules/is-inside-container": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" }, "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "is-inside-container": "cli.js" }, "engines": { - "node": ">= 12.0.0" + "node": ">=14.16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-mocha-main/node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/electron-mocha-main/node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "dev": true, "license": "MIT", "bin": { - "nanoid": "bin/nanoid.cjs" + "is-docker": "cli.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/electron-mocha-main/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/electron-mocha-main/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-mocha-main/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-mocha-main/node_modules/wherearewe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-1.0.2.tgz", - "integrity": "sha512-HyLZ7n1Yox+w1qWaFEgP/sMs5D7ka2UXmoVNaY0XzbEHLGljo4ScBchYm6cWRYNO33tmFX3Mgg4BiZkDOjihyw==", - "license": "Apache-2.0 OR MIT", + "node_modules/is-ip": { + "version": "5.0.1", + "license": "MIT", "dependencies": { - "is-electron": "^2.2.0" + "ip-regex": "^5.0.0", + "super-regex": "^0.2.0" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-mocha-main/node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "license": "Apache-2.0" + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true }, - "node_modules/electron-mocha-main/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/is-loopback-addr": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-mocha-main/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "license": "ISC", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.12.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.7.tgz", - "integrity": "sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw==", - "license": "ISC" - }, - "node_modules/electron-window": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/electron-window/-/electron-window-0.8.1.tgz", - "integrity": "sha512-W1i9LfnZJozk3MXE8VgsL2E5wOUHSgyCvcg1H2vQQjj+gqhO9lVudgY3z3SF7LJAmi+0vy3CJkbMqsynWB49EA==", + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, "license": "MIT", "dependencies": { - "is-electron-renderer": "^2.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/is-plain-obj": { + "version": "2.1.0", "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/is-promise": { + "version": "2.2.2", "license": "MIT" }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT" + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/is-regexp": { + "version": "3.1.0", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/is-ssh": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", + "dev": true, "license": "MIT", "dependencies": { - "once": "^1.4.0" + "protocols": "^2.0.1" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "node_modules/is-stream": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8.6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/env-ci": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", - "integrity": "sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "fromentries": "^1.3.2", - "java-properties": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10.17" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-ci/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-ci/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-ci/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/env-ci/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/env-ci/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-ci/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-ci/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-ci/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/is-windows": { + "version": "1.0.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "is-docker": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "license": "MIT", + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "append-transform": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/es-aggregate-error": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.13.tgz", - "integrity": "sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==", - "license": "MIT", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "set-function-name": "^2.0.2" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "dev": true, + "license": "ISC", "dependencies": { - "get-intrinsic": "^1.2.4" + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "license": "MIT", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "semver": "^7.5.3" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" + "node": ">=8" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "license": "MIT", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, - "license": "ISC", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=8" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "license": "MIT" + "node_modules/it-all": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.6.tgz", + "integrity": "sha512-HXZWbxCgQZJfrv5rXvaVeaayXED8nTKx9tj9fpBhmcUJcedVZshMMMqTj0RG2+scGypb9Ut1zd1ifbf3lA8L+Q==" }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "license": "MIT", + "node_modules/it-byte-stream": { + "version": "1.0.1", + "license": "Apache-2.0 OR MIT", "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.4.1" } }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "license": "MIT" + "node_modules/it-drain": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.7.tgz", + "integrity": "sha512-vy6S1JKjjHSIFHgBpLpD1zhkCRl3z1zYWUxE14+kAYf+BL9ssWSFImJfhl361IIcwr0ofw8etzg11VqqB+ntUA==" }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "license": "ISC", + "node_modules/it-filter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.1.1.tgz", + "integrity": "sha512-TOXmVuaSkxlLp2hXKoMTra0WMZMKVFxE3vSsbIA+PbADNCBAHhjJ/lM31vBOUTddHMO34Ku++vU8T9PLlBxQtg==", "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" + "it-peekable": "^3.0.0" } }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "license": "ISC", + "node_modules/it-first": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.6.tgz", + "integrity": "sha512-ExIewyK9kXKNAplg2GMeWfgjUcfC1FnUXz/RPfAvIXby+w7U4b3//5Lic0NV03gXT8O/isj5Nmp6KiY0d45pIQ==" + }, + "node_modules/it-foreach": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.1.tgz", + "integrity": "sha512-ID4Gxnavk/LVQLQESAQ9hR6dR63Ih6X+8VdxEktX8rpz2dCGAbZpey/eljTNbMfV2UKXHiu6UsneoNBZuac97g==", "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "it-peekable": "^3.0.0" } }, - "node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "node_modules/it-length": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-length/-/it-length-3.0.6.tgz", + "integrity": "sha512-R7bxHAzpRzYz7vghc2DDH7x4KXvEkeLfN/h316++jzbkEHIRXbEPLbE20p5yrqqBdOeK6/FRUDuHlTJ0H1hysw==" + }, + "node_modules/it-length-prefixed": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.0.4.tgz", + "integrity": "sha512-lz28fykbG0jq7s5XtvlzGxO5BeSOw6ikymkRllxjL21V5VKLcvB4pHr9wPvEnsAJ2et1xpOk3BRTMq9XrhgKsg==", + "dependencies": { + "err-code": "^3.0.1", + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/it-length-prefixed-stream": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.1.8.tgz", + "integrity": "sha512-nchxgDiGS5R5UKwrvTznrLRUOh9oo9GCDkddc8OI/AVkkiLhuh1+pcTSZ15DBl6GwdB7lBD1edUixTzJ78jfUw==", + "dependencies": { + "it-byte-stream": "^1.0.0", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8" } }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/it-length-prefixed/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "node_modules/it-length-prefixed/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "dependencies": { + "multiformats": "^13.0.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "node_modules/it-map": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.1.tgz", + "integrity": "sha512-9bCSwKD1yN1wCOgJ9UOl+46NQtdatosPWzxxUk2NdTLwRPXLh+L7iwCC9QKsbgM60RQxT/nH8bKMqm3H/o8IHQ==", + "dependencies": { + "it-peekable": "^3.0.0" + } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/it-merge": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.5.tgz", + "integrity": "sha512-2l7+mPf85pyRF5pqi0dKcA54E5Jm/2FyY5GsOaN51Ta0ipC7YZ3szuAsH8wOoB6eKY4XsU4k2X+mzPmFBMayEA==", + "dependencies": { + "it-pushable": "^3.2.3" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "license": "BSD-2-Clause", + "node_modules/it-pair": { + "version": "2.0.6", + "license": "Apache-2.0 OR MIT", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0" }, "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "license": "MIT", + "node_modules/it-parallel": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.8.tgz", + "integrity": "sha512-URLhs6eG4Hdr4OdvgBBPDzOjBeSSmI+Kqex2rv/aAyYClME26RYHirLVhZsZP5M+ZP6M34iRlXk8Wlqtezuqpg==", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@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", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "p-defer": "^4.0.1" + } + }, + "node_modules/it-peekable": { + "version": "3.0.2", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-pipe": { + "version": "3.0.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-merge": "^3.0.0", + "it-pushable": "^3.1.2", + "it-stream-types": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/eslint-config-ipfs": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-ipfs/-/eslint-config-ipfs-2.2.1.tgz", - "integrity": "sha512-47yZHjrcLC34OKfPlxzdTAkBNHBnPIIi2RYII6Q9H7YPi0nakpXJQvOBCUAi3xRcrtnVFXDdSxnofbyPOck6hg==", - "license": "(Apache-2.0 AND MIT)", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^4.1.0", - "@typescript-eslint/parser": "^4.1.0", - "eslint-config-standard": "^16.0.2", - "eslint-config-standard-with-typescript": "^21.0.1", - "eslint-plugin-etc": "^1.1.7", - "eslint-plugin-import": "^2.18.0", - "eslint-plugin-jsdoc": "^36.0.8", - "eslint-plugin-no-only-tests": "^2.4.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^5.1.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node_modules/it-protobuf-stream": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/it-protobuf-stream/-/it-protobuf-stream-1.1.4.tgz", + "integrity": "sha512-HEO7PqNYRnFsN4qxxXWD0aQV3ibsYBaB/nPucBXgZcnD3csPltigU4C+j2U/ahhOwB/AfXdHv4WCd/IIzeSIpg==", + "dependencies": { + "it-length-prefixed-stream": "^1.0.0", + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.4.8" } }, - "node_modules/eslint-config-ipfs/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "license": "MIT", - "peer": true, + "node_modules/it-pushable": { + "version": "3.2.3", + "license": "Apache-2.0 OR MIT", "dependencies": { - "@babel/highlight": "^7.10.4" + "p-defer": "^4.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "license": "MIT", - "peer": true, + "node_modules/it-reader": { + "version": "6.0.4", + "license": "Apache-2.0 OR MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" + "node_modules/it-sort": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.6.tgz", + "integrity": "sha512-aNrlZAXB8vWBd42tCpaXGL6CJVJNDW3OLczmdt6g0k/s9Z6evkTdgU2LjwW5SNNeX41sF+C8MjV+OcVf93PsPw==", + "dependencies": { + "it-all": "^3.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "deprecated": "Use @eslint/config-array instead", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, + "node_modules/it-stream-types": { + "version": "2.0.1", + "license": "Apache-2.0 OR MIT", "engines": { - "node": ">=10.10.0" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "deprecated": "Use @eslint/object-schema instead", - "license": "BSD-3-Clause", - "peer": true + "node_modules/it-take": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.6.tgz", + "integrity": "sha512-uqw3MRzf9to1SOLxaureGa73lK8k8ZB/asOApTAkvrzUqCznGtKNgPFH7uYIWlt4UuWq/hU6I+U4Fm5xpjN8Vg==" }, - "node_modules/eslint-config-ipfs/node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "license": "MIT", + "node_modules/it-ws": { + "version": "6.1.1", + "license": "Apache-2.0 OR MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "@types/ws": "^8.2.2", + "event-iterator": "^2.0.0", + "it-stream-types": "^2.0.1", + "uint8arrays": "^5.0.0", + "ws": "^8.4.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "license": "BSD-2-Clause", + "node_modules/it-ws/node_modules/uint8arrays": { + "version": "5.0.0", + "license": "Apache-2.0 OR MIT", "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "multiformats": "^12.0.1" } }, - "node_modules/eslint-config-ipfs/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/eslint-config-ipfs/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/eslint-config-ipfs/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "license": "Apache-2.0", "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 0.6.0" } }, - "node_modules/eslint-config-ipfs/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "argparse": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint-config-ipfs/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "devOptional": true + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "license": "MIT", - "peer": true, "bin": { - "acorn": "bin/acorn" + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/eslint-config-ipfs/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/eslint-config-ipfs/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "peer": true, + "node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "node_modules/jsonld-context-parser": { + "version": "2.4.0", "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" }, "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "jsonld-context-parse": "bin/jsonld-context-parse.js" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-config-standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/jsonld-context-parser/node_modules/@types/node": { + "version": "18.19.6", "license": "MIT", - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + "dependencies": { + "undici-types": "~5.26.4" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-config-standard-with-typescript": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-21.0.1.tgz", - "integrity": "sha512-FeiMHljEJ346Y0I/HpAymNKdrgKEpHpcg/D93FvPHWfCzbT4QyUJba/0FwntZeGLXfUiWDSeKmdJD597d9wwiw==", - "deprecated": "Please use eslint-config-love, instead.", + "node_modules/jsonld-streaming-parser": { + "version": "3.3.0", "license": "MIT", "dependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint-config-standard": "^16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.1", - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0", - "typescript": "^3.9 || ^4.0.0" + "@bergos/jsonparse": "^1.4.0", + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.4.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-etc": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/eslint-etc/-/eslint-etc-4.2.6.tgz", - "integrity": "sha512-/gg8U0SgBz6OQ2QKsvhmSF1WTL53nSD5qYHx/reNPnaKAUfH6qR0AIZQ7NNCRRSICRFagqf1nO8A7WmRFwcAJQ==", + "node_modules/jsonld-streaming-parser/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "^4.0.0", - "tsutils": "^3.17.1", - "tsutils-etc": "^1.3.4" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0", - "typescript": "^3.0.0 || ^4.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-plugin-etc": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-etc/-/eslint-plugin-etc-1.5.4.tgz", - "integrity": "sha512-FXpRHz5CGpT11pLln73JME4zHtopYKB7rlpvv5mcjEIJQJZazwswVF5WuGQxkm4cvlOpnFkfpatHICTRqTUkeA==", + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "license": "MIT", "dependencies": { - "@phenomnomnominal/tsquery": "^4.0.0", - "@typescript-eslint/experimental-utils": "^4.0.0", - "eslint-etc": "^4.0.4", - "requireindex": "~1.2.0", - "tslib": "^2.0.0", - "tsutils": "^3.0.0" + "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" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^ 7.0.0", - "typescript": "^3.0.0 || ^4.0.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-plugin-jsdoc": { - "version": "36.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.1.tgz", - "integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==", - "license": "BSD-3-Clause", + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + "license": "MIT", "dependencies": { - "@es-joy/jsdoccomment": "0.10.8", - "comment-parser": "1.2.4", - "debug": "^4.3.2", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "^1.1.1", - "lodash": "^4.17.21", - "regextras": "^0.8.0", - "semver": "^7.3.5", - "spdx-expression-parse": "^3.0.1" + "jwa": "^1.4.2", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { - "node": "^12 || ^14 || ^16" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0" + "node": ">=4.0" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-plugin-promise": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", - "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", - "license": "ISC", - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.0.0" + "node_modules/just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "peer": true, + "node_modules/keccak": { + "version": "3.0.4", + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "json-buffer": "3.0.1" } }, - "node_modules/eslint-config-ipfs/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-config-ipfs/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } + "node_modules/kuler": { + "version": "2.0.0", + "license": "MIT" }, - "node_modules/eslint-config-ipfs/node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/ky": { + "version": "0.33.3", "license": "MIT", - "peer": true, "engines": { - "node": ">= 4" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/eslint-config-ipfs/node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "license": "BSD-2-Clause", - "peer": true, + "node_modules/ky-universal": { + "version": "0.11.0", + "license": "MIT", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint-config-ipfs/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=4" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } } }, - "node_modules/eslint-config-ipfs/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "peer": true, + "node_modules/ky-universal/node_modules/node-fetch": { + "version": "3.3.2", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, "engines": { - "node": ">=4.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/eslint-config-ipfs/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "peer": true, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/eslint-config-ipfs/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "peer": true, + "node_modules/libp2p": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-1.8.0.tgz", + "integrity": "sha512-+dZe5Q1IedmD6JshhHP63sXfFpoBv2x/2dCytKGJmtgYJINVL2/hFCz4ezBQqcmOEa+XVs9A2nAuocH30r089Q==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/logger": "^4.0.16", + "@libp2p/multistream-select": "^5.1.13", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/peer-id-factory": "^4.2.0", + "@libp2p/peer-store": "^10.1.1", + "@libp2p/utils": "^5.4.5", + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^12.2.3", + "@multiformats/multiaddr-matcher": "^1.2.1", + "any-signal": "^4.1.1", + "datastore-core": "^9.2.9", + "interface-datastore": "^8.2.11", + "it-merge": "^3.0.5", + "it-parallel": "^3.0.7", + "merge-options": "^3.0.4", + "multiformats": "^13.1.0", + "p-defer": "^4.0.1", + "progress-events": "^1.0.0", + "race-event": "^1.3.0", + "race-signal": "^1.0.2", + "uint8arrays": "^5.1.0" } }, - "node_modules/eslint-config-ipfs/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "peer": true, + "node_modules/libp2p/node_modules/@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" } }, - "node_modules/eslint-config-ipfs/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause", - "peer": true + "node_modules/libp2p/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" }, - "node_modules/eslint-config-ipfs/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/libp2p/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-oceanprotocol": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-oceanprotocol/-/eslint-config-oceanprotocol-2.0.4.tgz", - "integrity": "sha512-VdCtlvjTHzlhErmy8BYCGj3r4/iSJDxseeQTISe5DSyrWaPJpMv728KxBvu+WsCWfuI2WzErAX1HDE/HjmcI6w==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "eslint": "^8.23.1", - "eslint-config-prettier": "^8.5.0", - "eslint-config-standard": "^17.0.0", - "eslint-config-standard-react": "^11.0.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-n": "^15.3.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-promise": "^6.0.1", - "eslint-plugin-react": "^7.31.8", - "eslint-plugin-security": "^1.5.0" - } + "license": "MIT" }, - "node_modules/eslint-config-oceanprotocol/node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } + "license": "MIT" }, - "node_modules/eslint-config-oceanprotocol/node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, + "node_modules/logform": { + "version": "2.6.0", "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">= 12.0.0" } }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/logform/node_modules/@colors/colors": { + "version": "1.6.0", "license": "MIT", "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" + "node": ">=0.1.90" } }, - "node_modules/eslint-config-standard-jsx": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz", - "integrity": "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "license": "Apache-2.0" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": "^8.8.0", - "eslint-plugin-react": "^7.28.0" + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/eslint-config-standard-react": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-11.0.1.tgz", - "integrity": "sha512-4WlBynOqBZJRaX81CBcIGDHqUiqxvw4j/DbEIICz8QkMs3xEncoPgAoysiqCSsg71X92uhaBc8sgqB96smaMmg==", + "node_modules/loupe": { + "version": "2.3.7", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-react": "^7.21.5" + "dependencies": { + "get-func-name": "^2.0.1" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "license": "MIT", + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/lru-queue": { + "version": "0.1.0", "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "es5-ext": "~0.10.2" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "license": "MIT", + "node_modules/lzma-purejs-requirejs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lzma-purejs-requirejs/-/lzma-purejs-requirejs-1.0.0.tgz", + "integrity": "sha512-nQgC+oDmBKPdWoC//X51scWTN5D3zdIL7oN+plbKjhZ+u5LAZsF0/yIiYTNtj+TjB1o6mp9R4Ey5DW6elBEu8w==", "dependencies": { - "debug": "^3.2.7" + "amdefine": "~0.1.0", + "commander": "~2.2.0" }, + "bin": { + "lzmajs": "bin/lzmajs" + } + }, + "node_modules/lzma-purejs-requirejs/node_modules/commander": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz", + "integrity": "sha512-U6hBkeIsoeE81B+yas9uVF4YYVcVoBCwb1e314VPyvVQubFwvnTAuc1oUQ6VuMPYUS4Rf1gzr0wTVLvs4sb5Pw==", "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">= 0.6.x" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/macos-release": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.4.0.tgz", + "integrity": "sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "license": "MIT", + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">= 10" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "license": "Apache-2.0", + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, "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.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "node": ">= 6" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/md5.js": { + "version": "1.3.5", "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/memoizee": { + "version": "0.4.15", "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "node_modules/merge-options": { + "version": "3.0.4", "license": "MIT", "dependencies": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" + "is-plain-obj": "^2.1.0" }, "engines": { - "node": ">=12.22.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "node": ">=10" } }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 8" } }, - "node_modules/eslint-plugin-no-only-tests": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", - "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", + "node_modules/methods": { + "version": "1.1.2", "license": "MIT", "engines": { - "node": ">=4.0.0" + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "license": "MIT", "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" + "node": ">=8.6" } }, - "node_modules/eslint-plugin-node/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/mime-db": { + "version": "1.52.0", "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "node_modules/mime-types": { + "version": "2.1.35", "license": "MIT", "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/mimic-fn": { + "version": "4.0.0", "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "license": "Apache-2.0", + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-node/node_modules/minimatch": { + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -15403,1556 +14170,1313 @@ "node": "*" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", - "dev": true, - "license": "MIT", + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "yallist": "^4.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "node": ">=8" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", - "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", - "license": "ISC", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + "engines": { + "node": ">= 8" } }, - "node_modules/eslint-plugin-react": { - "version": "7.35.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", - "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", - "license": "MIT", + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "optionalDependencies": { + "encoding": "^0.1.12" } }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "license": "Apache-2.0", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, "dependencies": { - "esutils": "^2.0.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, "dependencies": { - "brace-expansion": "^1.1.7" + "minipass": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "license": "MIT", + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { - "resolve": "bin/resolve" + "mkdirp": "bin/cmd.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", + "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, "bin": { - "semver": "bin/semver.js" + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/eslint-plugin-security": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz", - "integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "safe-regex": "^2.1.1" + "balanced-match": "^1.0.0" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "license": "BSD-2-Clause", + "node_modules/mocha/node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "license": "MIT", + "node_modules/mocha/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "license": "ISC", "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "license": "Apache-2.0", + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", + "node_modules/mocha/node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/mocha/node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "node_modules/mocha/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, "engines": { - "node": ">=0.10" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "node_modules/mocha/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, + "node_modules/moment": { + "version": "2.29.4", + "license": "MIT", "engines": { - "node": ">=0.10" + "node": "*" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", + "node_modules/mortice": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.0.4.tgz", + "integrity": "sha512-MUHRCAztSl4v/dAmK8vbYi5u1n9NZtQu4H3FsqS7qgMFQIAFw9lTpHiErd9kJpapqmvEdD1L3dUmiikifAvLsQ==", "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" + "observable-webworkers": "^2.0.1", + "p-queue": "^8.0.1", + "p-timeout": "^6.0.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, - "node_modules/eth-crypto": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eth-crypto/-/eth-crypto-2.6.0.tgz", - "integrity": "sha512-GCX4ffFYRUGgnuWR5qxcZIRQJ1KEqPFiyXU9yVy7s6dtXIMlUXZQ2h+5ID6rFaOHWbpJbjfkC6YdhwtwRYCnug==", + "node_modules/multicast-dns": { + "version": "7.2.5", "license": "MIT", "dependencies": { - "@babel/runtime": "7.20.13", - "@ethereumjs/tx": "3.5.2", - "@types/bn.js": "5.1.1", - "eccrypto": "1.1.6", - "ethereumjs-util": "7.1.5", - "ethers": "5.7.2", - "secp256k1": "5.0.0" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/pubkey" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/eth-crypto/node_modules/@babel/runtime": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", - "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, + "node_modules/multiformats": { + "version": "12.1.3", + "license": "Apache-2.0 OR MIT", "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/eth-crypto/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/eth-crypto/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "license": "MIT" - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "license": "MIT", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/ethereum-cryptography/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, + "node_modules/murmurhash3js-revisited": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", + "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", "engines": { - "node": ">=10.0.0" + "node": ">=8.0.0" } }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/ethereumjs-util/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" - }, - "node_modules/ethers": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", - "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/n3": { + "version": "1.17.2", "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "18.15.13", - "aes-js": "4.0.0-beta.5", - "tslib": "2.4.0", - "ws": "8.17.1" + "queue-microtask": "^1.1.2", + "readable-stream": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=12.0" } }, - "node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "node_modules/n3/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.2" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "node_modules/nan": { + "version": "2.14.0", "license": "MIT" }, - "node_modules/ethers/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "license": "0BSD" + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, - "node_modules/ethers/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "node_modules/native-fetch": { + "version": "4.0.2", "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" + "undici": "*" } }, - "node_modules/event-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/event-iterator/-/event-iterator-2.0.0.tgz", - "integrity": "sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ==", + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, "license": "MIT" }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/negotiator": { + "version": "0.6.3", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, "license": "MIT" }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "node_modules/netmask": { + "version": "2.0.2", "license": "MIT", "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "node": ">= 0.4.0" } }, - "node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "license": "MIT", + "node_modules/new-github-release-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz", + "integrity": "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==", + "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "type-fest": "^2.5.1" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", + "node_modules/new-github-release-url/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/next-tick": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/nise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", + "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.1", + "@sinonjs/text-encoding": "^0.7.3", + "just-extend": "^6.2.0", + "path-to-regexp": "^8.1.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", + "node_modules/nise/node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=16" } }, - "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "license": "MIT", + "node_modules/node-abi": { + "version": "3.65.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", + "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "semver": "^7.3.5" }, "engines": { - "node": ">= 0.10.0" + "node": ">=10" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", + "node_modules/node-addon-api": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/node-cron": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", + "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", "dependencies": { - "ms": "2.0.0" + "uuid": "8.3.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/node-cron/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/node-domexception": { + "version": "1.0.0", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/jimmywarting" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT" - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "license": "ISC", - "dependencies": { - "type": "^2.7.2" + "license": "MIT", + "engines": { + "node": ">=10.5.0" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, + "node_modules/node-fetch": { + "version": "2.7.0", "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=4" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "license": "BSD-2-Clause", + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" }, "bin": { - "extract-zip": "cli.js" + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "node": ">= 10.12.0" } }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/node-gyp-build": { + "version": "4.6.1", "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, "engines": { "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "node_modules/node-preload": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "process-on-spawn": "^1.0.0" + }, "engines": { - "node": "> 0.1.90" + "node": ">=8" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" + "node_modules/nodeify-fetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodeify-fetch/-/nodeify-fetch-3.1.0.tgz", + "integrity": "sha512-ZV81vM//sEgTgXwVZlOONzcOCdTGQ53mV65FVSNXgPQHa8oCwRLtLbnGxL/1S/Yw90bcXUDKMz00jEnaeazo+A==", + "dependencies": { + "lodash": "^4.17.21", + "node-fetch": "^3.2.10", + "readable-stream": "^4.2.0", + "stream-chunks": "^1.0.0" + } }, - "node_modules/fast-glob": { + "node_modules/nodeify-fetch/node_modules/node-fetch": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "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" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=8.6.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", + "node_modules/nodeify-fetch/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, "dependencies": { - "strnum": "^1.0.5" + "abbrev": "1" }, "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "pend": "~1.2.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/npm-run-path": { + "version": "5.1.0", "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "path-key": "^4.0.0" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "license": "MIT", + "node_modules/nyc": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", + "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "dev": true, + "license": "ISC", "dependencies": { - "flat-cache": "^3.0.4" + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=18" } }, - "node_modules/file-stream-rotator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", - "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", - "license": "MIT", + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "moment": "^2.29.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" - }, - "node_modules/file-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", - "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "license": "MIT", + "node_modules/nyc/node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "license": "MIT", - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - }, + "node_modules/nyc/node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-replace": { + "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, "license": "MIT", "dependencies": { - "array-back": "^3.0.1" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/find-up": { + "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "dev": true, "license": "MIT", "dependencies": { - "semver-regex": "^3.1.2" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "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" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "license": "Apache-2.0", + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^14.16.0 || >=16.10.0" } }, - "node_modules/flatbuffers": { - "version": "24.3.25", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-24.3.25.tgz", - "integrity": "sha512-3HDgPbgiwWMI9zVB7VYBHaMrbOO7Gm0v+yD2FV/sCKj+9NDeVL7BOBYUuhWAQGKWOzBo8S9WdMvV0eixO233XQ==", - "license": "Apache-2.0" - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "license": "ISC" - }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", - "license": "MIT" + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "license": "MIT" + "node_modules/object-hash": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">= 6" + } }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" + "engines": { + "node": ">= 0.4" } }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "license": "ISC", + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">= 14.17" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, "license": "MIT", "dependencies": { - "fetch-blob": "^3.1.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, "engines": { - "node": ">=12.20.0" + "node": ">= 0.4" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/freeport-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/freeport-promise/-/freeport-promise-2.0.0.tgz", - "integrity": "sha512-dwWpT1DdQcwrhmRwnDnPM/ZFny+FtzU+k50qF2eid3KxaQDsMiBrwo1i0G3qSugkN5db6Cb0zgfc68QeTOpEFg==", - "license": "Apache-2.0 OR MIT", + "node_modules/observable-webworkers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", + "integrity": "sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "license": "MIT", + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "wrappy": "1" } }, - "node_modules/from2/node_modules/isarray": { + "node_modules/one-time": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "fn.name": "1.x.x" } }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/onetime": { + "version": "6.0.0", "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" + "node": ">=18" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function-timeout": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-0.1.1.tgz", - "integrity": "sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==", + "node_modules/open/node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "node_modules/open/node_modules/default-browser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/open/node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/open/node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/optionator": { + "version": "0.9.3", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/ora": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz", + "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==", + "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.2.2", + "string-width": "^8.1.0", + "strip-ansi": "^7.1.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-amd-module-type": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.2.tgz", - "integrity": "sha512-PcuKwB8ouJnKuAPn6Hk3UtdfKoUV3zXRqVEvj8XGIXqjWfgd1j7QGdXy5Z9OdQfzVt1Sk29HVe/P+X74ccOuqw==", + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", - "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.2.2" - }, "engines": { - "node": ">=6.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/get-amd-module-type/node_modules/ast-module-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", - "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6.0" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/get-amd-module-type/node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", + "node_modules/ora/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.0.0" + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=6.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "node_modules/os-name": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-6.1.0.tgz", + "integrity": "sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==", "dev": true, "license": "MIT", + "dependencies": { + "macos-release": "^3.3.0", + "windows-release": "^6.1.0" + }, "engines": { "node": ">=18" }, @@ -16960,26 +15484,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -16988,1991 +15502,1830 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.1.tgz", - "integrity": "sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg==", - "license": "MIT" - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "license": "MIT", + "node_modules/p-defer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz", + "integrity": "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "license": "MIT", + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" + "p-timeout": "^6.1.2" }, "engines": { - "node": ">=18" + "node": ">=16.17" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-tsconfig": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", - "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", + "node_modules/p-locate": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", - "dev": true, - "license": "MIT", + "node_modules/p-queue": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz", + "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" }, "engines": { - "node": ">= 14" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gh-pages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", - "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", + "node_modules/p-timeout": { + "version": "6.1.2", "license": "MIT", - "dependencies": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify": "^4.3.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "globby": "^6.1.0" - }, - "bin": { - "gh-pages": "bin/gh-pages.js", - "gh-pages-clean": "bin/gh-pages-clean.js" - }, "engines": { - "node": ">=10" - } + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/gh-pages/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, "license": "MIT", "dependencies": { - "array-uniq": "^1.0.1" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/gh-pages/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">= 14" } }, - "node_modules/gh-pages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">= 14" } }, - "node_modules/gh-pages/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", + "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 14" } }, - "node_modules/gh-pages/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, "license": "MIT", "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "degenerator": "^5.0.0", + "netmask": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/gh-pages/node_modules/jsonfile": { + "node_modules/package-hash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/gh-pages/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/gh-pages/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/gh-pages/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/parse-github-url": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.3.tgz", + "integrity": "sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==", + "dev": true, "license": "MIT", + "bin": { + "parse-github-url": "cli.js" + }, "engines": { - "node": ">= 4.0.0" + "node": ">= 0.10" } }, - "node_modules/git-log-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", - "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", + "node_modules/parse-ms": { + "version": "2.1.0", "license": "MIT", - "dependencies": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "0.6.8" + "engines": { + "node": ">=6" } }, - "node_modules/git-log-parser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/git-log-parser/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", + "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "protocols": "^2.0.0" } }, - "node_modules/git-log-parser/node_modules/split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "license": "ISC", + "node_modules/parse-url": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", + "dev": true, + "license": "MIT", "dependencies": { - "through2": "~2.0.0" + "@types/parse-path": "^7.0.0", + "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" } }, - "node_modules/git-log-parser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/git-log-parser/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", - "dev": true, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "devOptional": true, "license": "MIT", - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/git-url-parse": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", - "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", - "dev": true, + "node_modules/path-key": { + "version": "3.1.1", "license": "MIT", - "dependencies": { - "git-up": "^7.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, "license": "MIT" }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "node_modules/path-type": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "ini": "4.1.1" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/global-directory/node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "*" } }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "node_modules/pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "license": "MIT", "dependencies": { - "ini": "2.0.0" + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, - "node_modules/global-dirs/node_modules/ini": { + "node_modules/perfect-debounce": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz", + "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==", + "dev": true, + "license": "MIT" }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "find-up": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/gonzales-pe": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "gonzales": "bin/gonzales.js" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=8" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=8" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "license": "MIT" - }, - "node_modules/grapoi": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/grapoi/-/grapoi-1.1.2.tgz", - "integrity": "sha512-FknMk4EPaVroumWDURlAScwr+cYE/e9dVmnTkuhhoghq9PWx2ap+A4+iS37dGoT6mhJbV0O+xgex6lI4c64plQ==", + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, "license": "MIT", "dependencies": { - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-set": "^2.0.0" + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" } }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "license": "MIT", "engines": { - "node": ">=4.x" + "node": ">= 0.4" } }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "license": "MIT", + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" }, "bin": { - "handlebars": "bin/handlebars" + "prebuild-install": "bin.js" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">=10" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "node_modules/prettier": { + "version": "3.0.3", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.0.0" } }, - "node_modules/has-dynamic-import": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.1.0.tgz", - "integrity": "sha512-su0anMkNEnJKZ/rB99jn3y6lV/J8Ro96hBJ28YAeVzj5rWxH+YL/AdCyiYYA1HDLV9YhmvqpWSJJj2KLo1MX6g==", + "node_modules/pretty-ms": { + "version": "7.0.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2" + "parse-ms": "^2.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/process": { + "version": "0.11.10", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "fromentries": "^1.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", + "node_modules/progress-events": { + "version": "1.0.0", + "license": "Apache-2.0 OR MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, "dependencies": { - "has-symbols": "^1.0.3" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC", + "node_modules/promise-retry/node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "optional": true }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "license": "MIT", + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@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" }, "engines": { - "node": ">= 6" + "node": ">=12.0.0" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/protocols": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", + "dev": true, "license": "MIT" }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "license": "MIT", + "node_modules/protons-runtime": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.4.0.tgz", + "integrity": "sha512-XfA++W/WlQOSyjUyuF5lgYBfXZUEMP01Oh1C2dSwZAlF2e/ZrMRPfWonXj6BGM+o8Xciv7w0tsRMKYwYEuQvaw==", "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "uint8-varint": "^2.0.2", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.1" } }, - "node_modules/hasha/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/protons-runtime/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "node_modules/protons-runtime/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "dependencies": { + "multiformats": "^13.0.0" } }, - "node_modules/hashlru": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", - "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==", - "license": "MIT" - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/proxy-addr": { + "version": "2.0.7", "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "node": ">= 0.10" } }, - "node_modules/hook-std": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", - "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "license": "ISC", + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/hpagent": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", - "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=14" + "node": ">= 14" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">= 0.8" + "node": ">= 14" } }, - "node_modules/http-link-header": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", - "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", - "license": "MIT", + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/proxy-agent/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/punycode": { + "version": "2.3.1", + "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=12.20.0" + "node_modules/pvtsutils": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", + "dependencies": { + "tslib": "^2.6.1" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "^2.0.0" + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "engines": { + "node": ">=6.0.0" } }, - "node_modules/hyperdiff": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/hyperdiff/-/hyperdiff-2.0.18.tgz", - "integrity": "sha512-heYv0VkEDZct8c2naho35oJku0IZRV8z2kEcrYyOAgmfI97KysvRbN4cazCJycKL72E7JEpydwiNPRZwuEOfIg==", - "license": "MIT", + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { - "debug-logfmt": "~1.2.0", - "lodash": "~4.17.21" + "side-channel": "^1.0.6" }, "engines": { - "node": ">= 8" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "engines": { - "node": ">=0.10.0" + "node": ">=0.4.x" } }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "license": "BSD-3-Clause" + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/race-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/race-event/-/race-event-1.3.0.tgz", + "integrity": "sha512-kaLm7axfOnahIqD3jQ4l1e471FIFcEGebXEnhxyLscuUzV8C94xVHtWEqDDXxll7+yu/6lW0w1Ff4HbtvHvOHg==" + }, + "node_modules/race-signal": { + "version": "1.0.2", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { - "node": ">= 4" + "node": ">= 0.6" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/import-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", - "license": "MIT", - "engines": { - "node": ">=12.2" + "node_modules/rc": { + "version": "1.2.8", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "rc": "cli.js" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dev": true, "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/rdf-canonize": { + "version": "3.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, "engines": { - "node": ">=0.8.19" + "node": ">=12" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/rdf-data-factory": { + "version": "1.1.2", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@rdfjs/types": "*" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", - "license": "MIT" + "node_modules/rdf-dataset-ext": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/rdf-dataset-ext/-/rdf-dataset-ext-1.1.0.tgz", + "integrity": "sha512-CH85RfRKN9aSlbju8T7aM8hgCSWMBsh2eh/tGxUUtWMN+waxi6iFDt8/r4PAEmKaEA82guimZJ4ISbmJ2rvWQg==", + "deprecated": "rdf-dataset-ext is deprecated. Switching to rdf-ext is recommended.", + "license": "MIT", + "dependencies": { + "rdf-canonize": "^3.0.0", + "readable-stream": "3 - 4" + } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "license": "ISC", - "optional": true + "node_modules/rdf-literal": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.2.tgz", + "integrity": "sha512-79Stlu3sXy0kq9/decHFLf3xNPuY6sfhFPhd/diWErgaFr0Ekyg38Vh9bnVcqDYu48CFRi0t+hrFii49n92Hbw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", + "node_modules/rdf-validate-shacl": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/rdf-validate-shacl/-/rdf-validate-shacl-0.5.7.tgz", + "integrity": "sha512-YSBqZqThH5JOboHrG5EcY+/0X5Y2MAhUcDr2ftjdTNM8lOZGRpRur0KxmGJr7BRRMnFKR/efZ+TRNn1GTgrL/w==", + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@rdfjs/data-model": "^2", + "@rdfjs/dataset": "^2", + "@rdfjs/environment": "^1", + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-set": "^2.0.1", + "@rdfjs/types": "^1.1.0", + "@vocabulary/sh": "^1.1.5", + "clownface": "^2.0.0", + "debug": "^4.3.2", + "rdf-literal": "^1.3.2", + "rdf-validate-datatype": "^0.2.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" + "node_modules/rdf-validate-shacl/node_modules/rdf-validate-datatype": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rdf-validate-datatype/-/rdf-validate-datatype-0.2.1.tgz", + "integrity": "sha512-DpREnmoWDxC80KyslZeBPLQb3ztyeiOolT4uCl58tCju2KHJu4j5vonmVVdEJh2Mpad5UY57v6sSM/hfSTFGKQ==", + "dependencies": { + "@rdfjs/term-map": "^2.0.0", + "@tpluscode/rdf-ns-builders": "3 - 4" + } }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" + "node_modules/rdfxml-streaming-parser": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.4.2", + "relative-to-absolute-iri": "^1.0.0", + "validate-iri": "^1.0.0" + } }, - "node_modules/inquirer": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.2.tgz", - "integrity": "sha512-+ynEbhWKhyomnaX0n2aLIMSkgSlGB5RrWbNXnEqj6mdaIydu6y40MdBjL38SAB0JcdmOaIaMua1azdjLEr3sdw==", - "dev": true, + "node_modules/rdfxml-streaming-parser/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.3", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/inquirer/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/inquirer/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/readdirp": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/inquirer/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/receptacle": { + "version": "1.3.2", "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ms": "^2.1.1" } }, - "node_modules/inquirer/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "license": "MIT" }, - "node_modules/inquirer/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "regexp-tree": "bin/regexp-tree" } }, - "node_modules/inquirer/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inquirer/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/inquirer/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/relative-to-absolute-iri": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/release-it": { + "version": "19.0.6", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-19.0.6.tgz", + "integrity": "sha512-XTCNZ2mV9wjASQmc2bcQjA+ImJiFMijbFSyQE6lDmP1Plq17acjYaoY5FmJb5Lh/Nv4UDwfRlKQMv1DvHFKf1g==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/webpro" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/webpro" + } + ], "license": "MIT", + "dependencies": { + "@nodeutils/defaults-deep": "1.1.0", + "@octokit/rest": "22.0.0", + "@phun-ky/typeof": "2.0.3", + "async-retry": "1.3.3", + "c12": "3.3.1", + "ci-info": "^4.3.0", + "eta": "4.0.1", + "git-url-parse": "16.1.0", + "inquirer": "12.9.6", + "issue-parser": "7.0.1", + "lodash.merge": "4.6.2", + "mime-types": "3.0.1", + "new-github-release-url": "2.0.0", + "open": "10.2.0", + "ora": "9.0.0", + "os-name": "6.1.0", + "proxy-agent": "6.5.0", + "semver": "7.7.2", + "tinyglobby": "0.2.15", + "undici": "6.21.3", + "url-join": "5.0.0", + "wildcard-match": "5.1.4", + "yargs-parser": "21.1.1" + }, + "bin": { + "release-it": "bin/release-it.js" + }, "engines": { - "node": ">=6" + "node": "^20.12.0 || >=22.0.0" } }, - "node_modules/inquirer/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "node_modules/release-it/node_modules/issue-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", "dev": true, - "license": "ISC", + "dependencies": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17 || >=20.6.1" } }, - "node_modules/inquirer/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/release-it/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/release-it/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dev": true, "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "mime-db": "^1.54.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/inquirer/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/release-it/node_modules/undici": { + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", "dev": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=18.17" } }, - "node_modules/inquirer/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/release-zalgo": { + "version": "1.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "es6-error": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/require-directory": { + "version": "2.1.1", "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/inquirer/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/require-main-filename": { + "version": "2.0.0", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { - "node": ">=8" - } - }, - "node_modules/interface-datastore": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.0.tgz", - "integrity": "sha512-RM/rTSmRcnoCwGZIHrPm+nlGYVoT4R0lcFvNnDyhdFT4R6BuHHhfFP47UldVEjs98SfxLuMhaNMsyjI918saHw==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "interface-store": "6.0.0", - "uint8arrays": "^5.0.2" - } - }, - "node_modules/interface-datastore/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/interface-store": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.0.tgz", - "integrity": "sha512-HkjsDPsjA7SKkCr+TH1elUQApAAM3X3JPwrz3vFzaf614wI+ZD6GVvwKGZCHYcbSRqeZP/uzVPqezzeISeo5kA==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.10" + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/into-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", - "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, "license": "MIT", "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", - "license": "MIT" - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "devOptional": true, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, "license": "MIT", "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">= 12" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ip-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", - "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", - "license": "MIT", + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "node_modules/retry": { + "version": "0.13.1", + "dev": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 4" } }, - "node_modules/irregular-plurals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", - "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "license": "MIT", + "node_modules/rimraf": { + "version": "3.0.2", + "devOptional": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "node_modules/ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "hash-base": "^3.1.2", + "inherits": "^2.0.4" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^5.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "rlp": "bin/rlp" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "node_modules/rlp/node_modules/bn.js": { + "version": "5.2.1", "license": "MIT" }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "node_modules/run-applescript": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "execa": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.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.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/is-binary-path": { + "node_modules/run-applescript/node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.17.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, "license": "MIT", "dependencies": { - "is-typed-array": "^1.1.13" + "path-key": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/is-electron": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", - "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", - "license": "MIT" - }, - "node_modules/is-electron-renderer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-electron-renderer/-/is-electron-renderer-2.0.1.tgz", - "integrity": "sha512-pRlQnpaCFhDVPtkXkP+g9Ybv/CjbiQDjnKFQTEjpBfDKeV6dRDBczuFRDpM6DVfk2EjpMS8t5kwE5jPnqYl3zA==", - "license": "MIT" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/run-async": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "queue-microtask": "^1.2.2" } }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "license": "MIT", + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "tslib": "^2.1.0" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" }, "engines": { - "node": ">= 0.4" + "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/is-in-ci": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-0.1.0.tgz", - "integrity": "sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==", + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", - "bin": { - "is-in-ci": "cli.js" + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "regexp-tree": "~0.1.1" } }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "node_modules/safe-stable-stringify": { + "version": "2.4.3", "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.3.0", + "license": "ISC" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/is-ip": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-5.0.1.tgz", - "integrity": "sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==", + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { - "ip-regex": "^5.0.0", - "super-regex": "^0.2.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", - "optional": true + "dependencies": { + "ms": "2.0.0" + } }, - "node_modules/is-loopback-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz", - "integrity": "sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg==", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "bin": { + "mime": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 0.8.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/set-blocking": { + "version": "2.0.0", + "devOptional": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, "license": "MIT", "dependencies": { - "symbol-observable": "^1.1.0" + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, "engines": { - "node": ">=6" + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/shebang-command": { + "version": "2.0.0", "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/shebang-regex": { + "version": "3.0.0", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -18981,49 +17334,51 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regexp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", - "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { - "is-unc-path": "^1.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -19032,16934 +17387,15270 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.1" - } + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" }, - "node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "license": "MIT", + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/simple-swizzle": { + "version": "0.2.2", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "is-arrayish": "^0.3.1" } }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "license": "MIT" }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "license": "MIT", + "node_modules/sinon": { + "version": "19.0.5", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.5.tgz", + "integrity": "sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.5", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "nise": "^6.1.1", + "supports-color": "^7.2.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/sinon" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" + "node_modules/sinon/node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "unc-path-regex": "^0.1.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "node_modules/slash": { + "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "license": "MIT" - }, - "node_modules/is-uuid": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-uuid/-/is-uuid-1.0.2.tgz", - "integrity": "sha512-tCByphFcJgf2qmiMo5hMCgNAquNSagOetVetDvBXswGkNfoyEMvGH1yDlF8cbZbKnbVBr4Y5/rlpMz9umxyBkQ==", - "license": "MIT" - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "license": "MIT", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "devOptional": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "license": "MIT", + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "devOptional": true, "dependencies": { - "call-bind": "^1.0.2" + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "license": "MIT", + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "license": "MIT", + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", + "node_modules/spawn-command": { + "version": "0.0.2", + "dev": true + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "is-docker": "^2.0.0" + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", "license": "ISC" }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "license": "MIT" + "node_modules/sprintf-js": { + "version": "1.1.3", + "devOptional": true, + "license": "BSD-3-Clause" }, - "node_modules/issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", - "license": "MIT", + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": ">=10.13" + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "license": "BSD-3-Clause", + "node_modules/sqlite3/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "license": "BSD-3-Clause", + "node_modules/sqlite3/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "node_modules/sqlite3/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { - "append-transform": "^2.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "license": "BSD-3-Clause", + "node_modules/ssh2": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz", + "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==", + "hasInstallScript": true, "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.10", + "nan": "^2.20.0" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "node_modules/ssh2/node_modules/nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "license": "MIT", + "optional": true }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "license": "ISC", + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" + "minipass": "^3.1.1" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "node_modules/stack-trace": { + "version": "0.0.10", "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/istanbul-lib-processinfo/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "license": "BSD-3-Clause", + "node_modules/stream-chunks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-chunks/-/stream-chunks-1.0.0.tgz", + "integrity": "sha512-/G+kinLx3pKXChtuko82taA4gZo56zFG2b2BbhmugmS0TUPBL40c5b2vjonS+gAHYK/cSKM9m0WTvAJYgDUeNw==", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" + "buffer": "^6.0.3", + "string_decoder": "^1.3.0" } }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, + "node_modules/stream-concat": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/it-all": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.6.tgz", - "integrity": "sha512-HXZWbxCgQZJfrv5rXvaVeaayXED8nTKx9tj9fpBhmcUJcedVZshMMMqTj0RG2+scGypb9Ut1zd1ifbf3lA8L+Q==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/it-byte-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-1.1.0.tgz", - "integrity": "sha512-WWponBWdKEa6o2U3NX+wGMY8X1EkWXcQvpC+3CUqKb4ZzK30q3EPqiTjFxLf9tNVgdF/MNAtx/XclpVfgaz9KQ==", - "license": "Apache-2.0 OR MIT", + "node_modules/stream-to-it": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz", + "integrity": "sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA==", "dependencies": { - "it-queueless-pushable": "^1.0.0", - "it-stream-types": "^2.0.1", - "uint8arraylist": "^2.4.8" + "it-stream-types": "^2.0.1" } }, - "node_modules/it-drain": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.7.tgz", - "integrity": "sha512-vy6S1JKjjHSIFHgBpLpD1zhkCRl3z1zYWUxE14+kAYf+BL9ssWSFImJfhl361IIcwr0ofw8etzg11VqqB+ntUA==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/it-filter": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.1.1.tgz", - "integrity": "sha512-TOXmVuaSkxlLp2hXKoMTra0WMZMKVFxE3vSsbIA+PbADNCBAHhjJ/lM31vBOUTddHMO34Ku++vU8T9PLlBxQtg==", - "license": "Apache-2.0 OR MIT", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { - "it-peekable": "^3.0.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/it-first": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.6.tgz", - "integrity": "sha512-ExIewyK9kXKNAplg2GMeWfgjUcfC1FnUXz/RPfAvIXby+w7U4b3//5Lic0NV03gXT8O/isj5Nmp6KiY0d45pIQ==", - "license": "Apache-2.0 OR MIT" + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/it-foreach": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.1.tgz", - "integrity": "sha512-ID4Gxnavk/LVQLQESAQ9hR6dR63Ih6X+8VdxEktX8rpz2dCGAbZpey/eljTNbMfV2UKXHiu6UsneoNBZuac97g==", - "license": "Apache-2.0 OR MIT", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "it-peekable": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/it-glob": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-1.0.2.tgz", - "integrity": "sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==", - "license": "ISC", + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/it-glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, - "node_modules/it-glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/it-length": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/it-length/-/it-length-3.0.6.tgz", - "integrity": "sha512-R7bxHAzpRzYz7vghc2DDH7x4KXvEkeLfN/h316++jzbkEHIRXbEPLbE20p5yrqqBdOeK6/FRUDuHlTJ0H1hysw==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/it-length-prefixed": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.1.0.tgz", - "integrity": "sha512-kx2UTJuy7/lsT3QUzf50NjfxU1Z4P4wlvYp6YnR5Nc61P8XKfy+QtiJi1VLojA+Kea7vMbB4002rIij1Ol9hcw==", - "license": "Apache-2.0 OR MIT", + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", "dependencies": { - "it-reader": "^6.0.1", - "it-stream-types": "^2.0.1", - "uint8-varint": "^2.0.1", - "uint8arraylist": "^2.0.0", - "uint8arrays": "^5.0.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/it-length-prefixed-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.2.0.tgz", - "integrity": "sha512-vX7dzSl/2UMYYsAr0FQdPNVR5xYEETaeboZ+eXxNBjgARuvxnWA6OedW8lC5/J3ebMTC98JhA3eH76eTijUOsA==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "it-byte-stream": "^1.0.0", - "it-stream-types": "^2.0.1", - "uint8-varint": "^2.0.4", - "uint8arraylist": "^2.4.8" - } - }, - "node_modules/it-length-prefixed/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" - } - }, - "node_modules/it-map": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.1.tgz", - "integrity": "sha512-9bCSwKD1yN1wCOgJ9UOl+46NQtdatosPWzxxUk2NdTLwRPXLh+L7iwCC9QKsbgM60RQxT/nH8bKMqm3H/o8IHQ==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "it-peekable": "^3.0.0" - } - }, - "node_modules/it-merge": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.5.tgz", - "integrity": "sha512-2l7+mPf85pyRF5pqi0dKcA54E5Jm/2FyY5GsOaN51Ta0ipC7YZ3szuAsH8wOoB6eKY4XsU4k2X+mzPmFBMayEA==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "it-pushable": "^3.2.3" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/it-pair": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.6.tgz", - "integrity": "sha512-5M0t5RAcYEQYNG5BV7d7cqbdwbCAp5yLdzvkxsZmkuZsLbTdZzah6MQySYfaAQjNDCq6PUnDt0hqBZ4NwMfW6g==", - "license": "Apache-2.0 OR MIT", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", "dependencies": { - "it-stream-types": "^2.0.1", - "p-defer": "^4.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/it-parallel": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.8.tgz", - "integrity": "sha512-URLhs6eG4Hdr4OdvgBBPDzOjBeSSmI+Kqex2rv/aAyYClME26RYHirLVhZsZP5M+ZP6M34iRlXk8Wlqtezuqpg==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "p-defer": "^4.0.1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/it-peekable": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.5.tgz", - "integrity": "sha512-JWQOGMt6rKiPcY30zUVMR4g6YxkpueTwHVE7CMs/aGqCf4OydM6w+7ZM3PvmO1e0TocjuR4aL8xyZWR46cTqCQ==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/it-pipe": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", - "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", - "license": "Apache-2.0 OR MIT", + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", "dependencies": { - "it-merge": "^3.0.0", - "it-pushable": "^3.1.2", - "it-stream-types": "^2.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/it-protobuf-stream": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/it-protobuf-stream/-/it-protobuf-stream-1.1.5.tgz", - "integrity": "sha512-H70idW45As3cEbU4uSoZ9IYHUIV3YM69/2mmXYR7gOlPabWjuyNi3/abK11geiiq3la27Sos/mXr68JljjKtEQ==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "it-length-prefixed-stream": "^1.0.0", - "it-stream-types": "^2.0.1", - "uint8arraylist": "^2.4.8" - } - }, - "node_modules/it-pushable": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", - "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "p-defer": "^4.0.0" - } - }, - "node_modules/it-queueless-pushable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-1.0.0.tgz", - "integrity": "sha512-HbcAbcuQj7a9EBxiRCZ+77FxWutgs/pY5ZvEyQnylWPGNFojCLAUwhcZjf5OuEQ9+y+vSa7w1GQBe8xJdmIn5A==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "p-defer": "^4.0.1", - "race-signal": "^1.0.2" + "node": ">=8" } }, - "node_modules/it-reader": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.4.tgz", - "integrity": "sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg==", - "license": "Apache-2.0 OR MIT", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "it-stream-types": "^2.0.1", - "uint8arraylist": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node": ">=8" } }, - "node_modules/it-sort": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.6.tgz", - "integrity": "sha512-aNrlZAXB8vWBd42tCpaXGL6CJVJNDW3OLczmdt6g0k/s9Z6evkTdgU2LjwW5SNNeX41sF+C8MjV+OcVf93PsPw==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "it-all": "^3.0.0" + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/it-stream-types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.1.tgz", - "integrity": "sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==", - "license": "Apache-2.0 OR MIT", + "node_modules/strip-final-newline": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/it-take": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.6.tgz", - "integrity": "sha512-uqw3MRzf9to1SOLxaureGa73lK8k8ZB/asOApTAkvrzUqCznGtKNgPFH7uYIWlt4UuWq/hU6I+U4Fm5xpjN8Vg==", - "license": "Apache-2.0 OR MIT" + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" }, - "node_modules/it-ws": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-6.1.5.tgz", - "integrity": "sha512-uWjMtpy5HqhSd/LlrlP3fhYrr7rUfJFFMABv0F5d6n13Q+0glhZthwUKpEAVhDrXY95Tb1RB5lLqqef+QbVNaw==", - "license": "Apache-2.0 OR MIT", + "node_modules/super-regex": { + "version": "0.2.0", + "license": "MIT", "dependencies": { - "@types/ws": "^8.2.2", - "event-iterator": "^2.0.0", - "it-stream-types": "^2.0.1", - "uint8arrays": "^5.0.0", - "ws": "^8.4.0" + "clone-regexp": "^3.0.0", + "function-timeout": "^0.1.0", + "time-span": "^5.1.0" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/it-ws/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", + "node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", "dependencies": { - "multiformats": "^13.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/iterate-iterator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", - "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "node_modules/synckit": { + "version": "0.8.5", + "dev": true, "license": "MIT", "dependencies": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/unts" } }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "license": "MIT", + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "license": "MIT", - "engines": { - "node": ">= 0.6.0" + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "license": "Apache-2.0", + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "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" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=6" } }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "license": "MIT" + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/tar/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "balanced-match": "^1.0.0" } }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "devOptional": true, - "license": "MIT" + "node_modules/tar/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "engines": { + "node": ">=18" + } }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.2.0.tgz", - "integrity": "sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg==", - "license": "MIT", + "node_modules/tar/node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=12.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "license": "MIT", + "node_modules/tar/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, "bin": { - "jsesc": "bin/jsesc" + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tar/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", + "node_modules/tar/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { - "node": ">=0.8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/json-buffer": { + "node_modules/tar/node_modules/minizlib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "license": "ISC" + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", + "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", + "node_modules/tar/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "bin": { - "json5": "lib/cli.js" + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", + "node_modules/tar/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dependencies": { - "universalify": "^2.0.0" + "glob": "^10.3.7" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jsonld": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.2.tgz", - "integrity": "sha512-MwBbq95szLwt8eVQ1Bcfwmgju/Y5P2GdtlHE2ncyfuYjIdEhluUVyj1eudacf1mOkWIoS9GpDBTECqhmq7EOaA==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" - }, + "node_modules/tar/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jsonld-context-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", - "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", - "license": "MIT", + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "@types/http-link-header": "^1.0.1", - "@types/node": "^18.0.0", - "cross-fetch": "^3.0.6", - "http-link-header": "^1.0.2", - "relative-to-absolute-iri": "^1.0.5" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, - "bin": { - "jsonld-context-parse": "bin/jsonld-context-parse.js" + "engines": { + "node": ">=8" } }, - "node_modules/jsonld-context-parser/node_modules/@types/node": { - "version": "18.19.44", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.44.tgz", - "integrity": "sha512-ZsbGerYg72WMXUIE9fYxtvfzLEuq6q8mKERdWFnqTmOvudMxnz+CBNRoOwJ2kNpFOncrKjT1hZwxjlFgQ9qvQA==", + "node_modules/text-hex": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/time-span": { + "version": "5.1.0", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsonld-streaming-parser": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-3.4.0.tgz", - "integrity": "sha512-897CloyQgQidfkB04dLM5XaAXVX/cN9A2hvgHJo4y4jRhIpvg3KLMBBfcrswepV2N3T8c/Rp2JeFdWfVsbVZ7g==", - "license": "MIT", + "node_modules/timers-ext": { + "version": "0.1.7", + "license": "ISC", "dependencies": { - "@bergos/jsonparse": "^1.4.0", - "@rdfjs/types": "*", - "@types/http-link-header": "^1.0.1", - "@types/readable-stream": "^2.3.13", - "buffer": "^6.0.3", - "canonicalize": "^1.0.1", - "http-link-header": "^1.0.2", - "jsonld-context-parser": "^2.4.0", - "rdf-data-factory": "^1.1.0", - "readable-stream": "^4.0.0" + "es5-ext": "~0.10.46", + "next-tick": "1" } }, - "node_modules/jsonld-streaming-parser/node_modules/@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" + "engines": { + "node": ">=18" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "license": "(MIT OR Apache-2.0)", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": "*" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "engines": { + "node": ">=12.0.0" }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/junk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", - "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", + "node_modules/titleize": { + "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/just-extend": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "license": "MIT" - }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "hasInstallScript": true, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "license": "MIT", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" } }, - "node_modules/keccak/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8.0" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" + "engines": { + "node": ">=0.6" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 14.0.0" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "node_modules/ts-api-utils": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.11" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT" + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" }, - "node_modules/ky": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "node_modules/tsx": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", + "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", + "dev": true, "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, "engines": { - "node": ">=14.16" + "node": ">=18.0.0" }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "optionalDependencies": { + "fsevents": "~2.3.3" } }, - "node_modules/ky-universal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", - "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=14.16" + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "engines": { + "node": ">= 0.6" } }, - "node_modules/ky-universal/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, "engines": { - "node": ">= 12" + "node": ">= 0.4" } }, - "node_modules/ky-universal/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, "license": "MIT", "dependencies": { - "package-json": "^8.1.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { - "node": ">=14.16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/libp2p": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-1.8.3.tgz", - "integrity": "sha512-IpHKhR/gjiRcm3UqaHC3bEFsnBS62hTwXy60L8Uie8NZvvliVL6skmIBAODfma0+C7zvJhNKA8453SOmTeVTwQ==", - "license": "Apache-2.0 OR MIT", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", "dependencies": { - "@libp2p/crypto": "^4.1.8", - "@libp2p/interface": "^1.6.3", - "@libp2p/interface-internal": "^1.3.3", - "@libp2p/logger": "^4.0.19", - "@libp2p/multistream-select": "^5.1.16", - "@libp2p/peer-collections": "^5.2.8", - "@libp2p/peer-id": "^4.2.3", - "@libp2p/peer-id-factory": "^4.2.3", - "@libp2p/peer-store": "^10.1.4", - "@libp2p/utils": "^5.4.8", - "@multiformats/dns": "^1.0.6", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", - "any-signal": "^4.1.1", - "datastore-core": "^9.2.9", - "interface-datastore": "^8.2.11", - "it-merge": "^3.0.5", - "it-parallel": "^3.0.7", - "merge-options": "^3.0.4", - "multiformats": "^13.1.0", - "p-defer": "^4.0.1", - "progress-events": "^1.0.0", - "race-event": "^1.3.0", - "race-signal": "^1.0.2", - "uint8arrays": "^5.1.0" + "is-typedarray": "^1.0.0" } }, - "node_modules/libp2p/node_modules/@multiformats/multiaddr": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", - "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", - "license": "Apache-2.0 OR MIT", + "node_modules/typescript": { + "version": "4.9.5", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uint8-varint": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", + "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", "dependencies": { - "@chainsafe/is-ip": "^2.0.1", - "@chainsafe/netmask": "^2.0.0", - "@libp2p/interface": "^1.0.0", - "@multiformats/dns": "^1.0.3", - "multiformats": "^13.0.0", - "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", "uint8arrays": "^5.0.0" } }, - "node_modules/libp2p/node_modules/uint8arrays": { + "node_modules/uint8-varint/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "node_modules/uint8-varint/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/uint8arraylist": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", + "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", + "dependencies": { + "uint8arrays": "^5.0.1" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" + "node_modules/uint8arraylist/node_modules/multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" }, - "node_modules/listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "license": "MIT", + "node_modules/uint8arraylist/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", "dependencies": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "engines": { - "node": ">=6" + "multiformats": "^13.0.0" } }, - "node_modules/listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==", - "license": "MIT", - "engines": { - "node": ">=4" + "node_modules/uint8arrays": { + "version": "4.0.6", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^12.0.1" } }, - "node_modules/listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, - "peerDependencies": { - "listr": "^0.14.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/listr-update-renderer/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.0" } }, - "node_modules/listr-update-renderer/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" } }, - "node_modules/listr-update-renderer/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "license": "MIT", + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "imurmurhash": "^0.1.4" } }, - "node_modules/listr-update-renderer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 0.8" } }, - "node_modules/listr-update-renderer/node_modules/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "node_modules/untildify": { + "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/listr-update-renderer/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "license": "MIT", + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "engines": { - "node": ">=4" + "punycode": "^2.1.0" } }, - "node_modules/listr-verbose-renderer/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/listr-verbose-renderer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/url-join": { + "version": "5.0.0", "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/listr-verbose-renderer/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/listr-verbose-renderer/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/listr-verbose-renderer/node_modules/date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "node_modules/util-deprecate": { + "version": "1.0.2", "license": "MIT" }, - "node_modules/listr-verbose-renderer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/utils-merge": { + "version": "1.0.1", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 0.4.0" } }, - "node_modules/listr-verbose-renderer/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/listr-verbose-renderer/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "node_modules/validate-iri": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/varint": { + "version": "6.0.0", + "license": "MIT" }, - "node_modules/listr-verbose-renderer/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/vary": { + "version": "1.1.2", "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/listr/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "node_modules/web-streams-polyfill": { + "version": "3.3.2", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/listr/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/listr/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "license": "Apache-2.0", + "node_modules/wherearewe": { + "version": "2.0.1", + "license": "Apache-2.0 OR MIT", "dependencies": { - "tslib": "^1.9.0" + "is-electron": "^2.2.0" }, "engines": { - "npm": ">=2.0.0" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/listr/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "license": "MIT", + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, "license": "MIT", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "license": "MIT", - "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "license": "MIT" - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "license": "MIT" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "license": "MIT" - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "license": "MIT" - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "license": "MIT" - }, - "node_modules/log-symbols": { + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^1.0.0" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/which-module": { + "version": "2.0.1", + "dev": true, + "license": "ISC" }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "license": "MIT", "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/log-symbols/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/wildcard-match": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/wildcard-match/-/wildcard-match-5.1.4.tgz", + "integrity": "sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==", + "dev": true, + "license": "ISC" + }, + "node_modules/windows-release": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-6.1.0.tgz", + "integrity": "sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "execa": "^8.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "node_modules/winston": { + "version": "3.11.0", "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">= 12.0.0" } }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "node_modules/winston-daily-rotate-file": { + "version": "4.7.1", "license": "MIT", "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "file-stream-rotator": "^0.6.1", + "object-hash": "^2.0.1", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "peerDependencies": { + "winston": "^3" } }, - "node_modules/logform": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", - "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "node_modules/winston-transport": { + "version": "4.6.0", "license": "MIT", "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", + "logform": "^2.3.2", + "readable-stream": "^3.6.0", "triple-beam": "^1.3.0" }, "engines": { "node": ">= 12.0.0" } }, - "node_modules/logform/node_modules/@colors/colors": { + "node_modules/winston/node_modules/@colors/colors": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "license": "MIT", "engines": { "node": ">=0.1.90" } }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "node_modules/winston/node_modules/async": { + "version": "3.2.4", + "license": "MIT" + }, + "node_modules/winston/node_modules/is-stream": { + "version": "2.0.1", "license": "MIT", + "engines": { + "node": ">=8" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } + "node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { - "yallist": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "license": "MIT", - "dependencies": { - "es5-ext": "~0.10.2" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "license": "MIT" + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" }, - "node_modules/lzma-purejs-requirejs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lzma-purejs-requirejs/-/lzma-purejs-requirejs-1.0.0.tgz", - "integrity": "sha512-nQgC+oDmBKPdWoC//X51scWTN5D3zdIL7oN+plbKjhZ+u5LAZsF0/yIiYTNtj+TjB1o6mp9R4Ey5DW6elBEu8w==", - "license": "BSD", + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", "dependencies": { - "amdefine": "~0.1.0", - "commander": "~2.2.0" - }, - "bin": { - "lzmajs": "bin/lzmajs" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/lzma-purejs-requirejs/node_modules/commander": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz", - "integrity": "sha512-U6hBkeIsoeE81B+yas9uVF4YYVcVoBCwb1e314VPyvVQubFwvnTAuc1oUQ6VuMPYUS4Rf1gzr0wTVLvs4sb5Pw==", + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", "engines": { - "node": ">= 0.6.x" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/macos-release": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.3.0.tgz", - "integrity": "sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==", + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", "dev": true, "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir": { + "node_modules/wsl-utils/node_modules/is-wsl": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "license": "ISC", - "optional": true, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "license": "MIT", "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" }, "engines": { - "node": ">= 10" + "node": ">=4.0.0" } }, - "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "node_modules/xmlbuilder": { + "version": "11.0.1", "license": "MIT", - "optional": true, "engines": { - "node": ">= 6" + "node": ">=4.0" } }, - "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "license": "MIT", - "optional": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, + "node_modules/xmlchars": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/make-fetch-happen/node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", "license": "MIT", - "optional": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "license": "MIT", + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">=12" } }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, "license": "MIT", - "bin": { - "marked": "bin/marked.js" + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, "engines": { - "node": ">= 12" + "node": ">=10" } }, - "node_modules/marked-terminal": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", - "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-escapes": "^6.2.0", - "cardinal": "^2.1.1", - "chalk": "^5.2.0", - "cli-table3": "^0.6.3", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.3.0" - }, "engines": { - "node": ">=14.13.1 || >=16.0.0" + "node": ">=10" }, - "peerDependencies": { - "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, "engines": { "node": ">=10" - } - }, - "node_modules/matchit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.1.0.tgz", - "integrity": "sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==", - "license": "MIT", - "dependencies": { - "@arr/every": "^1.0.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-find-and-replace": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", - "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/colinhacks" } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "dev": true }, - "node_modules/mdast-util-gfm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", - "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-footnote": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@achingbrain/nat-port-mapper": { + "version": "1.0.13", + "requires": { + "@achingbrain/ssdp": "^4.0.1", + "@libp2p/logger": "^4.0.1", + "default-gateway": "^7.2.2", + "err-code": "^3.0.1", + "it-first": "^3.0.1", + "p-defer": "^4.0.0", + "p-timeout": "^6.1.1", + "xml2js": "^0.5.0" } }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@achingbrain/ssdp": { + "version": "4.0.6", + "requires": { + "event-iterator": "^2.0.0", + "freeport-promise": "^2.0.0", + "merge-options": "^3.0.4", + "xml2js": "^0.5.0" } }, - "node_modules/mdast-util-gfm-footnote": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", - "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-util-normalize-identifier": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, + "@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", - "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "requires": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" } }, - "node_modules/mdast-util-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", - "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "requires": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" } }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", - "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" + "@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "requires": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + } } }, - "node_modules/mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" + "@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "requires": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + } } }, - "node_modules/mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "requires": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" } }, - "node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/mdast-util-toc": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-6.1.1.tgz", - "integrity": "sha512-Er21728Kow8hehecK2GZtb7Ny3omcoPUVrmObiSUwmoRYVZaXLR751QROEFjR8W/vAQdHMLj49Lz20J55XaNpw==", - "license": "MIT", - "dependencies": { - "@types/extend": "^3.0.0", - "@types/mdast": "^3.0.0", - "extend": "^3.0.0", - "github-slugger": "^2.0.0", - "mdast-util-to-string": "^3.1.0", - "unist-util-is": "^5.0.0", - "unist-util-visit": "^4.0.0" + "@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "requires": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + } } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "@aws-sdk/client-s3": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.948.0.tgz", + "integrity": "sha512-uvEjds8aYA9SzhBS8RKDtsDUhNV9VhqKiHTcmvhM7gJO92q0WTn8/QeFTdNyLc6RxpiDyz+uBxS7PcdNiZzqfA==", + "requires": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/credential-provider-node": "3.948.0", + "@aws-sdk/middleware-bucket-endpoint": "3.936.0", + "@aws-sdk/middleware-expect-continue": "3.936.0", + "@aws-sdk/middleware-flexible-checksums": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-location-constraint": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-sdk-s3": "3.947.0", + "@aws-sdk/middleware-ssec": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/signature-v4-multi-region": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/eventstream-serde-browser": "^4.2.5", + "@smithy/eventstream-serde-config-resolver": "^4.3.5", + "@smithy/eventstream-serde-node": "^4.2.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-blob-browser": "^4.2.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/hash-stream-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/md5-js": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.5", + "tslib": "^2.6.2" } }, - "node_modules/memoizee": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", - "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "es5-ext": "^0.10.64", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.12" + "@aws-sdk/client-sso": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.948.0.tgz", + "integrity": "sha512-iWjchXy8bIAVBUsKnbfKYXRwhLgRg3EqCQ5FTr3JbR+QR75rZm4ZOYXlvHGztVTmtAZ+PQVA1Y4zO7v7N87C0A==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@aws-sdk/core": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.947.0.tgz", + "integrity": "sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@aws-sdk/credential-provider-env": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.947.0.tgz", + "integrity": "sha512-VR2V6dRELmzwAsCpK4GqxUi6UW5WNhAXS9F9AzWi5jvijwJo3nH92YNJUP4quMpgFZxJHEWyXLWgPjh9u0zYOA==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@aws-sdk/credential-provider-http": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.947.0.tgz", + "integrity": "sha512-inF09lh9SlHj63Vmr5d+LmwPXZc2IbK8lAruhOr3KLsZAIHEgHgGPXWDC2ukTEMzg0pkexQ6FOhXXad6klK4RA==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", + "tslib": "^2.6.2" } }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@aws-sdk/credential-provider-ini": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.948.0.tgz", + "integrity": "sha512-Cl//Qh88e8HBL7yYkJNpF5eq76IO6rq8GsatKcfVBm7RFVxCqYEPSSBtkHdbtNwQdRQqAMXc6E/lEB/CZUDxnA==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/credential-provider-env": "3.947.0", + "@aws-sdk/credential-provider-http": "3.947.0", + "@aws-sdk/credential-provider-login": "3.948.0", + "@aws-sdk/credential-provider-process": "3.947.0", + "@aws-sdk/credential-provider-sso": "3.948.0", + "@aws-sdk/credential-provider-web-identity": "3.948.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "@aws-sdk/credential-provider-login": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.948.0.tgz", + "integrity": "sha512-gcKO2b6eeTuZGp3Vvgr/9OxajMrD3W+FZ2FCyJox363ZgMoYJsyNid1vuZrEuAGkx0jvveLXfwiVS0UXyPkgtw==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@aws-sdk/credential-provider-node": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.948.0.tgz", + "integrity": "sha512-ep5vRLnrRdcsP17Ef31sNN4g8Nqk/4JBydcUJuFRbGuyQtrZZrVT81UeH2xhz6d0BK6ejafDB9+ZpBjXuWT5/Q==", + "requires": { + "@aws-sdk/credential-provider-env": "3.947.0", + "@aws-sdk/credential-provider-http": "3.947.0", + "@aws-sdk/credential-provider-ini": "3.948.0", + "@aws-sdk/credential-provider-process": "3.947.0", + "@aws-sdk/credential-provider-sso": "3.948.0", + "@aws-sdk/credential-provider-web-identity": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "@aws-sdk/credential-provider-process": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.947.0.tgz", + "integrity": "sha512-WpanFbHe08SP1hAJNeDdBDVz9SGgMu/gc0XJ9u3uNpW99nKZjDpvPRAdW7WLA4K6essMjxWkguIGNOpij6Do2Q==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@aws-sdk/credential-provider-sso": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.948.0.tgz", + "integrity": "sha512-gqLhX1L+zb/ZDnnYbILQqJ46j735StfWV5PbDjxRzBKS7GzsiYoaf6MyHseEopmWrez5zl5l6aWzig7UpzSeQQ==", + "requires": { + "@aws-sdk/client-sso": "3.948.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/token-providers": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" + "@aws-sdk/credential-provider-web-identity": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.948.0.tgz", + "integrity": "sha512-MvYQlXVoJyfF3/SmnNzOVEtANRAiJIObEUYYyjTqKZTmcRIVVky0tPuG26XnB8LmTYgtESwJIZJj/Eyyc9WURQ==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/merge": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", - "license": "MIT" + "@aws-sdk/middleware-bucket-endpoint": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.936.0.tgz", + "integrity": "sha512-XLSVVfAorUxZh6dzF+HTOp4R1B5EQcdpGcPliWr0KUj2jukgjZEcqbBmjyMF/p9bmyQsONX80iURF1HLAlW0qg==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "tslib": "^2.6.2" + } }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@aws-sdk/middleware-expect-continue": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.936.0.tgz", + "integrity": "sha512-Eb4ELAC23bEQLJmUMYnPWcjD3FZIsmz2svDiXEcxRkQU9r7NRID7pM7C5NPH94wOfiCk0b2Y8rVyFXW0lGQwbA==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "license": "MIT", - "dependencies": { - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" + "@aws-sdk/middleware-flexible-checksums": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.947.0.tgz", + "integrity": "sha512-kXXxS2raNESNO+zR0L4YInVjhcGGNI2Mx0AE1ThRhDkAt2se3a+rGf9equ9YvOqA1m8Jl/GSI8cXYvSxXmS9Ag==", + "requires": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" + "@aws-sdk/middleware-host-header": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", + "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" + "@aws-sdk/middleware-location-constraint": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.936.0.tgz", + "integrity": "sha512-SCMPenDtQMd9o5da9JzkHz838w3327iqXk3cbNnXWqnNRx6unyW8FL0DZ84gIY12kAyVHz5WEqlWuekc15ehfw==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "@aws-sdk/middleware-logger": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", + "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" + "@aws-sdk/middleware-recursion-detection": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.948.0.tgz", + "integrity": "sha512-Qa8Zj+EAqA0VlAVvxpRnpBpIWJI9KUwaioY1vkeNVwXPlNaz9y9zCKVM9iU9OZ5HXpoUg6TnhATAHXHAE8+QsQ==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", - "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-sdk/middleware-sdk-s3": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.947.0.tgz", + "integrity": "sha512-DS2tm5YBKhPW2PthrRBDr6eufChbwXe0NjtTZcYDfUCXf0OR+W6cIqyKguwHMJ+IyYdey30AfVw9/Lb5KB8U8A==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", - "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-sdk/middleware-ssec": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.936.0.tgz", + "integrity": "sha512-/GLC9lZdVp05ozRik5KsuODR/N7j+W+2TbfdFL3iS+7un+gnP6hC8RDOZd6WhpZp7drXQ9guKiTAxkZQwzS8DA==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", - "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", - "license": "MIT", - "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-sdk/middleware-user-agent": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.947.0.tgz", + "integrity": "sha512-7rpKV8YNgCP2R4F9RjWZFcD2R+SO/0R4VHIbY9iZJdH2MzzJ8ZG7h8dZ2m8QkQd1fjx4wrFJGGPJUTYXPV3baA==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@smithy/core": "^3.18.7", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", - "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-sdk/nested-clients": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.948.0.tgz", + "integrity": "sha512-zcbJfBsB6h254o3NuoEkf0+UY1GpE9ioiQdENWv7odo69s8iaGBEQ4BDpsIMqcuiiUXw1uKIVNxCB1gUGYz8lw==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-extension-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", - "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-sdk/region-config-resolver": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", + "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", - "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-sdk/signature-v4-multi-region": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.947.0.tgz", + "integrity": "sha512-UaYmzoxf9q3mabIA2hc4T6x5YSFUG2BpNjAZ207EA1bnQMiK+d6vZvb83t7dIWL/U1de1sGV19c1C81Jf14rrA==", + "requires": { + "@aws-sdk/middleware-sdk-s3": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", - "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@aws-sdk/token-providers": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.948.0.tgz", + "integrity": "sha512-V487/kM4Teq5dcr1t5K6eoUKuqlGr9FRWL3MIMukMERJXHZvio6kox60FZ/YtciRHRI75u14YUqm2Dzddcu3+A==", + "requires": { + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@aws-sdk/types": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", + "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@aws-sdk/util-arn-parser": { + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz", + "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@aws-sdk/util-endpoints": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", + "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-endpoints": "^3.2.5", + "tslib": "^2.6.2" } }, - "node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@aws-sdk/util-locate-window": { + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", + "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@aws-sdk/util-user-agent-browser": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", + "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", + "requires": { + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@aws-sdk/util-user-agent-node": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.947.0.tgz", + "integrity": "sha512-+vhHoDrdbb+zerV4noQk1DHaUMNzWFWPpPYjVTwW2186k5BEJIecAMChYkghRrBVJ3KPWP1+JnZwOd72F3d4rQ==", + "requires": { + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "@aws-sdk/xml-builder": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", + "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", + "requires": { + "@smithy/types": "^4.9.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" } }, - "node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@aws/lambda-invoke-store": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==" + }, + "@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" } }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true + }, + "@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^7.5.2" + }, "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "convert-source-map": { + "version": "2.0.0", + "dev": true + } } }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" + "@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dev": true, + "requires": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^7.5.2" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" + "yallist": { + "version": "3.1.1", + "dev": true } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" } }, - "node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, - "node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } + "@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true }, - "node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" - } + "@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "requires": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" } }, - "node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.28.5" } }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "requires": { + "regenerator-runtime": "^0.14.0" + } }, - "node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + } }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "@babel/traverse": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", + "debug": "^4.3.1", + "globals": "^11.1.0" }, - "engines": { - "node": ">=8.6" + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } } }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" + "@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==" + }, + "@bergos/jsonparse": { + "version": "1.4.1", + "requires": { + "buffer": "^6.0.3" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" + "@chainsafe/as-chacha20poly1305": { + "version": "0.1.0" + }, + "@chainsafe/as-sha256": { + "version": "0.4.1" + }, + "@chainsafe/is-ip": { + "version": "2.0.2" + }, + "@chainsafe/libp2p-gossipsub": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-13.2.0.tgz", + "integrity": "sha512-yKGXIJMLeNLa/XeI57HvQKhf1f4LRgBuV1Lrzv9Vo685Szr+qaBATUbMk/aLxpN2rMgibDIS5F8yaeuIUVPh8Q==", + "requires": { + "@libp2p/crypto": "^4.0.1", + "@libp2p/interface": "^1.5.0", + "@libp2p/interface-internal": "^1.0.7", + "@libp2p/peer-id": "^4.0.5", + "@libp2p/pubsub": "^9.0.8", + "@multiformats/multiaddr": "^12.1.14", + "denque": "^2.1.0", + "it-length-prefixed": "^9.0.4", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "multiformats": "^13.0.1", + "protons-runtime": "5.4.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.0.1" }, - "engines": { - "node": ">= 0.6" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.5.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.5.1.tgz", + "integrity": "sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@multiformats/dns": "^1.0.3", + "abort-error": "^1.0.1", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz", + "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "license": "MIT", - "engines": { - "node": ">=12" + "@chainsafe/libp2p-noise": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-15.1.0.tgz", + "integrity": "sha512-84S/Uk7ZZRYpSlE5d1odMmQTl5g5Da8etgcf4QI7arTAHkvBs3il7yGHIPt4wV4EV0qIMG+XjdGIYihRXfI2/w==", + "requires": { + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^0.4.1", + "@libp2p/crypto": "^4.0.0", + "@libp2p/interface": "^1.5.0", + "@libp2p/peer-id": "^4.0.0", + "@noble/ciphers": "^0.5.1", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "it-length-prefixed": "^9.0.1", + "it-length-prefixed-stream": "^1.0.0", + "it-pair": "^2.0.6", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.0", + "wherearewe": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "license": "MIT", - "engines": { - "node": ">=4" + "@chainsafe/libp2p-yamux": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-6.0.2.tgz", + "integrity": "sha512-S5OkLHqYhEVMQQ4BTgnRANEIbGTQhaC23glCgBwGdeoTRtMpIozwDiPfljFLCm0RYWdCRJw9oFztO95KUHjptA==", + "requires": { + "@libp2p/interface": "^1.1.3", + "@libp2p/utils": "^5.2.5", + "get-iterator": "^2.0.1", + "it-foreach": "^2.0.6", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "uint8arraylist": "^2.4.8" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "license": "MIT", - "engines": { - "node": ">=4" + "@chainsafe/netmask": { + "version": "2.0.0", + "requires": { + "@chainsafe/is-ip": "^2.0.1" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "license": "MIT" + "@dabh/diagnostics": { + "version": "2.0.3", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@digitalbazaar/http-client": { + "version": "3.4.1", + "requires": { + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@elastic/elasticsearch": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.14.0.tgz", + "integrity": "sha512-MGrgCI4y+Ozssf5Q2IkVJlqt5bUMnKIICG2qxeOfrJNrVugMCBCAQypyesmSSocAtNm8IX3LxfJ3jQlFHmKe2w==", + "requires": { + "@elastic/transport": "^8.6.0", + "tslib": "^2.4.0" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "@elastic/transport": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@elastic/transport/-/transport-8.7.0.tgz", + "integrity": "sha512-IqXT7a8DZPJtqP2qmX1I2QKmxYyN27kvSW4g6pInESE1SuGwZDp2FxHJ6W2kwmYOJwQdAt+2aWwzXO5jHo9l4A==", + "requires": { + "@opentelemetry/api": "1.x", + "debug": "^4.3.4", + "hpagent": "^1.0.0", + "ms": "^2.1.3", + "secure-json-parse": "^2.4.0", + "tslib": "^2.4.0", + "undici": "^6.12.0" }, - "engines": { - "node": ">= 6" + "dependencies": { + "undici": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==" + } } }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "dev": true, + "optional": true }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, - "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mocha/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/mock-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mock-property/-/mock-property-1.1.0.tgz", - "integrity": "sha512-1/JjbLoGwv87xVsutkX0XJc0M0W4kb40cZl/K41xtTViBOD9JuFPKfyMNTrLJ/ivYAd0aPqu/vduamXO0emTFQ==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "functions-have-names": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "hasown": "^2.0.2", - "isarray": "^2.0.5", - "object-inspect": "^1.13.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/module-definition": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz", - "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==", - "license": "MIT", - "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.0.0" - }, - "bin": { - "module-definition": "bin/cli.js" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/module-definition/node_modules/ast-module-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", - "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/module-definition/node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/mortice": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.0.4.tgz", - "integrity": "sha512-MUHRCAztSl4v/dAmK8vbYi5u1n9NZtQu4H3FsqS7qgMFQIAFw9lTpHiErd9kJpapqmvEdD1L3dUmiikifAvLsQ==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "observable-webworkers": "^2.0.1", - "p-queue": "^8.0.1", - "p-timeout": "^6.0.0" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multiformats": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.2.2.tgz", - "integrity": "sha512-RWI+nyf0q64vyOxL8LbKtjJMki0sogRL/8axvklNtiTM0iFCVtHwME9w6+0P1/v4dQvsIg8A45oT3ka1t/M/+A==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/murmurhash3js-revisited": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", - "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "license": "ISC" - }, - "node_modules/n3": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/n3/-/n3-1.20.4.tgz", - "integrity": "sha512-tHeX1Q3/+ET38qYMOfErglmr5F2tzb+WCt82sZhCokzSZHe95CkHzyuzCMqcRB8hTpW+zn7HqamGXCWW/xXCHg==", - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "queue-microtask": "^1.1.2", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "license": "MIT" - }, - "node_modules/native-fetch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz", - "integrity": "sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==", - "license": "MIT", - "peerDependencies": { - "undici": "*" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", - "license": "MIT" - }, - "node_modules/nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "license": "MIT" - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/new-github-release-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz", - "integrity": "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^2.5.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/new-github-release-url/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "license": "ISC" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "license": "MIT" - }, - "node_modules/nise": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", - "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", - "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" - } - }, - "node_modules/nise/node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", - "license": "MIT" - }, - "node_modules/node-abi": { - "version": "3.65.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", - "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "license": "MIT" - }, - "node_modules/node-cron": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", - "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", - "license": "ISC", - "dependencies": { - "uuid": "8.3.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/node-cron/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "license": "MIT", - "optional": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", - "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/node-gyp/node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "license": "MIT", - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "license": "MIT" - }, - "node_modules/node-source-walk": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.2.tgz", - "integrity": "sha512-Y4jr/8SRS5hzEdZ7SGuvZGwfORvNsSsNRwDXx5WisiqzsVfeftDvRgfeqWNgZvWSJbgubTRVRYBzK6UO+ErqjA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.21.4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/nodeify-fetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nodeify-fetch/-/nodeify-fetch-3.1.0.tgz", - "integrity": "sha512-ZV81vM//sEgTgXwVZlOONzcOCdTGQ53mV65FVSNXgPQHa8oCwRLtLbnGxL/1S/Yw90bcXUDKMz00jEnaeazo+A==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "node-fetch": "^3.2.10", - "readable-stream": "^4.2.0", - "stream-chunks": "^1.0.0" - } - }, - "node_modules/nodeify-fetch/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/nodeify-fetch/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", - "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/ci-detect", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/run-script", - "abbrev", - "archy", - "cacache", - "chalk", - "chownr", - "cli-columns", - "cli-table3", - "columnify", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "mkdirp", - "mkdirp-infer-owner", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "npmlog", - "opener", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "read-package-json", - "read-package-json-fast", - "readdir-scoped-modules", - "rimraf", - "semver", - "ssri", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "workspaces/*" - ], - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.6.3", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.2.1", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.2.1", - "abbrev": "~1.1.1", - "archy": "~1.0.0", - "cacache": "^16.1.3", - "chalk": "^4.1.2", - "chownr": "^2.0.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.2.1", - "ini": "^3.0.1", - "init-package-json": "^3.0.2", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.4", - "libnpmdiff": "^4.0.5", - "libnpmexec": "^4.0.14", - "libnpmfund": "^3.0.5", - "libnpmhook": "^8.0.4", - "libnpmorg": "^4.0.4", - "libnpmpack": "^4.1.3", - "libnpmpublish": "^6.0.5", - "libnpmsearch": "^5.0.4", - "libnpmteam": "^4.0.4", - "libnpmversion": "^3.0.7", - "make-fetch-happen": "^10.2.0", - "minimatch": "^5.1.0", - "minipass": "^3.1.6", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^9.1.0", - "nopt": "^6.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.1.0", - "npm-pick-manifest": "^7.0.2", - "npm-profile": "^6.2.0", - "npm-registry-fetch": "^13.3.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", - "p-map": "^4.0.0", - "pacote": "^13.6.2", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.2", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-package-json-lint": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-6.4.0.tgz", - "integrity": "sha512-cuXAJJB1Rdqz0UO6w524matlBqDBjcNt7Ru+RDIu4y6RI1gVqiWBnylrK8sPRk81gGBA0X8hJbDXolVOoTc+sA==", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.6", - "ajv-errors": "^1.0.1", - "chalk": "^4.1.2", - "cosmiconfig": "^8.0.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "ignore": "^5.2.0", - "is-plain-obj": "^3.0.0", - "jsonc-parser": "^3.2.0", - "log-symbols": "^4.1.0", - "meow": "^9.0.0", - "plur": "^4.0.0", - "semver": "^7.3.8", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1", - "type-fest": "^3.2.0", - "validate-npm-package-name": "^5.0.0" - }, - "bin": { - "npmPkgJsonLint": "dist/cli.js" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=6.0.0" - } - }, - "node_modules/npm-package-json-lint/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-package-json-lint/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-package-json-lint/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-package-json-lint/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-package-json-lint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-package-json-lint/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/npm/node_modules/@gar/promisify": { - "version": "1.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "5.6.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/query": "^1.2.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.3", - "cacache": "^16.1.3", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^5.2.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.2", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/ci-detect": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "4.2.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^2.0.2", - "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "2.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { - "version": "1.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/move-file": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "infer-owner": "^1.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "1.2.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^9.1.0", - "postcss-selector-parser": "^6.0.10", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "4.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@tootallnate/once": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/abbrev": { - "version": "1.1.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/agent-base": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.2.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/asap": { - "version": "2.0.6", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "3.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/bin-links/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "16.1.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@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": "^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", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/chalk": { - "version": "4.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^4.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/debuglog": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/depd": { - "version": "1.1.2", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/dezalgo": { - "version": "1.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.1.0", - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.12", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/fs.realpath": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/gauge": { - "version": "4.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "8.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.10", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/npm/node_modules/has-flag": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "5.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/humanize-ms": { - "version": "1.2.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/infer-owner": { - "version": "1.0.4", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/inflight": { - "version": "1.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/inherits": { - "version": "2.0.4", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/ini": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/ip": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^3.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.10.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "5.1.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.4.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "6.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "4.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1", - "tar": "^6.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "4.0.14", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^5.6.3", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/fs": "^2.1.1", - "@npmcli/run-script": "^4.2.0", - "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", - "semver": "^7.3.7", - "walk-up-path": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "3.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^5.6.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "8.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "4.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "4.1.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/run-script": "^4.1.3", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "6.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "5.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "4.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "3.0.7", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^4.1.3", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "7.13.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "10.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.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": "^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": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/minimatch": { - "version": "5.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/minipass": { - "version": "3.3.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "2.1.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "0.0.8", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "9.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "4.0.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "5.0.0", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "9.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "5.1.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "7.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-profile": { - "version": "6.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.3.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "1.0.1", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/npmlog": { - "version": "6.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/once": { - "version": "1.4.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/opener": { - "version": "1.5.2", - "inBundle": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/pacote": { - "version": "13.6.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/path-is-absolute": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.10", - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "0.3.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "1" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "1.0.7", - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json": { - "version": "5.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json-fast": { - "version": "2.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/readable-stream": { - "version": "3.6.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", + "@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "dev": true, "optional": true }, - "node_modules/npm/node_modules/semver": { - "version": "7.3.7", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "3.0.7", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.7.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.1.1", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.11", - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "9.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } + "@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } + "@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/supports-color": { - "version": "7.2.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/tar": { - "version": "6.1.11", - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } + "@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" + "@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT" + "@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/treeverse": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/unique-filename": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/unique-slug": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" + "@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC" + "@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } + "@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } + "@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/wide-align": { - "version": "1.1.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } + "@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC" + "@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "dev": true, + "optional": true }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" + "@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "dev": true, + "optional": true }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "dev": true, + "optional": true }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "dev": true, + "optional": true }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "license": "ISC", - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } + "@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "dev": true, + "optional": true }, - "node_modules/nyc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" } }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } + "@eslint-community/regexpp": { + "version": "4.10.0", + "dev": true }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@eslint/eslintrc": { + "version": "2.1.2", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nyc/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" + "strip-json-comments": { + "version": "3.1.1", + "dev": true + } } }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } + "@eslint/js": { + "version": "8.52.0", + "dev": true }, - "node_modules/nyc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "@ethereumjs/common": { + "version": "2.6.5", + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/nyc/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@ethereumjs/tx": { + "version": "3.5.2", + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" + "@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "requires": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "requires": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "requires": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" }, - "engines": { - "node": ">=8" + "dependencies": { + "bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==" + } } }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" + "@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "requires": { + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "requires": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "requires": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "requires": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "requires": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "requires": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" }, - "engines": { - "node": ">=8" + "dependencies": { + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + } } }, - "node_modules/nyc/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "engines": { - "node": ">=8" + "@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" } }, - "node_modules/nyc/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==" + }, + "@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "requires": { + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "requires": { + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "requires": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" } }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "^6.6.1", + "hash.js": "1.1.7" }, - "engines": { - "node": ">=8" + "dependencies": { + "bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==" + } } }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "license": "ISC" + "@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "requires": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "requires": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "requires": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@fastify/busboy": { + "version": "2.0.0" + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "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" - }, - "engines": { - "node": ">=8" + "@grpc/grpc-js": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.2.tgz", + "integrity": "sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==", + "requires": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + } + }, + "@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" } }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "@humanwhocodes/config-array": { + "version": "0.11.13", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.1", + "dev": true + }, + "@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true + }, + "@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "requires": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + } + }, + "@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "dev": true, + "requires": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + } + }, + "@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, + "requires": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" }, - "engines": { - "node": ">=6" + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "requires": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" } }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "license": "MIT", - "engines": { - "node": ">= 6" + "@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "requires": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" } }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "requires": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true + }, + "@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "requires": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "requires": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" } }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "requires": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" } }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, + "requires": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + } + }, + "@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "requires": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "requires": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" } }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" + "@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "requires": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" } }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "license": "MIT", + "@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "requires": {} + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "requires": { + "minipass": "^7.0.4" }, - "engines": { - "node": ">= 0.4" + "dependencies": { + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + } } }, - "node_modules/observable-webworkers": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", - "integrity": "sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==", - "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" + "@jclem/logfmt2": { + "version": "2.4.3" + }, + "@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "license": "MIT", + "@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==" + }, + "@kikobeats/time-span": { + "version": "1.0.3" + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4" + }, + "@libp2p/autonat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/autonat/-/autonat-1.1.1.tgz", + "integrity": "sha512-x5gBMfYOiv3Yjc6cmtQJkr4lH7bKhtbzB+bPiJekSZzwnSFok5DBg6yBxktde+M+QOUQcNGQHUCeWU2fifP6IQ==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5", + "@multiformats/multiaddr": "^12.2.3", + "it-first": "^3.0.6", + "it-length-prefixed": "^9.0.4", + "it-map": "^3.1.0", + "it-parallel": "^3.0.7", + "it-pipe": "^3.0.1", + "protons-runtime": "^5.4.0", + "uint8arraylist": "^2.4.8" + }, "dependencies": { - "fn.name": "1.x.x" + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" + "@libp2p/bootstrap": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-10.1.1.tgz", + "integrity": "sha512-pm7LyIQnKjGjmLq89IvwRWJIkB90bUspVl3WMTq7boPeZ3Keo+RlNFSJHL5YtDZa/Jvu/iQR+SVxSmjrKdzn8w==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-id": "^4.2.0", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.2.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" + "@libp2p/circuit-relay-v2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/circuit-relay-v2/-/circuit-relay-v2-1.1.1.tgz", + "integrity": "sha512-Tj4BWZBKdoCIKkHlF/z6RFNzdqECtSaC5AKiUcB20Ggb4GDrCTRzCv05cMeS2jb4hhky259DXynKUrg1V7tG7Q==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/peer-record": "^7.0.21", + "@libp2p/utils": "^5.4.5", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.2.3", + "any-signal": "^4.1.1", + "it-protobuf-stream": "^1.1.3", + "it-stream-types": "^2.0.1", + "multiformats": "^13.1.0", + "p-defer": "^4.0.1", + "progress-events": "^1.0.0", + "protons-runtime": "^5.4.0", + "race-signal": "^1.0.2", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "@libp2p/crypto": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-4.1.5.tgz", + "integrity": "sha512-iQyFljvVza7npzrJNjOCqP1DlvDcGyOxCjlzU0gCLb4Jt0ZyTQDosk3wV7r3hAqCCeoBpm/CB5viJGixhkKgIQ==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0", + "asn1js": "^3.0.5", + "multiformats": "^13.1.0", + "protons-runtime": "^5.4.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" }, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "@noble/curves": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", + "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "requires": { + "@noble/hashes": "1.4.0" + } + }, + "@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", - "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", - "license": "MIT", - "dependencies": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@libp2p/dcutr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/dcutr/-/dcutr-1.1.1.tgz", + "integrity": "sha512-4rADvCkMF2yhxSUu8vJUVp/oKO1ISr2RPx59kqpWrtsEu1cNnxKTl/a3/xutzS+BErCiAldOffu8TDPWxYfMag==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/utils": "^5.4.5", + "@multiformats/multiaddr": "^12.2.3", + "@multiformats/multiaddr-matcher": "^1.2.1", + "delay": "^6.0.0", + "it-protobuf-stream": "^1.1.3", + "protons-runtime": "^5.4.0", + "uint8arraylist": "^2.4.8" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "delay": { + "version": "6.0.0" + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" + "@libp2p/identify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-2.1.1.tgz", + "integrity": "sha512-vNaz2sKJh7wzNdDnkDn9RBPL7WhotGd78ogkDmr3N5J8V50wSXjA556tHa8eO5dqtyTTHZ0TTa6C0BPW/vxGng==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/peer-record": "^7.0.21", + "@multiformats/multiaddr": "^12.2.3", + "@multiformats/multiaddr-matcher": "^1.2.1", + "it-drain": "^3.0.7", + "it-parallel": "^3.0.7", + "it-protobuf-stream": "^1.1.3", + "protons-runtime": "^5.4.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0", + "wherearewe": "^2.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "@libp2p/interface": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-1.6.0.tgz", + "integrity": "sha512-PqcWA/wQFwk8bcevwUez5KYd0FKhKrOJOfKy+qGzDnKsPN3c0W6m/yiYXE7VJ6rAynL9ITxRddub3hEktthVCg==", + "requires": { + "@multiformats/multiaddr": "^12.2.3", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.1", + "multiformats": "^13.1.0", + "progress-events": "^1.0.0", + "uint8arraylist": "^2.4.8" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@libp2p/interface-internal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-1.3.0.tgz", + "integrity": "sha512-M2s/iCJ3+bKOcKkzeycCEkVA7fpZfVnptVm2DdKV1gYvC4ClVT21Hq4Ki2TZA/kibb7clWi5LTeed2jvMwj3pg==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-collections": "^5.2.5", + "@multiformats/multiaddr": "^12.2.3", + "progress-events": "^1.0.0", + "uint8arraylist": "^2.4.8" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "license": "MIT", - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" + "@libp2p/kad-dht": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-12.1.1.tgz", + "integrity": "sha512-h9l1z8Pg43yHWhMfn0YN2xtwXpNUPkfj09Ims3+QZ5Yz4YUdrJ6pr2g9ZiE55my/dOEyKmCffO8mieCz8b2jxQ==", + "requires": { + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/record": "^4.0.3", + "@libp2p/utils": "^5.4.5", + "@multiformats/multiaddr": "^12.2.3", + "any-signal": "^4.1.1", + "hashlru": "^2.3.0", + "interface-datastore": "^8.2.11", + "it-drain": "^3.0.7", + "it-length": "^3.0.6", + "it-length-prefixed": "^9.0.4", + "it-map": "^3.1.0", + "it-merge": "^3.0.5", + "it-parallel": "^3.0.7", + "it-pipe": "^3.0.1", + "it-protobuf-stream": "^1.1.3", + "it-take": "^3.0.5", + "multiformats": "^13.1.0", + "p-defer": "^4.0.1", + "p-event": "^6.0.1", + "p-queue": "^8.0.1", + "progress-events": "^1.0.0", + "protons-runtime": "^5.4.0", + "race-signal": "^1.0.2", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" + "@libp2p/logger": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.16.tgz", + "integrity": "sha512-yk+vL8QX7WoTwcfjDghvA3OZjwqiM4/VHxhr6kXfs691nE7czgdCbnBEJOwgfbR8IJpy39z9BDstoACMNmNEWQ==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@multiformats/multiaddr": "^12.2.3", + "debug": "^4.3.4", + "interface-datastore": "^8.2.11", + "multiformats": "^13.1.0" + }, + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" + "@libp2p/mdns": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-10.1.1.tgz", + "integrity": "sha512-XtOv8EWx/nSFrMjFEAUjxt6OO74hny6miEovyTK6XoX7f0iWss307Umro362RyumsC6UNt7J5IXsMQ/MOAxLog==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5", + "@multiformats/multiaddr": "^12.2.3", + "@types/multicast-dns": "^7.2.4", + "dns-packet": "^5.6.1", + "multicast-dns": "^7.2.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@libp2p/multistream-select": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-5.1.13.tgz", + "integrity": "sha512-p1OL9ESDwmhMXSRBRuEBkth77E/co5rO6UUIhm06rjmaYws4YJlgAgH7OsjtWYDb6LSJxh8Kp3B0/uvJoH+rSQ==", + "requires": { + "@libp2p/interface": "^1.6.0", + "it-length-prefixed": "^9.0.4", + "it-length-prefixed-stream": "^1.1.7", + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.1", + "race-signal": "^1.0.2", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@libp2p/peer-collections": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-5.2.5.tgz", + "integrity": "sha512-ZwR1VCIMYdH/YnsU7LyQEI0xCsKC3hZFnU+JAx0Js+uyL4me0KKofgGmy2Hz25qPVlbaLPOL3LWwEf397AqdsQ==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5" } }, - "node_modules/os-name": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-5.1.0.tgz", - "integrity": "sha512-YEIoAnM6zFmzw3PQ201gCVCIWbXNyKObGlVvpAVvraAeOHnlYVKFssbA/riRX5R40WA6kKrZ7Dr7dWzO3nKSeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "macos-release": "^3.1.0", - "windows-release": "^5.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@libp2p/peer-id": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-4.2.0.tgz", + "integrity": "sha512-VCScUTVuPNkoZmddM5NtuI0tuFZhFG6ypk7tX1svumA+9sEIx9x4duNIb/Rt+E7E7fDINcBnqxiQpBRUCRtDBQ==", + "requires": { + "@libp2p/interface": "^1.6.0", + "multiformats": "^13.1.0", + "uint8arrays": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "@libp2p/peer-id-factory": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-4.2.0.tgz", + "integrity": "sha512-iyUnUgcSirGL13uEKAuFJUqLYT2DHWH9hxwBN/KSk1ati4jYYDqJb3zUmhgjEbs5jnx9AZ+c1oZYkVu5ta7BCA==", + "requires": { + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-id": "^4.2.0", + "protons-runtime": "^5.4.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + }, + "dependencies": { + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "license": "MIT", - "engines": { - "node": ">=8" + "@libp2p/peer-record": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-7.0.21.tgz", + "integrity": "sha512-wIeadVfNsCv6p8zCMiAyqS5qUeuzVGiN2Y4h+vv/ucyJAjxnKIjdwxppl1rT1gJ6ycSKWcZuUoOaD5WIaSrTkg==", + "requires": { + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5", + "@multiformats/multiaddr": "^12.2.3", + "protons-runtime": "^5.4.0", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + }, + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-defer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz", - "integrity": "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==", - "license": "MIT", - "engines": { - "node": ">=12" + "@libp2p/peer-store": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-10.1.1.tgz", + "integrity": "sha512-2lYlTIm3bEZkIzwwHHJjup3kzkV10NOOsGjkVgZQPH0xGXO4V7Bdh7Wlr5t3YyuMC8Ph4VwVVM293Bzh6rrj+A==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/peer-record": "^7.0.21", + "@multiformats/multiaddr": "^12.2.3", + "interface-datastore": "^8.2.11", + "it-all": "^3.0.6", + "mortice": "^3.0.4", + "multiformats": "^13.1.0", + "protons-runtime": "^5.4.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "license": "MIT", - "engines": { - "node": ">=8" + "@libp2p/ping": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-1.1.1.tgz", + "integrity": "sha512-5hJTkpfewmTk5PHcsr29ldJSViwZltQD7PGrJa+0woRPS0iEXHk5hNMvfYnNR/sv0XyRTjZmHtvhaI9S83Lpkw==", + "requires": { + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@multiformats/multiaddr": "^12.2.3", + "it-first": "^3.0.6", + "it-pipe": "^3.0.1", + "uint8arrays": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-event": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", - "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", - "license": "MIT", - "dependencies": { - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=16.17" + "@libp2p/pubsub": { + "version": "9.0.22", + "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-9.0.22.tgz", + "integrity": "sha512-aMFUgq22Piv/0NrXoQlb9cy5aMqPegd1Jc0NQ2UvvhVR9m+tQW29y3czm9P7goacGnhFe8m/YONfcDhynX69Vw==", + "requires": { + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/utils": "^5.4.5", + "it-length-prefixed": "^9.0.4", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "multiformats": "^13.1.0", + "p-queue": "^8.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "license": "MIT", - "dependencies": { - "p-map": "^2.0.0" + "@libp2p/pubsub-peer-discovery": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/pubsub-peer-discovery/-/pubsub-peer-discovery-10.0.2.tgz", + "integrity": "sha512-7DLasMSo443nxPJ+X95tXazXgO96K2/TafoexDxi4QVWIKgkmK+HyoFRcmwog2pjhA1/KQUsPu8S8wH6Ns9Oow==", + "requires": { + "@libp2p/interface": "^1.0.1", + "@libp2p/interface-internal": "^1.0.1", + "@libp2p/peer-id": "^4.0.1", + "@multiformats/multiaddr": "^12.0.0", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.9" }, - "engines": { - "node": ">=8" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.1.11", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "dns-over-http-resolver": "3.0.0", + "multiformats": "^12.0.1", + "uint8-varint": "^2.0.1", + "uint8arrays": "^4.0.2" + } + }, + "dns-over-http-resolver": { + "version": "3.0.0", + "requires": { + "debug": "^4.3.4", + "receptacle": "^1.3.2" + } + }, + "uint8arrays": { + "version": "4.0.10", + "requires": { + "multiformats": "^12.0.1" + } + } } }, - "node_modules/p-filter/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "license": "MIT", - "engines": { - "node": ">=6" + "@libp2p/record": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/record/-/record-4.0.3.tgz", + "integrity": "sha512-UiyC4MFasDwQHw+7CVUsCqvu4y5pYDZER9wPm9Rm8dlmlOn8GoXKF6CSKWx5rOk744EPaCNjwAMv9sD0u3IfUw==", + "requires": { + "protons-runtime": "^5.4.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + }, + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" + "@libp2p/tcp": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-9.1.1.tgz", + "integrity": "sha512-vVwHwL9EOPNvPqTS0uQXnNnVYw0MEtIeV72yVffecw8hp1QpuRuVtinCEfdT0Pf2Ecfh0f6YHGR4cliWK4pqUQ==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/utils": "^5.4.5", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.2.3", + "@types/sinon": "^17.0.3", + "progress-events": "^1.0.0", + "stream-to-it": "^1.0.1" + }, + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "license": "MIT", - "engines": { - "node": ">=8" + "@libp2p/upnp-nat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@libp2p/upnp-nat/-/upnp-nat-1.2.1.tgz", + "integrity": "sha512-wCE0gxm/W8yE4JAdvZ3f6pTySfebi85FhLhqzQBWWHLSCs4c2PsPt7WCFHaXgPobmPbWXvoESVwV+wCKUhJc3w==", + "requires": { + "@achingbrain/nat-port-mapper": "^1.0.13", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/utils": "^5.4.5", + "@multiformats/multiaddr": "^12.2.3", + "wherearewe": "^2.0.1" + }, + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "@libp2p/utils": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-5.4.5.tgz", + "integrity": "sha512-PInUa1jZFILeBl0ilV0bLQkfZFp8chtYZbgiY3lGTX1sPQgl1nZDLjVg7F7/lpW0+FWZaACqEJKtHpUOTLrQow==", + "requires": { + "@chainsafe/is-ip": "^2.0.2", + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/logger": "^4.0.16", + "@multiformats/multiaddr": "^12.2.3", + "@multiformats/multiaddr-matcher": "^1.2.1", + "@sindresorhus/fnv1a": "^3.1.0", + "@types/murmurhash3js-revisited": "^3.0.3", + "any-signal": "^4.1.1", + "delay": "^6.0.0", + "get-iterator": "^2.0.1", + "is-loopback-addr": "^2.0.2", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.1", + "murmurhash3js-revisited": "^3.0.0", + "netmask": "^2.0.2", + "p-defer": "^4.0.1", + "race-event": "^1.3.0", + "race-signal": "^1.0.2", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "delay": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-6.0.0.tgz", + "integrity": "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw==" + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" + "@libp2p/websockets": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-8.1.1.tgz", + "integrity": "sha512-Iwh+bZnDlft5rVEfJCddtUFRYRT2OARUm60UuD10bYndwnJM3f/kMWXPo0EoE3nULpejOS5VCcR6/Ipm3PIUiw==", + "requires": { + "@libp2p/interface": "^1.6.0", + "@libp2p/utils": "^5.4.5", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.2.3", + "@multiformats/multiaddr-to-uri": "^10.0.1", + "@types/ws": "^8.5.10", + "it-ws": "^6.1.1", + "p-defer": "^4.0.1", + "progress-events": "^1.0.0", + "race-signal": "^1.0.2", + "wherearewe": "^2.0.1", + "ws": "^8.17.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-map/node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "license": "MIT", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" + "@multiformats/dns": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz", + "integrity": "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw==", + "requires": { + "@types/dns-packet": "^5.6.5", + "buffer": "^6.0.3", + "dns-packet": "^5.6.1", + "hashlru": "^2.3.0", + "p-queue": "^8.0.1", + "progress-events": "^1.0.0", + "uint8arrays": "^5.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-map/node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" + "@multiformats/mafmt": { + "version": "12.1.6", + "requires": { + "@multiformats/multiaddr": "^12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@libp2p/interface": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6.tgz", + "integrity": "sha512-Lzc5cS/hXuoXhuAbVIxJIHLCYmfPcbU0vVgrpMoiP1Qb2Q3ETU4A46GB8s8mWXgSU6tr9RcqerUqzFYD6+OAag==", + "requires": { + "@multiformats/multiaddr": "^12.1.5", + "abortable-iterator": "^5.0.1", + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "multiformats": "^12.0.1", + "p-defer": "^4.0.0", + "race-signal": "^1.0.0", + "uint8arraylist": "^2.4.3" + } + }, + "@multiformats/multiaddr": { + "version": "12.1.8", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^0.1.1", + "dns-over-http-resolver": "^2.1.0", + "multiformats": "^12.0.1", + "uint8-varint": "^2.0.1", + "uint8arrays": "^4.0.2" + } + } } }, - "node_modules/p-map/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" + "@multiformats/multiaddr": { + "version": "10.5.0", + "requires": { + "dns-over-http-resolver": "^2.1.0", + "err-code": "^3.0.1", + "is-ip": "^5.0.0", + "multiformats": "^9.4.5", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "multiformats": { + "version": "9.9.0" + }, + "uint8arrays": { + "version": "3.1.1", + "requires": { + "multiformats": "^9.4.2" + } + } } }, - "node_modules/p-map/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "license": "MIT", - "engines": { - "node": ">=12" + "@multiformats/multiaddr-matcher": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-1.2.4.tgz", + "integrity": "sha512-GgpqzQFL4Mj8t7cLNHC5nuYUuSm0kTtSUyYswiyWwTSUY3XwRAMx0UiFWQg+ETk0u+/IvFaHxfnyEoH3tasvwg==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@multiformats/multiaddr": "^12.0.0", + "multiformats": "^13.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@libp2p/interface": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6.tgz", + "integrity": "sha512-Lzc5cS/hXuoXhuAbVIxJIHLCYmfPcbU0vVgrpMoiP1Qb2Q3ETU4A46GB8s8mWXgSU6tr9RcqerUqzFYD6+OAag==", + "requires": { + "@multiformats/multiaddr": "^12.1.5", + "abortable-iterator": "^5.0.1", + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "multiformats": "^12.0.1", + "p-defer": "^4.0.0", + "race-signal": "^1.0.0", + "uint8arraylist": "^2.4.3" + }, + "dependencies": { + "multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==" + } + } + }, + "@multiformats/multiaddr": { + "version": "12.1.8", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^0.1.1", + "dns-over-http-resolver": "^2.1.0", + "multiformats": "^12.0.1", + "uint8-varint": "^2.0.1", + "uint8arrays": "^4.0.2" + }, + "dependencies": { + "multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==" + } + } + }, + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + } } }, - "node_modules/p-queue": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz", - "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=18" + "@multiformats/multiaddr-to-uri": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-10.1.0.tgz", + "integrity": "sha512-ZNwSAx3ssBWwd4y0LKrOsq9xG7LBHboQxnUdSduNc2fTh/NS1UjA2slgUy6KHxH5k9S2DSus0iU2CoyJyN0/pg==", + "requires": { + "@multiformats/multiaddr": "^12.3.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "license": "MIT", - "engines": { - "node": ">=8" - } + "@noble/ciphers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", + "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==" }, - "node_modules/p-retry": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-5.1.2.tgz", - "integrity": "sha512-couX95waDu98NfNZV+i/iLt+fdVxmI7CbrrdC2uDWfPdUAApyxT4wmDlyOtR5KtTDmkDO0zDScDjDou9YHhd9g==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.1", - "retry": "^0.13.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@noble/curves": { + "version": "1.2.0", + "requires": { + "@noble/hashes": "1.3.2" } }, - "node_modules/p-tap": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-tap/-/p-tap-3.1.0.tgz", - "integrity": "sha512-xJSaeByOOQu5GnHEcnrxMkNi8O3Ez5X1wz8RT6wiL3mJFd4oXcSOvcKq+1CFUtuVYTSTWL/8rlkaCJRoR+L+NA==", - "license": "MIT", - "engines": { - "node": ">=8" - } + "@noble/hashes": { + "version": "1.3.2" }, - "node_modules/p-timeout": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", - "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true }, - "node_modules/p-wait-for": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz", - "integrity": "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==", - "license": "MIT", - "dependencies": { - "p-timeout": "^6.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "@nodeutils/defaults-deep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nodeutils/defaults-deep/-/defaults-deep-1.1.0.tgz", + "integrity": "sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg==", "dev": true, - "license": "MIT", - "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.5", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" - }, - "engines": { - "node": ">= 14" + "requires": { + "lodash": "^4.15.0" } }, - "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.5.2" } }, - "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "optional": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@oceanprotocol/contracts": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-2.5.0.tgz", + "integrity": "sha512-w7YwpmqvQRBmdY/4LMLmsFDFPt+dpNZGmqxfhq9mOHSSFKg0G9cYoVZ+GV6yyp8tdUNHs9IteQooPO2kg3HCXA==" + }, + "@oceanprotocol/ddo-js": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@oceanprotocol/ddo-js/-/ddo-js-0.1.4.tgz", + "integrity": "sha512-+9nOslJCYMiIldIQ8dixdSjBjrrlqzb9q+nRQXqn60ZIi45AoR4ajv1LdqPwScCmoeLZgMxiZsnUXq/suDSLNg==", + "requires": { + "@rdfjs/formats-common": "^3.1.0", + "@types/rdfjs__formats-common": "^3.1.5", + "@zazuko/env-node": "^2.1.4", + "chai": "^5.1.2", + "ethers": "^6.15.0", + "rdf-literal": "^2.0.0", + "rdf-validate-shacl": "^0.5.6" + }, + "dependencies": { + "@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "requires": { + "@types/node": "*" + } + }, + "assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==" + }, + "chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "requires": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + } + }, + "check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==" + }, + "deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==" + }, + "loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==" + }, + "pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==" + }, + "rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "requires": { + "@rdfjs/types": "^2.0.0" + } + }, + "rdf-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-2.0.0.tgz", + "integrity": "sha512-jlQ+h7EvnXmncmk8OzOYR8T3gNfd4g0LQXbflHkEkancic8dh0Tdt5RiRq8vUFndjIeNHt1RWeA5TAj6rgrtng==", + "requires": { + "rdf-data-factory": "^2.0.0" + } + } } }, - "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "dev": true + }, + "@octokit/core": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" + "requires": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + } + }, + "@octokit/endpoint": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.2.tgz", + "integrity": "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==", + "dev": true, + "requires": { + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" } }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "@octokit/graphql": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", "dev": true, - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" + "requires": { + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" } }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } + "@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "dev": true }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" + "@octokit/plugin-paginate-rest": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.2.1.tgz", + "integrity": "sha512-Tj4PkZyIL6eBMYcG/76QGsedF0+dWVeLhYprTmuFVVxzDW7PQh23tM0TP0z+1MvSkxB29YFZwnUX+cXfTiSdyw==", + "dev": true, + "requires": { + "@octokit/types": "^15.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@octokit/openapi-types": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-26.0.0.tgz", + "integrity": "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==", + "dev": true + }, + "@octokit/types": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.2.tgz", + "integrity": "sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^26.0.0" + } + } } }, - "node_modules/package-json/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } + "@octokit/plugin-request-log": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", + "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", + "dev": true, + "requires": {} }, - "node_modules/package-json/node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" + "@octokit/plugin-rest-endpoint-methods": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-16.1.1.tgz", + "integrity": "sha512-VztDkhM0ketQYSh5Im3IcKWFZl7VIrrsCaHbDINkdYeiiAsJzjhS2xRFCSJgfN6VOcsoW4laMtsmf3HcNqIimg==", + "dev": true, + "requires": { + "@octokit/types": "^15.0.1" }, - "engines": { - "node": ">=14.16" + "dependencies": { + "@octokit/openapi-types": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-26.0.0.tgz", + "integrity": "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==", + "dev": true + }, + "@octokit/types": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.2.tgz", + "integrity": "sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^26.0.0" + } + } } }, - "node_modules/package-json/node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" + "@octokit/request": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.7.tgz", + "integrity": "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==", + "dev": true, + "requires": { + "@octokit/endpoint": "^11.0.2", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "universal-user-agent": "^7.0.2" } }, - "node_modules/package-json/node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" + "@octokit/request-error": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "dev": true, + "requires": { + "@octokit/types": "^16.0.0" } }, - "node_modules/package-json/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@octokit/rest": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.0.tgz", + "integrity": "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==", + "dev": true, + "requires": { + "@octokit/core": "^7.0.2", + "@octokit/plugin-paginate-rest": "^13.0.1", + "@octokit/plugin-request-log": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^16.0.0" } }, - "node_modules/package-json/node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "@octokit/types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^27.0.0" } }, - "node_modules/package-json/node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } + "@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==" }, - "node_modules/package-json/node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "@phun-ky/typeof": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@phun-ky/typeof/-/typeof-2.0.3.tgz", + "integrity": "sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==", + "dev": true }, - "node_modules/package-json/node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true }, - "node_modules/package-json/node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@pkgr/utils": { + "version": "2.4.2", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "dependencies": { + "open": { + "version": "9.1.0", + "dev": true, + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + } } }, - "node_modules/package-json/node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/package-json/node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@rdfjs/data-model": { + "version": "2.0.1" + }, + "@rdfjs/dataset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-2.0.2.tgz", + "integrity": "sha512-6YJx+5n5Uxzq9dd9I0GGcIo6eopZOPfcsAfxSGX5d+YBzDgVa1cbtEBFnaPyPKiQsOm4+Cr3nwypjpg02YKPlA==" + }, + "@rdfjs/environment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/environment/-/environment-1.0.0.tgz", + "integrity": "sha512-+S5YjSvfoQR5r7YQCRCCVHvIEyrWia7FJv2gqM3s5EDfotoAQmFeBagApa9c/eQFi5EiNhmBECE5nB8LIxTaHg==" + }, + "@rdfjs/fetch-lite": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@rdfjs/fetch-lite/-/fetch-lite-3.2.3.tgz", + "integrity": "sha512-CZfUsBekFIDYCoXBW59ehgYctIluqatWB0YqCJoA8scENuo5IHPXdPMiLt1YVqUnxQ4STwEBOUoIiaCVxwfOFg==", + "requires": { + "is-stream": "^4.0.1", + "nodeify-fetch": "^3.1.0", + "readable-stream": "^4.5.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==" + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" + "@rdfjs/formats": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/formats/-/formats-4.0.1.tgz", + "integrity": "sha512-Rg53vP+x1bnGAqJNKgEzJEUPDhj+tCpzb6wdmfLoVFq4XoZ589+cg2ScFDUMMyAVsgKXvSWjDhQ9f9ab254ZxA==", + "requires": { + "@rdfjs/parser-jsonld": "^2.1.0", + "@rdfjs/parser-n3": "^2.0.1", + "@rdfjs/serializer-jsonld": "^2.0.0", + "@rdfjs/serializer-jsonld-ext": "^4.0.0", + "@rdfjs/serializer-ntriples": "^2.0.0", + "@rdfjs/serializer-turtle": "^1.1.1", + "@rdfjs/sink-map": "^2.0.0", + "rdfxml-streaming-parser": "^3.0.1" }, - "engines": { - "node": ">=6" + "dependencies": { + "@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "requires": { + "@types/node": "*" + } + }, + "@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "requires": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "requires": { + "@rdfjs/types": "^2.0.0" + } + }, + "rdfxml-streaming-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-3.0.1.tgz", + "integrity": "sha512-lJtJ85xEJHc5BXohOPtxjYMEbGK3uiRxROwJLVNGanjuKLT9BWJluoNr3RzS9vQNmjkQwhhYmrbIftw1WUOj7Q==", + "requires": { + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^4.0.18", + "buffer": "^6.0.3", + "rdf-data-factory": "^2.0.0", + "readable-stream": "^4.4.2", + "relative-to-absolute-iri": "^1.0.0", + "validate-iri": "^1.0.0" + } + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, - "node_modules/parse-github-url": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.3.tgz", - "integrity": "sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==", - "dev": true, - "license": "MIT", - "bin": { - "parse-github-url": "cli.js" - }, - "engines": { - "node": ">= 0.10" + "@rdfjs/formats-common": { + "version": "3.1.0", + "requires": { + "@rdfjs/parser-jsonld": "^2.0.0", + "@rdfjs/parser-n3": "^2.0.0", + "@rdfjs/serializer-jsonld": "^2.0.0", + "@rdfjs/serializer-ntriples": "^2.0.0", + "@rdfjs/sink-map": "^2.0.0", + "rdfxml-streaming-parser": "^2.2.0" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@rdfjs/namespace": { + "version": "2.0.0", + "requires": { + "@rdfjs/data-model": "^2.0.0" } }, - "node_modules/parse-ms": { + "@rdfjs/parser-jsonld": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "license": "MIT", - "engines": { - "node": ">=6" + "requires": { + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/sink": "^2.0.0", + "duplex-to": "^2.0.0", + "jsonld-streaming-parser": "^3.0.0", + "readable-stream": "^4.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.0" + "@rdfjs/parser-n3": { + "version": "2.0.1", + "requires": { + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/sink": "^2.0.0", + "duplex-to": "^2.0.0", + "n3": "^1.16.2", + "readable-stream": "^4.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", - "dev": true, - "license": "MIT", + "@rdfjs/prefix-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/prefix-map/-/prefix-map-0.1.2.tgz", + "integrity": "sha512-qapFYVPYyYepg0sFy7T512667iZsN9a3RNcyNBTBV+O8wrU3v/URQZOipCTNrEm1BXzZ7KCK1Yi8HrE1y+uRuQ==", + "requires": { + "readable-stream": "^4.3.0" + }, "dependencies": { - "parse-path": "^7.0.0" + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "@rdfjs/serializer-jsonld": { + "version": "2.0.0", + "requires": { + "@rdfjs/sink": "^2.0.0", + "readable-stream": "^4.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/pascalcase": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-2.0.0.tgz", - "integrity": "sha512-DHpENy5Qm/FaX+x3iBLoMLG/XHNCTgL+yErm1TwuVaj6u4fiOSkYkf60vGtITk7hrKHOO4uCl9vRrD4hqjNKjg==", - "license": "MIT", - "dependencies": { - "camelcase": "^6.2.1" + "@rdfjs/serializer-jsonld-ext": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld-ext/-/serializer-jsonld-ext-4.0.1.tgz", + "integrity": "sha512-eGNAdhsV8wkmCadyIN+PBfsN+BIiqplAd5VMc++wf5McsVi/vPNrWcBINdrNnlegml8nLUy0rlKztCQ/4pxW8w==", + "requires": { + "@rdfjs/sink": "^2.0.1", + "jsonld": "^8.3.3", + "readable-stream": "^4.7.0", + "stream-chunks": "^1.0.0" }, - "engines": { - "node": ">=14" + "dependencies": { + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/pascalcase/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@rdfjs/serializer-ntriples": { + "version": "2.0.0", + "requires": { + "@rdfjs/to-ntriples": "^2.0.0", + "duplex-to": "^2.0.0", + "readable-stream": "^4.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/patch-package": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", - "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", - "license": "MIT", - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^1.10.2" - }, - "bin": { - "patch-package": "index.js" + "@rdfjs/serializer-turtle": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-turtle/-/serializer-turtle-1.1.5.tgz", + "integrity": "sha512-uvIFUOuMuk8JrJnng/tWKIQ+8XI6YLEms75YdvZ49LtIyyfbDqKz76EybgnD/zZYfMhVVkguKtheBC9h08g1PQ==", + "requires": { + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/prefix-map": "^0.1.1", + "@rdfjs/sink": "^2.0.0", + "@rdfjs/term-map": "^2.0.0", + "@rdfjs/to-ntriples": "^3.0.1", + "@rdfjs/tree": "^0.2.1", + "readable-stream": "^4.3.0", + "stream-chunks": "^1.0.0" }, - "engines": { - "node": ">=10", - "npm": ">5" + "dependencies": { + "@rdfjs/to-ntriples": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-3.0.1.tgz", + "integrity": "sha512-gjoPAvh4j7AbGMjcDn/8R4cW+d/FPtbfbMM0uQXkyfBFtNUW2iVgrqsgJ65roLc54Y9A2TTFaeeTGSvY9a0HCQ==" + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/patch-package/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@rdfjs/sink": { + "version": "2.0.1" + }, + "@rdfjs/sink-map": { + "version": "2.0.1" + }, + "@rdfjs/term-map": { + "version": "2.0.0", + "requires": { + "@rdfjs/to-ntriples": "^2.0.0" } }, - "node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" + "@rdfjs/term-set": { + "version": "2.0.1", + "requires": { + "@rdfjs/to-ntriples": "^2.0.0" } }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@rdfjs/to-ntriples": { + "version": "2.0.0" + }, + "@rdfjs/traverser": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@rdfjs/traverser/-/traverser-0.1.4.tgz", + "integrity": "sha512-53QYlxiQIxH8k4jutjet1EjdZfyKCDSsfqnj2YejAJ1X8mLDMSOsneMM5savBwBR0ROfAhKVtZVb+pego+JLiw==", + "requires": { + "@rdfjs/to-ntriples": "^3.0.1" }, - "engines": { - "node": ">=10" + "dependencies": { + "@rdfjs/to-ntriples": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-3.0.1.tgz", + "integrity": "sha512-gjoPAvh4j7AbGMjcDn/8R4cW+d/FPtbfbMM0uQXkyfBFtNUW2iVgrqsgJ65roLc54Y9A2TTFaeeTGSvY9a0HCQ==" + } } }, - "node_modules/patch-package/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@rdfjs/tree": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@rdfjs/tree/-/tree-0.2.1.tgz", + "integrity": "sha512-J70CQ7R8Ivfs1FFUxtFN7ADb5wTMgbhn0O558NXSXQHItmSavT6cXmQlIokbmboU+grhu56iR/8Bl9do8LCq+w==", + "requires": { + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-map": "^2.0.0", + "@rdfjs/term-set": "^2.0.1" } }, - "node_modules/patch-package/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "@rdfjs/types": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "requires": { + "@types/node": "*" } }, - "node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "license": "MIT", - "engines": { - "node": ">=4" + "@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, + "@rubensworks/saxes": { + "version": "6.0.1", + "requires": { + "xmlchars": "^2.2.0" } }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==" + }, + "@sindresorhus/fnv1a": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/fnv1a/-/fnv1a-3.1.0.tgz", + "integrity": "sha512-KV321z5m/0nuAg83W1dPLy85HpHDk7Sdi4fJbwvacWsEhAh+rZUW4ZfGcXmUIvjZg4ss2bcwNlRhJ7GBEUG08w==" + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" } }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1" } }, - "node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" + "@sinonjs/samsam": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true + } } }, - "node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true + }, + "@smithy/abort-controller": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", + "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "license": "MIT", - "engines": { - "node": ">=6" + "@smithy/chunked-blob-reader": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz", + "integrity": "sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "@smithy/chunked-blob-reader-native": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz", + "integrity": "sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==", + "requires": { + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" } }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "license": "MIT", - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" + "@smithy/config-resolver": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", + "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", + "requires": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "tslib": "^2.6.2" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "license": "MIT" + "@smithy/core": { + "version": "3.18.7", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.7.tgz", + "integrity": "sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==", + "requires": { + "@smithy/middleware-serde": "^4.2.6", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" + "@smithy/credential-provider-imds": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", + "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", + "requires": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "tslib": "^2.6.2" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "@smithy/eventstream-codec": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.5.tgz", + "integrity": "sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==", + "requires": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.9.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" + "@smithy/eventstream-serde-browser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.5.tgz", + "integrity": "sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==", + "requires": { + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" + "@smithy/eventstream-serde-config-resolver": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.5.tgz", + "integrity": "sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + } }, - "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "license": "MIT" + "@smithy/eventstream-serde-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.5.tgz", + "integrity": "sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==", + "requires": { + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" + "@smithy/eventstream-serde-universal": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.5.tgz", + "integrity": "sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==", + "requires": { + "@smithy/eventstream-codec": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/path/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" + "@smithy/fetch-http-handler": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", + "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", + "requires": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + } }, - "node_modules/path/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" + "@smithy/hash-blob-browser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.6.tgz", + "integrity": "sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==", + "requires": { + "@smithy/chunked-blob-reader": "^5.2.0", + "@smithy/chunked-blob-reader-native": "^4.2.1", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "license": "MIT", - "engines": { - "node": "*" + "@smithy/hash-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", + "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", + "requires": { + "@smithy/types": "^4.9.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "license": "MIT", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" + "@smithy/hash-stream-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.5.tgz", + "integrity": "sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==", + "requires": { + "@smithy/types": "^4.9.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "license": "MIT" + "@smithy/invalid-dependency": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", + "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + } }, - "node_modules/pico-signals": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pico-signals/-/pico-signals-1.0.0.tgz", - "integrity": "sha512-Av5eg3cMtXbQVxVoIpP+dzHMBisRZuZy3htFWyaGGScT94AdfeT0On/QVhFNQhIMiY7aLi21W4pD+5KdWbEBUw==", - "license": "MIT" + "@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "requires": { + "tslib": "^2.6.2" + } }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "license": "ISC" + "@smithy/md5-js": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.5.tgz", + "integrity": "sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==", + "requires": { + "@smithy/types": "^4.9.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "@smithy/middleware-content-length": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", + "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", + "requires": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "license": "MIT", - "engines": { - "node": ">=4" + "@smithy/middleware-endpoint": { + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.14.tgz", + "integrity": "sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==", + "requires": { + "@smithy/core": "^3.18.7", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-middleware": "^4.2.5", + "tslib": "^2.6.2" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "@smithy/middleware-retry": { + "version": "4.4.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.14.tgz", + "integrity": "sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==", + "requires": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" } }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "license": "MIT", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@smithy/middleware-serde": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", + "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", + "requires": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "engines": { - "node": ">=4" + "@smithy/middleware-stack": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", + "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" + "@smithy/node-config-provider": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", + "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", + "requires": { + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@smithy/node-http-handler": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", + "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", + "requires": { + "@smithy/abort-controller": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" + "@smithy/property-provider": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", + "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" + "@smithy/protocol-http": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", + "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-conf/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "license": "MIT", - "engines": { - "node": ">=4" + "@smithy/querystring-builder": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", + "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", + "requires": { + "@smithy/types": "^4.9.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" + "@smithy/querystring-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", + "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@smithy/service-error-classification": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", + "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", + "requires": { + "@smithy/types": "^4.9.0" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@smithy/shared-ini-file-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", + "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@smithy/signature-v4": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", + "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", + "requires": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/smithy-client": { + "version": "4.9.10", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.10.tgz", + "integrity": "sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==", + "requires": { + "@smithy/core": "^3.18.7", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", + "tslib": "^2.6.2" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "@smithy/types": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", + "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-4.0.0.tgz", - "integrity": "sha512-N4zdA4sfOe6yCv+ulPCmpnIBQ5I60xfhDr1otdBBhKte9QtEf3bhfrfkW7dTb+IQ0iEx4ZDzas0kc1o5rdWpYg==", - "license": "MIT", - "dependencies": { - "find-up": "^6.2.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/url-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", + "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", + "requires": { + "@smithy/querystring-parser": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "requires": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "requires": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/pkg-up/node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-defaults-mode-browser": { + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.13.tgz", + "integrity": "sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==", + "requires": { + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/playwright-core": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.33.0.tgz", - "integrity": "sha512-aizyPE1Cj62vAECdph1iaMILpT0WUDCq3E6rW6I+dleSbBoGbktvJtzS6VHkZ4DKNEOG9qJpiom/ZxO+S15LAw==", - "license": "Apache-2.0", - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=14" + "@smithy/util-defaults-mode-node": { + "version": "4.2.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.16.tgz", + "integrity": "sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==", + "requires": { + "@smithy/config-resolver": "^4.4.3", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/playwright-test": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/playwright-test/-/playwright-test-8.4.0.tgz", - "integrity": "sha512-rRhdetA58SE/iplR3404mkYV0uqJaPF8QRcYO2RM2Tyd756D+SYbQwu+nEJiBILi4AiPTCBHZYS+10WOenPhJQ==", - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "camelcase": "^7.0.1", - "chokidar": "^3.5.3", - "cpy": "^9.0.1", - "esbuild": "0.17.18", - "events": "^3.3.0", - "globby": "^13.1.4", - "kleur": "^4.1.5", - "lilconfig": "^2.1.0", - "lodash": "^4.17.21", - "merge-options": "^3.0.4", - "nanoid": "^4.0.2", - "ora": "^6.3.0", - "p-wait-for": "5.0.2", - "path-browserify": "^1.0.1", - "playwright-core": "1.33.0", - "polka": "^0.5.2", - "premove": "^4.0.0", - "process": "^0.11.10", - "sade": "^1.8.1", - "sirv": "^2.0.3", - "source-map": "0.6.1", - "stream-browserify": "^3.0.0", - "strip-ansi": "^7.0.1", - "tape": "^5.6.3", - "tempy": "^3.0.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.1.0" - }, - "bin": { - "playwright-test": "cli.js", - "pw-test": "cli.js" - }, - "engines": { - "node": ">=16.0.0" + "@smithy/util-endpoints": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", + "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", + "requires": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/@esbuild/win32-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", - "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "@smithy/util-middleware": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", + "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", + "requires": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-retry": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", + "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", + "requires": { + "@smithy/service-error-classification": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/esbuild": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", - "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.18", - "@esbuild/android-arm64": "0.17.18", - "@esbuild/android-x64": "0.17.18", - "@esbuild/darwin-arm64": "0.17.18", - "@esbuild/darwin-x64": "0.17.18", - "@esbuild/freebsd-arm64": "0.17.18", - "@esbuild/freebsd-x64": "0.17.18", - "@esbuild/linux-arm": "0.17.18", - "@esbuild/linux-arm64": "0.17.18", - "@esbuild/linux-ia32": "0.17.18", - "@esbuild/linux-loong64": "0.17.18", - "@esbuild/linux-mips64el": "0.17.18", - "@esbuild/linux-ppc64": "0.17.18", - "@esbuild/linux-riscv64": "0.17.18", - "@esbuild/linux-s390x": "0.17.18", - "@esbuild/linux-x64": "0.17.18", - "@esbuild/netbsd-x64": "0.17.18", - "@esbuild/openbsd-x64": "0.17.18", - "@esbuild/sunos-x64": "0.17.18", - "@esbuild/win32-arm64": "0.17.18", - "@esbuild/win32-ia32": "0.17.18", - "@esbuild/win32-x64": "0.17.18" - } - }, - "node_modules/playwright-test/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" + "@smithy/util-stream": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", + "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", + "requires": { + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "requires": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@smithy/util-waiter": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.5.tgz", + "integrity": "sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==", + "requires": { + "@smithy/abort-controller": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/playwright-test/node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "license": "MIT", - "engines": { - "node": ">=14.16" + "@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true + }, + "@tpluscode/rdf-ns-builders": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tpluscode/rdf-ns-builders/-/rdf-ns-builders-4.3.0.tgz", + "integrity": "sha512-x3uh9mYwAU+PrALaDKhVjml1TCCWWduo6J8rybd9SMEEAoooXq1MYb13MRputjRT/kYaFyCND7LMobzhxZ/+bg==", + "requires": { + "@rdfjs/data-model": "^2", + "@rdfjs/namespace": "^2", + "@rdfjs/types": "*", + "@types/rdfjs__namespace": "^2.0.2", + "@zazuko/prefixes": "^2.0.1" } }, - "node_modules/playwright-test/node_modules/tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", - "license": "MIT", - "dependencies": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "requires": { + "@types/node": "*" } }, - "node_modules/playwright-test/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/body-parser": { + "version": "1.19.4", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/plur": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", - "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", - "license": "MIT", - "dependencies": { - "irregular-plurals": "^3.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/chai": { + "version": "4.3.10", + "dev": true + }, + "@types/clownface": { + "version": "2.0.7", + "peer": true, + "requires": { + "@rdfjs/types": ">=1.0.0", + "@types/rdfjs__environment": "*" } }, - "node_modules/polka": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/polka/-/polka-0.5.2.tgz", - "integrity": "sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==", - "license": "MIT", - "dependencies": { - "@polka/url": "^0.5.0", - "trouter": "^2.0.1" + "@types/connect": { + "version": "3.4.37", + "dev": true, + "requires": { + "@types/node": "*" } }, - "node_modules/pony-cause": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", - "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==", - "license": "0BSD", - "engines": { - "node": ">=12.0.0" + "@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "requires": { + "@types/node": "*" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "@types/dns-packet": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz", + "integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==", + "requires": { + "@types/node": "*" } }, - "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" + "@types/docker-modem": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", + "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/ssh2": "*" } }, - "node_modules/postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "license": "MIT", - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=6.14.4" + "@types/dockerode": { + "version": "3.3.31", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.31.tgz", + "integrity": "sha512-42R9eoVqJDSvVspV89g7RwRqfNExgievLNWoHkg7NoWIqAmavIbgQBb4oc0qRtHkxE+I3Xxvqv7qVXFABKPBTg==", + "dev": true, + "requires": { + "@types/docker-modem": "*", + "@types/node": "*", + "@types/ssh2": "*" } }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "@types/express": { + "version": "4.17.20", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" + "@types/express-serve-static-core": { + "version": "4.17.39", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/precinct": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", - "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==", - "license": "MIT", - "dependencies": { - "commander": "^2.20.3", - "debug": "^4.3.3", - "detective-amd": "^3.1.0", - "detective-cjs": "^3.1.1", - "detective-es6": "^2.2.1", - "detective-less": "^1.0.2", - "detective-postcss": "^4.0.0", - "detective-sass": "^3.0.1", - "detective-scss": "^2.0.1", - "detective-stylus": "^1.0.0", - "detective-typescript": "^7.0.0", - "module-definition": "^3.3.1", - "node-source-walk": "^4.2.0" - }, - "bin": { - "precinct": "bin/cli.js" - }, - "engines": { - "node": "^10.13 || ^12 || >=14" + "@types/http-errors": { + "version": "2.0.3", + "dev": true + }, + "@types/http-link-header": { + "version": "1.0.5", + "requires": { + "@types/node": "*" } }, - "node_modules/precinct/node_modules/ast-module-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", - "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" + "@types/ip": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.3.tgz", + "integrity": "sha512-64waoJgkXFTYnCYDUWgSATJ/dXEBanVkaP5d4Sbk7P6U7cTTMhxVyROTckc6JKdwCrgnAjZMn0k3177aQxtDEA==", + "dev": true, + "requires": { + "@types/node": "*" } }, - "node_modules/precinct/node_modules/detective-cjs": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.3.tgz", - "integrity": "sha512-ljs7P0Yj9MK64B7G0eNl0ThWSYjhAaSYy+fQcpzaKalYl/UoQBOzOeLCSFEY1qEBhziZ3w7l46KG/nH+s+L7BQ==", - "license": "MIT", - "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">=6.0" + "@types/json-schema": { + "version": "7.0.14", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/jsonld": { + "version": "1.5.13" + }, + "@types/jsonwebtoken": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", + "dev": true, + "requires": { + "@types/ms": "*", + "@types/node": "*" } }, - "node_modules/precinct/node_modules/detective-es6": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.2.tgz", - "integrity": "sha512-eZUKCUsbHm8xoeoCM0z6JFwvDfJ5Ww5HANo+jPR7AzkFpW9Mun3t/TqIF2jjeWa2TFbAiGaWESykf2OQp3oeMw==", - "license": "MIT", - "dependencies": { - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">=6.0" + "@types/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", + "dev": true + }, + "@types/mime": { + "version": "1.3.4", + "dev": true + }, + "@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true + }, + "@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true + }, + "@types/multicast-dns": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@types/multicast-dns/-/multicast-dns-7.2.4.tgz", + "integrity": "sha512-ib5K4cIDR4Ro5SR3Sx/LROkMDa0BHz0OPaCBL/OSPDsAXEGZ3/KQeS6poBKYVN7BfjXDL9lWNwzyHVgt/wkyCw==", + "requires": { + "@types/dns-packet": "*", + "@types/node": "*" + } + }, + "@types/murmurhash3js-revisited": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.3.tgz", + "integrity": "sha512-QvlqvYtGBYIDeO8dFdY4djkRubcrc+yTJtBc7n8VZPlJDUS/00A+PssbvERM8f9bYRmcaSEHPZgZojeQj7kzAA==" + }, + "@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "requires": { + "undici-types": "~5.26.4" } }, - "node_modules/precinct/node_modules/node-source-walk": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.0.0" - }, - "engines": { - "node": ">=6.0" + "@types/node-cron": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.11.tgz", + "integrity": "sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==", + "dev": true + }, + "@types/parse-path": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", + "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.1", + "requires": { + "@types/node": "*" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" + "@types/qs": { + "version": "6.9.9", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.6", + "dev": true + }, + "@types/rdf-dataset-ext": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/rdf-dataset-ext/-/rdf-dataset-ext-1.0.8.tgz", + "integrity": "sha512-ngMGOzAm+yvrfTzFhlmPNa9lfWO72IkdqYRR+HNIPX3x+RPLf6qRpAi8GAZCg0rkpGt2JJqDQF3FgVxE6ykr/w==", + "peer": true, + "requires": { + "@rdfjs/types": ">=1.0.0", + "@types/readable-stream": "*" } }, - "node_modules/premove": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/premove/-/premove-4.0.0.tgz", - "integrity": "sha512-zim/Hr4+FVdCIM7zL9b9Z0Wfd5Ya3mnKtiuDv7L5lzYzanSq6cOcVJ7EFcgK4I0pt28l8H0jX/x3nyog380XgQ==", - "license": "MIT", - "bin": { - "premove": "bin.js" - }, - "engines": { - "node": ">=6" + "@types/rdfjs__data-model": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/rdfjs__data-model/-/rdfjs__data-model-2.0.9.tgz", + "integrity": "sha512-rgQSlM9jr7XMZdC0xUIr0zsxf5FvdB4cxxzv+MlHm6uJGip5qi0q+BluNhakAzaM2I56nKLDqSE3I/XuOaHGnA==", + "peer": true, + "requires": { + "@rdfjs/types": "*" } }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "@types/rdfjs__dataset": { + "version": "2.0.7", + "peer": true, + "requires": { + "@rdfjs/types": "*" } }, - "node_modules/prettier-linter-helpers": { + "@types/rdfjs__environment": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" + "resolved": "https://registry.npmjs.org/@types/rdfjs__environment/-/rdfjs__environment-1.0.0.tgz", + "integrity": "sha512-MDcnv3qfJvbHoEpUQXj5muT8g3e+xz1D8sGevrq3+Q4TzeEvQf5ijGX5l8485XFYrN/OBApgzXkHMZC04/kd5w==", + "peer": true, + "requires": { + "@rdfjs/types": "*", + "@types/node": "*" } }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "license": "MIT", - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/rdfjs__fetch-lite": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/rdfjs__fetch-lite/-/rdfjs__fetch-lite-3.0.11.tgz", + "integrity": "sha512-1bHxBn62bmTPq/HY9Jr+iKCdBp8RTEJ4WA0ycihghRF8zWQfw6T7E5CqdPi4nncmgF70LOz7jF/4jeLGdb6H2A==", + "peer": true, + "requires": { + "@rdfjs/types": "*", + "@types/node": "*", + "@types/rdfjs__formats": "*" } }, - "node_modules/private-ip": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-3.0.2.tgz", - "integrity": "sha512-2pkOVPGYD/4QyAg95c6E/4bLYXPthT5Xw4ocXYzIIsMBhskOMn6IwkWXmg6ZiA6K58+O6VD/n02r1hDhk7vDPw==", - "license": "MIT", - "dependencies": { - "@chainsafe/is-ip": "^2.0.1", - "ip-regex": "^5.0.0", - "ipaddr.js": "^2.1.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">=14.16" + "@types/rdfjs__formats": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdfjs__formats/-/rdfjs__formats-4.0.1.tgz", + "integrity": "sha512-Zj7hQEn5HeCj+pJCWshY2gqBcdBdwyc2j20Ht3PH91pkdRuG2AlGDD3N9PQ1oZ3+J6Q96rAlhxUbjQUp9+s3FQ==", + "peer": true, + "requires": { + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__parser-jsonld": "*", + "@types/rdfjs__parser-n3": "*", + "@types/rdfjs__serializer-jsonld": "*", + "@types/rdfjs__serializer-jsonld-ext": "*", + "@types/rdfjs__serializer-ntriples": "*", + "@types/rdfjs__serializer-turtle": "*", + "@types/rdfjs__sink-map": "*", + "rdfxml-streaming-parser": ">=2" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" + "@types/rdfjs__formats-common": { + "version": "3.1.5", + "requires": { + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__parser-jsonld": "*", + "@types/rdfjs__parser-n3": "*", + "@types/rdfjs__serializer-jsonld": "*", + "@types/rdfjs__serializer-ntriples": "*", + "@types/rdfjs__sink-map": "*", + "rdfxml-streaming-parser": ">=2" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "license": "MIT", - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" + "@types/rdfjs__namespace": { + "version": "2.0.10", + "requires": { + "@rdfjs/types": "*" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" + "@types/rdfjs__parser-jsonld": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/rdfjs__parser-jsonld/-/rdfjs__parser-jsonld-2.1.7.tgz", + "integrity": "sha512-n35K+c1Y95580N202Jxly6xjFE953FF+Y2mwxok6zLfMo4rgIfgMBElnNwpja0IeYXTuzGm1tEz7va3lItGrTg==", + "requires": { + "@rdfjs/types": ">=1.0.0", + "@types/jsonld": "*" } }, - "node_modules/progress-events": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz", - "integrity": "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "license": "ISC", - "optional": true + "@types/rdfjs__parser-n3": { + "version": "2.0.6", + "requires": { + "@rdfjs/types": ">=1.0.0" + } }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "license": "MIT", - "optional": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" + "@types/rdfjs__prefix-map": { + "version": "0.1.5", + "peer": true, + "requires": { + "@rdfjs/types": "*" } }, - "node_modules/promise-retry/node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "license": "MIT", - "optional": true + "@types/rdfjs__serializer-jsonld": { + "version": "2.0.5", + "requires": { + "@rdfjs/types": ">=1.0.0" + } }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 4" + "@types/rdfjs__serializer-jsonld-ext": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld-ext/-/rdfjs__serializer-jsonld-ext-4.0.1.tgz", + "integrity": "sha512-jgbQ/1kV7nESKG7SY8FJED6K4OFznr6Sz3ybF1ncpBR7TUBTuy3InpZOVRK4Wjpy2zi84iIAzJ1CIIo9NZh2Xw==", + "peer": true, + "requires": { + "@rdfjs/types": ">=1.0.0", + "@types/jsonld": "*", + "@types/node": "*" } }, - "node_modules/promise.any": { + "@types/rdfjs__serializer-ntriples": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/promise.any/-/promise.any-2.0.6.tgz", - "integrity": "sha512-Ew/MrPtTjiHnnki0AA2hS2o65JaZ5n+5pp08JSyWWUdeOGF4F41P+Dn+rdqnaOV/FTxhR6eBDX412luwn3th9g==", - "license": "MIT", - "dependencies": { - "array.prototype.map": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-aggregate-error": "^1.0.10", - "get-intrinsic": "^1.2.1", - "iterate-value": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "@rdfjs/types": ">=1.0.0" } }, - "node_modules/prompt": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", - "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "async": "3.2.3", - "read": "1.0.x", - "revalidator": "0.1.x", - "winston": "2.x" - }, - "engines": { - "node": ">= 6.0.0" + "@types/rdfjs__serializer-turtle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-turtle/-/rdfjs__serializer-turtle-1.1.0.tgz", + "integrity": "sha512-NGHnbz5985UwS/YS6WL/FkS94B+QiVTdsfvJCqPwLmY3E7UeClw91c2KbiphZUR/uh7uwLwxeKKhV2T1gYgT5Q==", + "peer": true, + "requires": { + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__prefix-map": "*" } }, - "node_modules/prompt/node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "license": "MIT" + "@types/rdfjs__sink-map": { + "version": "2.0.5", + "requires": { + "@rdfjs/types": "*" + } }, - "node_modules/prompt/node_modules/winston": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.7.tgz", - "integrity": "sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==", - "license": "MIT", - "dependencies": { - "async": "^2.6.4", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - }, - "engines": { - "node": ">= 0.10.0" + "@types/rdfjs__term-map": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/rdfjs__term-map/-/rdfjs__term-map-2.0.10.tgz", + "integrity": "sha512-YlpYkya+Xq9fmcw+BMi1SCh+w2sBu7G0/qd2+ZhB4QIK3V1xq2o3EOAZnlahyQdwrW9t5+Ihw8IVVvZsJvDOTA==", + "peer": true, + "requires": { + "@rdfjs/types": "*" } }, - "node_modules/prompt/node_modules/winston/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" + "@types/rdfjs__term-set": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/rdfjs__term-set/-/rdfjs__term-set-2.0.9.tgz", + "integrity": "sha512-RRXs5DwFGanZyT705f7KLSiN68gUVUtGWTp508CXJhLfD7AWmilqc1BLgLUoac48h3pnh9w5lRhwFm6fj1ZE5Q==", + "peer": true, + "requires": { + "@rdfjs/types": "*" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "@types/rdfjs__traverser": { + "version": "0.1.5", + "peer": true, + "requires": { + "@rdfjs/types": "*" } }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "license": "MIT", + "@types/readable-stream": { + "version": "2.3.15", + "requires": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + }, "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" + "safe-buffer": { + "version": "5.1.2" + } } }, - "node_modules/proper-lockfile/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "license": "MIT", - "engines": { - "node": ">= 4" + "@types/secp256k1": { + "version": "4.0.5", + "requires": { + "@types/node": "*" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" + "@types/semver": { + "version": "7.5.4", + "dev": true }, - "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "@types/send": { + "version": "0.17.3", "dev": true, - "license": "MIT" - }, - "node_modules/protons-runtime": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.4.0.tgz", - "integrity": "sha512-XfA++W/WlQOSyjUyuF5lgYBfXZUEMP01Oh1C2dSwZAlF2e/ZrMRPfWonXj6BGM+o8Xciv7w0tsRMKYwYEuQvaw==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "uint8-varint": "^2.0.2", - "uint8arraylist": "^2.4.3", - "uint8arrays": "^5.0.1" + "requires": { + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/protons-runtime/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" + "@types/serve-static": { + "version": "1.15.4", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" + "@types/sinon": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.4.tgz", + "integrity": "sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==", + "requires": { + "@types/sinonjs__fake-timers": "*" } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" + "@types/sinonjs__fake-timers": { + "version": "8.1.4" + }, + "@types/ssh2": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.1.tgz", + "integrity": "sha512-ZIbEqKAsi5gj35y4P4vkJYly642wIbY6PqoN0xiyQGshKUGXR9WQjF/iF9mXBQ8uBKy3ezfsCkcoHKhd0BzuDA==", + "dev": true, + "requires": { + "@types/node": "^18.11.18" + }, + "dependencies": { + "@types/node": { + "version": "18.19.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.54.tgz", + "integrity": "sha512-+BRgt0G5gYjTvdLac9sIeE0iZcJxi4Jc4PV5EUzqi+88jmQLr+fRZdv2tCTV7IHKSGxM6SaLoOXQWWUiLUItMw==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + } } }, - "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "@types/tar-stream": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-3.1.4.tgz", + "integrity": "sha512-921gW0+g29mCJX0fRvqeHzBlE/XclDaAG0Ousy1LCghsOhvaKacDeRGEVzQP9IPfKn8Vysy7FEXAIxycpc/CMg==", "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" + "requires": { + "@types/node": "*" } }, - "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "@types/triple-beam": { + "version": "1.3.4" + }, + "@types/ws": { + "version": "8.5.10", + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "6.9.1", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/type-utils": "6.9.1", + "@typescript-eslint/utils": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.2", + "ts-api-utils": "^1.0.1" } }, - "node_modules/proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "@typescript-eslint/parser": { + "version": "6.9.1", "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", + "requires": { + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" } }, - "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "@typescript-eslint/scope-manager": { + "version": "6.9.1", "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" + "requires": { + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1" } }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "@typescript-eslint/type-utils": { + "version": "6.9.1", "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "requires": { + "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/utils": "6.9.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "@typescript-eslint/types": { + "version": "6.9.1", + "dev": true }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "license": "ISC" + "@typescript-eslint/typescript-estree": { + "version": "6.9.1", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.2", + "ts-api-utils": "^1.0.1" + } }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@typescript-eslint/utils": { + "version": "6.9.1", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/typescript-estree": "6.9.1", + "semver": "^7.5.2" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" + "@typescript-eslint/visitor-keys": { + "version": "6.9.1", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.9.1", + "eslint-visitor-keys": "^3.4.1" } }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@ungap/structured-clone": { + "version": "1.2.0", + "dev": true + }, + "@vocabulary/sh": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vocabulary/sh/-/sh-1.1.5.tgz", + "integrity": "sha512-8R4uxHLpwmp6l6szZdCtfQx0wRy64OHuOsYTDfhCsbJ773Uv6nCM2bYBtjjirZHN+2m3uHQWgtWOdvuu1jwmOA==", + "requires": {} + }, + "@zazuko/env-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@zazuko/env-core/-/env-core-1.1.2.tgz", + "integrity": "sha512-mnLG40utuT7jPBPLs6fJ0puhfagnXSj+S8t9+zUGs3YlrOq/7b2zr64Hi3p3etwDdApaQ0VgQuNIY9doaruS1Q==", + "requires": { + "@rdfjs/environment": "^1.0.0" } }, - "node_modules/pvtsutils": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", - "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", - "license": "MIT", + "@zazuko/env-node": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@zazuko/env-node/-/env-node-2.1.5.tgz", + "integrity": "sha512-qYrePSWiz9XOB5R0NfvuaogmPP8gLcMsl18G7sYW1h6RB4l3aiofAr4YAKTK+bpJgGjeivDDi64lsQjF2F6p0g==", + "requires": { + "@rdfjs/fetch-lite": "^3.2.2", + "@rdfjs/formats": "^4.0.0", + "@zazuko/env": "^2.5.3", + "@zazuko/rdf-utils-fs": "^3.3.0" + }, "dependencies": { - "tslib": "^2.6.1" + "@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@zazuko/env": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@zazuko/env/-/env-2.5.3.tgz", + "integrity": "sha512-kivvYoXGFjva1CuXeK/jaaWMy9eXhhFmuSfSJGVW2wH7XbcZehJObjPXEVlZ3kKLCFhuv96j8Ot3SkbYaOtuLA==", + "requires": { + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/dataset": "^2.0.1", + "@rdfjs/formats": "^4.0.0", + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-map": "^2.0.0", + "@rdfjs/term-set": "^2.0.1", + "@rdfjs/traverser": "^0.1.2", + "@tpluscode/rdf-ns-builders": "^4.1.0", + "@zazuko/env-core": "^1.1.2", + "@zazuko/prefixes": "^2.1.0", + "clownface": "^2.0.2", + "get-stream": "^9.0.1", + "rdf-dataset-ext": "^1.1.0" + } + }, + "get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "requires": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + } + }, + "is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==" + } } }, - "node_modules/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" + "@zazuko/prefixes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@zazuko/prefixes/-/prefixes-2.2.0.tgz", + "integrity": "sha512-mmRS+urGVMcAP5edzFq0V+B2PbbpEklP7BZGVF0+82ClczTwgpIL1tZy2mRfudwRYoAe+WkyWXDnlArPpdzLIg==" + }, + "@zazuko/rdf-utils-fs": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@zazuko/rdf-utils-fs/-/rdf-utils-fs-3.3.1.tgz", + "integrity": "sha512-4HjTbJUwiCFanMMcaaZkLIkWUdVjXSQstAyxnfzsUOmh8Q43iVBL+mYAl17zoi47III0POL6hitRsN1JJ5tUFg==", + "requires": { + "readable-stream": ">=3.6.0" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "abort-controller": { + "version": "3.0.0", + "requires": { + "event-target-shim": "^5.0.0" } }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "abort-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz", + "integrity": "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg==" + }, + "abortable-iterator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-5.0.1.tgz", + "integrity": "sha512-hlZ5Z8UwqrKsJcelVPEqDduZowJPBQJ9ZhBC2FXpja3lXy8X6MoI5uMzIgmrA8+3jcVnp8TF/tx+IBBqYJNUrg==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^2.0.1" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" + "accepts": { + "version": "1.3.8", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "acorn": { + "version": "8.11.2", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "aes-js": { + "version": "4.0.0-beta.5" + }, + "agent-base": { + "version": "6.0.2", + "optional": true, + "requires": { + "debug": "4" + } }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "optional": true, + "requires": { + "humanize-ms": "^1.2.1" } }, - "node_modules/race-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/race-event/-/race-event-1.3.0.tgz", - "integrity": "sha512-kaLm7axfOnahIqD3jQ4l1e471FIFcEGebXEnhxyLscuUzV8C94xVHtWEqDDXxll7+yu/6lW0w1Ff4HbtvHvOHg==", - "license": "Apache-2.0 OR MIT" + "aggregate-error": { + "version": "3.1.0", + "devOptional": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } }, - "node_modules/race-signal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/race-signal/-/race-signal-1.1.0.tgz", - "integrity": "sha512-VqsW1uzCXfKBd2DhA3K3NhQlqQr04+5WQ7+kHpf1HzT01Q+ePSFWZdQHXKZPuLmm2eXTZM1XLO76cq15ZRAaEA==", - "license": "Apache-2.0 OR MIT" + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "node_modules/ramda": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", - "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==", - "license": "MIT" + "amdefine": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.1.tgz", + "integrity": "sha512-cE/769sItEDt5sSdqmrWMsat+XaA5FJiEou+ZwlY7ef/Jf/517k6nYyUIRPR2o/QbpBg4FiYXj9GyRGNg5f/bg==" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "any-signal": { + "version": "4.1.1" + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "append-transform": { + "version": "2.0.0", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "archy": { + "version": "1.0.0", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" } }, - "node_modules/rc/node_modules/strip-json-comments": { + "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/rdf-canonize": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", - "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=12" + "array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" } }, - "node_modules/rdf-data-factory": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.2.tgz", - "integrity": "sha512-TfQD63Lokabd09ES1jAtKK8AA6rkr9rwyUBGo6olOt1CE0Um36CUQIqytyf0am2ouBPR0l7SaHxCiMcPGHkt1A==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" - } + "array-flatten": { + "version": "1.1.1" }, - "node_modules/rdf-dataset-ext": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/rdf-dataset-ext/-/rdf-dataset-ext-1.1.0.tgz", - "integrity": "sha512-CH85RfRKN9aSlbju8T7aM8hgCSWMBsh2eh/tGxUUtWMN+waxi6iFDt8/r4PAEmKaEA82guimZJ4ISbmJ2rvWQg==", - "deprecated": "rdf-dataset-ext is deprecated. Switching to rdf-ext is recommended.", - "license": "MIT", - "dependencies": { - "rdf-canonize": "^3.0.0", - "readable-stream": "3 - 4" + "array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" } }, - "node_modules/rdf-literal": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.2.tgz", - "integrity": "sha512-79Stlu3sXy0kq9/decHFLf3xNPuY6sfhFPhd/diWErgaFr0Ekyg38Vh9bnVcqDYu48CFRi0t+hrFii49n92Hbw==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "rdf-data-factory": "^1.1.0" + "array-union": { + "version": "2.1.0", + "dev": true + }, + "array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" } }, - "node_modules/rdf-utils-fs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rdf-utils-fs/-/rdf-utils-fs-3.0.0.tgz", - "integrity": "sha512-TdP7WZyGVmKFeAotPj5nzZn2XIAd0yaH/qfLBSvUA6Sc6ZNB8jL+iHb45KMCsaNTqKbYZSkrw/fsIQNFM6XZCA==", - "license": "MIT", - "dependencies": { - "@rdfjs/formats-common": "^3.1.0", - "readable-stream": "^4.4.2" + "array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" } }, - "node_modules/rdf-validate-datatype": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rdf-validate-datatype/-/rdf-validate-datatype-0.2.1.tgz", - "integrity": "sha512-DpREnmoWDxC80KyslZeBPLQb3ztyeiOolT4uCl58tCju2KHJu4j5vonmVVdEJh2Mpad5UY57v6sSM/hfSTFGKQ==", - "license": "MIT", - "dependencies": { - "@rdfjs/term-map": "^2.0.0", - "@tpluscode/rdf-ns-builders": "3 - 4" + "array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" } }, - "node_modules/rdf-validate-shacl": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/rdf-validate-shacl/-/rdf-validate-shacl-0.5.6.tgz", - "integrity": "sha512-B23lccAy1uIYU9XVoXxK2DFGMV+xBbpvzTpfBJXLKoURjdEOfu/MCih1AHiGJh9PInvl667GvkVD9TmAE2b3Sg==", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2", - "@rdfjs/dataset": "^2", - "@rdfjs/environment": "^1", - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-set": "^2.0.1", - "@vocabulary/sh": "^1.0.1", - "clownface": "^2.0.0", - "debug": "^4.3.2", - "rdf-literal": "^1.3.0", - "rdf-validate-datatype": "^0.2.0" + "array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" } }, - "node_modules/rdf-validation": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/rdf-validation/-/rdf-validation-0.1.1.tgz", - "integrity": "sha512-z2RbRcsKOM+CWa7qoI4LWCQQTji64eoBNLvbP3++0ZE4pO4EP1xkV5asSH4TULeLfDEuMhzyDXRnAjA+8R2l4w==", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/to-ntriples": "^3.0.1" + "array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" } }, - "node_modules/rdflib": { - "version": "2.2.35", - "resolved": "https://registry.npmjs.org/rdflib/-/rdflib-2.2.35.tgz", - "integrity": "sha512-PudSzYz0cVy5iuKmxaNfl0WPuPq4h9LAWbyJSn36gwTMtWbBgcqUDobdcDK3P6mxeOui/cosDXu0A9oVicVfyA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.24.4", - "@frogcat/ttl2jsonld": "^0.0.9", - "@xmldom/xmldom": "^0.8.10", - "cross-fetch": "^3.1.8", - "jsonld": "^8.3.2", - "n3": "^1.17.3", - "solid-namespace": "^0.5.3" + "arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" } }, - "node_modules/rdfxml-streaming-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.4.0.tgz", - "integrity": "sha512-f+tdI1wxOiPzMbFWRtOwinwPsqac0WIN80668yFKcVdFCSTGOWTM70ucQGUSdDZZo7pce/UvZgV0C3LDj0P7tg==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@rubensworks/saxes": "^6.0.1", - "@types/readable-stream": "^2.3.13", - "buffer": "^6.0.3", - "rdf-data-factory": "^1.1.0", - "readable-stream": "^4.4.2", - "relative-to-absolute-iri": "^1.0.0", - "validate-iri": "^1.0.0" + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" } }, - "node_modules/rdfxml-streaming-parser/node_modules/@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" + "asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "requires": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" + "assertion-error": { + "version": "1.1.0", + "dev": true }, - "node_modules/react-native-test-runner": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-native-test-runner/-/react-native-test-runner-5.0.0.tgz", - "integrity": "sha512-/ztZUqRqV98/lLbGN781egGXjkR8i7MhfAm7nGtKe1DoDuITkvQk/4fF/nXfDyZEtaae9NYuv2MocUR/qcN1bQ==", - "license": "MIT", - "dependencies": { - "@babel/plugin-proposal-async-generator-functions": "^7.12.12", - "babel-plugin-transform-inline-environment-variables": "^0.4.3", - "chai": "^4.2.0", - "execa": "^4.1.0", - "find-up": "^5.0.0", - "fs-extra": "^9.0.1", - "globby": "^11.0.1", - "is-ci": "^2.0.0", - "is-uuid": "^1.0.2", - "lilconfig": "^2.0.2", - "meow": "^8.0.0", - "merge-options": "^3.0.4", - "metro-react-native-babel-preset": "^0.64.0", - "ora": "^5.1.0", - "p-retry": "^4.2.0", - "p-tap": "^3.1.0", - "patch-package": "^6.2.2", - "pico-signals": "^1.0.0", - "read-pkg": "^5.2.0", - "semver": "^7.3.4", - "tempy": "^1.0.0", - "yn": "^4.0.0" - }, - "bin": { - "rn-test": "cli/index.js" - }, - "engines": { - "node": ">=14" + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "requires": { + "tslib": "^2.0.1" } }, - "node_modules/react-native-test-runner/node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" + "async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true }, - "node_modules/react-native-test-runner/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "requires": { + "retry": "0.13.1" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "auto-changelog": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz", + "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==", + "dev": true, + "requires": { + "commander": "^7.2.0", + "handlebars": "^4.7.7", + "node-fetch": "^2.6.1", + "parse-github-url": "^1.0.2", + "semver": "^7.5.2" + }, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } } }, - "node_modules/react-native-test-runner/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "aws-sdk": { + "version": "2.1693.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1693.0.tgz", + "integrity": "sha512-cJmb8xEnVLT+R6fBS5sn/EFJiX7tUnDaPtOPZ1vFbOJtd0fnZn/Ky2XGgsvvoeliWeH7mL3TWSX5zXXGSQV6gQ==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "^0.5.0" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" }, - { - "type": "consulting", - "url": "https://feross.org/support" + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" } }, - "node_modules/react-native-test-runner/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" + "axios": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.0.tgz", + "integrity": "sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==", + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" } }, - "node_modules/react-native-test-runner/node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", - "engines": { - "node": ">=8" + "balanced-match": { + "version": "1.0.2" + }, + "base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "requires": { + "safe-buffer": "^5.0.1" } }, - "node_modules/react-native-test-runner/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "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", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "base58-js": { + "version": "2.0.0" + }, + "base64-js": { + "version": "1.5.1" + }, + "basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" } }, - "node_modules/react-native-test-runner/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "before-after-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "dev": true + }, + "big-integer": { + "version": "1.6.51", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "requires": { + "file-uri-to-path": "1.0.0" } }, - "node_modules/react-native-test-runner/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "blakejs": { + "version": "1.2.1" + }, + "bn.js": { + "version": "4.12.0" + }, + "body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, - "node_modules/react-native-test-runner/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } + "bowser": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==" }, - "node_modules/react-native-test-runner/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" + "bplist-parser": { + "version": "0.2.0", + "dev": true, + "requires": { + "big-integer": "^1.6.44" } }, - "node_modules/react-native-test-runner/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "devOptional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/react-native-test-runner/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" } }, - "node_modules/react-native-test-runner/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "brorand": { + "version": "1.1.0" + }, + "browser-stdout": { + "version": "1.3.1", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/react-native-test-runner/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" + "browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" } }, - "node_modules/react-native-test-runner/node_modules/npm-run-path": { + "bs58": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "base-x": "^3.0.2" } }, - "node_modules/react-native-test-runner/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bs58check": { + "version": "2.1.2", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/react-native-test-runner/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "buffer": { + "version": "6.0.3", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-xor": { + "version": "1.0.3" + }, + "buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "optional": true + }, + "builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "requires": { + "semver": "^7.5.2" } }, - "node_modules/react-native-test-runner/node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" + "bundle-name": { + "version": "3.0.0", + "dev": true, + "requires": { + "run-applescript": "^5.0.0" } }, - "node_modules/react-native-test-runner/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "bytes": { + "version": "3.1.2" + }, + "c12": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.1.tgz", + "integrity": "sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ==", + "dev": true, + "requires": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" + }, + "dependencies": { + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "dev": true + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true + } } }, - "node_modules/react-native-test-runner/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" }, - "engines": { - "node": ">=8" + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true + } + } + } } }, - "node_modules/react-native-test-runner/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" + "caching-transform": { + "version": "4.0.0", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" } }, - "node_modules/react-native-test-runner/node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", - "license": "MIT", - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" } }, - "node_modules/react-native-test-runner/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" } }, - "node_modules/react-native-test-runner/node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" } }, - "node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "callsites": { + "version": "3.1.0", + "dev": true }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } + "camelcase": { + "version": "5.3.1", + "dev": true }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" + "caniuse-lite": { + "version": "1.0.30001695", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", + "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "dev": true + }, + "canonicalize": { + "version": "1.0.8" + }, + "chai": { + "version": "4.3.10", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "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.8" } }, - "node_modules/read-pkg-up": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true + }, + "check-error": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" } }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true + }, + "cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" } }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "requires": { + "consola": "^3.2.3" } }, - "node_modules/read-pkg-up/node_modules/path-exists": { + "clean-stack": { + "version": "2.2.0", + "devOptional": true + }, + "cli-cursor": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "requires": { + "restore-cursor": "^5.0.0" } }, - "node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - }, - "engines": { - "node": ">=12.20" + "cli-spinners": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz", + "integrity": "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==", + "dev": true + }, + "cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "wrap-ansi": { + "version": "7.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "clone-regexp": { + "version": "3.0.0", + "requires": { + "is-regexp": "^3.0.0" } }, - "node_modules/read-pkg-up/node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "clownface": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clownface/-/clownface-2.0.2.tgz", + "integrity": "sha512-HjTYqVXiCrw4FmoAWF46aQ3c2OmdVLoqZrAGkowdWWUoBBIcBht55pOxkyvoVe2BsPE/HqMzfnu51JpgqM4KEg==", + "requires": { + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/environment": "0 - 1", + "@rdfjs/namespace": "^2.0.0" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "license": "BSD-2-Clause", + "color": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + } } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "color-name": { + "version": "1.1.4" + }, + "color-string": { + "version": "1.9.1", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true + }, + "colorspace": { + "version": "1.1.4", + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" } }, - "node_modules/readable-stream/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" + "commondir": { + "version": "1.0.1", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "devOptional": true + }, + "concurrently": { + "version": "8.2.2", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" } }, - "node_modules/receptacle": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", - "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true + }, + "consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "content-disposition": { + "version": "0.5.4", + "requires": { + "safe-buffer": "5.2.1" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "convert-hrtime": { + "version": "5.0.0" + }, + "convert-source-map": { + "version": "1.9.0", + "dev": true + }, + "cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" + }, + "cookie-signature": { + "version": "1.0.6" + }, + "core-util-is": { + "version": "1.0.3" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "optional": true, + "requires": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" }, - "engines": { - "node": ">=8" + "dependencies": { + "nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "optional": true + } } }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "license": "MIT", - "dependencies": { - "esprima": "~4.0.0" + "crc-32": { + "version": "1.2.2" + }, + "create-hash": { + "version": "1.2.0", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/reflect-metadata": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", - "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", - "license": "Apache-2.0" + "create-hmac": { + "version": "1.1.7", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "cross-fetch": { + "version": "3.1.8", + "requires": { + "node-fetch": "^2.6.12" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" + "d": { + "version": "1.0.1", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" + "data-uri-to-buffer": { + "version": "4.0.1" }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" + "data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" } }, - "node_modules/regexp-tree": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, - "license": "MIT", - "bin": { - "regexp-tree": "bin/regexp-tree" + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", + "data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "is-data-view": "^1.0.1" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "datastore-core": { + "version": "9.2.9", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.9.tgz", + "integrity": "sha512-wraWTPsbtdE7FFaVo3pwPuTB/zXsgwGGAm8BgBYwYAuzZCTS0MfXmd/HH1vR9s0/NFFjOVmBkGiWCvKxZ+QjVw==", + "requires": { + "@libp2p/logger": "^4.0.6", + "err-code": "^3.0.1", + "interface-datastore": "^8.0.0", + "interface-store": "^5.0.0", + "it-drain": "^3.0.5", + "it-filter": "^3.0.4", + "it-map": "^3.0.5", + "it-merge": "^3.0.3", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-sort": "^3.0.4", + "it-take": "^3.0.4" } }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" + "date-fns": { + "version": "2.30.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.21.0" } }, - "node_modules/regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "license": "MIT", - "engines": { - "node": ">=0.1.14" + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "requires": { + "ms": "^2.1.3" } }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" + "debug-fabulous": { + "version": "2.0.2", + "requires": { + "debug": "^4", + "memoizee": "0.4" + } + }, + "debug-logfmt": { + "version": "1.2.0", + "requires": { + "@jclem/logfmt2": "~2.4.3", + "@kikobeats/time-span": "~1.0.2", + "debug-fabulous": "~2.0.2", + "pretty-ms": "~7.0.1" } }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "decamelize": { + "version": "1.2.0", + "dev": true }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" + "decompress-response": { + "version": "6.0.0", + "requires": { + "mimic-response": "^3.1.0" }, - "bin": { - "regjsparser": "bin/parser" + "dependencies": { + "mimic-response": { + "version": "3.1.0" + } } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" + "deep-eql": { + "version": "4.1.3", + "dev": true, + "requires": { + "type-detect": "^4.0.0" } }, - "node_modules/relative-to-absolute-iri": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", - "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==", - "license": "MIT" + "deep-extend": { + "version": "0.6.0" }, - "node_modules/release-it": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-17.6.0.tgz", - "integrity": "sha512-EE34dtRPL7BHpYQC7E+zAU8kjkyxFHxLk5Iqnmn/5nGcjgOQu34Au29M2V9YvxiP3tZbIlEn4gItEzu7vAPRbw==", + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "default-browser": { + "version": "4.0.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/webpro" + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "dependencies": { + "execa": { + "version": "7.2.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } }, - { - "type": "opencollective", - "url": "https://opencollective.com/webpro" + "human-signals": { + "version": "4.3.1", + "dev": true } - ], - "license": "MIT", - "dependencies": { - "@iarna/toml": "2.2.5", - "@octokit/rest": "20.1.1", - "async-retry": "1.3.3", - "chalk": "5.3.0", - "cosmiconfig": "9.0.0", - "execa": "8.0.1", - "git-url-parse": "14.0.0", - "globby": "14.0.2", - "got": "13.0.0", - "inquirer": "9.3.2", - "is-ci": "3.0.1", - "issue-parser": "7.0.1", - "lodash": "4.17.21", - "mime-types": "2.1.35", - "new-github-release-url": "2.0.0", - "node-fetch": "3.3.2", - "open": "10.1.0", - "ora": "8.0.1", - "os-name": "5.1.0", - "proxy-agent": "6.4.0", - "semver": "7.6.2", - "shelljs": "0.8.5", - "update-notifier": "7.1.0", - "url-join": "5.0.0", - "wildcard-match": "5.1.3", - "yargs-parser": "21.1.1" - }, - "bin": { - "release-it": "bin/release-it.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || ^22.0.0" } }, - "node_modules/release-it/node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "default-browser-id": { + "version": "3.0.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" } }, - "node_modules/release-it/node_modules/@octokit/core": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", - "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.1.0", - "@octokit/request": "^8.3.1", - "@octokit/request-error": "^5.1.0", - "@octokit/types": "^13.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "default-gateway": { + "version": "7.2.2", + "requires": { + "execa": "^7.1.1" }, - "engines": { - "node": ">= 18" + "dependencies": { + "execa": { + "version": "7.2.0", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "4.3.1" + } } }, - "node_modules/release-it/node_modules/@octokit/endpoint": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", - "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", + "default-require-extensions": { + "version": "3.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" + "requires": { + "strip-bom": "^4.0.0" }, - "engines": { - "node": ">= 18" + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "dev": true + } } }, - "node_modules/release-it/node_modules/@octokit/graphql": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", - "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request": "^8.3.0", - "@octokit/types": "^13.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" } }, - "node_modules/release-it/node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true, - "license": "MIT" + "define-lazy-prop": { + "version": "3.0.0", + "dev": true }, - "node_modules/release-it/node_modules/@octokit/plugin-paginate-rest": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", - "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", + "define-properties": { + "version": "1.2.1", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.5.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "node_modules/release-it/node_modules/@octokit/plugin-request-log": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", - "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" - } + "defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true }, - "node_modules/release-it/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", - "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", + "degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.5.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5" + "requires": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" } }, - "node_modules/release-it/node_modules/@octokit/request": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", - "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^9.0.1", - "@octokit/request-error": "^5.1.0", - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } + "delay": { + "version": "5.0.0" }, - "node_modules/release-it/node_modules/@octokit/request-error": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", - "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.1.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" - } + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true }, - "node_modules/release-it/node_modules/@octokit/rest": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz", - "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==", + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" + }, + "diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/core": "^5.0.2", - "@octokit/plugin-paginate-rest": "11.3.1", - "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "13.2.2" - }, - "engines": { - "node": ">= 18" + "requires": { + "path-type": "^4.0.0" } }, - "node_modules/release-it/node_modules/@octokit/types": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^22.2.0" + "dns-over-http-resolver": { + "version": "2.1.3", + "requires": { + "debug": "^4.3.1", + "native-fetch": "^4.0.2", + "receptacle": "^1.3.2", + "undici": "^5.12.0" } }, - "node_modules/release-it/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "dns-packet": { + "version": "5.6.1", + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" } }, - "node_modules/release-it/node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" + "docker-modem": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.6.tgz", + "integrity": "sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==", + "requires": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" } }, - "node_modules/release-it/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "dockerode": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.5.tgz", + "integrity": "sha512-ZPmKSr1k1571Mrh7oIBS/j0AqAccoecY2yH420ni5j1KyNMgnoTh4Nu4FWunh0HZIJmRSmSysJjBIpa/zyWUEA==", + "requires": { + "@balena/dockerignore": "^1.0.2", + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.13", + "docker-modem": "^5.0.6", + "protobufjs": "^7.3.2", + "tar-fs": "~2.1.2", + "uuid": "^10.0.0" + }, + "dependencies": { + "uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==" + } } }, - "node_modules/release-it/node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "doctrine": { + "version": "3.0.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" + "requires": { + "esutils": "^2.0.2" } }, - "node_modules/release-it/node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" + "dotenv": { + "version": "16.3.1" + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" } }, - "node_modules/release-it/node_modules/cacheable-request/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "duplex-to": { + "version": "2.0.0" + }, + "eastasianwidth": { + "version": "0.2.0" + }, + "eccrypto": { + "version": "1.1.6", + "requires": { + "acorn": "7.1.1", + "elliptic": "^6.6.1", + "es6-promise": "4.2.8", + "nan": "2.14.0", + "secp256k1": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "acorn": { + "version": "7.1.1" + }, + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "optional": true + }, + "secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "optional": true, + "requires": { + "elliptic": "^6.6.1", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + } + } } }, - "node_modules/release-it/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" } }, - "node_modules/release-it/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" + "eciesjs": { + "version": "0.4.5", + "requires": { + "@noble/ciphers": "^0.3.0", + "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.3.2" + }, + "dependencies": { + "@noble/ciphers": { + "version": "0.3.0" } - ], - "license": "MIT", - "engines": { - "node": ">=8" } }, - "node_modules/release-it/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "electron-to-chromium": { + "version": "1.5.83", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz", + "integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==", + "dev": true + }, + "elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/release-it/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" + "emoji-regex": { + "version": "8.0.0" + }, + "enabled": { + "version": "2.0.0" + }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } } } }, - "node_modules/release-it/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" + "end-of-stream": { + "version": "1.4.4", + "requires": { + "once": "^1.4.0" } }, - "node_modules/release-it/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true, - "license": "MIT" + "err-code": { + "version": "3.0.1" }, - "node_modules/release-it/node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "requires": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" } }, - "node_modules/release-it/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" } }, - "node_modules/release-it/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" } }, - "node_modules/release-it/node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, - "node_modules/release-it/node_modules/got": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", + "es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "requires": { + "hasown": "^2.0.2" } }, - "node_modules/release-it/node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" } }, - "node_modules/release-it/node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" + "es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" } }, - "node_modules/release-it/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" + "es6-error": { + "version": "4.1.1", + "dev": true + }, + "es6-iterator": { + "version": "2.0.3", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/release-it/node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" + "es6-promise": { + "version": "4.2.8" + }, + "es6-symbol": { + "version": "3.1.3", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/release-it/node_modules/is-installed-globally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", - "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-directory": "^4.0.1", - "is-path-inside": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "es6-weak-map": { + "version": "2.0.3", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "node_modules/release-it/node_modules/is-path-inside": { + "esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, + "eslint": { + "version": "8.52.0", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.52.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", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" } }, - "node_modules/release-it/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "eslint-config-oceanprotocol": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-oceanprotocol/-/eslint-config-oceanprotocol-2.0.4.tgz", + "integrity": "sha512-VdCtlvjTHzlhErmy8BYCGj3r4/iSJDxseeQTISe5DSyrWaPJpMv728KxBvu+WsCWfuI2WzErAX1HDE/HjmcI6w==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "requires": { + "eslint": "^8.23.1", + "eslint-config-prettier": "^8.5.0", + "eslint-config-standard": "^17.0.0", + "eslint-config-standard-react": "^11.0.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.3.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-react": "^7.31.8", + "eslint-plugin-security": "^1.5.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "eslint-config-prettier": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", + "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", + "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + } } }, - "node_modules/release-it/node_modules/is-unicode-supported": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", - "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", + "eslint-config-prettier": { + "version": "9.0.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "requires": {} }, - "node_modules/release-it/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "requires": {} }, - "node_modules/release-it/node_modules/issue-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", - "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "eslint-config-standard-react": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-11.0.1.tgz", + "integrity": "sha512-4WlBynOqBZJRaX81CBcIGDHqUiqxvw4j/DbEIICz8QkMs3xEncoPgAoysiqCSsg71X92uhaBc8sgqB96smaMmg==", "dev": true, - "license": "MIT", - "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": "^18.17 || >=20.6.1" - } + "requires": {} }, - "node_modules/release-it/node_modules/ky": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.6.0.tgz", - "integrity": "sha512-MG7hlH26oShC4Lysk5TYzXshHLfEY52IJ0ofOeCsifquqTymbXCSTx+g4rXO30XYxoM6Y1ed5pNnpULe9Rx19A==", + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/release-it/node_modules/latest-version": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", - "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", - "dev": true, - "license": "MIT", "dependencies": { - "package-json": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "node_modules/release-it/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, - "engines": { - "node": ">=18" + "requires": { + "debug": "^3.2.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "node_modules/release-it/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "node_modules/release-it/node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "requires": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^7.5.2", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } } }, - "node_modules/release-it/node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.5.2" } }, - "node_modules/release-it/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^7.5.2" + }, + "dependencies": { + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "node_modules/release-it/node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "eslint-plugin-prettier": { + "version": "5.0.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" } }, - "node_modules/release-it/node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "eslint-plugin-promise": { + "version": "6.1.1", "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "requires": {} }, - "node_modules/release-it/node_modules/ora": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", - "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", + "eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.2", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" + "requires": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^7.5.2", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } } }, - "node_modules/release-it/node_modules/package-json": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", + "eslint-plugin-security": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz", + "integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ky": "^1.2.0", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "safe-regex": "^2.1.1" } }, - "node_modules/release-it/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "eslint-scope": { + "version": "7.2.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "node_modules/release-it/node_modules/responselike": { + "eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" + "requires": { + "eslint-visitor-keys": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, - "node_modules/release-it/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "eslint-visitor-keys": { + "version": "3.4.3", + "dev": true + }, + "esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + } } }, - "node_modules/release-it/node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "espree": { + "version": "9.6.1", "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" } }, - "node_modules/release-it/node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" + "esprima": { + "version": "4.0.1", + "dev": true }, - "node_modules/release-it/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "esquery": { + "version": "1.5.0", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "requires": { + "estraverse": "^5.1.0" } }, - "node_modules/release-it/node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "esrecurse": { + "version": "4.3.0", "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "estraverse": "^5.2.0" } }, - "node_modules/release-it/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "eta": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-4.0.1.tgz", + "integrity": "sha512-0h0oBEsF6qAJU7eu9ztvJoTo8D2PAq/4FvXVIQA1fek3WOTe6KPsVJycekG1+g1N6mfpblkheoGwaUhMtnlH4A==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "eth-crypto": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eth-crypto/-/eth-crypto-2.8.0.tgz", + "integrity": "sha512-QtVmfLZK+N0k4+RA65ORbVCBM2ndzPM0Q/VFhkYYrGY16+4OAwuxG+eyFlWyDO3HBFMlPnMLa69OZCKOoQkcdQ==", + "requires": { + "@babel/runtime": "7.27.0", + "@ethereumjs/tx": "3.5.2", + "@types/bn.js": "5.1.6", + "eccrypto": "1.1.6", + "ethereumjs-util": "7.1.5", + "ethers": "5.8.0", + "secp256k1": "^5.0.0" + }, + "dependencies": { + "ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "requires": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "requires": { + "elliptic": "^6.6.1", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + } + } } }, - "node_modules/release-it/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" + "ethereum-cryptography": { + "version": "0.1.3", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^5.0.0", + "setimmediate": "^1.0.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "requires": { + "elliptic": "^6.6.1", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + } + } } }, - "node_modules/release-it/node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "ethereumjs-util": { + "version": "7.1.5", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "bn.js": { + "version": "5.2.1" + } } }, - "node_modules/release-it/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" + "ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "requires": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "requires": { + "undici-types": "~6.19.2" + } + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "requires": {} + } } }, - "node_modules/release-it/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "event-emitter": { + "version": "0.3.5", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-iterator": { + "version": "2.0.0" + }, + "event-target-shim": { + "version": "5.0.1" + }, + "eventemitter3": { + "version": "5.0.1" + }, + "events": { + "version": "3.3.0" + }, + "evp_bytestokey": { + "version": "1.0.3", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "license": "MIT", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, "dependencies": { - "ansi-regex": "^6.0.1" + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, - "engines": { - "node": ">=12" + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0" + }, + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "requires": { + "side-channel": "^1.1.0" + } + } + } + }, + "exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true + }, + "ext": { + "version": "1.7.0", + "requires": { + "type": "^2.7.2" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "dependencies": { + "type": { + "version": "2.7.2" + } } }, - "node_modules/release-it/node_modules/update-notifier": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.1.0.tgz", - "integrity": "sha512-8SV3rIqVY6EFC1WxH6L0j55s0MO79MFBS1pivmInRJg3pCEDgWHBj1Q6XByTtCLOZIFA0f6zoG9ZWf2Ks9lvTA==", + "fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-diff": { + "version": "1.3.0", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.1.1", - "chalk": "^5.3.0", - "configstore": "^6.0.0", - "import-lazy": "^4.0.0", - "is-in-ci": "^0.1.0", - "is-installed-globally": "^1.0.0", - "is-npm": "^6.0.0", - "latest-version": "^9.0.0", - "pupa": "^3.1.0", - "semver": "^7.6.2", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=18" + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, - "node_modules/release-it/node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "requires": { + "strnum": "^2.1.0" + } + }, + "fastq": { + "version": "1.15.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "reusify": "^1.0.4" } }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "license": "ISC", - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" + "fecha": { + "version": "4.2.3" + }, + "fetch-blob": { + "version": "3.2.0", + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "file-stream-rotator": { + "version": "0.6.1", + "requires": { + "moment": "^2.29.1" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "license": "ISC" + "file-uri-to-path": { + "version": "1.0.0" }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "license": "MIT", - "engines": { - "node": ">=0.10.5" + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" } }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "flat": { + "version": "5.0.2", + "dev": true + }, + "flat-cache": { + "version": "3.1.1", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" } }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "flatted": { + "version": "3.2.9", + "dev": true + }, + "fn.name": { + "version": "1.1.0" + }, + "follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" + }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "requires": { + "is-callable": "^1.2.7" } }, - "node_modules/restore-cursor": { + "foreground-child": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" } }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "license": "MIT", - "engines": { - "node": ">=4" + "form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" } }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" + "formdata-polyfill": { + "version": "4.0.10", + "requires": { + "fetch-blob": "^3.1.2" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } + "forwarded": { + "version": "0.2.0" }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } + "freeport-promise": { + "version": "2.0.0" }, - "node_modules/revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", - "license": "Apache 2.0", - "engines": { - "node": ">= 0.4.0" - } + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "fromentries": { + "version": "1.3.2", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "fs.realpath": { + "version": "1.0.0", + "devOptional": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2" + }, + "function-timeout": { + "version": "0.1.1" + }, + "function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==" }, - "node_modules/ripemd160": { + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true + }, + "get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } + "dev": true }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" } }, - "node_modules/rlp/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" + "get-iterator": { + "version": "2.0.1" }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } + "get-package-type": { + "version": "0.1.0", + "dev": true }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" } }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } + "get-stream": { + "version": "6.0.1" }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" + "get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" + "requires": { + "resolve-pkg-maps": "^1.0.0" } }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "license": "MIT", - "dependencies": { - "mri": "^1.1.0" + "get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "dev": true, + "requires": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true + } } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/safe-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", - "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", + "giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", "dev": true, - "license": "MIT", - "dependencies": { - "regexp-tree": "~0.1.1" + "requires": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" } }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "git-up": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", + "dev": true, + "requires": { + "is-ssh": "^1.4.0", + "parse-url": "^9.2.0" } }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "license": "MIT", - "engines": { - "node": ">=10" + "git-url-parse": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", + "dev": true, + "requires": { + "git-up": "^8.1.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", - "license": "ISC" - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "license": "MIT" + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, - "node_modules/secp256k1": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", - "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=14.0.0" + "glob": { + "version": "7.2.0", + "devOptional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "license": "MIT" - }, - "node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "license": "BSD-3-Clause" - }, - "node_modules/semantic-release": { - "version": "19.0.5", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.5.tgz", - "integrity": "sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA==", - "license": "MIT", - "dependencies": { - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/error": "^3.0.0", - "@semantic-release/github": "^8.0.0", - "@semantic-release/npm": "^9.0.0", - "@semantic-release/release-notes-generator": "^10.0.0", - "aggregate-error": "^3.0.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.0.0", - "env-ci": "^5.0.0", - "execa": "^5.0.0", - "figures": "^3.0.0", - "find-versions": "^4.0.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^2.0.0", - "hosted-git-info": "^4.0.0", - "lodash": "^4.17.21", - "marked": "^4.0.10", - "marked-terminal": "^5.0.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "p-reduce": "^2.0.0", - "read-pkg-up": "^7.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^3.1.1", - "signale": "^1.2.1", - "yargs": "^16.2.0" - }, - "bin": { - "semantic-release": "bin/semantic-release.js" - }, - "engines": { - "node": ">=16 || ^14.17" + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" } }, - "node_modules/semantic-release-monorepo": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/semantic-release-monorepo/-/semantic-release-monorepo-7.0.8.tgz", - "integrity": "sha512-L2n7FZEYvjxXop6C7svk8xZH1/2N58CV1dN+veeAGZ8363FG+AKNKLN1r4wAL86e5xIu1HiOOASm10X+rN6XWg==", - "license": "MIT", - "dependencies": { - "debug": "^3.1.0", - "execa": "^0.8.0", - "file-url": "^3.0.0", - "fs-extra": "^10.0.1", - "get-stream": "^6.0.1", - "git-log-parser": "^1.2.0", - "p-each-series": "^2.1.0", - "p-limit": "^1.2.0", - "pkg-up": "^2.0.0", - "ramda": "^0.25.0", - "read-pkg": "^5.0.0", - "semantic-release-plugin-decorators": "^3.0.0", - "tempy": "1.0.1" - }, - "peerDependencies": { - "semantic-release": ">=15.11.x < 20" + "globals": { + "version": "13.23.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" } }, - "node_modules/semantic-release-monorepo/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "license": "MIT", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" } }, - "node_modules/semantic-release-monorepo/node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", - "engines": { - "node": ">=8" + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" } }, - "node_modules/semantic-release-monorepo/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, - "node_modules/semantic-release-monorepo/node_modules/execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" + "graceful-fs": { + "version": "4.2.11", + "devOptional": true + }, + "graphemer": { + "version": "1.4.0", + "dev": true + }, + "handlebars": { + "version": "4.7.8", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" } }, - "node_modules/semantic-release-monorepo/node_modules/execa/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true }, - "node_modules/semantic-release-monorepo/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "node_modules/semantic-release-monorepo/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" } }, - "node_modules/semantic-release-monorepo/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.0" } }, - "node_modules/semantic-release-monorepo/node_modules/is-stream": { + "has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, - "node_modules/semantic-release-monorepo/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" } }, - "node_modules/semantic-release-monorepo/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true }, - "node_modules/semantic-release-monorepo/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" + "hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" }, - "engines": { - "node": ">=4" + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + } } }, - "node_modules/semantic-release-monorepo/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" + "hash.js": { + "version": "1.1.7", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/semantic-release-monorepo/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" + "hasha": { + "version": "5.2.2", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" }, - "engines": { - "node": ">=4" + "dependencies": { + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "dev": true + } } }, - "node_modules/semantic-release-monorepo/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "hashlru": { + "version": "2.3.0" }, - "node_modules/semantic-release-monorepo/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" } }, - "node_modules/semantic-release-monorepo/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "license": "MIT", - "engines": { - "node": ">=4" + "he": { + "version": "1.2.0", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/semantic-release-monorepo/node_modules/pkg-up": { + "hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==" + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.1", + "optional": true + }, + "http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg==", - "license": "MIT", - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, - "node_modules/semantic-release-monorepo/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" + "http-link-header": { + "version": "1.1.1" + }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + } } }, - "node_modules/semantic-release-monorepo/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "https-proxy-agent": { + "version": "5.0.1", + "optional": true, + "requires": { + "agent-base": "6", + "debug": "4" } }, - "node_modules/semantic-release-monorepo/node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", - "license": "MIT", - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true }, - "node_modules/semantic-release-monorepo/node_modules/tempy/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" + "humanhash": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/humanhash/-/humanhash-1.0.4.tgz", + "integrity": "sha512-fxOhEl/Ezv7PobYOTomDmQKWaSC0hk0mzl5et5McPtr+6LRBP7LYoeFLPjKW6xOSGmMNLj50BufrrgX+M5EvEA==", + "requires": { + "uuid": "^3.3.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } } }, - "node_modules/semantic-release-monorepo/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "requires": { + "ms": "^2.0.0" } }, - "node_modules/semantic-release-monorepo/node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" + "hyperdiff": { + "version": "2.0.18", + "requires": { + "debug-logfmt": "~1.2.0", + "lodash": "~4.17.21" } }, - "node_modules/semantic-release-monorepo/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "iconv-lite": { + "version": "0.4.24", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" } }, - "node_modules/semantic-release-monorepo/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "license": "ISC" + "ieee754": { + "version": "1.2.1" }, - "node_modules/semantic-release-plugin-decorators": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/semantic-release-plugin-decorators/-/semantic-release-plugin-decorators-3.0.3.tgz", - "integrity": "sha512-YTB2z64yyqEzABJ3yFesV9s5izZ4oKdbYDTu/2whVdlGQYCwsWkw9XYRCnvXzPdWPSWYmCPdJwMJ5w433rncig==", - "license": "MIT", - "peerDependencies": { - "semantic-release": ">=11 < 20" - } + "ignore": { + "version": "5.2.4", + "dev": true }, - "node_modules/semantic-release/node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", - "license": "MIT", - "engines": { - "node": ">= 14" + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "node_modules/semantic-release/node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } + "imurmurhash": { + "version": "0.1.4", + "devOptional": true }, - "node_modules/semantic-release/node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } + "indent-string": { + "version": "4.0.0", + "devOptional": true }, - "node_modules/semantic-release/node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", - "license": "MIT", - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "inflight": { + "version": "1.0.6", + "devOptional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/semantic-release/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", - "license": "MIT" + "inherits": { + "version": "2.0.4" }, - "node_modules/semantic-release/node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", - "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", - "license": "MIT", - "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } + "ini": { + "version": "1.3.8" }, - "node_modules/semantic-release/node_modules/@octokit/plugin-retry": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.1.6.tgz", - "integrity": "sha512-obkYzIgEC75r8+9Pnfiiqy3y/x1bc3QLE5B7qvv9wi9Kj0R5tGQFC6QMBg1154WQ9lAVypuQDGyp3hNpp15gQQ==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 14" + "inquirer": { + "version": "12.9.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.9.6.tgz", + "integrity": "sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==", + "dev": true, + "requires": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/prompts": "^7.8.6", + "@inquirer/type": "^3.0.8", + "mute-stream": "^2.0.0", + "run-async": "^4.0.5", + "rxjs": "^7.8.2" + } + }, + "interface-datastore": { + "version": "8.2.11", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.11.tgz", + "integrity": "sha512-9E0iXehfp/j0UbZ2mvlYB4K9pP7uQBCppfuy8WHs1EHF6wLQrM9+zwyX+8Qt6HnH4GKZRyXX/CNXm6oD4+QYgA==", + "requires": { + "interface-store": "^5.0.0", + "uint8arrays": "^5.0.2" }, - "peerDependencies": { - "@octokit/core": ">=3" + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/semantic-release/node_modules/@octokit/plugin-throttling": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-5.2.3.tgz", - "integrity": "sha512-C9CFg9mrf6cugneKiaI841iG8DOv6P5XXkjmiNNut+swePxQ7RWEdAZRp5rJoE1hjsIqiYcKa/ZkOQ+ujPI39Q==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": "^4.0.0" + "interface-store": { + "version": "5.1.4" + }, + "internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" } }, - "node_modules/semantic-release/node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "devOptional": true, + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" } }, - "node_modules/semantic-release/node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" + "ip-regex": { + "version": "5.0.0" + }, + "ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==" + }, + "is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, - "node_modules/semantic-release/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" } }, - "node_modules/semantic-release/node_modules/@semantic-release/github": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.1.0.tgz", - "integrity": "sha512-erR9E5rpdsz0dW1I7785JtndQuMWN/iDcemcptf67tBNOmBUN0b2YNOgcjYUnBpgRpZ5ozfBHrK7Bz+2ets/Dg==", - "license": "MIT", - "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-retry": "^4.1.3", - "@octokit/plugin-throttling": "^5.2.3", - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "fs-extra": "^11.0.0", - "globby": "^11.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", - "lodash": "^4.17.4", - "mime": "^3.0.0", - "p-filter": "^2.0.0", - "url-join": "^4.0.0" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "requires": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" } }, - "node_modules/semantic-release/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "requires": { + "has-bigints": "^1.0.2" } }, - "node_modules/semantic-release/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" } }, - "node_modules/semantic-release/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" + "is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, - "node_modules/semantic-release/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "is-callable": { + "version": "1.2.7" + }, + "is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "requires": { + "hasown": "^2.0.2" } }, - "node_modules/semantic-release/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" } }, - "node_modules/semantic-release/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, - "node_modules/semantic-release/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-electron": { + "version": "2.2.2" + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" } }, - "node_modules/semantic-release/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "requires": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" } }, - "node_modules/semantic-release/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" } }, - "node_modules/semantic-release/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "is-inside-container": { + "version": "1.0.0", + "dev": true, + "requires": { + "is-docker": "^3.0.0" }, - "engines": { - "node": ">= 14" + "dependencies": { + "is-docker": { + "version": "3.0.0", + "dev": true + } } }, - "node_modules/semantic-release/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true }, - "node_modules/semantic-release/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" + "is-ip": { + "version": "5.0.1", + "requires": { + "ip-regex": "^5.0.0", + "super-regex": "^0.2.0" } }, - "node_modules/semantic-release/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "is-loopback-addr": { + "version": "2.0.2" + }, + "is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, - "node_modules/semantic-release/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "is-path-inside": { + "version": "3.0.3", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0" + }, + "is-promise": { + "version": "2.2.2" + }, + "is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "requires": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, - "node_modules/semantic-release/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } + "is-regexp": { + "version": "3.1.0" }, - "node_modules/semantic-release/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" + "is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" } }, - "node_modules/semantic-release/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-ssh": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", + "dev": true, + "requires": { + "protocols": "^2.0.1" } }, - "node_modules/semantic-release/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-stream": { + "version": "3.0.0" + }, + "is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, - "node_modules/semantic-release/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" } }, - "node_modules/semantic-release/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "requires": { + "which-typed-array": "^1.1.16" } }, - "node_modules/semantic-release/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "engines": { - "node": ">=8" + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true + }, + "is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true + }, + "is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" } }, - "node_modules/semantic-release/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" } }, - "node_modules/semantic-release/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" + "is-windows": { + "version": "1.0.2", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" } }, - "node_modules/semantic-release/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe": { + "version": "2.0.0" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "dev": true, + "requires": { + "append-transform": "^2.0.0" } }, - "node_modules/semantic-release/node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "license": "MIT" + "istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.2" + } }, - "node_modules/semantic-release/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "istanbul-lib-processinfo": { + "version": "2.0.3", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "dependencies": { + "p-map": { + "version": "3.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } } }, - "node_modules/semantic-release/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, - "engines": { - "node": ">=10" + "dependencies": { + "make-dir": { + "version": "4.0.0", + "dev": true, + "requires": { + "semver": "^7.5.2" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "node_modules/semantic-release/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" } }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "istanbul-reports": { + "version": "3.1.6", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "license": "MIT", - "optional": true + "it-all": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.6.tgz", + "integrity": "sha512-HXZWbxCgQZJfrv5rXvaVeaayXED8nTKx9tj9fpBhmcUJcedVZshMMMqTj0RG2+scGypb9Ut1zd1ifbf3lA8L+Q==" }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "license": "MIT", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" + "it-byte-stream": { + "version": "1.0.1", + "requires": { + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.4.1" } }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "it-drain": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.7.tgz", + "integrity": "sha512-vy6S1JKjjHSIFHgBpLpD1zhkCRl3z1zYWUxE14+kAYf+BL9ssWSFImJfhl361IIcwr0ofw8etzg11VqqB+ntUA==" + }, + "it-filter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.1.1.tgz", + "integrity": "sha512-TOXmVuaSkxlLp2hXKoMTra0WMZMKVFxE3vSsbIA+PbADNCBAHhjJ/lM31vBOUTddHMO34Ku++vU8T9PLlBxQtg==", + "requires": { + "it-peekable": "^3.0.0" } }, - "node_modules/semver-regex": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "it-first": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.6.tgz", + "integrity": "sha512-ExIewyK9kXKNAplg2GMeWfgjUcfC1FnUXz/RPfAvIXby+w7U4b3//5Lic0NV03gXT8O/isj5Nmp6KiY0d45pIQ==" + }, + "it-foreach": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.1.tgz", + "integrity": "sha512-ID4Gxnavk/LVQLQESAQ9hR6dR63Ih6X+8VdxEktX8rpz2dCGAbZpey/eljTNbMfV2UKXHiu6UsneoNBZuac97g==", + "requires": { + "it-peekable": "^3.0.0" } }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "it-length": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-length/-/it-length-3.0.6.tgz", + "integrity": "sha512-R7bxHAzpRzYz7vghc2DDH7x4KXvEkeLfN/h316++jzbkEHIRXbEPLbE20p5yrqqBdOeK6/FRUDuHlTJ0H1hysw==" + }, + "it-length-prefixed": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.0.4.tgz", + "integrity": "sha512-lz28fykbG0jq7s5XtvlzGxO5BeSOw6ikymkRllxjL21V5VKLcvB4pHr9wPvEnsAJ2et1xpOk3BRTMq9XrhgKsg==", + "requires": { + "err-code": "^3.0.1", + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.1" }, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "it-length-prefixed-stream": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.1.8.tgz", + "integrity": "sha512-nchxgDiGS5R5UKwrvTznrLRUOh9oo9GCDkddc8OI/AVkkiLhuh1+pcTSZ15DBl6GwdB7lBD1edUixTzJ78jfUw==", + "requires": { + "it-byte-stream": "^1.0.0", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "it-map": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.1.tgz", + "integrity": "sha512-9bCSwKD1yN1wCOgJ9UOl+46NQtdatosPWzxxUk2NdTLwRPXLh+L7iwCC9QKsbgM60RQxT/nH8bKMqm3H/o8IHQ==", + "requires": { + "it-peekable": "^3.0.0" + } }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "it-merge": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.5.tgz", + "integrity": "sha512-2l7+mPf85pyRF5pqi0dKcA54E5Jm/2FyY5GsOaN51Ta0ipC7YZ3szuAsH8wOoB6eKY4XsU4k2X+mzPmFBMayEA==", + "requires": { + "it-pushable": "^3.2.3" } }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" + "it-pair": { + "version": "2.0.6", + "requires": { + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" + "it-parallel": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.8.tgz", + "integrity": "sha512-URLhs6eG4Hdr4OdvgBBPDzOjBeSSmI+Kqex2rv/aAyYClME26RYHirLVhZsZP5M+ZP6M34iRlXk8Wlqtezuqpg==", + "requires": { + "p-defer": "^4.0.1" + } }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "license": "MIT", - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "it-peekable": { + "version": "3.0.2" + }, + "it-pipe": { + "version": "3.0.1", + "requires": { + "it-merge": "^3.0.0", + "it-pushable": "^3.1.2", + "it-stream-types": "^2.0.1" } }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "license": "(MIT OR CC0-1.0)", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "it-protobuf-stream": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/it-protobuf-stream/-/it-protobuf-stream-1.1.4.tgz", + "integrity": "sha512-HEO7PqNYRnFsN4qxxXWD0aQV3ibsYBaB/nPucBXgZcnD3csPltigU4C+j2U/ahhOwB/AfXdHv4WCd/IIzeSIpg==", + "requires": { + "it-length-prefixed-stream": "^1.0.0", + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.4.8" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" + "it-pushable": { + "version": "3.2.3", + "requires": { + "p-defer": "^4.0.0" } }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" + "it-reader": { + "version": "6.0.4", + "requires": { + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.0.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "license": "ISC" + "it-sort": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.6.tgz", + "integrity": "sha512-aNrlZAXB8vWBd42tCpaXGL6CJVJNDW3OLczmdt6g0k/s9Z6evkTdgU2LjwW5SNNeX41sF+C8MjV+OcVf93PsPw==", + "requires": { + "it-all": "^3.0.0" + } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "it-stream-types": { + "version": "2.0.1" + }, + "it-take": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.6.tgz", + "integrity": "sha512-uqw3MRzf9to1SOLxaureGa73lK8k8ZB/asOApTAkvrzUqCznGtKNgPFH7uYIWlt4UuWq/hU6I+U4Fm5xpjN8Vg==" + }, + "it-ws": { + "version": "6.1.1", + "requires": { + "@types/ws": "^8.2.2", + "event-iterator": "^2.0.0", + "it-stream-types": "^2.0.1", + "uint8arrays": "^5.0.0", + "ws": "^8.4.0" }, - "engines": { - "node": ">= 0.4" + "dependencies": { + "uint8arrays": { + "version": "5.0.0", + "requires": { + "multiformats": "^12.0.1" + } + } } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "license": "MIT", - "dependencies": { + "iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "requires": { "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" + "jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" + "jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-tokens": { + "version": "4.0.0", + "dev": true + }, + "js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" } }, - "node_modules/shacl-engine": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/shacl-engine/-/shacl-engine-0.1.5.tgz", - "integrity": "sha512-M/1ZaIvrgFyTQKtCgeZCk6IXqpStEd3dj192a5KD/JCksEWw7Gs4BrMgpoH8lR3MbHW7YOH+qABzr5Lo1MFnJg==", - "license": "MIT", - "dependencies": { - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/term-set": "^2.0.1", - "@rdfjs/to-ntriples": "^2.0.0", - "grapoi": "^1.1.1", - "lodash": "^4.17.21", - "rdf-literal": "^1.3.1", - "rdf-validation": "^0.1.0" + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "devOptional": true + }, + "jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json5": { + "version": "2.2.3", + "dev": true + }, + "jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "requires": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" } }, - "node_modules/shacl-engine/node_modules/@rdfjs/to-ntriples": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", - "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==", - "license": "MIT" + "jsonld-context-parser": { + "version": "2.4.0", + "requires": { + "@types/http-link-header": "^1.0.1", + "@types/node": "^18.0.0", + "cross-fetch": "^3.0.6", + "http-link-header": "^1.0.2", + "relative-to-absolute-iri": "^1.0.5" + }, + "dependencies": { + "@types/node": { + "version": "18.19.6", + "requires": { + "undici-types": "~5.26.4" + } + } + } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", + "jsonld-streaming-parser": { + "version": "3.3.0", + "requires": { + "@bergos/jsonparse": "^1.4.0", + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.4.0", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + }, "dependencies": { - "shebang-regex": "^3.0.0" + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "requires": { + "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.2" }, - "engines": { - "node": ">=8" + "dependencies": { + "jws": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + "requires": { + "jwa": "^1.4.2", + "safe-buffer": "^5.0.1" + } + } } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" + "jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true + }, + "jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "requires": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" + "keccak": { + "version": "3.0.4", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" } }, - "node_modules/shelljs/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "keyv": { + "version": "4.5.4", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "requires": { + "json-buffer": "3.0.1" } }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "kuler": { + "version": "2.0.0" + }, + "ky": { + "version": "0.33.3" + }, + "ky-universal": { + "version": "0.11.0", + "requires": { + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "dependencies": { + "node-fetch": { + "version": "3.3.2", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } } }, - "node_modules/shelljs/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "levn": { + "version": "0.4.1", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "node_modules/shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", - "license": "MIT", + "libp2p": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-1.8.0.tgz", + "integrity": "sha512-+dZe5Q1IedmD6JshhHP63sXfFpoBv2x/2dCytKGJmtgYJINVL2/hFCz4ezBQqcmOEa+XVs9A2nAuocH30r089Q==", + "requires": { + "@libp2p/crypto": "^4.1.5", + "@libp2p/interface": "^1.6.0", + "@libp2p/interface-internal": "^1.3.0", + "@libp2p/logger": "^4.0.16", + "@libp2p/multistream-select": "^5.1.13", + "@libp2p/peer-collections": "^5.2.5", + "@libp2p/peer-id": "^4.2.0", + "@libp2p/peer-id-factory": "^4.2.0", + "@libp2p/peer-store": "^10.1.1", + "@libp2p/utils": "^5.4.5", + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^12.2.3", + "@multiformats/multiaddr-matcher": "^1.2.1", + "any-signal": "^4.1.1", + "datastore-core": "^9.2.9", + "interface-datastore": "^8.2.11", + "it-merge": "^3.0.5", + "it-parallel": "^3.0.7", + "merge-options": "^3.0.4", + "multiformats": "^13.1.0", + "p-defer": "^4.0.1", + "progress-events": "^1.0.0", + "race-event": "^1.3.0", + "race-signal": "^1.0.2", + "uint8arrays": "^5.1.0" + }, "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" + "@multiformats/multiaddr": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.3.0.tgz", + "integrity": "sha512-JQ8Gc/jgucqqvEaDTFN/AvxlYDHEE7lgEWLMYW7hKZkWggER+GvG/tVxUgUxIP8M0vFpvEHKKHE0lKzyMsgi8Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "license": "MIT", - "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "engines": { - "node": ">=6" - } + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, - "node_modules/signale/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } + "lodash.capitalize": { + "version": "4.2.1", + "dev": true }, - "node_modules/signale/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } + "lodash.escaperegexp": { + "version": "4.1.2", + "dev": true }, - "node_modules/signale/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } + "lodash.flattendeep": { + "version": "4.4.0", + "dev": true }, - "node_modules/signale/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, - "node_modules/signale/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, - "node_modules/signale/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, - "node_modules/signale/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, - "node_modules/signale/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "lodash.isplainobject": { + "version": "4.0.6" }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } + "lodash.isstring": { + "version": "4.0.1" }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, - "node_modules/sinon": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", - "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.5", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } + "lodash.uniqby": { + "version": "4.7.0", + "dev": true }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "requires": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" } }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" + "logform": { + "version": "2.6.0", + "requires": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" }, - "engines": { - "node": ">= 10" + "dependencies": { + "@colors/colors": { + "version": "1.6.0" + } } }, - "node_modules/sirv/node_modules/@polka/url": { - "version": "1.0.0-next.25", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", - "license": "MIT" + "long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==" }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "loupe": { + "version": "2.3.7", + "dev": true, + "requires": { + "get-func-name": "^2.0.1" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" } }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "lru-queue": { + "version": "0.1.0", + "requires": { + "es5-ext": "~0.10.2" } }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" + "lzma-purejs-requirejs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lzma-purejs-requirejs/-/lzma-purejs-requirejs-1.0.0.tgz", + "integrity": "sha512-nQgC+oDmBKPdWoC//X51scWTN5D3zdIL7oN+plbKjhZ+u5LAZsF0/yIiYTNtj+TjB1o6mp9R4Ey5DW6elBEu8w==", + "requires": { + "amdefine": "~0.1.0", + "commander": "~2.2.0" }, - "engines": { - "node": ">= 14" + "dependencies": { + "commander": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz", + "integrity": "sha512-U6hBkeIsoeE81B+yas9uVF4YYVcVoBCwb1e314VPyvVQubFwvnTAuc1oUQ6VuMPYUS4Rf1gzr0wTVLvs4sb5Pw==" + } } }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "macos-release": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.4.0.tgz", + "integrity": "sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "requires": { + "semver": "^7.5.2" } }, - "node_modules/solid-namespace": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/solid-namespace/-/solid-namespace-0.5.3.tgz", - "integrity": "sha512-b2u2qkrRa0yrcc/jh6Nv0/mkwMyL4fMSNZtKG4dv3IxQtZOEUB8O6Xe7GrkoQaRoGrbUxRzbve9GHJD0w7p+KA==", - "license": "MIT", + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, "dependencies": { - "standard": "^17.0.0" + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + } } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "md5.js": { + "version": "1.3.5", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memoizee": { + "version": "0.4.15", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" + }, + "merge-options": { + "version": "3.0.4", + "requires": { + "is-plain-obj": "^2.1.0" } }, - "node_modules/spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "merge-stream": { + "version": "2.0.0" + }, + "merge2": { + "version": "1.4.1", "dev": true }, - "node_modules/spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", - "license": "MIT" + "methods": { + "version": "1.1.2" }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "mime-db": { + "version": "1.52.0" + }, + "mime-types": { + "version": "2.1.35", + "requires": { + "mime-db": "1.52.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "license": "CC-BY-3.0" + "mimic-fn": { + "version": "4.0.0" }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } + "mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true }, - "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "license": "CC0-1.0" + "minimalistic-assert": { + "version": "1.0.1" }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } + "minimalistic-crypto-utils": { + "version": "1.0.1" }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" + "minimatch": { + "version": "3.1.2", + "devOptional": true, + "requires": { + "brace-expansion": "^1.1.7" } }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "minimist": { + "version": "1.2.8" + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "devOptional": true, - "license": "BSD-3-Clause" + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } }, - "node_modules/sqlite3": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", - "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^7.0.0", - "prebuild-install": "^7.1.1", - "tar": "^6.1.11" - }, - "optionalDependencies": { - "node-gyp": "8.x" - }, - "peerDependencies": { - "node-gyp": "8.x" - }, - "peerDependenciesMeta": { - "node-gyp": { - "optional": true - } + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" } }, - "node_modules/sqlite3/node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "license": "MIT" + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "license": "ISC", + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "optional": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" + "requires": { + "minipass": "^3.0.0" } }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "license": "MIT", - "engines": { - "node": "*" + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "requires": { + "minipass": "^3.0.0" } }, - "node_modules/standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/standard/-/standard-17.1.0.tgz", - "integrity": "sha512-jaDqlNSzLtWYW4lvQmU0EnxWMUGQiwHasZl5ZEIwx3S/ijZDjZOzs1y1QqKwKs5vqnFpGtizo4NOYX2s0Voq/g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "eslint": "^8.41.0", - "eslint-config-standard": "17.1.0", - "eslint-config-standard-jsx": "^11.0.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-n": "^15.7.0", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.32.2", - "standard-engine": "^15.0.0", - "version-guard": "^1.1.1" - }, - "bin": { - "standard": "bin/cmd.cjs" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" } }, - "node_modules/standard-engine": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-15.1.0.tgz", - "integrity": "sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", + "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" + "glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "dependencies": { + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "is-unicode-supported": { + "version": "0.1.0", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true } - ], - "license": "MIT", - "dependencies": { - "get-stdin": "^8.0.0", - "minimist": "^1.2.6", - "pkg-conf": "^3.1.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/standard-engine/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } + "moment": { + "version": "2.29.4" }, - "node_modules/standard-engine/node_modules/load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - }, - "engines": { - "node": ">=6" + "mortice": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.0.4.tgz", + "integrity": "sha512-MUHRCAztSl4v/dAmK8vbYi5u1n9NZtQu4H3FsqS7qgMFQIAFw9lTpHiErd9kJpapqmvEdD1L3dUmiikifAvLsQ==", + "requires": { + "observable-webworkers": "^2.0.1", + "p-queue": "^8.0.1", + "p-timeout": "^6.0.0" } }, - "node_modules/standard-engine/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/standard-engine/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "multicast-dns": { + "version": "7.2.5", + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" } }, - "node_modules/standard-engine/node_modules/p-locate": { + "multiformats": { + "version": "12.1.3" + }, + "murmurhash3js-revisited": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } + "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", + "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==" }, - "node_modules/standard-engine/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true + }, + "n3": { + "version": "1.17.2", + "requires": { + "queue-microtask": "^1.1.2", + "readable-stream": "^4.0.0" }, - "engines": { - "node": ">=4" + "dependencies": { + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/standard-engine/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "nan": { + "version": "2.14.0" }, - "node_modules/standard-engine/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "license": "MIT", - "engines": { - "node": ">=6" - } + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, - "node_modules/standard-engine/node_modules/pkg-conf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", - "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0", - "load-json-file": "^5.2.0" - }, - "engines": { - "node": ">=6" - } + "native-fetch": { + "version": "4.0.2", + "requires": {} }, - "node_modules/standard-engine/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "natural-compare": { + "version": "1.4.0", + "dev": true }, - "node_modules/standard-engine/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=6" - } + "negotiator": { + "version": "0.6.3" }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "neo-async": { + "version": "2.6.2", + "dev": true }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "license": "MIT", - "dependencies": { - "bl": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "netmask": { + "version": "2.0.2" + }, + "new-github-release-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz", + "integrity": "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==", + "dev": true, + "requires": { + "type-fest": "^2.5.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "license": "MIT", - "dependencies": { - "internal-slot": "^1.0.4" + "next-tick": { + "version": "1.1.0" + }, + "nise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", + "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.1", + "@sinonjs/text-encoding": "^0.7.3", + "just-extend": "^6.2.0", + "path-to-regexp": "^8.1.0" }, - "engines": { - "node": ">= 0.4" + "dependencies": { + "path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "dev": true + } } }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" + "node-abi": { + "version": "3.65.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", + "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", + "requires": { + "semver": "^7.5.2" } }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "node-addon-api": { + "version": "2.0.2" + }, + "node-cron": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", + "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "requires": { + "uuid": "8.3.2" }, - "engines": { - "node": ">= 6" + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } } }, - "node_modules/stream-chunks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-chunks/-/stream-chunks-1.0.0.tgz", - "integrity": "sha512-/G+kinLx3pKXChtuko82taA4gZo56zFG2b2BbhmugmS0TUPBL40c5b2vjonS+gAHYK/cSKM9m0WTvAJYgDUeNw==", - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "string_decoder": "^1.3.0" + "node-domexception": { + "version": "1.0.0" + }, + "node-fetch": { + "version": "2.7.0", + "requires": { + "whatwg-url": "^5.0.0" } }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "license": "MIT", + "node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "dev": true + }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.5.2", + "tar": "^6.1.2", + "which": "^2.0.2" + }, "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + } } }, - "node_modules/stream-combiner2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" + "node-gyp-build": { + "version": "4.6.1" }, - "node_modules/stream-combiner2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node-preload": { + "version": "0.2.1", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" } }, - "node_modules/stream-combiner2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", + "node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "nodeify-fetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodeify-fetch/-/nodeify-fetch-3.1.0.tgz", + "integrity": "sha512-ZV81vM//sEgTgXwVZlOONzcOCdTGQ53mV65FVSNXgPQHa8oCwRLtLbnGxL/1S/Yw90bcXUDKMz00jEnaeazo+A==", + "requires": { + "lodash": "^4.17.21", + "node-fetch": "^3.2.10", + "readable-stream": "^4.2.0", + "stream-chunks": "^1.0.0" + }, "dependencies": { - "safe-buffer": "~5.1.0" + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/stream-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-concat/-/stream-concat-1.0.0.tgz", - "integrity": "sha512-LkFfEVoFZLOUWc5y55QHubSXYYeH3JtDp86nmVF/ib40k/FsBY5O/Nko4oaV+FDV52DxnTDmKY/zsR2VfFYsBA==", - "license": "MIT", - "engines": { - "node": ">=12" + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "requires": { + "abbrev": "1" } }, - "node_modules/stream-to-it": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz", - "integrity": "sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA==", - "license": "Apache-2.0 OR MIT", + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "requires": { + "path-key": "^4.0.0" + }, "dependencies": { - "it-stream-types": "^2.0.1" + "path-key": { + "version": "4.0.0" + } } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "nyc": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", + "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "cliui": { + "version": "6.0.0", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" + "foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "3.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "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" + } + }, + "yargs-parser": { + "version": "18.1.3", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } - ], - "license": "MIT" - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "dev": true, + "requires": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "object-assign": { + "version": "4.1.1" }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", + "object-hash": { + "version": "2.2.0" + }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "license": "MIT", - "dependencies": { + "object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "license": "MIT", - "dependencies": { + "object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "requires": { "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", + "object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "observable-webworkers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", + "integrity": "sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==" + }, + "ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" } }, - "node_modules/strip-bom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", - "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" } }, - "node_modules/strip-eof": { + "one-time": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "fn.name": "1.x.x" } }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "onetime": { + "version": "6.0.0", + "requires": { + "mimic-fn": "^4.0.0" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" + "open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "requires": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, - "engines": { - "node": ">=8" + "dependencies": { + "bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "requires": { + "run-applescript": "^7.0.0" + } + }, + "default-browser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", + "dev": true, + "requires": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + } + }, + "default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true + }, + "run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true + } } }, - "node_modules/strip-json-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", - "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionator": { + "version": "0.9.3", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" } }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" + "ora": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz", + "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==", + "dev": true, + "requires": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.2.2", + "string-width": "^8.1.0", + "strip-ansi": "^7.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true + }, + "string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "requires": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + } + }, + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, - "node_modules/strip-outer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "os-name": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-6.1.0.tgz", + "integrity": "sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==", + "dev": true, + "requires": { + "macos-release": "^3.3.0", + "windows-release": "^6.1.0" } }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "license": "MIT" - }, - "node_modules/sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" + "own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" } }, - "node_modules/super-regex": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", - "integrity": "sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==", - "license": "MIT", - "dependencies": { - "clone-regexp": "^3.0.0", - "function-timeout": "^0.1.0", - "time-span": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "p-defer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz", + "integrity": "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==" }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "requires": { + "p-timeout": "^6.1.2" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" } }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "p-queue": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz", + "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", + "requires": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" } }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "p-timeout": { + "version": "6.1.2" }, - "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "requires": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" }, - "funding": { - "url": "https://opencollective.com/unts" + "dependencies": { + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "4" + } + }, + "socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + } + } } }, - "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" + "pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "requires": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" } }, - "node_modules/table-layout": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", - "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "wordwrapjs": "^5.1.0" - }, - "engines": { - "node": ">=12.17" + "package-hash": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "license": "MIT", - "engines": { - "node": ">=12.17" + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "parse-github-url": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.3.tgz", + "integrity": "sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==", + "dev": true + }, + "parse-ms": { + "version": "2.1.0" + }, + "parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", + "dev": true, + "requires": { + "protocols": "^2.0.0" } }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" + "parse-url": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", + "dev": true, + "requires": { + "@types/parse-path": "^7.0.0", + "parse-path": "^7.0.0" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "node_modules/table/node_modules/slice-ansi": { + "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } + "dev": true }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "path-is-absolute": { + "version": "1.0.1", + "devOptional": true + }, + "path-key": { + "version": "3.1.1" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, - "engines": { - "node": ">=8" + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } } }, - "node_modules/tape": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-5.8.1.tgz", - "integrity": "sha512-pUzADXBVYm5Jkneh9hfXnirADrzQrDA3vddKbPOc/ZLORj4dFQ6GR1KdGWX0/NvOLDcYkVgeMdw78Uf6BzO3KA==", - "license": "MIT", - "dependencies": { - "@ljharb/resumer": "^0.1.3", - "@ljharb/through": "^2.3.13", - "array.prototype.every": "^1.1.6", - "call-bind": "^1.0.7", - "deep-equal": "^2.2.3", - "defined": "^1.0.1", - "dotignore": "^0.1.2", - "for-each": "^0.3.3", - "get-package-type": "^0.1.0", - "glob": "^7.2.3", - "has-dynamic-import": "^2.1.0", - "hasown": "^2.0.2", - "inherits": "^2.0.4", - "is-regex": "^1.1.4", - "minimist": "^1.2.8", - "mock-property": "^1.0.3", - "object-inspect": "^1.13.1", - "object-is": "^1.1.6", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "resolve": "^2.0.0-next.5", - "string.prototype.trim": "^1.2.9" - }, - "bin": { - "tape": "bin/tape" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "dev": true + }, + "pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "requires": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" } }, - "node_modules/tape/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", + "perfect-debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz", + "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } } }, - "node_modules/tape/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "requires": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" } }, - "node_modules/tape/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" + }, + "prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" } }, - "node_modules/tape/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "prettier": { + "version": "3.0.3", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "pretty-ms": { + "version": "7.0.1", + "requires": { + "parse-ms": "^2.1.0" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "process": { + "version": "0.11.10" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "process-on-spawn": { + "version": "1.0.0", + "dev": true, + "requires": { + "fromentries": "^1.2.0" } }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" + "progress-events": { + "version": "1.0.0" }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "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" + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" }, - "engines": { - "node": ">=6" + "dependencies": { + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true + } } }, - "node_modules/tar-stream/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/tar-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "requires": { + "@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" + } + }, + "protocols": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", + "dev": true + }, + "protons-runtime": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.4.0.tgz", + "integrity": "sha512-XfA++W/WlQOSyjUyuF5lgYBfXZUEMP01Oh1C2dSwZAlF2e/ZrMRPfWonXj6BGM+o8Xciv7w0tsRMKYwYEuQvaw==", + "requires": { + "uint8-varint": "^2.0.2", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" }, - { - "type": "consulting", - "url": "https://feross.org/support" + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" } }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "proxy-addr": { + "version": "2.0.7", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, - "engines": { - "node": ">= 6" + "dependencies": { + "ipaddr.js": { + "version": "1.9.1" + } } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "engines": { - "node": ">=8" + "proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "dependencies": { + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + } + } } }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "license": "MIT", - "engines": { - "node": ">=8" + "proxy-from-env": { + "version": "1.1.0" + }, + "pump": { + "version": "3.0.0", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/tempy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-2.0.0.tgz", - "integrity": "sha512-m+QReZVhpa0Y56fmfoLFRZN4aDFdd3qVd8a9k3RfyTw/1utVYNg+Ar4BY6l4/TlkhYCCJFfhYWt9uy0127buJg==", - "license": "MIT", - "dependencies": { - "del": "^6.0.0", - "is-stream": "^3.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^2.0.0", - "unique-string": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "punycode": { + "version": "2.3.1", + "dev": true + }, + "pvtsutils": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", + "requires": { + "tslib": "^2.6.1" } }, - "node_modules/tempy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==" + }, + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "requires": { + "side-channel": "^1.0.6" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + }, + "queue-microtask": { + "version": "1.2.3" + }, + "race-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/race-event/-/race-event-1.3.0.tgz", + "integrity": "sha512-kaLm7axfOnahIqD3jQ4l1e471FIFcEGebXEnhxyLscuUzV8C94xVHtWEqDDXxll7+yu/6lW0w1Ff4HbtvHvOHg==" + }, + "race-signal": { + "version": "1.0.2" + }, + "randombytes": { + "version": "2.1.0", + "requires": { + "safe-buffer": "^5.1.0" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", + "rc": { + "version": "1.2.8", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "strip-json-comments": { + "version": "2.0.1" + } } }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dev": true, + "requires": { + "defu": "^6.1.4", + "destr": "^2.0.3" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "rdf-canonize": { + "version": "3.4.0", + "requires": { + "setimmediate": "^1.0.5" } }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" + "rdf-data-factory": { + "version": "1.1.2", + "requires": { + "@rdfjs/types": "*" } }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "license": "MIT" + "rdf-dataset-ext": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/rdf-dataset-ext/-/rdf-dataset-ext-1.1.0.tgz", + "integrity": "sha512-CH85RfRKN9aSlbju8T7aM8hgCSWMBsh2eh/tGxUUtWMN+waxi6iFDt8/r4PAEmKaEA82guimZJ4ISbmJ2rvWQg==", + "requires": { + "rdf-canonize": "^3.0.0", + "readable-stream": "3 - 4" + } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" + "rdf-literal": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.2.tgz", + "integrity": "sha512-79Stlu3sXy0kq9/decHFLf3xNPuY6sfhFPhd/diWErgaFr0Ekyg38Vh9bnVcqDYu48CFRi0t+hrFii49n92Hbw==", + "requires": { + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0" + } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" + "rdf-validate-shacl": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/rdf-validate-shacl/-/rdf-validate-shacl-0.5.7.tgz", + "integrity": "sha512-YSBqZqThH5JOboHrG5EcY+/0X5Y2MAhUcDr2ftjdTNM8lOZGRpRur0KxmGJr7BRRMnFKR/efZ+TRNn1GTgrL/w==", + "requires": { + "@rdfjs/data-model": "^2", + "@rdfjs/dataset": "^2", + "@rdfjs/environment": "^1", + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-set": "^2.0.1", + "@rdfjs/types": "^1.1.0", + "@vocabulary/sh": "^1.1.5", + "clownface": "^2.0.0", + "debug": "^4.3.2", + "rdf-literal": "^1.3.2", + "rdf-validate-datatype": "^0.2.0" + }, + "dependencies": { + "rdf-validate-datatype": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rdf-validate-datatype/-/rdf-validate-datatype-0.2.1.tgz", + "integrity": "sha512-DpREnmoWDxC80KyslZeBPLQb3ztyeiOolT4uCl58tCju2KHJu4j5vonmVVdEJh2Mpad5UY57v6sSM/hfSTFGKQ==", + "requires": { + "@rdfjs/term-map": "^2.0.0", + "@tpluscode/rdf-ns-builders": "3 - 4" + } + } + } }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "license": "MIT", + "rdfxml-streaming-parser": { + "version": "2.4.0", + "requires": { + "@rdfjs/types": "*", + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.4.2", + "relative-to-absolute-iri": "^1.0.0", + "validate-iri": "^1.0.0" + }, "dependencies": { - "readable-stream": "3" + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/through2/node_modules/readable-stream": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { + "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/time-span": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", - "license": "MIT", - "dependencies": { - "convert-hrtime": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/timers-ext": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", - "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "license": "MIT", - "engines": { - "node": ">=4" + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "receptacle": { + "version": "1.3.2", + "requires": { + "ms": "^2.1.1" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" + "reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" } }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "license": "MIT", - "engines": { - "node": ">=6" + "regenerator-runtime": { + "version": "0.14.0" + }, + "regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true }, - "node_modules/traverse": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", - "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "relative-to-absolute-iri": { + "version": "1.0.7" + }, + "release-it": { + "version": "19.0.6", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-19.0.6.tgz", + "integrity": "sha512-XTCNZ2mV9wjASQmc2bcQjA+ImJiFMijbFSyQE6lDmP1Plq17acjYaoY5FmJb5Lh/Nv4UDwfRlKQMv1DvHFKf1g==", + "dev": true, + "requires": { + "@nodeutils/defaults-deep": "1.1.0", + "@octokit/rest": "22.0.0", + "@phun-ky/typeof": "2.0.3", + "async-retry": "1.3.3", + "c12": "3.3.1", + "ci-info": "^4.3.0", + "eta": "4.0.1", + "git-url-parse": "16.1.0", + "inquirer": "12.9.6", + "issue-parser": "7.0.1", + "lodash.merge": "4.6.2", + "mime-types": "3.0.1", + "new-github-release-url": "2.0.0", + "open": "10.2.0", + "ora": "9.0.0", + "os-name": "6.1.0", + "proxy-agent": "6.5.0", + "semver": "^7.5.2", + "tinyglobby": "0.2.15", + "undici": "6.21.3", + "url-join": "5.0.0", + "wildcard-match": "5.1.4", + "yargs-parser": "21.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "issue-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "dev": true, + "requires": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + } + }, + "mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true + }, + "mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "requires": { + "mime-db": "^1.54.0" + } + }, + "undici": { + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "dev": true + } } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "release-zalgo": { + "version": "1.0.0", "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" + "requires": { + "es6-error": "^4.0.1" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "license": "MIT", - "engines": { - "node": ">=8" + "require-directory": { + "version": "2.1.1" + }, + "require-main-filename": { + "version": "2.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "requires": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "node_modules/trim-repeated": { + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true }, - "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "requires": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "dependencies": { + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "requires": { + "mimic-function": "^5.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" + "retry": { + "version": "0.13.1", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "devOptional": true, + "requires": { + "glob": "^7.1.3" } }, - "node_modules/trouter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/trouter/-/trouter-2.0.1.tgz", - "integrity": "sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==", - "license": "MIT", - "dependencies": { - "matchit": "^1.0.0" - }, - "engines": { - "node": ">=6" + "ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "requires": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" } }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" + "rlp": { + "version": "2.2.7", + "requires": { + "bn.js": "^5.2.0" }, - "peerDependencies": { - "typescript": ">=4.2.0" + "dependencies": { + "bn.js": { + "version": "5.2.1" + } } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true + "run-applescript": { + "version": "5.0.0", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } }, - "@swc/wasm": { - "optional": true + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true } } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" + "run-async": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" } }, - "node_modules/ts-node/node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "license": "MIT", - "engines": { - "node": ">=6" + "rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "safe-buffer": { + "version": "5.2.1" + }, + "safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "license": "MIT", - "engines": { - "node": ">=4" + "safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", + "dev": true, + "requires": { + "regexp-tree": "~0.1.1" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + } }, - "node_modules/tsoa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-5.1.1.tgz", - "integrity": "sha512-U6+5CyD3+u9Dtza0fBnv4+lgmbZEskYljzRpKf3edGCAGtMKD2rfjtDw9jUdTfWb1FEDvsnR3pRvsSGBXaOdsA==", - "license": "MIT", - "dependencies": { - "@tsoa/cli": "^5.1.1", - "@tsoa/runtime": "^5.0.0" - }, - "bin": { - "tsoa": "dist/cli.js" + "safe-stable-stringify": { + "version": "2.4.3" + }, + "safer-buffer": { + "version": "2.1.2" + }, + "sax": { + "version": "1.3.0" + }, + "scrypt-js": { + "version": "3.0.1" + }, + "secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, + "semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==" + }, + "send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, - "engines": { - "node": ">=12.0.0", - "yarn": ">=1.9.4" + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + } } }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" } }, - "node_modules/tsutils-etc": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tsutils-etc/-/tsutils-etc-1.4.2.tgz", - "integrity": "sha512-2Dn5SxTDOu6YWDNKcx1xu2YUy6PUeKrWZB/x2cQ8vY2+iz3JRembKn/iZ0JLT1ZudGNwQQvtFX9AwvRHbXuPUg==", - "license": "MIT", - "dependencies": { - "@types/yargs": "^17.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "ts-flags": "bin/ts-flags", - "ts-kind": "bin/ts-kind" - }, - "peerDependencies": { - "tsutils": "^3.0.0", - "typescript": ">=4.0.0" + "serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "requires": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "set-blocking": { + "version": "2.0.0", + "devOptional": true }, - "node_modules/tsx": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.14.0.tgz", - "integrity": "sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.18.20", - "get-tsconfig": "^4.7.2", - "source-map-support": "^0.5.21" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" } }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" } }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "requires": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } + "setimmediate": { + "version": "1.0.5" }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "license": "ISC" + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" } }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "license": "MIT", - "engines": { - "node": ">=4" + "shebang-command": { + "version": "2.0.0", + "requires": { + "shebang-regex": "^3.0.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "shebang-regex": { + "version": "3.0.0" }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" + "shell-quote": { + "version": "1.8.1", + "dev": true + }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" + "object-inspect": "^1.13.3" } }, - "node_modules/typed-array-byte-length": { + "side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" } }, - "node_modules/typed-array-byte-offset": { + "side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, - "node_modules/typedoc": { - "version": "0.23.28", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.28.tgz", - "integrity": "sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==", - "license": "Apache-2.0", - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.2.12", - "minimatch": "^7.1.3", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 14.14" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x" - } + "signal-exit": { + "version": "3.0.7" }, - "node_modules/typedoc-plugin-mdn-links": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/typedoc-plugin-mdn-links/-/typedoc-plugin-mdn-links-2.0.2.tgz", - "integrity": "sha512-Fzjvfsj3rxvmZNqWRvq9JTGBkOkrPp0kBtvJCJ4U5Jm14OF1KoRErtmwgVQcPLA5Xs8h5I/W4uZBaL8SDHsgxQ==", - "license": "MIT", - "peerDependencies": { - "typedoc": "0.22.x || 0.23.x" - } + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, - "node_modules/typedoc-plugin-missing-exports": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-1.0.0.tgz", - "integrity": "sha512-7s6znXnuAj1eD9KYPyzVzR1lBF5nwAY8IKccP5sdoO9crG4lpd16RoFpLsh2PccJM+I2NASpr0+/NMka6ThwVA==", - "license": "MIT", - "peerDependencies": { - "typedoc": "0.22.x || 0.23.x" + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "simple-swizzle": { + "version": "0.2.2", + "requires": { + "is-arrayish": "^0.3.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "dependencies": { + "is-arrayish": { + "version": "0.3.2" + } } }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "sinon": { + "version": "19.0.5", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.5.tgz", + "integrity": "sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.5", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "nise": "^6.1.1", + "supports-color": "^7.2.0" }, - "engines": { - "node": ">=4.2.0" + "dependencies": { + "diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "license": "MIT", - "engines": { - "node": ">=8" + "slash": { + "version": "3.0.0", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "devOptional": true + }, + "socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "devOptional": true, + "requires": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" } }, - "node_modules/uglify-js": { - "version": "3.19.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.2.tgz", - "integrity": "sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==", - "license": "BSD-2-Clause", + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" } }, - "node_modules/uint8-varint": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", - "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "uint8arraylist": "^2.0.0", - "uint8arrays": "^5.0.0" - } + "source-map": { + "version": "0.6.1", + "dev": true }, - "node_modules/uint8-varint/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" - } + "spawn-command": { + "version": "0.0.2", + "dev": true }, - "node_modules/uint8arraylist": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", - "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "uint8arrays": "^5.0.1" + "spawn-wrap": { + "version": "2.0.0", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" } }, - "node_modules/uint8arraylist/node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", + "split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" + }, + "sprintf-js": { + "version": "1.1.3", + "devOptional": true + }, + "sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "node-gyp": "8.x", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, "dependencies": { - "multiformats": "^13.0.0" + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + } } }, - "node_modules/uint8arrays": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", - "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", - "license": "Apache-2.0 OR MIT", + "ssh2": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz", + "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==", + "requires": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.10", + "nan": "^2.20.0" + }, "dependencies": { - "multiformats": "^12.0.1" + "nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "optional": true + } } }, - "node_modules/uint8arrays/node_modules/multiformats": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", - "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", - "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "requires": { + "minipass": "^3.1.1" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "stack-trace": { + "version": "0.0.10" }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true + }, + "stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" } }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" + "stream-chunks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-chunks/-/stream-chunks-1.0.0.tgz", + "integrity": "sha512-/G+kinLx3pKXChtuko82taA4gZo56zFG2b2BbhmugmS0TUPBL40c5b2vjonS+gAHYK/cSKM9m0WTvAJYgDUeNw==", + "requires": { + "buffer": "^6.0.3", + "string_decoder": "^1.3.0" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" + "stream-concat": { + "version": "1.0.0" }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "license": "MIT", - "engines": { - "node": ">=4" + "stream-to-it": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz", + "integrity": "sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA==", + "requires": { + "it-stream-types": "^2.0.1" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "license": "MIT", - "engines": { - "node": ">=4" + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "engines": { - "node": ">=4" + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "license": "MIT" - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "license": "ISC", - "optional": true, - "dependencies": { - "unique-slug": "^2.0.0" + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" } }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "license": "ISC", - "optional": true, - "dependencies": { - "imurmurhash": "^0.1.4" + "string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" } }, - "node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, - "node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" } }, - "node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" } }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "license": "ISC" + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "strip-final-newline": { + "version": "3.0.0" + }, + "strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==" + }, + "super-regex": { + "version": "0.2.0", + "requires": { + "clone-regexp": "^3.0.0", + "function-timeout": "^0.1.0", + "time-span": "^5.1.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "synckit": { + "version": "0.8.5", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "requires": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "requires": { + "balanced-match": "^1.0.0" + } }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" + "foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "minizlib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", + "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "requires": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + } + }, + "mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==" + }, + "rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "requires": { + "glob": "^10.3.7" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" } }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" + "tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + } } }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" + "dependencies": { + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } } - ], - "license": "MIT", - "engines": { - "node": ">=8" } }, - "node_modules/update-notifier/node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" } }, - "node_modules/update-notifier/node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "text-hex": { + "version": "1.0.0" }, - "node_modules/update-notifier/node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "text-table": { + "version": "0.2.0", + "dev": true }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } + "thunky": { + "version": "1.1.0" }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "license": "MIT", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "time-span": { + "version": "5.1.0", + "requires": { + "convert-hrtime": "^5.0.0" } }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "timers-ext": { + "version": "0.1.7", + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "license": "MIT" + "tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "license": "MIT", + "tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "requires": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, "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" + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true + } } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } + "titleize": { + "version": "3.0.0", + "dev": true }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "requires": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" + "tr46": { + "version": "0.0.3" }, - "node_modules/validate-iri": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/validate-iri/-/validate-iri-1.0.1.tgz", - "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==", - "license": "MIT" + "tree-kill": { + "version": "1.2.2", + "dev": true }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "triple-beam": { + "version": "1.4.1" }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "ts-api-utils": { + "version": "1.0.3", + "dev": true, + "requires": {} }, - "node_modules/validator": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", - "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", - "license": "MIT", - "engines": { - "node": ">= 0.10" + "tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "license": "MIT" + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "tsx": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", + "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", + "dev": true, + "requires": { + "esbuild": "~0.25.0", + "fsevents": "~2.3.3", + "get-tsconfig": "^4.7.5" } }, - "node_modules/version-guard": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/version-guard/-/version-guard-1.1.2.tgz", - "integrity": "sha512-D8d+YxCUpoqtCnQzDxm6SF7DLU3gr2535T4khAtMq4osBahsQnmSxuwXFdrbAdDGG8Uokzfis/jvyeFPdmlc7w==", - "license": "0BSD", - "engines": { - "node": ">=0.10.48" + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "license": "MIT" + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "license": "MIT" + "type": { + "version": "1.2.0" }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" } }, - "node_modules/weald": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/weald/-/weald-1.0.2.tgz", - "integrity": "sha512-iG5cIuBwsPe1ZcoGGd4X6QYlepU1vLr4l4oWpzQWqeJPSo9B8bxxyE6xlnj3TCmThtha7gyVL+uuZgUFkPyfDg==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "ms": "^3.0.0-canary.1", - "supports-color": "^9.4.0" - } + "type-detect": { + "version": "4.0.8", + "dev": true }, - "node_modules/weald/node_modules/ms": { - "version": "3.0.0-canary.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz", - "integrity": "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==", - "license": "MIT", - "engines": { - "node": ">=12.13" - } + "type-fest": { + "version": "0.20.2", + "dev": true }, - "node_modules/weald/node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", - "engines": { - "node": ">= 8" + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" } }, - "node_modules/wherearewe": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz", - "integrity": "sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "is-electron": "^2.2.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" } }, - "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "license": "MIT", - "dependencies": { - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "typescript": { + "version": "4.9.5", + "dev": true, + "peer": true }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" + "uglify-js": { + "version": "3.17.4", + "dev": true, + "optional": true + }, + "uint8-varint": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", + "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", + "requires": { + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "license": "ISC" - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "uint8arraylist": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", + "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", + "requires": { + "uint8arrays": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "multiformats": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.1.tgz", + "integrity": "sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q==" + }, + "uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "requires": { + "multiformats": "^13.0.0" + } + } } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "license": "ISC", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "uint8arrays": { + "version": "4.0.6", + "requires": { + "multiformats": "^12.0.1" } }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" } }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "requires": { + "@fastify/busboy": "^2.0.0" } }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" + "undici-types": { + "version": "5.26.5" }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "requires": { + "unique-slug": "^2.0.0" } }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "requires": { + "imurmurhash": "^0.1.4" } }, - "node_modules/wildcard-match": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/wildcard-match/-/wildcard-match-5.1.3.tgz", - "integrity": "sha512-a95hPUk+BNzSGLntNXYxsjz2Hooi5oL7xOfJR6CKwSsSALh7vUNuTlzsrZowtYy38JNduYFRVhFv19ocqNOZlg==", - "dev": true, - "license": "ISC" + "universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "untildify": { + "version": "4.0.0", + "dev": true }, - "node_modules/windows-release": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-5.1.1.tgz", - "integrity": "sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==", + "update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, - "node_modules/windows-release/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "uri-js": { + "version": "4.4.1", "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "requires": { + "punycode": "^2.1.0" } }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + } } }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" + "url-join": { + "version": "5.0.0" + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "utils-merge": { + "version": "1.0.1" + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" + }, + "validate-iri": { + "version": "1.0.1" + }, + "varint": { + "version": "6.0.0" + }, + "vary": { + "version": "1.1.2" + }, + "web-streams-polyfill": { + "version": "3.3.2" + }, + "webidl-conversions": { + "version": "3.0.1" + }, + "whatwg-url": { + "version": "5.0.0", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/windows-release/node_modules/is-stream": { + "wherearewe": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "is-electron": "^2.2.0" } }, - "node_modules/windows-release/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "which": { + "version": "2.0.2", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "requires": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" } }, - "node_modules/windows-release/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" } }, - "node_modules/windows-release/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" } }, - "node_modules/windows-release/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "which-module": { + "version": "2.0.1", + "dev": true + }, + "which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard-match": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/wildcard-match/-/wildcard-match-5.1.4.tgz", + "integrity": "sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==", + "dev": true + }, + "windows-release": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-6.1.0.tgz", + "integrity": "sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "requires": { + "execa": "^8.0.1" } }, - "node_modules/winston": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", - "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", - "license": "MIT", - "dependencies": { + "winston": { + "version": "3.11.0", + "requires": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.6.0", + "logform": "^2.4.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.7.0" + "winston-transport": "^4.5.0" }, - "engines": { - "node": ">= 12.0.0" + "dependencies": { + "@colors/colors": { + "version": "1.6.0" + }, + "async": { + "version": "3.2.4" + }, + "is-stream": { + "version": "2.0.1" + } } }, - "node_modules/winston-daily-rotate-file": { + "winston-daily-rotate-file": { "version": "4.7.1", - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.7.1.tgz", - "integrity": "sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==", - "license": "MIT", - "dependencies": { + "requires": { "file-stream-rotator": "^0.6.1", "object-hash": "^2.0.1", "triple-beam": "^1.3.0", "winston-transport": "^4.4.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "winston": "^3" - } - }, - "node_modules/winston-transport": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", - "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", - "license": "MIT", - "dependencies": { - "logform": "^2.6.1", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/winston/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/winston/node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "license": "MIT" - }, - "node_modules/winston/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/winston/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "license": "MIT" - }, - "node_modules/wordwrapjs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "license": "MIT", - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "license": "MIT", - "engines": { - "node": ">=4" + "winston-transport": { + "version": "4.6.0", + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" } }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "license": "MIT", - "engines": { - "node": ">=4" - } + "wordwrap": { + "version": "1.0.0", + "dev": true }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" + "workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" + "wrappy": { + "version": "1.0.2" }, - "node_modules/write-file-atomic": { + "write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { + "dev": true, + "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ws": { + "ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "requires": {} + }, + "wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "requires": { + "is-wsl": "^3.1.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true + "dependencies": { + "is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "requires": { + "is-inside-container": "^1.0.0" + } } } }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "license": "MIT", - "dependencies": { + "xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "requires": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "license": "MIT" - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - }, - "bin": { - "json2yaml": "bin/json2yaml", - "yaml2json": "bin/yaml2json" - } - }, - "node_modules/yamljs/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" } }, - "node_modules/yamljs/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "xmlbuilder": { + "version": "11.0.1" }, - "node_modules/yamljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "xmlchars": { + "version": "2.2.0" }, - "node_modules/yamljs/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "y18n": { + "version": "5.0.8" }, - "node_modules/yamljs/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" + "yallist": { + "version": "4.0.0" }, - "node_modules/yargs": { + "yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { + "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -35967,135 +32658,51 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" } }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } + "yargs-parser": { + "version": "21.1.1" }, - "node_modules/yargs-unparser": { + "yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "license": "MIT", - "dependencies": { + "dev": true, + "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "license": "MIT", "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz", - "integrity": "sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==", - "license": "MIT", - "engines": { - "node": ">=10" + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "dev": true + } } }, - "node_modules/yocto-queue": { + "yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/yoctocolors-cjs": { + "yoctocolors": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true + }, + "zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" } } } diff --git a/package.json b/package.json index 31a95506f..45f46d586 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ocean-node", - "version": "0.2.0", + "version": "0.2.3", "description": "Ocean Node is used to run all core services in the Ocean stack", "author": "Ocean Protocol Foundation", "license": "Apache-2.0", @@ -10,16 +10,14 @@ "url": "https://github.com/oceanprotocol/ocean-node/issues" }, "scripts": { - "build": "npm run clean && npm run check-changes && npm run build:tsc", - "build:no-dashboard": "npm run clean && npm run build:tsc", + "build": "npm run clean && npm run build:tsc", "build:tsc": "tsc --sourceMap", + "build:controlpanel": "cd controlpanel && npm install --maxsockets 1 && NODE_ENV=production npx next build", "quickstart": "bash scripts/ocean-node-quickstart.sh", "setupEnv": "bash -c './src/helpers/scripts/setupNodeEnv.sh && source .env'", - "build-tests:tsc": "tsc --sourceMap --sourceRoot ./src/test && cp ./src/test/.env.test ./dist/test", - "build:dashboard": "cd dashboard && npm install --maxsockets 1 && NODE_ENV=production npx next build", - "check-changes": "node scripts/dashboardChanges.js", + "build-tests:tsc": "tsc --sourceMap --sourceRoot ./src/test && cp ./src/test/.env.test ./dist/test && cp ./src/test/.env.test2 ./dist/test && cp ./src/test/config.json $HOME/config.json", "client": "mkdir -p ./dist/helpers/scripts/output && node dist/helpers/scripts/clientExample.js", - "clean": "if [ -d ./dist ]; then find ./dist -mindepth 1 -not -path './dist/dashboard*' -delete; fi", + "clean": "if [ -d ./dist ]; then find ./dist -mindepth 1 -not -path './dist/controlpanel*' -delete; fi", "clean:all": "rm -rf ./dist/ ./doc/ ./.nyc_output", "build-tests": "rm -rf ./dist/test && npm run build-tests:tsc", "start": "node --max-old-space-size=28784 --trace-warnings --experimental-specifier-resolution=node dist/index.js", @@ -33,6 +31,8 @@ "test": "npm run lint && npm run test:unit:cover && npm run test:integration:cover", "test:unit": "npm run build-tests && npm run mocha \"./dist/test/unit/**/*.test.js\"", "test:integration": "npm run build-tests && npm run mocha \"./dist/test/integration/**/*.test.js\"", + "test:computeunit": "npm run build-tests && npm run mocha \"./dist/test/unit/compute.test.js\"", + "test:computeintegration": "npm run build-tests && npm run mocha \"./dist/test/integration/compute.test.js\"", "test:indexer": "npm run build-tests && npm run mocha \"./dist/test/integration/indexer.test.js\"", "test:integration:light": "npm run build-tests && npm run mocha-light \"./dist/test/integration/**/*.test.js\"", "test:unit:cover": "nyc --report-dir coverage/unit npm run test:unit", @@ -58,10 +58,7 @@ "@libp2p/circuit-relay-v2": "^1.1.1", "@libp2p/crypto": "^4.1.5", "@libp2p/dcutr": "^1.1.1", - "@libp2p/floodsub": "^9.1.1", "@libp2p/identify": "^2.1.1", - "@libp2p/interface": "^1.6.0", - "@libp2p/interface-address-manager": "^3.0.1", "@libp2p/kad-dht": "^12.1.1", "@libp2p/mdns": "^10.1.1", "@libp2p/peer-id": "^4.1.4", @@ -73,63 +70,52 @@ "@libp2p/upnp-nat": "^1.2.1", "@libp2p/websockets": "^8.1.1", "@multiformats/multiaddr": "^10.2.0", - "@oceanprotocol/contracts": "^2.2.0", - "@rdfjs/dataset": "^2.0.1", - "@rdfjs/types": "^1.1.0", - "@types/lodash.clonedeep": "^4.5.7", - "@types/n3": "^1.16.4", - "@types/rdf-ext": "^2.2.5", - "@types/rdf-utils-fs": "^2.1.5", - "@types/rdfjs__data-model": "^2.0.7", - "@types/rdfjs__dataset": "^2.0.7", - "@types/rdfjs__parser-jsonld": "^2.1.6", - "@types/rdfjs__to-ntriples": "^2.0.6", - "@zazuko/env-node": "^2.1.3", - "aegir": "^37.3.0", - "aws-sdk": "^2.1591.0", - "axios": "^1.7.4", + "@oceanprotocol/contracts": "^2.5.0", + "@oceanprotocol/ddo-js": "^0.1.4", + "aws-sdk": "^2.1693.0", + "axios": "^1.12.0", "base58-js": "^2.0.0", "cors": "^2.8.5", "delay": "^5.0.0", + "dockerode": "^4.0.5", "dotenv": "^16.3.1", "eciesjs": "^0.4.5", "eth-crypto": "^2.6.0", - "ethers": "^6.8.1", + "ethers": "^6.14.1", "express": "^4.21.1", + "humanhash": "^1.0.4", "hyperdiff": "^2.0.16", - "ip": "^2.0.1", + "ipaddr.js": "^2.3.0", "it-pipe": "^3.0.1", + "jsonwebtoken": "^9.0.2", "libp2p": "^1.8.0", - "lodash.clonedeep": "^4.5.0", + "lodash": "^4.17.21", "lzma-purejs-requirejs": "^1.0.0", - "n3": "^1.17.2", "node-cron": "^3.0.3", - "private-ip": "^3.0.2", - "rdf-utils-fs": "^3.0.0", - "rdf-validate-shacl": "^0.5.5", - "rdflib": "^2.2.33", - "shacl-engine": "^0.1.2", - "sinon": "^17.0.1", "sqlite3": "^5.1.7", "stream-concat": "^1.0.0", - "ts-node": "^10.9.1", - "tsoa": "^5.1.1", + "tar": "^7.4.3", "uint8arrays": "^4.0.6", "url-join": "^5.0.0", "winston": "^3.11.0", "winston-daily-rotate-file": "^4.7.1", - "winston-transport": "^4.6.0" + "winston-transport": "^4.6.0", + "zod": "^3.25.76" }, "devDependencies": { "@types/chai": "^4.3.10", "@types/cors": "^2.8.17", + "@types/dockerode": "^3.3.31", "@types/express": "^4.17.17", "@types/ip": "^1.1.3", - "@types/lzma-native": "^4.0.4", - "@types/mocha": "^10.0.4", + "@types/jsonwebtoken": "^9.0.9", + "@types/lodash": "^4.17.21", + "@types/mocha": "^10.0.10", "@types/node": "^20.14.2", "@types/node-cron": "^3.0.11", "@types/rdfjs__formats-common": "^3.1.5", + "@types/sinon": "^17.0.4", + "@types/tar-stream": "^3.1.4", "@typescript-eslint/eslint-plugin": "^6.8.0", "@typescript-eslint/parser": "^6.8.0", "auto-changelog": "^2.4.0", @@ -140,10 +126,26 @@ "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-promise": "^6.1.1", - "mocha": "^10.2.0", + "mocha": "^11.1.0", + "nyc": "^17.1.0", "prettier": "^3.0.3", - "release-it": "^17.6.0", - "tsx": "^3.12.8" + "release-it": "^19.0.6", + "sinon": "^19.0.2", + "tsx": "^4.19.3" + }, + "overrides": { + "elliptic": "^6.6.1", + "tough-cookie": "^4.1.3", + "xml2js": "^0.5.0", + "semver": "^7.5.2", + "tmp": "^0.2.3", + "base64url": "^3.0.1", + "eth-crypto": { + "secp256k1": "^5.0.0" + }, + "eccrypto": { + "secp256k1": "^5.0.0" + } }, "release-it": { "hooks": { diff --git a/schemas/4.1.0.ttl b/schemas/4.1.0.ttl deleted file mode 100644 index 3ec5662a1..000000000 --- a/schemas/4.1.0.ttl +++ /dev/null @@ -1,395 +0,0 @@ -@prefix dash: . -@prefix rdf: . -@prefix rdfs: . -@prefix schema: . -@prefix sh: . -@prefix xsd: . - -schema:DDOShape - sh:targetClass schema:DDO ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^did\\:op\\:(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:version ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:chainId; - sh:datatype xsd:integer ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:nftAddress; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:metadata ; - sh:node schema:MetadataShape ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:services ; - sh:node schema:ServiceShape ; - sh:minCount 1; - ] ; - sh:property [ - sh:path schema:credentials; - sh:node schema:CredentialsShape ; - ] ; . - - -schema:MetadataShape - sh:targetClass schema:Metadata ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:copyrightHolder; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:name ; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:type; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:author; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:license; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:links; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - ] ; - sh:property [ - sh:path schema:tags; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - ] ; - sh:property [ - sh:path schema:categories; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - ] ; - sh:property [ - sh:path schema:contentLanguage; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:additionalInformation; - ] ; - sh:property [ - sh:path schema:created; - sh:datatype xsd:string; -# sh:pattern "^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])(\.[0-9]{3})?Z$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:updated; - sh:datatype xsd:string; -# sh:pattern "^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])(\.[0-9]{3})?Z$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:algorithm; - sh:node schema:AlgorithmShape ; - sh:maxCount 1; - ] ;. - - -schema:AlgorithmShape - sh:targetClass schema:Algorithm ; - sh:property [ - sh:path schema:version ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:language ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:container ; - sh:node schema:ContainerShape ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:consumerParameters; - sh:node schema:ConsumerParametersShape ; - ] ;. - - -schema:ConsumerParametersShape - sh:targetClass schema:ConsumerParameter ; - sh:property [ - sh:path schema:name; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:type; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:label; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:required ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:default; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:options; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - ] ;. - - -schema:ContainerShape - sh:targetClass schema:Container ; - sh:property [ - sh:path schema:entrypoint ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:image ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:tag ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:checksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ;. - - -schema:ServiceShape - sh:targetClass schema:Service ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:type ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:name ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:datatokenAddress ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:serviceEndpoint ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:files; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:timeout ; - sh:datatype xsd:integer ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:compute; - sh:node schema:ComputeShape ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:additionalInformation ; - ] ; - sh:property [ - sh:path schema:consumerParameters; - sh:node schema:ConsumerParametersShape ; - ] ;. - - -schema:ComputeShape - sh:targetClass schema:Compute ; - sh:property [ - sh:path schema:allowRawAlgorithm ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:allowNetworkAccess ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:publisherTrustedAlgorithmPublishers ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - ] ; - sh:property [ - sh:path schema:publisherTrustedAlgorithms; - sh:node schema:TrustedAlgoShape ; - ] ; . - - -schema:TrustedAlgoShape - sh:targetClass schema:TrustedAlgo; - sh:property [ - sh:path schema:did ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:filesChecksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:containerSectionChecksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; . - - -schema:CredentialsShape - sh:targetClass schema:Credentials; - sh:property [ - sh:path schema:deny ; - sh:node schema:CredentialsItemShape; - ] ; - sh:property [ - sh:path schema:allow; - sh:node schema:CredentialsItemShape; - ] ; . - - -schema:CredentialsItemShape - sh:targetClass schema:CredentialsItem; - sh:property [ - sh:path schema:type ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:values ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - ] ; . \ No newline at end of file diff --git a/schemas/4.3.0.ttl b/schemas/4.3.0.ttl deleted file mode 100644 index 5c67a3653..000000000 --- a/schemas/4.3.0.ttl +++ /dev/null @@ -1,446 +0,0 @@ -@prefix dash: . -@prefix rdf: . -@prefix rdfs: . -@prefix schema: . -@prefix sh: . -@prefix xsd: . - -schema:DDOShape - sh:targetClass schema:DDO ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^did\\:op\\:(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:maxLength 71; - sh:minLength 71; - ] ; - sh:property [ - sh:path schema:version ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:maxLength 16; - ] ; - sh:property [ - sh:path schema:chainId; - sh:datatype xsd:integer ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:nftAddress; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:minLength 42; - sh:maxLength 42; - ] ; - sh:property [ - sh:path schema:metadata ; - sh:node schema:MetadataShape ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:services ; - sh:node schema:ServiceShape ; - sh:minCount 1; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:credentials; - sh:node schema:CredentialsShape ; - sh:maxCount 64; - ] ; . - - -schema:MetadataShape - sh:targetClass schema:Metadata ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 7000; - ] ; - sh:property [ - sh:path schema:copyrightHolder; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxCount 1; - sh:maxLength 512; - ] ; - sh:property [ - sh:path schema:name ; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 512; - ] ; - sh:property [ - sh:path schema:type; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:author; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:license; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:links; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 512; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:tags; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 256; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:categories; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 256; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:contentLanguage; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:additionalInformation; - ] ; - sh:property [ - sh:path schema:created; - sh:datatype xsd:string; -# sh:pattern "^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])(\.[0-9]{3})?Z$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:updated; - sh:datatype xsd:string; -# sh:pattern "^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])(\.[0-9]{3})?Z$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:algorithm; - sh:node schema:AlgorithmShape ; - sh:maxCount 1; - ] ;. - - -schema:AlgorithmShape - sh:targetClass schema:Algorithm ; - sh:property [ - sh:path schema:version ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:language ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:container ; - sh:node schema:ContainerShape ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:consumerParameters; - sh:node schema:ConsumerParametersShape ; - sh:maxCount 64; - ] ;. - - -schema:ConsumerParametersShape - sh:targetClass schema:ConsumerParameter ; - sh:property [ - sh:path schema:name; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:type; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:label; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:required ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 7000; - ] ; - sh:property [ - sh:path schema:default; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:options; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 256; - ] ;. - - -schema:ContainerShape - sh:targetClass schema:Container ; - sh:property [ - sh:path schema:entrypoint ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:image ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:tag ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:checksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 512; - sh:minLength 7; - sh:minCount 1; - sh:maxCount 1; - ] ;. - - -schema:ServiceShape - sh:targetClass schema:Service ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:type ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:name ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:minLength 4; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:maxCount 1; - sh:minLength 10; - sh:maxLength 7000; - ] ; - sh:property [ - sh:path schema:datatokenAddress ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 42; - sh:maxLength 42; - ] ; - sh:property [ - sh:path schema:serviceEndpoint ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 10; - sh:maxLength 2048; - ] ; - sh:property [ - sh:path schema:files; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 8192; - ] ; - sh:property [ - sh:path schema:timeout ; - sh:datatype xsd:integer ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:compute; - sh:node schema:ComputeShape ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:additionalInformation ; - ] ; - sh:property [ - sh:path schema:consumerParameters; - sh:node schema:ConsumerParametersShape ; - ] ;. - - -schema:ComputeShape - sh:targetClass schema:Compute ; - sh:property [ - sh:path schema:allowRawAlgorithm ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:allowNetworkAccess ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:publisherTrustedAlgorithmPublishers ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:publisherTrustedAlgorithms; - sh:node schema:TrustedAlgoShape ; - ] ; . - - -schema:TrustedAlgoShape - sh:targetClass schema:TrustedAlgo; - sh:property [ - sh:path schema:did ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:filesChecksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 1024; - ] ; - sh:property [ - sh:path schema:containerSectionChecksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 1024; - ] ; . - - -schema:CredentialsShape - sh:targetClass schema:Credentials; - sh:property [ - sh:path schema:deny ; - sh:node schema:CredentialsItemShape; - ] ; - sh:property [ - sh:path schema:allow; - sh:node schema:CredentialsItemShape; - ] ; . - - -schema:CredentialsItemShape - sh:targetClass schema:CredentialsItem; - sh:property [ - sh:path schema:type ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:values ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxLength 1024; - ] ; . \ No newline at end of file diff --git a/schemas/4.5.0.ttl b/schemas/4.5.0.ttl deleted file mode 100644 index bb17c9566..000000000 --- a/schemas/4.5.0.ttl +++ /dev/null @@ -1,451 +0,0 @@ -@prefix dash: . -@prefix rdf: . -@prefix rdfs: . -@prefix schema: . -@prefix sh: . -@prefix xsd: . - -schema:DDOShape - sh:targetClass schema:DDO ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^did\\:op\\:(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:maxLength 71; - sh:minLength 71; - ] ; - sh:property [ - sh:path schema:version ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:maxLength 16; - ] ; - sh:property [ - sh:path schema:chainId; - sh:datatype xsd:integer ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:nftAddress; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:minLength 42; - sh:maxLength 42; - ] ; - sh:property [ - sh:path schema:metadata ; - sh:node schema:MetadataShape ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:services ; - sh:node schema:ServiceShape ; - sh:minCount 0; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:credentials; - sh:node schema:CredentialsShape ; - sh:maxCount 64; - ] ; . - - -schema:MetadataShape - sh:targetClass schema:Metadata ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 7000; - sh:minLength 10; - ] ; - sh:property [ - sh:path schema:copyrightHolder; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxCount 1; - sh:maxLength 512; - ] ; - sh:property [ - sh:path schema:name ; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 512; - sh:minLength 4; - ] ; - sh:property [ - sh:path schema:type; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:author; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:license; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:links; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 512; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:tags; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 256; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:categories; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 256; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:contentLanguage; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:additionalInformation; - ] ; - sh:property [ - sh:path schema:created; - sh:datatype xsd:string; -# sh:pattern "^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])(\.[0-9]{3})?Z$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:updated; - sh:datatype xsd:string; -# sh:pattern "^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])(\.[0-9]{3})?Z$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:algorithm; - sh:node schema:AlgorithmShape ; - sh:maxCount 1; - ] ;. - - -schema:AlgorithmShape - sh:targetClass schema:Algorithm ; - sh:property [ - sh:path schema:version ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:language ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:container ; - sh:node schema:ContainerShape ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:consumerParameters; - sh:node schema:ConsumerParametersShape ; - sh:maxCount 64; - ] ;. - - -schema:ConsumerParametersShape - sh:targetClass schema:ConsumerParameter ; - sh:property [ - sh:path schema:name; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:type; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:label; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:required ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 7000; - ] ; - sh:property [ - sh:path schema:default; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:options; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 256; - ] ;. - - -schema:ContainerShape - sh:targetClass schema:Container ; - sh:property [ - sh:path schema:entrypoint ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 3; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:image ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:tag ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:checksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 512; - sh:minLength 7; - sh:minCount 1; - sh:maxCount 1; - ] ;. - - -schema:ServiceShape - sh:targetClass schema:Service ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:type ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:name ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:minLength 4; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:maxCount 1; - sh:minLength 10; - sh:maxLength 7000; - ] ; - sh:property [ - sh:path schema:datatokenAddress ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 42; - sh:maxLength 42; - ] ; - sh:property [ - sh:path schema:serviceEndpoint ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 10; - sh:maxLength 2048; - ] ; - sh:property [ - sh:path schema:files; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 8192; - ] ; - sh:property [ - sh:path schema:timeout ; - sh:datatype xsd:integer ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:compute; - sh:node schema:ComputeShape ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:additionalInformation ; - ] ; - sh:property [ - sh:path schema:consumerParameters; - sh:node schema:ConsumerParametersShape ; - ] ;. - - -schema:ComputeShape - sh:targetClass schema:Compute ; - sh:property [ - sh:path schema:allowRawAlgorithm ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:allowNetworkAccess ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:publisherTrustedAlgorithmPublishers ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:publisherTrustedAlgorithms; - sh:node schema:TrustedAlgoShape ; - ] ; . - - -schema:TrustedAlgoShape - sh:targetClass schema:TrustedAlgo; - sh:property [ - sh:path schema:did ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:filesChecksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 1024; - ] ; - sh:property [ - sh:path schema:containerSectionChecksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 1024; - ] ; . - - -schema:CredentialsShape - sh:targetClass schema:Credentials; - sh:property [ - sh:path schema:deny ; - sh:node schema:CredentialsItemShape; - ] ; - sh:property [ - sh:path schema:allow; - sh:node schema:CredentialsItemShape; - ] ; . - - -schema:CredentialsItemShape - sh:targetClass schema:CredentialsItem; - sh:property [ - sh:path schema:type ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:values ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxLength 1024; - ] ; . \ No newline at end of file diff --git a/schemas/4.7.0.ttl b/schemas/4.7.0.ttl deleted file mode 100644 index 52d7b494a..000000000 --- a/schemas/4.7.0.ttl +++ /dev/null @@ -1,456 +0,0 @@ -@prefix dash: . -@prefix rdf: . -@prefix rdfs: . -@prefix schema: . -@prefix sh: . -@prefix xsd: . - -schema:DDOShape - sh:targetClass schema:DDO ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^did\\:op\\:(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:maxLength 71; - sh:minLength 71; - ] ; - sh:property [ - sh:path schema:version ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:maxLength 16; - ] ; - sh:property [ - sh:path schema:chainId; - sh:datatype xsd:integer ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:nftAddress; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:minLength 42; - sh:maxLength 42; - ] ; - sh:property [ - sh:path schema:metadata ; - sh:node schema:MetadataShape ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:services ; - sh:node schema:ServiceShape ; - sh:minCount 0; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:credentials; - sh:node schema:CredentialsShape ; - sh:maxCount 64; - ] ; . - - -schema:MetadataShape - sh:targetClass schema:Metadata ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 7000; - sh:minLength 10; - ] ; - sh:property [ - sh:path schema:copyrightHolder; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxCount 1; - sh:maxLength 512; - ] ; - sh:property [ - sh:path schema:name ; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 512; - sh:minLength 4; - ] ; - sh:property [ - sh:path schema:type; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:author; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:license; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:links; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 512; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:tags; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 256; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:categories; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxLength 256; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:contentLanguage; - sh:datatype xsd:string ; - sh:pattern "^(.|\\s)*$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:additionalInformation; - ] ; - sh:property [ - sh:path schema:created; - sh:datatype xsd:string; -# sh:pattern "^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])(\.[0-9]{3})?Z$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:updated; - sh:datatype xsd:string; -# sh:pattern "^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])(\.[0-9]{3})?Z$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:algorithm; - sh:node schema:AlgorithmShape ; - sh:maxCount 1; - ] ;. - - -schema:AlgorithmShape - sh:targetClass schema:Algorithm ; - sh:property [ - sh:path schema:version ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:language ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:container ; - sh:node schema:ContainerShape ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:consumerParameters; - sh:node schema:ConsumerParametersShape ; - sh:maxCount 64; - ] ;. - - -schema:ConsumerParametersShape - sh:targetClass schema:ConsumerParameter ; - sh:property [ - sh:path schema:name; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:type; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:label; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:required ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 7000; - ] ; - sh:property [ - sh:path schema:default; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:options; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 256; - ] ;. - - -schema:ContainerShape - sh:targetClass schema:Container ; - sh:property [ - sh:path schema:entrypoint ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 3; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:image ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:tag ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:checksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 512; - sh:minLength 7; - sh:minCount 1; - sh:maxCount 1; - ] ;. - - -schema:ServiceShape - sh:targetClass schema:Service ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:type ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:name ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxCount 1; - sh:minLength 4; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:description ; - sh:datatype xsd:string ; - sh:pattern "^((.|\n)*)$" ; - sh:maxCount 1; - sh:minLength 10; - sh:maxLength 7000; - ] ; - sh:property [ - sh:path schema:datatokenAddress ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 42; - sh:maxLength 42; - ] ; - sh:property [ - sh:path schema:serviceEndpoint ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:minLength 10; - sh:maxLength 2048; - ] ; - sh:property [ - sh:path schema:files; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 8192; - ] ; - sh:property [ - sh:path schema:timeout ; - sh:datatype xsd:integer ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:compute; - sh:node schema:ComputeShape ; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:credentials; - sh:node schema:CredentialsShape ; - sh:maxCount 64; - ] ; - sh:property [ - sh:path schema:additionalInformation ; - ] ; - sh:property [ - sh:path schema:consumerParameters; - sh:node schema:ConsumerParametersShape ; - ] ;. - - -schema:ComputeShape - sh:targetClass schema:Compute ; - sh:property [ - sh:path schema:allowRawAlgorithm ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:allowNetworkAccess ; - sh:datatype xsd:boolean ; - sh:minCount 1; - sh:maxCount 1; - ] ; - sh:property [ - sh:path schema:publisherTrustedAlgorithmPublishers ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:publisherTrustedAlgorithms; - sh:node schema:TrustedAlgoShape ; - ] ; . - - -schema:TrustedAlgoShape - sh:targetClass schema:TrustedAlgo; - sh:property [ - sh:path schema:did ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:filesChecksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 1024; - ] ; - sh:property [ - sh:path schema:containerSectionChecksum ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 1024; - ] ; . - - -schema:CredentialsShape - sh:targetClass schema:Credentials; - sh:property [ - sh:path schema:deny ; - sh:node schema:CredentialsItemShape; - ] ; - sh:property [ - sh:path schema:allow; - sh:node schema:CredentialsItemShape; - ] ; . - - -schema:CredentialsItemShape - sh:targetClass schema:CredentialsItem; - sh:property [ - sh:path schema:type ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxCount 1; - sh:maxLength 256; - ] ; - sh:property [ - sh:path schema:values ; - sh:datatype xsd:string ; - sh:pattern "^(.*)$" ; - sh:minCount 1; - sh:maxLength 1024; - ] ; . \ No newline at end of file diff --git a/schemas/op_ddo_v1.json b/schemas/op_ddo_v1.json index 11793cdae..165087918 100644 --- a/schemas/op_ddo_v1.json +++ b/schemas/op_ddo_v1.json @@ -1,7 +1,5 @@ { "name": "op_ddo_v4.1.0", "enable_nested_fields": true, - "fields": [ - { "name": ".*", "type": "auto", "optional": true } - ] + "fields": [{ "name": ".*", "type": "auto", "optional": true }] } diff --git a/schemas/op_ddo_v3.json b/schemas/op_ddo_v3.json index fea679698..ba4c552c4 100644 --- a/schemas/op_ddo_v3.json +++ b/schemas/op_ddo_v3.json @@ -1,7 +1,5 @@ { "name": "op_ddo_v4.3.0", "enable_nested_fields": true, - "fields": [ - { "name": ".*", "type": "auto", "optional": true } - ] + "fields": [{ "name": ".*", "type": "auto", "optional": true }] } diff --git a/schemas/op_ddo_v5.json b/schemas/op_ddo_v5.json index 89b5b6bb8..b61df3c4e 100644 --- a/schemas/op_ddo_v5.json +++ b/schemas/op_ddo_v5.json @@ -1,7 +1,5 @@ { "name": "op_ddo_v4.5.0", "enable_nested_fields": true, - "fields": [ - { "name": ".*", "type": "auto", "optional": true } - ] + "fields": [{ "name": ".*", "type": "auto", "optional": true }] } diff --git a/schemas/op_ddo_v5_0_0.json b/schemas/op_ddo_v5_0_0.json new file mode 100644 index 000000000..6d055cd1b --- /dev/null +++ b/schemas/op_ddo_v5_0_0.json @@ -0,0 +1,5 @@ +{ + "name": "op_ddo_v5.0.0", + "enable_nested_fields": true, + "fields": [{ "name": ".*", "type": "auto", "optional": true }] +} diff --git a/schemas/short.ttl b/schemas/short.ttl deleted file mode 100644 index daca4873c..000000000 --- a/schemas/short.ttl +++ /dev/null @@ -1,28 +0,0 @@ -@prefix dash: . -@prefix rdf: . -@prefix rdfs: . -@prefix schema: . -@prefix sh: . -@prefix xsd: . - -schema:DDOShape - sh:targetClass schema:DDO ; - sh:property [ - sh:path schema:id ; - sh:datatype xsd:string ; - sh:pattern "^did\\:op\\:(.*)$" ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:nftAddress; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ - sh:path schema:chainId; - sh:datatype xsd:integer ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; \ No newline at end of file diff --git a/scripts/dashboard.hash b/scripts/dashboard.hash deleted file mode 100644 index 798ea7264..000000000 --- a/scripts/dashboard.hash +++ /dev/null @@ -1 +0,0 @@ -b567946811627eaca026072c8912bf187541d0401138b68e4c29bd5f1a2057f3 \ No newline at end of file diff --git a/scripts/dashboardChanges.js b/scripts/dashboardChanges.js deleted file mode 100644 index 046148968..000000000 --- a/scripts/dashboardChanges.js +++ /dev/null @@ -1,93 +0,0 @@ -import { execSync } from 'child_process' -import { - existsSync, - readFileSync, - writeFileSync, - readdirSync, - statSync, - rmSync -} from 'fs' -import { createHash } from 'crypto' -import { join, dirname } from 'path' -import { fileURLToPath } from 'url' - -const __filename = fileURLToPath(import.meta.url) -const __dirname = dirname(__filename) - -// Directory to check for changes -const dashboardDir = join(__dirname, '../dashboard') -const distDir = join(__dirname, '../dist') -const hashFile = join(__dirname, 'dashboard.hash') - -// Directories to exclude from the hash calculation -const excludeDirs = ['.next', 'node_modules'] - -// Function to calculate hash of a directory recursively -function calculateHash(directory) { - const hash = createHash('sha256') - const files = getAllFiles(directory) - files.forEach((file) => { - hash.update(readFileSync(file)) - }) - return hash.digest('hex') -} - -// Function to get all files in a directory recursively -function getAllFiles(directory) { - const filesInDirectory = readdirSync(directory) - let allFiles = [] - filesInDirectory.forEach((file) => { - const absolute = join(directory, file) - if (excludeDirs.includes(file)) { - return - } - if (statSync(absolute).isDirectory()) { - allFiles = allFiles.concat(getAllFiles(absolute)) - } else { - allFiles.push(absolute) - } - }) - return allFiles -} - -// Function to check if there are changes in the directory -function hasChanges() { - const currentHash = calculateHash(dashboardDir) - if (existsSync(hashFile)) { - const previousHash = readFileSync(hashFile, 'utf-8') - if (previousHash === currentHash) { - return false - } - } - writeFileSync(hashFile, currentHash) - return true -} - -// Function to clean the dist directory except the dashboard folder -function cleanDistDirectory() { - if (!existsSync(distDir)) { - return - } - - const files = readdirSync(distDir) - files.forEach((file) => { - const filePath = join(distDir, file) - if (filePath !== join(distDir, 'dashboard')) { - if (statSync(filePath).isDirectory()) { - rmSync(filePath, { recursive: true, force: true }) - } else { - rmSync(filePath) - } - } - }) -} - -if (hasChanges()) { - console.log( - 'Changes detected in the dashboard. Cleaning old build and running Next.js build...' - ) - cleanDistDirectory() - execSync('cd dashboard && npm install && npx next build', { stdio: 'inherit' }) -} else { - console.log('No changes detected in the dashboard. Skipping Next.js build.') -} diff --git a/scripts/ocean-node-quickstart.sh b/scripts/ocean-node-quickstart.sh index 4c3085338..13dc4b3cf 100755 --- a/scripts/ocean-node-quickstart.sh +++ b/scripts/ocean-node-quickstart.sh @@ -121,6 +121,29 @@ else echo "No input provided, the Ocean Node might not be accessible from other nodes." fi +read -p "Do you want to run docker C2D jobs on your Ocean Node [ y/n ]: " run_c2d_jobs + +if [ "$run_c2d_jobs" == "y" ]; then + echo "########################################################" + echo "### Docker Engine Compute Environments Configuration ###" + echo "########################################################" + echo "Check 'ComputeEnvironment' definition for more details on the format" + echo "_____________________________________________________" + echo "" + read -p "Do you want to add a specific docker environment configuration? + (Hint: You can enter multiple in JSON format) [ y/n ]: " c2d_env + if [ "$c2d_env" == "y" ]; then + read -p "Enter the array of docker environment(s): " DOCKER_COMPUTE_ENVIRONMENTS + fi +else + echo "Running node without docker C2D capabilities!" +fi + +# Set default compute environments if not already defined +if [ -z "$DOCKER_COMPUTE_ENVIRONMENTS" ]; then + echo "Setting default DOCKER_COMPUTE_ENVIRONMENTS configuration" + export DOCKER_COMPUTE_ENVIRONMENTS="[{\"socketPath\":\"/var/run/docker.sock\",\"resources\":[{\"id\":\"disk\",\"total\":10}],\"storageExpiry\":604800,\"maxJobDuration\":36000,\"fees\":{\"1\":[{\"feeToken\":\"0x123\",\"prices\":[{\"id\":\"cpu\",\"price\":1}]}]},\"free\":{\"maxJobDuration\":360000,\"maxJobs\":3,\"resources\":[{\"id\":\"cpu\",\"max\":1},{\"id\":\"ram\",\"max\":1},{\"id\":\"disk\",\"max\":1}]}}]" +fi cat < docker-compose.yml services: @@ -147,15 +170,22 @@ services: # ADDRESS_FILE: '' # NODE_ENV: '' # AUTHORIZED_DECRYPTERS: '' +# AUTHORIZED_DECRYPTERS_LIST: '' # OPERATOR_SERVICE_URL: '' +# POLICY_SERVER_URL: '' INTERFACES: '["HTTP","P2P"]' # ALLOWED_VALIDATORS: '' +# ALLOWED_VALIDATORS_LIST: '' +# AUTHORIZED_PUBLISHERS: '' +# AUTHORIZED_PUBLISHERS_LIST: '' # INDEXER_NETWORKS: '[]' ALLOWED_ADMINS: '["$ALLOWED_ADMINS"]' +# ALLOWED_ADMINS_LIST: '' # INDEXER_INTERVAL: '' - DASHBOARD: 'true' + CONTROL_PANEL: 'true' # RATE_DENY_LIST: '' -# MAX_REQ_PER_SECOND: '' +# MAX_REQ_PER_MINUTE: '' +# MAX_CONNECTIONS_PER_MINUTE: '' # MAX_CHECKSUM_LENGTH: '' # LOG_LEVEL: '' HTTP_API_PORT: '$HTTP_API_PORT' @@ -181,8 +211,13 @@ services: # P2P_ENABLE_CIRCUIT_RELAY_CLIENT: '' # P2P_BOOTSTRAP_NODES: '' # P2P_FILTER_ANNOUNCED_ADDRESSES: '' + DOCKER_COMPUTE_ENVIRONMENTS: '$DOCKER_COMPUTE_ENVIRONMENTS' + networks: - ocean_network + volumes: + - node-sqlite:/usr/src/app/databases + - /var/run/docker.sock:/var/run/docker.sock depends_on: - typesense @@ -200,6 +235,8 @@ services: volumes: typesense-data: driver: local + node-sqlite: + driver: local networks: ocean_network: diff --git a/scripts/ocean-node-update.sh b/scripts/ocean-node-update.sh new file mode 100755 index 000000000..fa44b5337 --- /dev/null +++ b/scripts/ocean-node-update.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +DEFAULT_DOCKER_ENVIRONMENTS='[{"socketPath":"/var/run/docker.sock","resources":[{"id":"disk","total":10}],"storageExpiry":604800,"maxJobDuration":36000,"fees":{"1":[{"feeToken":"0x123","prices":[{"id":"cpu","price":1}]}]},"free":{"maxJobDuration":360000,"maxJobs":3,"resources":[{"id":"cpu","max":1},{"id":"ram","max":1},{"id":"disk","max":1}]}}]' + +check_prerequisites() { + if [ ! -f "docker-compose.yml" ]; then + echo "Error: docker-compose.yml not found in current directory" + exit 1 + fi +} + +configure_c2d() { + if grep -q "DOCKER_COMPUTE_ENVIRONMENTS:" docker-compose.yml; then + echo "DOCKER_COMPUTE_ENVIRONMENTS: configuration already exists" + else + echo "Adding Docker Compute Environment configuration..." + read -p "Do you want to run docker C2D jobs on your Ocean Node [ y/n ]: " run_c2d_jobs + + if [ "$run_c2d_jobs" == "y" ]; then + add_c2d_configuration + else + echo "Skipping C2D configuration" + fi + fi +} + +add_c2d_configuration() { + echo "########################################################" + echo "### Docker Engine Compute Environments Configuration ###" + echo "########################################################" + echo "Check 'ComputeEnvironment' definition for more details on the format" + echo "_____________________________________________________" + echo "" + + local docker_environments="$DEFAULT_DOCKER_ENVIRONMENTS" + read -p "Do you want to add a specific docker environment configuration? (Hint: You can enter multiple in JSON format) [ y/n ]: " c2d_env + + if [ "$c2d_env" == "y" ]; then + read -p "Enter the array of docker environment(s): " user_input + if [ ! -z "$user_input" ]; then + docker_environments="$user_input" + fi + else + echo "Setting default DOCKER_COMPUTE_ENVIRONMENTS configuration" + fi + + update_docker_compose "$docker_environments" +} + +update_docker_compose() { + local docker_environments="$1" + sed -i '/environment:/,/^[^ ]/ { + /^[^ ]/i\ DOCKER_COMPUTE_ENVIRONMENTS: '"'$docker_environments'"' + }' docker-compose.yml + + if ! grep -q "/var/run/docker.sock:/var/run/docker.sock" docker-compose.yml; then + sed -i '/restart: on-failure/a\ volumes:\n - /var/run/docker.sock:/var/run/docker.sock' docker-compose.yml + fi + + echo "Added C2D configuration and Docker socket mount to docker-compose.yml" +} + +show_completion_message() { + echo -e "\n\e[1;32mUpdate completed successfully!\e[0m" + echo "Your docker-compose.yml has been updated with new configurations" + echo -e "To apply the changes, run: \e[1;32mdocker-compose up -d\e[0m" +} + +main() { + check_prerequisites + configure_c2d +} + +main \ No newline at end of file diff --git a/src/@types/Asset.ts b/src/@types/Asset.ts index 8ac434849..a41c666cf 100644 --- a/src/@types/Asset.ts +++ b/src/@types/Asset.ts @@ -1,176 +1,3 @@ -import { DDO } from './DDO/DDO' - -export interface AssetNft { - /** - * Contract address of the deployed ERC721 NFT contract. - * @type {string} - */ - address: string - - /** - * Name of NFT set in contract. - * @type {string} - */ - name: string - - /** - * Symbol of NFT set in contract. - * @type {string} - */ - symbol: string - - /** - * ETH account address of the NFT owner. - * @type {string} - */ - owner: string - - /** - * State of the asset reflecting the NFT contract value. - * 0 Active. - * 1 End-of-life. - * 2 Deprecated (by another asset). - * 3 Revoked by publisher. - * 4 Ordering is temporary disabled. - * 5 Unlisted in markets. - * @type {number} - */ - state: 0 | 1 | 2 | 3 | 4 | 5 - - /** - * Contains the date of NFT creation. - * @type {string} - */ - created: string - - /** - * NFT token URI. - * @type {string} - */ - tokenURI: string -} - -export interface Purgatory { - /** - * If `true`, asset is in purgatory. - * @type {boolean} - */ - state: boolean - - /** - * If asset is in purgatory, contains the reason for being there as defined in `list-purgatory`. - * @type {string} - */ - reason: string -} - -export interface AssetDatatoken { - /** - * Contract address of the deployed Datatoken contract. - * @type {string} - */ - address: string - - /** - * Name of NFT set in contract. - * @type {string} - */ - name: string - - /** - * Symbol of NFT set in contract. - * @type {string} - */ - symbol: string - - /** - * ID of the service the datatoken is attached to. - * @type {string} - */ - serviceId: string -} - -export interface AssetPrice { - /** - * The price of the asset expressed as a number. If 0 then the price is FREE. - * @type {number} - */ - value: number - - /** - * The symbol that the price of the asset is expressed in. - * @type {string} - */ - tokenSymbol?: string - - /** - * The address of the token that the price needs to be paid in. - * @type {string} - */ - tokenAddress?: string -} -export interface Stats { - /** - * How often an asset was consumed, meaning how often it was either downloaded or used as part of a compute job. - * @type {number} - */ - orders: number - - /** - * Contains information about the price of this asset. - * @type {AssetPrice} - */ - price: AssetPrice - - /** - * Total amount of veOCEAN allocated on this asset. - * @type {number} - */ - allocated?: number -} - -export interface AssetLastEvent { - tx: string - block: number - from: string - contract: string - datetime: string -} - -export interface Asset extends DDO { - /** - * Contains information about the ERC721 NFT contract which represents the intellectual property of the publisher. - * @type {string} - */ - nft: AssetNft - - /** - * Contains information about the ERC20 Datatokens attached to asset services. - * @type {string} - */ - datatokens: AssetDatatoken[] - - /** - * Contains information about the last transaction that created or updated the DDO. - * @type {string} - */ - event: AssetLastEvent - - /** - * The stats section contains different statistics fields. This section is added by Aquarius - * @type {Stats} - */ - stats: Stats - - /** - * Contains information about an asset's purgatory status defined in - * [`list-purgatory`](https://github.com/oceanprotocol/list-purgatory). - * Marketplace interfaces are encouraged to prevent certain user actions like downloading on assets in purgatory. - * @type {Purgatory} - */ - purgatory: Purgatory -} - export interface OrdableAssetResponse { isOrdable: boolean reason?: string diff --git a/src/@types/C2D.ts b/src/@types/C2D.ts deleted file mode 100644 index f1297ca22..000000000 --- a/src/@types/C2D.ts +++ /dev/null @@ -1,199 +0,0 @@ -import type { MetadataAlgorithm } from './DDO/Metadata.js' - -export enum C2DClusterType { - // eslint-disable-next-line no-unused-vars - OPF_K8 = 0, - // eslint-disable-next-line no-unused-vars - NODE_LOCAL = 1 -} - -export interface C2DClusterInfo { - /** Type of cluster: K8, Node local, etc */ - type: C2DClusterType - /** Hash of cluster. hash(url) for remote, hash(nodeId) for local */ - hash: string - /** Connection URI */ - connection?: string -} - -export interface ComputeEnvironment { - id: string - cpuNumber: number - cpuType: string - gpuNumber: number - gpuType: string - ramGB: number - diskGB: number - priceMin: number - desc: string - currentJobs: number - maxJobs: number - consumerAddress: string - storageExpiry: number - maxJobDuration: number - lastSeen: number - chainId?: number - feeToken: string -} - -export interface ComputeEnvByChain { - [chainId: number]: ComputeEnvironment[] -} - -export type ComputeResultType = - | 'algorithmLog' - | 'output' - | 'configrationLog' - | 'publishLog' - -export interface ComputeResult { - filename: string - filesize: number - type: ComputeResultType - index?: number -} - -export interface ComputeJob { - owner: string - did?: string - jobId: string - dateCreated: string - dateFinished: string - status: number - statusText: string - results: ComputeResult[] - inputDID?: string[] - algoDID?: string - agreementId?: string - expireTimestamp: number -} - -export interface ComputeOutput { - publishAlgorithmLog?: boolean - publishOutput?: boolean - providerAddress?: string - providerUri?: string - metadataUri?: string - nodeUri?: string - owner?: string - secretStoreUri?: string - whitelist?: string[] -} - -export interface ComputeAsset { - url?: string - documentId: string - serviceId: string - transferTxId?: string - userdata?: { [key: string]: any } -} - -export interface ComputeAlgorithm { - documentId?: string - serviceId?: string - url?: string - meta?: MetadataAlgorithm - transferTxId?: string - algocustomdata?: { [key: string]: any } - userdata?: { [key: string]: any } -} - -/* The following are specific to OPF_k8 compute engine */ -export interface OPFK8ComputeStageInput { - index: number - id?: string - remote?: any - url?: string[] -} -export interface OPFK8ComputeStageAlgorithm { - id?: string - url?: string - remote?: any - rawcode?: string - container?: { - /** - * The command to execute, or script to run inside the Docker image. - * @type {string} - */ - entrypoint: string - - /** - * Name of the Docker image. - * @type {string} - */ - image: string - - /** - * Tag of the Docker image. - * @type {string} - */ - tag: string - } -} - -export interface OPFK8ComputeOutput { - // this is a copy of ComputeOutput, but they could diverge in the future - publishAlgorithmLog?: boolean - publishOutput?: boolean - providerAddress?: string - providerUri?: string - metadataUri?: string - nodeUri?: string - owner?: string - secretStoreUri?: string - whitelist?: string[] -} -export interface OPFK8ComputeStage { - index: number - input: OPFK8ComputeStageInput[] - algorithm: OPFK8ComputeStageAlgorithm - compute?: {} - output: OPFK8ComputeOutput -} - -export interface OPFK8ComputeWorkflow { - stages: OPFK8ComputeStage[] -} -export interface OPFK8ComputeStart { - workflow: OPFK8ComputeWorkflow - owner: string - agreementId: string - providerSignature: string - providerAddress: string - environment: string - validUntil: number - nonce: number - chainId: number -} - -export interface OPFK8ComputeStop { - jobId: string - owner: string - agreementId?: string - providerSignature: string // message=owner+jobId - providerAddress: string - nonce: number -} - -export interface OPFK8ComputeGetStatus { - agreementId?: string - jobId?: string - owner?: string - providerSignature: string // message=owner+jobId(if any) - providerAddress: string - nonce: number -} - -export interface OPFK8ComputeGetResult { - jobId: string - owner: string - index: number - providerSignature: string // message=owner+jobId - providerAddress: string - nonce: number -} - -export interface AlgoChecksums { - files: string - container: string -} diff --git a/src/@types/C2D/C2D.ts b/src/@types/C2D/C2D.ts new file mode 100644 index 000000000..879720066 --- /dev/null +++ b/src/@types/C2D/C2D.ts @@ -0,0 +1,355 @@ +import { MetadataAlgorithm, ConsumerParameter } from '@oceanprotocol/ddo-js' +import type { BaseFileObject } from '../fileObject.js' +export enum C2DClusterType { + // eslint-disable-next-line no-unused-vars + OPF_K8 = 0, + // eslint-disable-next-line no-unused-vars + NODE_LOCAL = 1, + // eslint-disable-next-line no-unused-vars + DOCKER = 2 +} + +export interface C2DClusterInfo { + /** Type of cluster: K8, Node local, etc */ + type: C2DClusterType + /** Hash of cluster. hash(url) for remote, hash(nodeId) for local */ + hash: string + /** Connection URI */ + connection?: any + /** Folder for storing data */ + tempFolder?: string +} + +export type ComputeResourceType = 'cpu' | 'ram' | 'disk' | any + +export interface ComputeResourcesPricingInfo { + id: ComputeResourceType + price: number // price per unit per minute +} + +export interface ArgumentValues { + [key: string]: string | number | boolean | any[] // Supports multiple value types +} + +export interface dockerDeviceRequest { + Driver: string + Count?: number + DeviceIDs: string[] + Capabilities?: any + Options?: any +} + +// docker hw can be defined with either deviceRequests (simpler, if you have a driver), or in advanced way +// advanced way means you have to defined different params like devices, cggroups, caps, etc +export interface dockerHwInit { + deviceRequests?: dockerDeviceRequest + advanced?: ArgumentValues + runtime?: string +} + +export interface ComputeResource { + id: ComputeResourceType + description?: string + type?: string + kind?: string // discreet, named, etc + total: number // total number of specific resource + min: number // min number of resource needed for a job + max: number // max number of resource for a job + inUse?: number // for display purposes + init?: dockerHwInit +} +export interface ComputeResourceRequest { + id: string + amount: number +} + +export interface ComputeResourceRequestWithPrice extends ComputeResourceRequest { + price?: number // price per unit per minute +} + +export interface ComputeEnvFees { + feeToken: string + prices: ComputeResourcesPricingInfo[] +} +export interface ComputeEnvFeesStructure { + [chainId: string]: ComputeEnvFees[] +} + +export interface RunningPlatform { + architecture: string + os?: string +} + +export interface ComputeAccessList { + addresses: string[] + accessLists: string[] +} + +export interface ComputeEnvironmentFreeOptions { + // only if a compute env exposes free jobs + storageExpiry?: number + maxJobDuration?: number + maxJobs?: number // maximum number of simultaneous free jobs + resources?: ComputeResource[] + access: ComputeAccessList +} +export interface ComputeEnvironmentBaseConfig { + description?: string // v1 + storageExpiry?: number // amount of seconds for storage + minJobDuration?: number // min billable seconds for a paid job + maxJobDuration?: number // max duration in seconds for a paid job + maxJobs?: number // maximum number of simultaneous paid jobs + fees: ComputeEnvFeesStructure + resources?: ComputeResource[] + access: ComputeAccessList + free?: ComputeEnvironmentFreeOptions + platform: RunningPlatform +} + +export interface ComputeRuntimes { + [key: string]: { + path?: string + runtimeArgs?: string[] // Optional runtime arguments + } +} +export interface ComputeEnvironment extends ComputeEnvironmentBaseConfig { + id: string // v1 + runningJobs: number + runningfreeJobs?: number + consumerAddress: string // v1 + queuedJobs: number + queuedFreeJobs: number + queMaxWaitTime: number + queMaxWaitTimeFree: number +} + +export interface C2DDockerConfig { + socketPath: string + protocol: string + host: string + port: number + caPath: string + certPath: string + keyPath: string + storageExpiry?: number + maxJobDuration?: number + maxJobs?: number + fees: ComputeEnvFeesStructure + resources?: ComputeResource[] // optional, owner can overwrite + free?: ComputeEnvironmentFreeOptions + access: ComputeAccessList +} + +export type ComputeResultType = + | 'imageLog' + | 'algorithmLog' + | 'output' + | 'configurationLog' + | 'publishLog' + +export interface ComputeResult { + filename: string + filesize: number + type: ComputeResultType + index?: number +} + +export type DBComputeJobMetadata = { + [key: string]: string | number | boolean +} + +export interface ComputeJobTerminationDetails { + OOMKilled: boolean + exitCode: number +} +export interface ComputeJob { + owner: string + did?: string + jobId: string + dateCreated: string + dateFinished: string + status: number + statusText: string + results: ComputeResult[] + inputDID?: string[] + algoDID?: string + maxJobDuration?: number + agreementId?: string + environment?: string + metadata?: DBComputeJobMetadata + terminationDetails?: ComputeJobTerminationDetails + queueMaxWaitTime: number // max time in seconds a job can wait in the queue before being started +} + +export interface ComputeOutput { + publishAlgorithmLog?: boolean + publishOutput?: boolean + providerAddress?: string + providerUri?: string + metadataUri?: string + nodeUri?: string + owner?: string + secretStoreUri?: string + whitelist?: string[] +} + +export interface ComputeAsset { + fileObject?: BaseFileObject + documentId?: string + serviceId?: string + transferTxId?: string + userdata?: { [key: string]: any } +} +export interface ExtendedMetadataAlgorithm extends MetadataAlgorithm { + container: { + // retain existing properties + entrypoint: string + image: string + tag: string + checksum: string + dockerfile?: string // optional + additionalDockerFiles?: { [key: string]: any } + consumerParameters?: ConsumerParameter[] + } +} +export interface ComputeAlgorithm { + documentId?: string + serviceId?: string + fileObject?: BaseFileObject + meta?: ExtendedMetadataAlgorithm + transferTxId?: string + algocustomdata?: { [key: string]: any } + userdata?: { [key: string]: any } + envs?: { [key: string]: any } +} + +export interface AlgoChecksums { + files: string + container: string + serviceId?: string +} + +export interface DBComputeJobPayment { + chainId: number + token: string + lockTx: string + claimTx: string + cost: number +} + +// this is the internal structure +export interface DBComputeJob extends ComputeJob { + clusterHash: string + configlogURL: string + publishlogURL: string + algologURL: string + outputsURL: string + stopRequested: boolean + algorithm: ComputeAlgorithm + assets: ComputeAsset[] + isRunning: boolean + isStarted: boolean + containerImage: string + isFree: boolean + algoStartTimestamp: string + algoStopTimestamp: string + resources: ComputeResourceRequestWithPrice[] + payment?: DBComputeJobPayment + metadata?: DBComputeJobMetadata + additionalViewers?: string[] // addresses of additional addresses that can get results + algoDuration: number // duration of the job in seconds +} + +// make sure we keep them both in sync +export enum C2DStatusNumber { + // eslint-disable-next-line no-unused-vars + JobStarted = 0, + // eslint-disable-next-line no-unused-vars + JobQueued = 1, + // eslint-disable-next-line no-unused-vars + JobQueuedExpired = 2, + // eslint-disable-next-line no-unused-vars + PullImage = 10, + // eslint-disable-next-line no-unused-vars + PullImageFailed = 11, + // eslint-disable-next-line no-unused-vars + BuildImage = 12, + // eslint-disable-next-line no-unused-vars + BuildImageFailed = 13, + // eslint-disable-next-line no-unused-vars + ConfiguringVolumes = 20, + // eslint-disable-next-line no-unused-vars + VolumeCreationFailed = 21, + // eslint-disable-next-line no-unused-vars + ContainerCreationFailed = 22, + // eslint-disable-next-line no-unused-vars + Provisioning = 30, + // eslint-disable-next-line no-unused-vars + DataProvisioningFailed = 31, + // eslint-disable-next-line no-unused-vars + AlgorithmProvisioningFailed = 32, + // eslint-disable-next-line no-unused-vars + DataUploadFailed = 33, + // eslint-disable-next-line no-unused-vars + RunningAlgorithm = 40, + // eslint-disable-next-line no-unused-vars + AlgorithmFailed = 41, + // eslint-disable-next-line no-unused-vars + DiskQuotaExceeded = 42, + // eslint-disable-next-line no-unused-vars + FilteringResults = 50, + // eslint-disable-next-line no-unused-vars + PublishingResults = 60, + // eslint-disable-next-line no-unused-vars + ResultsFetchFailed = 61, + // eslint-disable-next-line no-unused-vars + ResultsUploadFailed = 62, + // eslint-disable-next-line no-unused-vars + JobFinished = 70 +} +export enum C2DStatusText { + // eslint-disable-next-line no-unused-vars + JobStarted = 'Job started', + // eslint-disable-next-line no-unused-vars + JobQueued = 'Job queued', + // eslint-disable-next-line no-unused-vars + JobQueuedExpired = 'Job expired in queue', + // eslint-disable-next-line no-unused-vars + PullImage = 'Pulling algorithm image', + // eslint-disable-next-line no-unused-vars + PullImageFailed = 'Pulling algorithm image failed', + // eslint-disable-next-line no-unused-vars + BuildImage = 'Building algorithm image', + // eslint-disable-next-line no-unused-vars + BuildImageFailed = 'Building algorithm image failed', + // eslint-disable-next-line no-unused-vars + ConfiguringVolumes = 'Configuring volumes', + // eslint-disable-next-line no-unused-vars + VolumeCreationFailed = 'Volume creation failed', + // eslint-disable-next-line no-unused-vars + ContainerCreationFailed = 'Container creation failed', + // eslint-disable-next-line no-unused-vars + Provisioning = 'Provisioning data', + // eslint-disable-next-line no-unused-vars + DataProvisioningFailed = 'Data provisioning failed', + // eslint-disable-next-line no-unused-vars + AlgorithmProvisioningFailed = 'Algorithm provisioning failed', + // eslint-disable-next-line no-unused-vars + DataUploadFailed = 'Data upload to container failed', + // eslint-disable-next-line no-unused-vars + RunningAlgorithm = 'Running algorithm ', + // eslint-disable-next-line no-unused-vars + AlgorithmFailed = 'Failed to run algorithm', + // eslint-disable-next-line no-unused-vars + DiskQuotaExceeded = 'Error: disk quota exceeded', + // eslint-disable-next-line no-unused-vars + FilteringResults = 'Filtering results', + // eslint-disable-next-line no-unused-vars + PublishingResults = 'Publishing results', + // eslint-disable-next-line no-unused-vars + ResultsFetchFailed = 'Failed to get outputs folder from container', + // eslint-disable-next-line no-unused-vars + ResultsUploadFailed = 'Failed to upload results to storage', + // eslint-disable-next-line no-unused-vars + JobFinished = 'Job finished' +} diff --git a/src/@types/C2D/C2D_OPFK8.ts b/src/@types/C2D/C2D_OPFK8.ts new file mode 100644 index 000000000..9c894bd38 --- /dev/null +++ b/src/@types/C2D/C2D_OPFK8.ts @@ -0,0 +1,94 @@ +/* The following are specific to OPF_k8 compute engine */ +export interface OPFK8ComputeStageInput { + index: number + id?: string + remote?: any + url?: string[] +} +export interface OPFK8ComputeStageAlgorithm { + id?: string + url?: string + remote?: any + rawcode?: string + container?: { + /** + * The command to execute, or script to run inside the Docker image. + * @type {string} + */ + entrypoint: string + + /** + * Name of the Docker image. + * @type {string} + */ + image: string + + /** + * Tag of the Docker image. + * @type {string} + */ + tag: string + } +} + +export interface OPFK8ComputeOutput { + // this is a copy of ComputeOutput, but they could diverge in the future + publishAlgorithmLog?: boolean + publishOutput?: boolean + providerAddress?: string + providerUri?: string + metadataUri?: string + nodeUri?: string + owner?: string + secretStoreUri?: string + whitelist?: string[] +} +export interface OPFK8ComputeStage { + index: number + input: OPFK8ComputeStageInput[] + algorithm: OPFK8ComputeStageAlgorithm + compute?: {} + output: OPFK8ComputeOutput +} + +export interface OPFK8ComputeWorkflow { + stages: OPFK8ComputeStage[] +} +export interface OPFK8ComputeStart { + workflow: OPFK8ComputeWorkflow + owner: string + agreementId: string + providerSignature: string + providerAddress: string + environment: string + validUntil: number + nonce: number + chainId: number +} + +export interface OPFK8ComputeStop { + jobId: string + owner: string + agreementId?: string + providerSignature: string // message=owner+jobId + providerAddress: string + nonce: number +} + +export interface OPFK8ComputeGetStatus { + agreementId?: string + jobId?: string + owner?: string + providerSignature: string // message=owner+jobId(if any) + providerAddress: string + nonce: number +} + +export interface OPFK8ComputeGetResult { + jobId: string + owner: string + index: number + providerSignature: string // message=owner+jobId + providerAddress: string + nonce: number +} diff --git a/src/@types/DDO/Credentials.ts b/src/@types/DDO/Credentials.ts index b7bd2df1b..cf23406da 100644 --- a/src/@types/DDO/Credentials.ts +++ b/src/@types/DDO/Credentials.ts @@ -1,8 +1,9 @@ +export const KNOWN_CREDENTIALS_TYPES = ['address', 'accessList'] + export interface Credential { type?: string - values?: string[] + values?: any } - export interface Credentials { allow?: Credential[] deny?: Credential[] diff --git a/src/@types/DDO/DDO.ts b/src/@types/DDO/DDO.ts deleted file mode 100644 index 5ca15a406..000000000 --- a/src/@types/DDO/DDO.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Service } from './Service' -import { Metadata } from './Metadata' -import { Credentials } from './Credentials' -import { Event } from './Event' -import { Nft } from './Nft' - -/** - * DID Descriptor Object. - * Contains metadata about the asset, and define access in at least one service. - */ -export interface DDO { - /** - * Contexts used for validation. - * @type {string[]} - */ - '@context': string[] - - /** - * DID, descentralized ID. - * Computed as sha256(address of NFT contract + chainId) - * @type {string} - */ - id: string - - /** - * Version information in SemVer notation - * referring to the DDO spec version - * @type {string} - */ - version: string - - /** - * NFT contract address - * @type {string} - */ - nftAddress: string - - /** - * ChainId of the network the DDO was published to. - * @type {number} - */ - chainId: number - - /** - * Stores an object describing the asset. - * @type {Metadata} - */ - metadata: Metadata - - /** - * Stores an array of services defining access to the asset. - * @type {Service[]} - */ - services: Service[] - - /** - * Describes the credentials needed to access a dataset - * in addition to the services definition. - * @type {Credentials} - */ - credentials?: Credentials - - /** - * Describes the event of last metadata event - * @type {Event} - */ - event?: Event - - nft?: Nft -} diff --git a/src/@types/DDO/Event.ts b/src/@types/DDO/Event.ts deleted file mode 100644 index 84e75fc4f..000000000 --- a/src/@types/DDO/Event.ts +++ /dev/null @@ -1,31 +0,0 @@ -export interface Event { - /** - * TX id of the last create/update - * @type {string} - */ - txid?: string - - /** - * Block of txid - * @type {number} - */ - block?: number - - /** - * Sender of tx - * @type {String} - */ - from?: string - - /** - * Contract - * @type {String} - */ - contract?: string - - /** - * datetime of tx - * @type {String} - */ - datetime?: string -} diff --git a/src/@types/DDO/Metadata.ts b/src/@types/DDO/Metadata.ts deleted file mode 100644 index e830f4294..000000000 --- a/src/@types/DDO/Metadata.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { ConsumerParameter } from './ConsumerParameter' - -export interface MetadataAlgorithm { - /** - * Programming language used to implement the software. - * @type {string} - */ - language?: string - - /** - * Version of the software preferably in SemVer notation. - * @type {string} - */ - version?: string - - /** - * Rawcode - * @type {string} - */ - rawcode?: string - - /** - * Format - * @type {string} - */ - format?: string - - /** - * Object describing the Docker container image. - * @type {Object} - */ - container?: { - /** - * The command to execute, or script to run inside the Docker image. - * @type {string} - */ - entrypoint: string - - /** - * Name of the Docker image. - * @type {string} - */ - image: string - - /** - * Tag of the Docker image. - * @type {string} - */ - tag: string - - /** - * Checksum of the Docker image. - * @type {string} - */ - checksum: string - - /** - * Array of objects describing the consumer parameters - * @type {ConsumerParameter[]} - */ - consumerParameters?: ConsumerParameter[] - } - - /** - * Array of objects describing the consumer parameters - * @type {ConsumerParameter[]} - */ - consumerParameters?: ConsumerParameter[] -} - -export interface Metadata { - /** - * Contains the date of publishing in ISO Date Time - * @type {string} - */ - created: string - - /** - * Contains the the date of last update in ISO Date Time - * @type {string} - */ - updated: string - - /** - * Descriptive name or title of the asset. - * @type {string} - */ - name: string - - /** - * Details of what the resource is. - * @type {string} - */ - description: string - - /** - * Asset type. Includes "dataset" (e.g. csv file), "algorithm" (e.g. Python script). - * Each type needs a different subset of metadata attributes. - * @type {'dataset' | 'algorithm'} - */ - type: 'dataset' | 'algorithm' - - /** - * Name of the entity generating this data (e.g. Tfl, Disney Corp, etc.). - * @type {string} - */ - author: string - - /** - * Short name referencing the license of the asset. - * If it’s not specified, the following value will be added: “No License Specified”. - * @type {string} - */ - license: string - - /** - * Mapping of URL strings for data samples, or links to find out more information. - * Links may be to either a URL or another asset. - * @type {string[]} - */ - links?: string[] - - /** - * Array of keywords or tags used to describe this content. Empty by default. - * @type {string[]} - */ - tags?: string[] - - /** - * Array of categories associated to the asset. Note: recommended to use tags instead of this. - * @type {string[]} - */ - categories?: string[] - - /** - * The party holding the legal copyright. Empty by default. - * @type {string} - */ - copyrightHolder?: string - - /** - *The language of the content. Use one of the language codes from the IETF BCP 47 standard - * @type {string} - */ - contentLanguage?: string - - /** - * Information about asset of type algorithm. Required for algorithm assets. - * @type {MetadataAlgorithm} - */ - algorithm?: MetadataAlgorithm - - /** - * Stores additional information, this is customizable by publisher - * @type {any} - */ - additionalInformation?: any -} - -export interface MetadataProof { - validatorAddress?: string - r?: string - s?: string - v?: number -} -export interface ValidateMetadata { - valid: Boolean - errors?: Object - hash?: string - proof?: MetadataProof -} diff --git a/src/@types/DDO/Nft.ts b/src/@types/DDO/Nft.ts deleted file mode 100644 index 307756fce..000000000 --- a/src/@types/DDO/Nft.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface Nft { - state: number - address: string - name?: string - symbol?: string - tokenURI?: string - owner?: string - created?: string -} diff --git a/src/@types/Escrow.ts b/src/@types/Escrow.ts new file mode 100644 index 000000000..9e9aa6b16 --- /dev/null +++ b/src/@types/Escrow.ts @@ -0,0 +1,17 @@ +export interface EscrowAuthorization { + address: string + maxLockedAmount: BigInt + currentLockedAmount: BigInt + maxLockSeconds: BigInt + maxLockCounts: BigInt + currentLocks: BigInt +} + +export interface EscrowLock { + jobId: BigInt + payer: string + payee: string + amount: BigInt + expiry: BigInt + token: string +} diff --git a/src/@types/Fees.ts b/src/@types/Fees.ts index b399abcb8..0759cbe05 100644 --- a/src/@types/Fees.ts +++ b/src/@types/Fees.ts @@ -28,7 +28,6 @@ export interface ProviderFeeData { export interface ProviderFeeValidation { isValid: boolean // true if valid provider fee for download - isComputeValid: boolean // true is valid for compute message: any validUntil: number } @@ -57,7 +56,16 @@ export interface ProviderComputeInitialize { providerFee?: ProviderFees } +export interface ProviderComputeInitializePayment { + escrowAddress: string + payee: string + chainId: number + minLockSeconds: number + token: string + amount: string +} export interface ProviderComputeInitializeResults { algorithm?: ProviderComputeInitialize datasets?: ProviderComputeInitialize[] + payment: ProviderComputeInitializePayment } diff --git a/src/@types/IndexedMetadata.ts b/src/@types/IndexedMetadata.ts new file mode 100644 index 000000000..607c98e4a --- /dev/null +++ b/src/@types/IndexedMetadata.ts @@ -0,0 +1,18 @@ +export type PriceType = 'fixedrate' | 'dispenser' + +export interface ServicePrice { + type: PriceType + price: string + contract: string + token?: string + exchangeId?: string +} + +export interface ServiceStats { + datatokenAddress: string + name: string + symbol: string + serviceId: string + orders?: number + prices?: ServicePrice[] +} diff --git a/src/@types/OceanNode.ts b/src/@types/OceanNode.ts index bc0f9d535..cbb7949a3 100644 --- a/src/@types/OceanNode.ts +++ b/src/@types/OceanNode.ts @@ -1,6 +1,6 @@ import { Stream } from 'stream' import { RPCS } from './blockchain' -import { C2DClusterInfo } from './C2D' +import { C2DClusterInfo, C2DDockerConfig } from './C2D/C2D' import { FeeStrategy } from './Fees' import { Schema } from '../components/database' @@ -23,7 +23,12 @@ export interface OceanNodeKeys { privateKey: any ethAddress: string } - +/* eslint-disable no-unused-vars */ +export enum dhtFilterMethod { + filterPrivate = 'filterPrivate', // default, remove all private addresses from DHT + filterPublic = 'filterPublic', // remove all public addresses from DHT + filterNone = 'filterNone' // do not remove all any addresses from DHT +} export interface OceanNodeP2PConfig { bootstrapNodes: string[] bootstrapTimeout: number @@ -41,7 +46,7 @@ export interface OceanNodeP2PConfig { pubsubPeerDiscoveryInterval: number dhtMaxInboundStreams: number dhtMaxOutboundStreams: number - enableDHTServer: boolean + dhtFilter: dhtFilterMethod mDNSInterval: number connectionsMaxParallelDials: number connectionsDialTimeout: number @@ -59,6 +64,7 @@ export interface OceanNodeP2PConfig { autoDialConcurrency: number maxPeerAddrsToDial: number autoDialInterval: number + enableNetworkStats: boolean } export interface OceanNodeDockerConfig { @@ -70,30 +76,46 @@ export interface OceanNodeDockerConfig { certPath?: string keyPath?: string } + +export interface AccessListContract { + [chainId: string]: string[] +} + export interface OceanNodeConfig { + dockerComputeEnvironments: C2DDockerConfig[] authorizedDecrypters: string[] + authorizedDecryptersList: AccessListContract | null allowedValidators: string[] + allowedValidatorsList: AccessListContract | null + authorizedPublishers: string[] + authorizedPublishersList: AccessListContract | null keys: OceanNodeKeys hasP2P: boolean p2pConfig: OceanNodeP2PConfig | null hasIndexer: boolean hasHttp: boolean - hasDashboard: boolean + hasControlPanel: boolean dbConfig?: OceanNodeDBConfig httpPort: number feeStrategy: FeeStrategy + ipfsGateway?: string | null + arweaveGateway?: string | null supportedNetworks?: RPCS + claimDurationTimeout: number indexingNetworks?: RPCS c2dClusters: C2DClusterInfo[] - c2dNodeUri: string - dockerConfig?: OceanNodeDockerConfig - accountPurgatoryUrl: string - assetPurgatoryUrl: string + accountPurgatoryUrl: string | null + assetPurgatoryUrl: string | null allowedAdmins?: string[] + allowedAdminsList?: AccessListContract | null codeHash?: string - rateLimit?: number + rateLimit?: number // per request ip or peer + maxConnections?: number // global, regardless of client address(es) denyList?: DenyList unsafeURLs?: string[] + isBootstrap?: boolean + validateUnsignedDDO?: boolean + jwtSecret?: string } export interface P2PStatusResponse { @@ -126,6 +148,7 @@ export interface StorageTypes { export interface OceanNodeStatus { id: string publicKey: string + friendlyName: string address: string version: string http: boolean @@ -138,7 +161,7 @@ export interface OceanNodeStatus { codeHash?: string allowedAdmins?: string[] // detailed information - c2dClusters?: C2DClusterInfo[] + c2dClusters?: any[] supportedSchemas?: Schema[] } diff --git a/src/@types/commands.ts b/src/@types/commands.ts index 763e636a4..416d16025 100644 --- a/src/@types/commands.ts +++ b/src/@types/commands.ts @@ -1,7 +1,13 @@ import { ValidateParams } from '../components/httpRoutes/validateCommands.js' -import { DDO } from './DDO/DDO' import { P2PCommandResponse } from './OceanNode' -import type { ComputeAsset, ComputeAlgorithm, ComputeOutput } from './C2D' +import { DDO } from '@oceanprotocol/ddo-js' +import type { + ComputeAsset, + ComputeAlgorithm, + ComputeOutput, + ComputeResourceRequest, + DBComputeJobMetadata +} from './C2D/C2D.js' import { ArweaveFileObject, FileObjectType, @@ -10,12 +16,25 @@ import { UrlFileObject, BaseFileObject } from './fileObject' +import { PolicyServerTask } from './policyServer.js' export interface Command { command: string // command name node?: string // if not present it means current node + authorization?: string } +export interface GetP2PPeerCommand extends Command { + peerId: string +} +export interface FindPeerCommand extends Command { + peerId: string + timeout?: string +} + +export interface GetP2PPeersCommand extends Command {} +export interface GetP2PNetworkStatsCommand extends Command {} + export interface AdminCommand extends Command { expiryTimestamp: number signature: string @@ -41,6 +60,7 @@ export interface DownloadCommand extends Command { signature: string aes_encrypted_key?: string // if not present it means download without encryption policyServer?: any // object to pass to policy server + userData?: Record } export interface FileInfoCommand extends Command { @@ -63,9 +83,15 @@ export interface FindDDOCommand extends DDOCommand { // https://github.com/oceanprotocol/ocean-node/issues/47 export interface ValidateDDOCommand extends Command { ddo: DDO + publisherAddress?: string + nonce?: string + signature?: string + message?: string } -export interface StatusCommand extends Command {} +export interface StatusCommand extends Command { + detailed?: boolean +} export interface DetailedStatusCommand extends StatusCommand {} export interface EchoCommand extends Command {} @@ -114,7 +140,7 @@ export interface GetFeesCommand extends Command { serviceId: string consumerAddress?: string validUntil?: number // this allows a user to request a fee that is valid only for a limited period of time, less than service.timeout - policyServer?: any // object to pass to policyServer + policyServer?: PolicyServerTask // object to pass to policyServer } // admin commands export interface AdminStopNodeCommand extends AdminCommand {} @@ -135,35 +161,63 @@ export interface AdminReindexChainCommand extends AdminCommand { block?: number } +export interface AdminFetchConfigCommand extends AdminCommand {} + +export interface AdminPushConfigCommand extends AdminCommand { + config: Record +} + export interface ICommandHandler { handle(command: Command): Promise + verifyParamsAndRateLimits(task: Command): Promise +} + +export interface IValidateCommandHandler extends ICommandHandler { validate(command: Command): ValidateParams } +export interface IValidateAdminCommandHandler extends ICommandHandler { + validate(command: AdminCommand): Promise +} + export interface ComputeGetEnvironmentsCommand extends Command { chainId?: number } -export interface ComputeDetails { - env: string // with hash - validUntil: number +export interface ComputePayment { + chainId: number + token: string + resources?: ComputeResourceRequest[] // only used in initializeCompute } export interface ComputeInitializeCommand extends Command { - datasets: [ComputeAsset] + datasets: ComputeAsset[] algorithm: ComputeAlgorithm - compute: ComputeDetails + environment: string + payment: ComputePayment consumerAddress: string + signature?: string + maxJobDuration: number + policyServer?: any // object to pass to policy server + queueMaxWaitTime?: number // max time in seconds a job can wait in the queue before being started } -export interface ComputeStartCommand extends Command { +export interface FreeComputeStartCommand extends Command { consumerAddress: string signature: string nonce: string environment: string algorithm: ComputeAlgorithm - dataset: ComputeAsset - additionalDatasets?: ComputeAsset[] + datasets?: ComputeAsset[] output?: ComputeOutput + resources?: ComputeResourceRequest[] + maxJobDuration?: number + policyServer?: any // object to pass to policy server + metadata?: DBComputeJobMetadata + additionalViewers?: string[] // addresses of additional addresses that can get results + queueMaxWaitTime?: number // max time in seconds a job can wait in the queue before being started +} +export interface PaidComputeStartCommand extends FreeComputeStartCommand { + payment: ComputePayment } export interface ComputeStopCommand extends Command { @@ -181,6 +235,12 @@ export interface ComputeGetResultCommand extends Command { jobId: string index: number } +export interface ComputeGetStreamableLogsCommand extends Command { + consumerAddress: string + signature: string + nonce: string + jobId: string +} export interface ComputeGetStatusCommand extends Command { consumerAddress?: string @@ -218,3 +278,28 @@ export interface StartStopIndexingCommand extends AdminCommand { export interface PolicyServerPassthroughCommand extends Command { policyServerPassthrough?: any } + +export interface PolicyServerInitializeCommand extends Command { + documentId?: string + serviceId?: string + consumerAddress?: string + policyServer?: any +} + +export interface CreateAuthTokenCommand extends Command { + address: string + signature: string + validUntil?: number | null +} + +export interface InvalidateAuthTokenCommand extends Command { + address: string + signature: string + token: string +} + +export interface GetJobsCommand extends Command { + environments?: string[] + fromTimestamp?: string + consumerAddrs?: string[] +} diff --git a/src/@types/humanhash.d.ts b/src/@types/humanhash.d.ts new file mode 100644 index 000000000..3d305eb40 --- /dev/null +++ b/src/@types/humanhash.d.ts @@ -0,0 +1,13 @@ +declare module 'humanhash' { + class HumanHasher { + constructor(wordlist?: string[]) + humanize(hexdigest: string, words?: number, separator?: string): string + uuid( + words?: number, + separator?: string, + version?: number + ): { humanhash: string; uuid: string } + } + + export = HumanHasher +} diff --git a/src/@types/index.ts b/src/@types/index.ts index 8a5d367bc..8ac35eeb1 100644 --- a/src/@types/index.ts +++ b/src/@types/index.ts @@ -1,3 +1,3 @@ export * from './OceanNode' -export * from './C2D' +export * from './C2D/C2D' export * from './Typesense' diff --git a/src/@types/policyServer.ts b/src/@types/policyServer.ts index b0b42537c..51704e41e 100644 --- a/src/@types/policyServer.ts +++ b/src/@types/policyServer.ts @@ -3,3 +3,11 @@ export interface PolicyServerResult { message?: string // error message, if any httpStatus?: number // status returned by server } + +export interface PolicyServerTask { + sessionId?: string + successRedirectUri?: string + errorRedirectUri?: string + responseRedirectUri?: string + presentationDefinitionUri?: string +} diff --git a/src/OceanNode.ts b/src/OceanNode.ts index ba40feac9..9e7846c04 100644 --- a/src/OceanNode.ts +++ b/src/OceanNode.ts @@ -3,14 +3,27 @@ import { OceanProvider } from './components/Provider/index.js' import { OceanIndexer } from './components/Indexer/index.js' import { OceanNodeConfig, P2PCommandResponse } from './@types/OceanNode.js' import { Database } from './components/database/index.js' +import { Escrow } from './components/core/utils/escrow.js' import { CoreHandlersRegistry } from './components/core/handler/coreHandlersRegistry.js' import { OCEAN_NODE_LOGGER } from './utils/logging/common.js' import { ReadableString } from './components/P2P/handleProtocolCommands.js' import StreamConcat from 'stream-concat' import { pipe } from 'it-pipe' import { GENERIC_EMOJIS, LOG_LEVELS_STR } from './utils/logging/Logger.js' -import { Handler } from './components/core/handler/handler.js' +import { BaseHandler } from './components/core/handler/handler.js' import { C2DEngines } from './components/c2d/compute_engines.js' +import { Auth } from './components/Auth/index.js' + +export interface RequestLimiter { + requester: string | string[] // IP address or peer ID + lastRequestTime: number // time of the last request done (in miliseconds) + numRequests: number // number of requests done in the specific time period +} + +export interface RequestDataCheck { + valid: boolean + updatedRequestData: RequestLimiter +} export class OceanNode { // eslint-disable-next-line no-use-before-define private static instance: OceanNode @@ -18,31 +31,50 @@ export class OceanNode { private coreHandlers: CoreHandlersRegistry // compute engines private c2dEngines: C2DEngines + // escrow + public escrow: Escrow // requester private remoteCaller: string | string[] + private requestMap: Map + private auth: Auth + // eslint-disable-next-line no-useless-constructor private constructor( + private config: OceanNodeConfig, private db?: Database, private node?: OceanP2P, private provider?: OceanProvider, private indexer?: OceanIndexer ) { this.coreHandlers = CoreHandlersRegistry.getInstance(this) + this.requestMap = new Map() + this.config = config + if (this.db && this.db?.authToken) { + this.auth = new Auth(this.db.authToken) + } if (node) { node.setCoreHandlers(this.coreHandlers) } + if (this.config) { + this.escrow = new Escrow( + this.config.supportedNetworks, + this.config.claimDurationTimeout + ) + } } // Singleton instance public static getInstance( + config?: OceanNodeConfig, db?: Database, node?: OceanP2P, provider?: OceanProvider, - indexer?: OceanIndexer + indexer?: OceanIndexer, + newInstance: boolean = false ): OceanNode { - if (!OceanNode.instance) { + if (!OceanNode.instance || newInstance) { // prepare compute engines - this.instance = new OceanNode(db, node, provider, indexer) + this.instance = new OceanNode(config, db, node, provider, indexer) } return this.instance } @@ -56,11 +88,18 @@ export class OceanNode { this.indexer = _indexer } - public async addC2DEngines(_config: OceanNodeConfig) { + public async addC2DEngines() { if (this.c2dEngines) { await this.c2dEngines.stopAllEngines() } - if (_config && _config.c2dClusters) this.c2dEngines = new C2DEngines(_config) + if (this.config && this.config.c2dClusters) { + if (!this.db || !this.db.c2d) { + OCEAN_NODE_LOGGER.error('C2DDatabase is mandatory for compute engines!') + return + } + this.c2dEngines = new C2DEngines(this.config, this.db.c2d, this.escrow) + await this.c2dEngines.startAllEngines() + } } public getP2PNode(): OceanP2P | undefined { @@ -95,6 +134,18 @@ export class OceanNode { return this.remoteCaller } + public getRequestMapSize(): number { + return this.requestMap.size + } + + public getRequestMap(): Map { + return this.requestMap + } + + public getAuth(): Auth { + return this.auth + } + /** * Use this method to direct calls to the node as node cannot dial into itself * @param message command message @@ -114,7 +165,7 @@ export class OceanNode { try { const task = JSON.parse(message) - const handler: Handler = this.coreHandlers.getHandler(task.command) + const handler: BaseHandler = this.coreHandlers.getHandler(task.command) if (handler === null) { status = { httpStatus: 501, diff --git a/src/components/Auth/index.ts b/src/components/Auth/index.ts new file mode 100644 index 000000000..94e1ab0c4 --- /dev/null +++ b/src/components/Auth/index.ts @@ -0,0 +1,113 @@ +import { AuthToken, AuthTokenDatabase } from '../database/AuthTokenDatabase.js' +import jwt from 'jsonwebtoken' +import { checkNonce, NonceResponse } from '../core/utils/nonceHandler.js' +import { OceanNode } from '../../OceanNode.js' +import { getConfiguration } from '../../utils/index.js' +import { CommonValidation } from '../../utils/validators.js' + +export interface AuthValidation { + token?: string + address?: string + nonce?: string + signature?: string + message?: string +} + +export class Auth { + private authTokenDatabase: AuthTokenDatabase + + public constructor(authTokenDatabase: AuthTokenDatabase) { + this.authTokenDatabase = authTokenDatabase + } + + public async getJwtSecret(): Promise { + const config = await getConfiguration() + return config.jwtSecret + } + + async getJWTToken(address: string, nonce: string, createdAt: number): Promise { + const jwtToken = jwt.sign( + { + address, + nonce, + createdAt + }, + await this.getJwtSecret() + ) + + return jwtToken + } + + async insertToken( + address: string, + jwtToken: string, + validUntil: number, + createdAt: number + ): Promise { + await this.authTokenDatabase.createToken(jwtToken, address, validUntil, createdAt) + } + + async invalidateToken(jwtToken: string): Promise { + await this.authTokenDatabase.invalidateToken(jwtToken) + } + + async validateToken(token: string): Promise { + const tokenEntry = await this.authTokenDatabase.validateToken(token) + if (!tokenEntry) { + return null + } + return tokenEntry + } + + /** + * Validates the authentication or token + * You need to provider either a token or an address, signature and message + * @param {string} token - The token to validate + * @param {string} address - The address to validate + * @param {string} signature - The signature to validate + * @param {string} message - The message to validate + * @returns The validation result + */ + async validateAuthenticationOrToken( + authValidation: AuthValidation + ): Promise { + const { token, address, nonce, signature, message } = authValidation + try { + if (signature && address && nonce) { + const oceanNode = OceanNode.getInstance() + const nonceCheckResult: NonceResponse = await checkNonce( + oceanNode.getDatabase().nonce, + address, + parseInt(nonce), + signature, + message + ) + + if (!nonceCheckResult.valid) { + return { valid: false, error: nonceCheckResult.error } + } + + if (nonceCheckResult.valid) { + return { valid: true, error: '' } + } + } + + if (token) { + const authToken = await this.validateToken(token) + if (authToken) { + return { valid: true, error: '' } + } + + return { valid: false, error: 'Invalid token' } + } + + return { + valid: false, + error: + 'Invalid authentication, you need to provide either a token or an address, signature, message and nonce' + } + } catch (e) { + return { valid: false, error: `Error during authentication validation: ${e}` } + } + } +} diff --git a/src/components/Indexer/crawlerThread.ts b/src/components/Indexer/crawlerThread.ts index 2b8e09e3e..7e1a059f2 100644 --- a/src/components/Indexer/crawlerThread.ts +++ b/src/components/Indexer/crawlerThread.ts @@ -3,8 +3,6 @@ import { getCrawlingInterval, getDeployedContractBlock, getNetworkHeight, - processBlocks, - processChunkLogs, retrieveChunkEvents } from './utils.js' import { Blockchain } from '../../utils/blockchain.js' @@ -16,6 +14,7 @@ import { INDEXER_LOGGER } from '../../utils/logging/common.js' import { getDatabase } from '../../utils/database.js' import { JsonRpcApiProvider, Log, Signer } from 'ethers' import { DEVELOPMENT_CHAIN_ID } from '../../utils/address.js' +import { processBlocks, processChunkLogs } from './processor.js' export interface ReindexTask { txId: string @@ -98,20 +97,21 @@ export async function processNetworkData( ): Promise { stoppedCrawling = startedCrawling = false let contractDeploymentBlock = getDeployedContractBlock(rpcDetails.chainId) - if (!isDefined(contractDeploymentBlock) && !isDefined(await getLastIndexedBlock())) { - if (rpcDetails.chainId === DEVELOPMENT_CHAIN_ID) { - rpcDetails.startBlock = contractDeploymentBlock = 0 - INDEXER_LOGGER.warn( - 'Cannot get block info for local network, starting from block 0' - ) - } else { - INDEXER_LOGGER.logMessage( - `chain: ${rpcDetails.chainId} Both deployed block and last indexed block are null/undefined. Cannot proceed further on this chain`, - true - ) + const isLocalChain = rpcDetails.chainId === DEVELOPMENT_CHAIN_ID + if (isLocalChain && !isDefined(contractDeploymentBlock)) { + rpcDetails.startBlock = contractDeploymentBlock = 0 + INDEXER_LOGGER.warn('Cannot get block info for local network, starting from block 0') + } else if ( + !isLocalChain && + !isDefined(contractDeploymentBlock) && + !isDefined(await getLastIndexedBlock()) + ) { + INDEXER_LOGGER.logMessage( + `chain: ${rpcDetails.chainId} Both deployed block and last indexed block are null/undefined. Cannot proceed further on this chain`, + true + ) - return null - } + return null } // if we defined a valid startBlock use it, oterwise start from deployed one @@ -127,6 +127,7 @@ export async function processNetworkData( // we can override the default value of 30 secs, by setting process.env.INDEXER_INTERVAL const interval = getCrawlingInterval() let { chunkSize } = rpcDetails + let successfulRetrievalCount = 0 let lockProccessing = false while (true) { @@ -166,6 +167,7 @@ export async function processNetworkData( startBlock, blocksToProcess ) + successfulRetrievalCount++ } catch (error) { INDEXER_LOGGER.log( LOG_LEVELS_STR.LEVEL_WARN, @@ -173,12 +175,16 @@ export async function processNetworkData( true ) chunkSize = Math.floor(chunkSize / 2) < 1 ? 1 : Math.floor(chunkSize / 2) + successfulRetrievalCount = 0 INDEXER_LOGGER.logMessage( `network: ${rpcDetails.network} Reducing chunk size ${chunkSize} `, true ) } try { + INDEXER_LOGGER.logMessage( + `network: ${rpcDetails.network} processing ${chunkEvents.length} events ...` + ) const processedBlocks = await processBlocks( chunkEvents, signer, @@ -187,6 +193,9 @@ export async function processNetworkData( startBlock, blocksToProcess ) + INDEXER_LOGGER.debug( + `Processed ${processedBlocks.foundEvents.length} events from ${chunkEvents.length} logs` + ) currentBlock = await updateLastIndexedBlockNumber( processedBlocks.lastBlock, lastIndexedBlock @@ -196,28 +205,36 @@ export async function processNetworkData( currentBlock = lastIndexedBlock } checkNewlyIndexedAssets(processedBlocks.foundEvents) - chunkSize = chunkSize !== 1 ? chunkSize : rpcDetails.chunkSize + // Revert to original chunk size after 3 successful retrieveChunkEvents calls + if (successfulRetrievalCount >= 3 && chunkSize < rpcDetails.chunkSize) { + chunkSize = rpcDetails.chunkSize + successfulRetrievalCount = 0 + INDEXER_LOGGER.logMessage( + `network: ${rpcDetails.network} Reverting chunk size back to original ${chunkSize} after 3 successful calls`, + true + ) + } } catch (error) { - INDEXER_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `Processing event from network failed network: ${rpcDetails.network} Error: ${error.message} `, - true - ) - await updateLastIndexedBlockNumber( - startBlock + blocksToProcess, - lastIndexedBlock + INDEXER_LOGGER.error( + `Processing event from network failed network: ${rpcDetails.network} Error: ${error.message} ` ) + successfulRetrievalCount = 0 + // since something went wrong, we will not update the last indexed block + // so we will try to process the same chunk again + // after some sleep + await sleep(interval) } + } else { + await sleep(interval) } await processReindex(provider, signer, rpcDetails.chainId) lockProccessing = false } else { INDEXER_LOGGER.logMessage( - `Processing already in progress for network ${rpcDetails.network}, waiting until finishing the current processing ...`, - true + `Processing already in progress for network ${rpcDetails.network}, waiting until finishing the current processing ...` ) } - await sleep(interval) + // reindex chain command called if (REINDEX_BLOCK && !lockProccessing) { const networkHeight = await getNetworkHeight(provider) diff --git a/src/components/Indexer/index.ts b/src/components/Indexer/index.ts index 6e83595e4..462d43dea 100644 --- a/src/components/Indexer/index.ts +++ b/src/components/Indexer/index.ts @@ -13,10 +13,11 @@ import { PROTOCOL_COMMANDS } from '../../utils/index.js' import { CommandStatus, JobStatus } from '../../@types/commands.js' -import { buildJobIdentifier } from './utils.js' +import { buildJobIdentifier, getDeployedContractBlock } from './utils.js' import { create256Hash } from '../../utils/crypt.js' import { isReachableConnection } from '../../utils/database.js' import { sleep } from '../../utils/util.js' +import { isReindexingNeeded } from './version.js' // emmit events for node export const INDEXER_DDO_EVENT_EMITTER = new EventEmitter() @@ -35,6 +36,7 @@ export class OceanIndexer { private networks: RPCS private supportedChains: string[] private workers: Record = {} + private MIN_REQUIRED_VERSION = '0.2.2' constructor(db: Database, supportedNetworks: RPCS) { this.db = db @@ -196,6 +198,7 @@ export class OceanIndexer { // eslint-disable-next-line require-await public async startThreads(): Promise { + await this.checkAndTriggerReindexing() let count = 0 for (const network of this.supportedChains) { const chainId = parseInt(network) @@ -211,32 +214,47 @@ export class OceanIndexer { } private setupEventListeners(worker: Worker, chainId: number) { - worker.on('message', (event: any) => { - if (event.data) { + worker.on('message', async (event: any) => { + try { + if (!event.data) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Missing event data (ddo) on postMessage. Something is wrong! Event: ${JSON.stringify( + event + )}`, + true + ) + } + if ( [ EVENTS.METADATA_CREATED, EVENTS.METADATA_UPDATED, EVENTS.METADATA_STATE, EVENTS.ORDER_STARTED, - EVENTS.ORDER_REUSED + EVENTS.ORDER_REUSED, + EVENTS.DISPENSER_ACTIVATED, + EVENTS.DISPENSER_DEACTIVATED, + EVENTS.EXCHANGE_ACTIVATED, + EVENTS.EXCHANGE_DEACTIVATED, + EVENTS.EXCHANGE_RATE_CHANGED ].includes(event.method) ) { - // will emit the metadata created/updated event and advertise it to the other peers (on create only) INDEXER_LOGGER.logMessage( `Emiting "${event.method}" for DDO : ${event.data.id} from network: ${chainId} ` ) - INDEXER_DDO_EVENT_EMITTER.emit(event.method, event.data.id) - // remove from indexing list + await Promise.resolve( + INDEXER_DDO_EVENT_EMITTER.emit(event.method, event.data.id) + ) } else if (event.method === INDEXER_CRAWLING_EVENTS.REINDEX_QUEUE_POP) { - // remove this one from the queue (means we processed the reindex for this tx) INDEXING_QUEUE = INDEXING_QUEUE.filter( (task) => task.txId !== event.data.txId && task.chainId !== event.data.chainId ) - // reindex tx successfully done - INDEXER_CRAWLING_EVENT_EMITTER.emit( - INDEXER_CRAWLING_EVENTS.REINDEX_TX, // explicitly set constant value for readability - event.data + await Promise.resolve( + INDEXER_CRAWLING_EVENT_EMITTER.emit( + INDEXER_CRAWLING_EVENTS.REINDEX_TX, + event.data + ) ) this.updateJobStatus( PROTOCOL_COMMANDS.REINDEX_TX, @@ -244,10 +262,11 @@ export class OceanIndexer { CommandStatus.SUCCESS ) } else if (event.method === INDEXER_CRAWLING_EVENTS.REINDEX_CHAIN) { - // we should listen to this on the dashboard for instance - INDEXER_CRAWLING_EVENT_EMITTER.emit( - INDEXER_CRAWLING_EVENTS.REINDEX_CHAIN, - event.data + await Promise.resolve( + INDEXER_CRAWLING_EVENT_EMITTER.emit( + INDEXER_CRAWLING_EVENTS.REINDEX_CHAIN, + event.data + ) ) this.updateJobStatus( PROTOCOL_COMMANDS.REINDEX_CHAIN, @@ -255,12 +274,14 @@ export class OceanIndexer { event.data.result ? CommandStatus.SUCCESS : CommandStatus.FAILURE ) } else if (event.method === INDEXER_CRAWLING_EVENTS.CRAWLING_STARTED) { - INDEXER_CRAWLING_EVENT_EMITTER.emit(event.method, event.data) + await Promise.resolve( + INDEXER_CRAWLING_EVENT_EMITTER.emit(event.method, event.data) + ) } - } else { + } catch (err) { INDEXER_LOGGER.log( LOG_LEVELS_STR.LEVEL_ERROR, - 'Missing event data (ddo) on postMessage. Something is wrong!', + `Worker handler failed after retries: ${err?.message ?? err}`, true ) } @@ -400,4 +421,70 @@ export class OceanIndexer { } } } + + /** + * Checks if reindexing is needed and triggers it for all chains + */ + public async checkAndTriggerReindexing(): Promise { + const currentVersion = process.env.npm_package_version + const dbActive = this.getDatabase() + if (!dbActive || !(await isReachableConnection(dbActive.getConfig().url))) { + INDEXER_LOGGER.error(`Giving up reindexing. DB is not online!`) + return + } + const dbVersion = await dbActive.sqliteConfig?.retrieveValue() + INDEXER_LOGGER.info( + `Node version check: Current=${currentVersion}, DB=${ + dbVersion || 'not set' + }, Min Required=${this.MIN_REQUIRED_VERSION}` + ) + + if (isReindexingNeeded(currentVersion, dbVersion.value, this.MIN_REQUIRED_VERSION)) { + INDEXER_LOGGER.info( + `Reindexing needed: DB version ${ + dbVersion.value || 'not set' + } is older than minimum required ${this.MIN_REQUIRED_VERSION}` + ) + + // Reindex all chains by directly setting last indexed block to deployment block + for (const chainID of this.supportedChains) { + const chainIdNum = Number(chainID) + + INDEXER_LOGGER.info( + `Triggering reindexing for chain ${chainIdNum} by resetting to block null` + ) + + try { + // First delete all assets from this chain + const numDeleted = await dbActive.ddo.deleteAllAssetsFromChain(chainIdNum) + INDEXER_LOGGER.info(`Deleted ${numDeleted} assets from chain ${chainIdNum}`) + + // Update database directly by resetting last indexed block + const contractDeploymentBlock = getDeployedContractBlock(chainIdNum) + const result = await dbActive.indexer.update( + chainIdNum, + contractDeploymentBlock + ) + + if (!result) { + INDEXER_LOGGER.error( + `Reindex chain job for ${chainIdNum} failed. Please retry reindexChain command manually for this chain.` + ) + } else { + INDEXER_LOGGER.info( + `Successfully reset indexing for chain ${chainIdNum} to block null` + ) + } + } catch (error) { + INDEXER_LOGGER.error( + `Error resetting index for chain ${chainIdNum}: ${error.message}. Please retry reindexChain command manually.` + ) + } + } + await dbActive.sqliteConfig?.createOrUpdateConfig('version', currentVersion) + INDEXER_LOGGER.info(`Updated node version in database to ${currentVersion}`) + } else { + INDEXER_LOGGER.info('No reindexing needed based on version check') + } + } } diff --git a/src/components/Indexer/processor.ts b/src/components/Indexer/processor.ts index c887a9025..0be240106 100644 --- a/src/components/Indexer/processor.ts +++ b/src/components/Indexer/processor.ts @@ -1,783 +1,203 @@ -import { - Interface, - JsonRpcApiProvider, - Signer, - ethers, - getAddress, - getBytes, - hexlify, - toUtf8Bytes, - toUtf8String -} from 'ethers' -import { createHash } from 'crypto' -import { Readable } from 'node:stream' -import axios from 'axios' -import { toString as uint8ArrayToString } from 'uint8arrays/to-string' +import { ethers, Signer, JsonRpcApiProvider, Interface, getAddress } from 'ethers' +import { BlocksEvents, ProcessingEvents } from '../../@types/blockchain.js' +import { EVENTS } from '../../utils/constants.js' +import { getConfiguration } from '../../utils/config.js' +import { INDEXER_LOGGER } from '../../utils/logging/common.js' import { LOG_LEVELS_STR } from '../../utils/logging/Logger.js' -import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } +import { fetchEventFromTransaction } from '../../utils/util.js' +import { + BaseEventProcessor, + MetadataEventProcessor, + MetadataStateEventProcessor, + OrderStartedEventProcessor, + OrderReusedEventProcessor, + DispenserCreatedEventProcessor, + DispenserActivatedEventProcessor, + DispenserDeactivatedEventProcessor, + ExchangeCreatedEventProcessor, + ExchangeActivatedEventProcessor, + ExchangeDeactivatedEventProcessor, + ExchangeRateChangedEventProcessor, + ProcessorConstructor +} from './processors/index.js' +import { findEventByKey } from './utils.js' import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' assert { type: 'json' } -import { getDatabase } from '../../utils/database.js' -import { PROTOCOL_COMMANDS, EVENTS, MetadataStates } from '../../utils/constants.js' -import { getDtContract, wasNFTDeployedByOurFactory } from './utils.js' -import { INDEXER_LOGGER } from '../../utils/logging/common.js' -import { Storage } from '../../components/storage/index.js' -import { Purgatory } from './purgatory.js' -import { getConfiguration, timestampToDateTime } from '../../utils/index.js' -import { OceanNode } from '../../OceanNode.js' -import { asyncCallWithTimeout, streamToString } from '../../utils/util.js' -import { DecryptDDOCommand } from '../../@types/commands.js' -import { isRemoteDDO, makeDid } from '../core/utils/validateDdoHandler.js' -import { create256Hash } from '../../utils/crypt.js' -import { URLUtils } from '../../utils/url.js' -import { PolicyServer } from '../policyServer/index.js' -class BaseEventProcessor { - protected networkId: number - - constructor(chainId: number) { - this.networkId = chainId - } - - protected getTokenInfo(services: any[]): any[] { - const datatokens: any[] = [] - services.forEach((service) => { - datatokens.push({ - address: service.datatokenAddress, - name: 'Datatoken', - symbol: 'DT1', - serviceId: service.id - }) - }) - return datatokens - } - - protected async getEventData( - provider: JsonRpcApiProvider, - transactionHash: string, - abi: any - ): Promise { - const iface = new Interface(abi) - const receipt = await provider.getTransactionReceipt(transactionHash) - const eventObj = { - topics: receipt.logs[0].topics as string[], - data: receipt.logs[0].data - } - return iface.parseLog(eventObj) - } - - protected async getNFTInfo( - nftAddress: string, - signer: Signer, - owner: string, - timestamp: number - ): Promise { - const nftContract = new ethers.Contract(nftAddress, ERC721Template.abi, signer) - const state = parseInt((await nftContract.getMetaData())[2]) - const id = parseInt(await nftContract.getId()) - const tokenURI = await nftContract.tokenURI(id) - return { - state, - address: nftAddress, - name: await nftContract.name(), - symbol: await nftContract.symbol(), - owner, - created: timestampToDateTime(timestamp), - tokenURI - } - } - - protected async createOrUpdateDDO(ddo: any, method: string): Promise { - try { - const { ddo: ddoDatabase, ddoState } = await getDatabase() - const saveDDO = await ddoDatabase.update({ ...ddo }) - await ddoState.update( - this.networkId, - saveDDO.id, - saveDDO.nftAddress, - saveDDO.event?.tx, - true - ) - INDEXER_LOGGER.logMessage( - `Saved or updated DDO : ${saveDDO.id} from network: ${this.networkId} triggered by: ${method}` - ) - return saveDDO - } catch (err) { - const { ddoState } = await getDatabase() - await ddoState.update( - this.networkId, - ddo.id, - ddo.nftAddress, - ddo.event?.tx, - true, - err.message - ) - INDEXER_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `Error found on ${this.networkId} triggered by: ${method} while creating or updating DDO: ${err}`, - true - ) - } - } - - protected checkDdoHash(decryptedDocument: any, documentHashFromContract: any): boolean { - const utf8Bytes = toUtf8Bytes(JSON.stringify(decryptedDocument)) - const expectedMetadata = hexlify(utf8Bytes) - const expectedMetadataHash = create256Hash(expectedMetadata.toString()) - if (expectedMetadataHash !== documentHashFromContract) { - INDEXER_LOGGER.error( - `DDO checksum does not match. Expected: ${documentHashFromContract} Received: ${expectedMetadata}` - ) - return false - } - return true - } - - protected async decryptDDO( - decryptorURL: string, - flag: string, - eventCreator: string, - contractAddress: string, - chainId: number, - txId: string, - metadataHash: string, - metadata: any - ): Promise { - let ddo - if (parseInt(flag) === 2) { - INDEXER_LOGGER.logMessage( - `Decrypting DDO from network: ${this.networkId} created by: ${eventCreator} encrypted by: ${decryptorURL}` - ) - const nonce = Math.floor(Date.now() / 1000).toString() - const { keys } = await getConfiguration() - const nodeId = keys.peerId.toString() - - const wallet: ethers.Wallet = new ethers.Wallet(process.env.PRIVATE_KEY as string) - - const message = String( - txId + contractAddress + keys.ethAddress + chainId.toString() + nonce - ) - const consumerMessage = ethers.solidityPackedKeccak256( - ['bytes'], - [ethers.hexlify(ethers.toUtf8Bytes(message))] - ) - const signature = await wallet.signMessage(consumerMessage) - - if (URLUtils.isValidUrl(decryptorURL)) { - try { - const payload = { - transactionId: txId, - chainId, - decrypterAddress: keys.ethAddress, - dataNftAddress: contractAddress, - signature, - nonce - } - const response = await axios({ - method: 'post', - url: `${decryptorURL}/api/services/decrypt`, - data: payload - }) - if (response.status !== 200) { - const message = `bProvider exception on decrypt DDO. Status: ${response.status}, ${response.statusText}` - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, message) - throw new Error(message) - } - - let responseHash - if (response.data instanceof Object) { - responseHash = create256Hash(JSON.stringify(response.data)) - ddo = response.data - } else { - ddo = JSON.parse(response.data) - responseHash = create256Hash(ddo) - } - if (responseHash !== metadataHash) { - const msg = `Hash check failed: response=${ddo}, decrypted ddo hash=${responseHash}\n metadata hash=${metadataHash}` - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, msg) - throw new Error(msg) - } - } catch (err) { - const message = `Provider exception on decrypt DDO. Status: ${err.message}` - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, message) - throw new Error(message) - } - } else { - const node = OceanNode.getInstance(await getDatabase()) - if (nodeId === decryptorURL) { - const decryptDDOTask: DecryptDDOCommand = { - command: PROTOCOL_COMMANDS.DECRYPT_DDO, - transactionId: txId, - decrypterAddress: keys.ethAddress, - chainId, - encryptedDocument: metadata, - documentHash: metadataHash, - dataNftAddress: contractAddress, - signature, - nonce - } - try { - const response = await node - .getCoreHandlers() - .getHandler(PROTOCOL_COMMANDS.DECRYPT_DDO) - .handle(decryptDDOTask) - ddo = JSON.parse(await streamToString(response.stream as Readable)) - } catch (error) { - const message = `Node exception on decrypt DDO. Status: ${error.message}` - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, message) - throw new Error(message) - } - } else { - try { - const p2pNode = await node.getP2PNode() - let isBinaryContent = false - const sink = async function (source: any) { - let first = true - for await (const chunk of source) { - if (first) { - first = false - try { - const str = uint8ArrayToString(chunk.subarray()) // Obs: we need to specify the length of the subarrays - const decoded = JSON.parse(str) - if ('headers' in decoded) { - if (str?.toLowerCase().includes('application/octet-stream')) { - isBinaryContent = true - } - } - if (decoded.httpStatus !== 200) { - INDEXER_LOGGER.logMessage( - `Error in sink method : ${decoded.httpStatus} errro: ${decoded.error}` - ) - throw new Error('Error in sink method', decoded.error) - } - } catch (e) { - INDEXER_LOGGER.logMessage( - `Error in sink method } error: ${e.message}` - ) - throw new Error(`Error in sink method ${e.message}`) - } - } else { - if (isBinaryContent) { - return chunk.subarray() - } else { - const str = uint8ArrayToString(chunk.subarray()) - return str - } - } - } - } - const message = { - command: PROTOCOL_COMMANDS.DECRYPT_DDO, - transactionId: txId, - decrypterAddress: keys.ethAddress, - chainId, - encryptedDocument: metadata, - documentHash: metadataHash, - dataNftAddress: contractAddress, - signature, - nonce - } - const response = await p2pNode.sendTo( - decryptorURL, - JSON.stringify(message), - sink - ) - ddo = JSON.parse(await streamToString(response.stream as Readable)) - } catch (error) { - const message = `Node exception on decrypt DDO. Status: ${error.message}` - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, message) - throw new Error(message) - } - } - } - } else { - INDEXER_LOGGER.logMessage( - `Decompressing DDO from network: ${this.networkId} created by: ${eventCreator} ecnrypted by: ${decryptorURL}` - ) - const byteArray = getBytes(metadata) - const utf8String = toUtf8String(byteArray) - ddo = JSON.parse(utf8String) - } - - return ddo - } +import AccessListContract from '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessList.sol/AccessList.json' assert { type: 'json' } + +const EVENT_PROCESSOR_MAP: Record = { + [EVENTS.METADATA_CREATED]: MetadataEventProcessor, + [EVENTS.METADATA_UPDATED]: MetadataEventProcessor, + [EVENTS.METADATA_STATE]: MetadataStateEventProcessor, + [EVENTS.ORDER_STARTED]: OrderStartedEventProcessor, + [EVENTS.ORDER_REUSED]: OrderReusedEventProcessor, + [EVENTS.DISPENSER_CREATED]: DispenserCreatedEventProcessor, + [EVENTS.DISPENSER_ACTIVATED]: DispenserActivatedEventProcessor, + [EVENTS.DISPENSER_DEACTIVATED]: DispenserDeactivatedEventProcessor, + [EVENTS.EXCHANGE_CREATED]: ExchangeCreatedEventProcessor, + [EVENTS.EXCHANGE_ACTIVATED]: ExchangeActivatedEventProcessor, + [EVENTS.EXCHANGE_DEACTIVATED]: ExchangeDeactivatedEventProcessor, + [EVENTS.EXCHANGE_RATE_CHANGED]: ExchangeRateChangedEventProcessor } -export class MetadataEventProcessor extends BaseEventProcessor { - async processEvent( - event: ethers.Log, - chainId: number, - signer: Signer, - provider: JsonRpcApiProvider, - eventName: string - ): Promise { - let did = 'did:op' - try { - const { ddo: ddoDatabase, ddoState } = await getDatabase() - const wasDeployedByUs = await wasNFTDeployedByOurFactory( - chainId, - signer, - getAddress(event.address) - ) - - if (!wasDeployedByUs) { - INDEXER_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `NFT not deployed by OPF factory`, - true - ) - return - } - const decodedEventData = await this.getEventData( - provider, - event.transactionHash, - ERC721Template.abi - ) - const metadata = decodedEventData.args[4] - const metadataHash = decodedEventData.args[5] - const flag = decodedEventData.args[3] - const owner = decodedEventData.args[0] - const decryptedDDO = await this.decryptDDO( - decodedEventData.args[2], - flag, - owner, - event.address, - chainId, - event.transactionHash, - metadataHash, - metadata - ) - const ddo = await this.processDDO(decryptedDDO) - if (ddo.id !== makeDid(event.address, chainId.toString(10))) { - INDEXER_LOGGER.error( - `Decrypted DDO ID is not matching the generated hash for DID.` - ) - return - } - // for unencrypted DDOs - console.log(ddo.id) - console.log(metadataHash) - if (parseInt(flag) !== 2 && !this.checkDdoHash(ddo, metadataHash)) { - return - } - did = ddo.id - // stuff that we overwrite - ddo.chainId = chainId - ddo.nftAddress = event.address - ddo.datatokens = this.getTokenInfo(ddo.services) - ddo.nft = await this.getNFTInfo( - ddo.nftAddress, - signer, - owner, - parseInt(decodedEventData.args[6]) - ) - - INDEXER_LOGGER.logMessage( - `Processed new DDO data ${ddo.id} with txHash ${event.transactionHash} from block ${event.blockNumber}`, - true - ) - - const previousDdo = await ddoDatabase.retrieve(ddo.id) - if (eventName === EVENTS.METADATA_CREATED) { - if (previousDdo && previousDdo.nft.state === MetadataStates.ACTIVE) { - INDEXER_LOGGER.logMessage(`DDO ${ddo.id} is already registered as active`, true) - await ddoState.update( - this.networkId, - did, - event.address, - event.transactionHash, - false, - `DDO ${ddo.id} is already registered as active` - ) - return - } - } - - if (eventName === EVENTS.METADATA_UPDATED) { - if (!previousDdo) { - INDEXER_LOGGER.logMessage( - `Previous DDO with did ${ddo.id} was not found the database. Maybe it was deleted/hidden to some violation issues`, - true - ) - await ddoState.update( - this.networkId, - did, - event.address, - event.transactionHash, - false, - `Previous DDO with did ${ddo.id} was not found the database. Maybe it was deleted/hidden to some violation issues` - ) - return - } - const [isUpdateable, error] = this.isUpdateable( - previousDdo, - event.transactionHash, - event.blockNumber - ) - if (!isUpdateable) { - INDEXER_LOGGER.error( - `Error encountered when checking if the asset is eligiable for update: ${error}` - ) - await ddoState.update( - this.networkId, - did, - event.address, - event.transactionHash, - false, - error - ) - return - } - } - const from = decodedEventData.args[0] - - // we need to store the event data (either metadata created or update and is updatable) - if ([EVENTS.METADATA_CREATED, EVENTS.METADATA_UPDATED].includes(eventName)) { - if (!ddo.event) { - ddo.event = {} - } - ddo.event.tx = event.transactionHash - ddo.event.from = from - ddo.event.contract = event.address - if (event.blockNumber) { - ddo.event.block = event.blockNumber - // try get block & timestamp from block (only wait 2.5 secs maximum) - const promiseFn = provider.getBlock(event.blockNumber) - const result = await asyncCallWithTimeout(promiseFn, 2500) - if (result.data !== null && !result.timeout) { - ddo.event.datetime = new Date(result.data.timestamp * 1000).toJSON() - } - } else { - ddo.event.block = -1 - } +const processorInstances = new Map() - // policyServer check - const policyServer = new PolicyServer() - let policyStatus - if (eventName === EVENTS.METADATA_UPDATED) - policyStatus = await policyServer.checkUpdateDDO( - ddo, - this.networkId, - event.transactionHash, - event - ) - else - policyStatus = await policyServer.checknewDDO( - ddo, - this.networkId, - event.transactionHash, - event - ) - if (!policyStatus.success) { - await ddoState.update( - this.networkId, - did, - event.address, - event.transactionHash, - false, - policyStatus.message - ) - return - } - } - // always call, but only create instance once - const purgatory = await Purgatory.getInstance() - // if purgatory is disabled just return false - const updatedDDO = await this.updatePurgatoryStateDdo(ddo, from, purgatory) - if (updatedDDO.purgatory.state === false) { - // TODO: insert in a different collection for purgatory DDOs - const saveDDO = this.createOrUpdateDDO(ddo, eventName) - return saveDDO - } - } catch (error) { - const { ddoState } = await getDatabase() - await ddoState.update( - this.networkId, - did, - event.address, - event.transactionHash, - false, - error.message - ) - INDEXER_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `Error processMetadataEvents: ${error}`, - true - ) - } - } - - async processDDO(ddo: any) { - if (isRemoteDDO(ddo)) { - INDEXER_LOGGER.logMessage('DDO is remote', true) - - const storage = Storage.getStorageClass(ddo.remote, await getConfiguration()) - const result = await storage.getReadableStream() - const streamToStringDDO = await streamToString(result.stream as Readable) - - return JSON.parse(streamToStringDDO) - } - - return ddo - } +function getEventProcessor(eventType: string, chainId: number): BaseEventProcessor { + const cacheKey = `${eventType}-${chainId}` - async updatePurgatoryStateDdo( - ddo: any, - owner: string, - purgatory: Purgatory - ): Promise { - if (purgatory.isEnabled()) { - const state: boolean = - (await purgatory.isBannedAsset(ddo.id)) || - (await purgatory.isBannedAccount(owner)) - ddo.purgatory = { - state - } - } else { - ddo.purgatory = { - state: false - } + if (!processorInstances.has(cacheKey)) { + const ProcessorClass = EVENT_PROCESSOR_MAP[eventType] + if (!ProcessorClass) { + throw new Error(`No processor found for event type: ${eventType}`) } - return ddo + processorInstances.set(cacheKey, new ProcessorClass(chainId)) } - isUpdateable(previousDdo: any, txHash: string, block: number): [boolean, string] { - let errorMsg: string - const ddoTxId = previousDdo.event.tx - // do not update if we have the same txid - if (txHash === ddoTxId) { - errorMsg = `Previous DDO has the same tx id, no need to update: event-txid=${txHash} <> asset-event-txid=${ddoTxId}` - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_DEBUG, errorMsg, true) - return [false, errorMsg] - } - const ddoBlock = previousDdo.event.block - // do not update if we have the same block - if (block === ddoBlock) { - errorMsg = `Asset was updated later (block: ${ddoBlock}) vs transaction block: ${block}` - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_DEBUG, errorMsg, true) - return [false, errorMsg] - } - - return [true, ''] - } + return processorInstances.get(cacheKey) } -export class MetadataStateEventProcessor extends BaseEventProcessor { - async processEvent( - event: ethers.Log, - chainId: number, - provider: JsonRpcApiProvider - ): Promise { - INDEXER_LOGGER.logMessage(`Processing metadata state event...`, true) - const decodedEventData = await this.getEventData( - provider, - event.transactionHash, - ERC721Template.abi - ) - const metadataState = parseInt(decodedEventData.args[1].toString()) - INDEXER_LOGGER.logMessage(`Processed new metadata state ${metadataState} `, true) - INDEXER_LOGGER.logMessage( - `NFT address in processing MetadataState: ${event.address} `, - true - ) - const did = - 'did:op:' + - createHash('sha256') - .update(getAddress(event.address) + chainId.toString(10)) - .digest('hex') - try { - const { ddo: ddoDatabase } = await getDatabase() - let ddo = await ddoDatabase.retrieve(did) - if (!ddo) { +export const processChunkLogs = async ( + logs: readonly ethers.Log[], + signer: Signer, + provider: JsonRpcApiProvider, + chainId: number +): Promise => { + const storeEvents: BlocksEvents = {} + if (logs.length > 0) { + const { allowedValidators, allowedValidatorsList } = await getConfiguration() // getAllowedValidators() + const checkMetadataValidated = + allowedValidators.length > 0 || + (allowedValidatorsList && Object.keys(allowedValidatorsList).length > 0) + for (const log of logs) { + const event = findEventByKey(log.topics[0]) + if (event && Object.values(EVENTS).includes(event.type)) { + // only log & process the ones we support INDEXER_LOGGER.logMessage( - `Detected MetadataState changed for ${did}, but it does not exists.` + `-- ${event.type} -- triggered for ${log.transactionHash}`, + true ) - return - } - INDEXER_LOGGER.logMessage(`Found did ${did} on network ${chainId}`) - - if ('nft' in ddo && ddo.nft.state !== metadataState) { - let shortVersion = null - if ( - ddo.nft.state === MetadataStates.ACTIVE && - [MetadataStates.REVOKED, MetadataStates.DEPRECATED].includes(metadataState) + event.type === EVENTS.METADATA_CREATED || + event.type === EVENTS.METADATA_UPDATED || + event.type === EVENTS.METADATA_STATE ) { - INDEXER_LOGGER.logMessage( - `DDO became non-visible from ${ddo.nft.state} to ${metadataState}` - ) - shortVersion = { - id: ddo.id, - chainId, - nftAddress: ddo.nftAddress, - nft: { - state: metadataState + // ref: https://github.com/oceanprotocol/ocean-node/issues/257 + if (checkMetadataValidated) { + const txReceipt = await provider.getTransactionReceipt(log.transactionHash) + const metadataProofs = fetchEventFromTransaction( + txReceipt, + 'MetadataValidated', + new Interface(ERC20Template.abi) + ) + if (!metadataProofs) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Metadata Proof validator not allowed`, + true + ) + continue + // do not process this one } - } - } - - // We should keep it here, because in further development we'll store - // the previous structure of the non-visible DDOs (full version) - // in case their state changes back to active. - ddo.nft.state = metadataState - if (shortVersion) { - ddo = shortVersion + const validators: string[] = metadataProofs.map((metadataProof) => + getAddress(metadataProof.args[0].toString()) + ) + // ALLOWED_VALIDATORS CHECK + const allowed = allowedValidators.filter( + (allowedValidator) => validators.indexOf(allowedValidator) !== -1 + ) + if (!allowed.length) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Metadata Proof validators list is empty. Block/event for tx ${log.transactionHash} was NOT processed due to no allowed validators.`, + true + ) + continue + // do not process this one + } + // ALLOWED_VALIDATORS_LIST + // by default it is OK + let isAllowed = true + if (allowedValidatorsList && validators.length > 0) { + // need to check then + isAllowed = false + // check accessList + const chainsListed = Object.keys(allowedValidatorsList) + const chain = String(chainId) + // check the access lists for this chain + if (chainsListed.length > 0 && chainsListed.includes(chain)) { + for (const accessListAddress of allowedValidatorsList[chain]) { + // instantiate contract and check balanceOf + const accessListContract = new ethers.Contract( + accessListAddress, + AccessListContract.abi, + signer + ) + for (const metaproofValidator of validators) { + // if has at least 1 token than it is authorized + // its enough one validator on the list + const balance = await accessListContract.balanceOf(metaproofValidator) + if (Number(balance) <= 0) { + INDEXER_LOGGER.error( + `Metadata validator: ${metaproofValidator} is NOT part of the access list group: ${accessListAddress}.` + ) + } else { + isAllowed = true + break + } + } + } + } else { + isAllowed = true // no rules for this specific chain, so ignore this + } + // move on to the next (do not process this event) + if (isAllowed === false) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Block/event for tx ${log.transactionHash} was NOT processed because none of the metadata validators are part of the access list group(s) for chain ${chainId}.`, + true + ) + continue + } + } // end if (allowedValidatorsList) { + } // end if if (checkMetadataValidated) { } - } else { - // Still update until we validate and polish schemas for DDO. - // But it should update ONLY if the first condition is met. - // Check https://github.com/oceanprotocol/aquarius/blob/84a560ea972485e46dd3c2cfc3cdb298b65d18fa/aquarius/events/processors.py#L663 - ddo.nft = { - state: metadataState + if (event.type === EVENTS.TOKEN_URI_UPDATE) { + storeEvents[event.type] = 'TOKEN_URI_UPDATE' + } else { + const processor = getEventProcessor(event.type, chainId) + storeEvents[event.type] = await processor.processEvent( + log, + chainId, + signer, + provider, + event.type + ) } } - INDEXER_LOGGER.logMessage( - `Found did ${did} for state updating on network ${chainId}` - ) - const savedDDO = this.createOrUpdateDDO(ddo, EVENTS.METADATA_STATE) - return savedDDO - } catch (err) { - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) } + return storeEvents } -} -export class OrderStartedEventProcessor extends BaseEventProcessor { - async processEvent( - event: ethers.Log, - chainId: number, - signer: Signer, - provider: JsonRpcApiProvider - ): Promise { - const decodedEventData = await this.getEventData( - provider, - event.transactionHash, - ERC20Template.abi - ) - const serviceIndex = parseInt(decodedEventData.args[3].toString()) - const timestamp = parseInt(decodedEventData.args[4].toString()) - const consumer = decodedEventData.args[0].toString() - const payer = decodedEventData.args[1].toString() - INDEXER_LOGGER.logMessage( - `Processed new order for service index ${serviceIndex} at ${timestamp}`, - true - ) - const datatokenContract = getDtContract(signer, event.address) - - const nftAddress = await datatokenContract.getERC721Address() - const did = - 'did:op:' + - createHash('sha256') - .update(getAddress(nftAddress) + chainId.toString(10)) - .digest('hex') - try { - const { ddo: ddoDatabase, order: orderDatabase } = await getDatabase() - const ddo = await ddoDatabase.retrieve(did) - if (!ddo) { - INDEXER_LOGGER.logMessage( - `Detected OrderStarted changed for ${did}, but it does not exists.` - ) - return - } - if ( - 'stats' in ddo && - ddo.services[serviceIndex].datatokenAddress?.toLowerCase() === - event.address?.toLowerCase() - ) { - ddo.stats.orders += 1 - } else { - // Still update until we validate and polish schemas for DDO. - // But it should update ONLY if first condition is met. - ddo.stats = { - orders: 1 - } - } - await orderDatabase.create( - event.transactionHash, - 'startOrder', - timestamp, - consumer, - payer, - ddo.services[serviceIndex].datatokenAddress, - nftAddress, - did - ) - INDEXER_LOGGER.logMessage( - `Found did ${did} for order starting on network ${chainId}` - ) - const savedDDO = this.createOrUpdateDDO(ddo, EVENTS.ORDER_STARTED) - return savedDDO - } catch (err) { - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) - } - } + return {} } -export class OrderReusedEventProcessor extends BaseEventProcessor { - async processEvent( - event: ethers.Log, - chainId: number, - signer: Signer, - provider: JsonRpcApiProvider - ): Promise { - const decodedEventData = await this.getEventData( - provider, - event.transactionHash, - ERC20Template.abi - ) - const startOrderId = decodedEventData.args[0].toString() - const timestamp = parseInt(decodedEventData.args[2].toString()) - const payer = decodedEventData.args[1].toString() - INDEXER_LOGGER.logMessage(`Processed reused order at ${timestamp}`, true) - - const datatokenContract = getDtContract(signer, event.address) - - const nftAddress = await datatokenContract.getERC721Address() - const did = - 'did:op:' + - createHash('sha256') - .update(getAddress(nftAddress) + chainId.toString(10)) - .digest('hex') - try { - const { ddo: ddoDatabase, order: orderDatabase } = await getDatabase() - const ddo = await ddoDatabase.retrieve(did) - if (!ddo) { - INDEXER_LOGGER.logMessage( - `Detected OrderReused changed for ${did}, but it does not exists.` - ) - return - } - ddo.stats.orders += 1 - - try { - const startOrder = await orderDatabase.retrieve(startOrderId) - if (!startOrder) { - INDEXER_LOGGER.logMessage( - `Detected OrderReused changed for order ${startOrderId}, but it does not exists.` - ) - return - } - await orderDatabase.create( - event.transactionHash, - 'reuseOrder', - timestamp, - startOrder.consumer, - payer, - ddo.services[0].datatokenAddress, - nftAddress, - did, - startOrderId - ) - } catch (error) { - INDEXER_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `Error retrieving startOrder for reuseOrder: ${error}`, - true - ) - } - - const savedDDO = this.createOrUpdateDDO(ddo, EVENTS.ORDER_REUSED) - return savedDDO - } catch (err) { - INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) +export const processBlocks = async ( + blockLogs: ethers.Log[], + signer: Signer, + provider: JsonRpcApiProvider, + network: number, + lastIndexedBlock: number, + count: number +): Promise => { + try { + const events: any[] | BlocksEvents = + blockLogs && blockLogs.length > 0 + ? await processChunkLogs(blockLogs, signer, provider, network) + : [] + return { + lastBlock: lastIndexedBlock + count, + foundEvents: events } + } catch (error) { + throw new Error(`Error processing chunk of blocks events ${error.message}`) } } diff --git a/src/components/Indexer/processors/BaseProcessor.ts b/src/components/Indexer/processors/BaseProcessor.ts new file mode 100644 index 000000000..3a9a5cf08 --- /dev/null +++ b/src/components/Indexer/processors/BaseProcessor.ts @@ -0,0 +1,506 @@ +import { VersionedDDO, DeprecatedDDO } from '@oceanprotocol/ddo-js' +import axios from 'axios' +import { + ZeroAddress, + Signer, + ethers, + JsonRpcApiProvider, + Interface, + toUtf8Bytes, + hexlify, + getBytes, + toUtf8String, + getAddress +} from 'ethers' +import { Readable } from 'winston-transport' +import { DecryptDDOCommand } from '../../../@types/commands.js' +import { OceanNode } from '../../../OceanNode.js' +import { EVENT_HASHES, PROTOCOL_COMMANDS } from '../../../utils/constants.js' +import { timestampToDateTime } from '../../../utils/conversions.js' +import { getConfiguration } from '../../../utils/config.js' +import { create256Hash } from '../../../utils/crypt.js' +import { getDatabase } from '../../../utils/database.js' +import { CORE_LOGGER, INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { URLUtils } from '../../../utils/url.js' +import { streamToString } from '../../../utils/util.js' +import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } +import { toString as uint8ArrayToString } from 'uint8arrays/to-string' +import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' assert { type: 'json' } +import { fetchTransactionReceipt } from '../../core/utils/validateOrders.js' +import { withRetrial } from '../utils.js' +import { AbstractDdoDatabase } from '../../database/BaseDatabase.js' +import { createHash } from 'crypto' + +export abstract class BaseEventProcessor { + protected networkId: number + + constructor(chainId: number) { + this.networkId = chainId + } + + protected isValidDtAddressFromServices(services: any[]): boolean { + for (const service of services) { + if ( + service.datatokenAddress === '0x0' || + service.datatokenAddress === ZeroAddress + ) { + return false + } + } + return true + } + + protected async getTokenInfo(services: any[], signer: Signer): Promise { + const datatokens: any[] = [] + + for (const service of services) { + const datatoken = new ethers.Contract( + service.datatokenAddress, + ERC20Template.abi, + signer + ) + let name: string + let symbol: string + if ( + service.datatokenAddress === '0x0' || + service.datatokenAddress === ZeroAddress + ) { + name = `Datatoken${services.indexOf(service)}` + symbol = `DT${services.indexOf(service)}` + } else { + name = await datatoken.name() + INDEXER_LOGGER.logMessage(`name.datatoken: ${name}`) + symbol = await datatoken.symbol() + INDEXER_LOGGER.logMessage(`symbol.datatoken: ${symbol}`) + } + + datatokens.push({ + address: service.datatokenAddress, + name, + symbol, + serviceId: service.id + }) + } + + return datatokens + } + + protected async getEventData( + provider: JsonRpcApiProvider, + transactionHash: string, + abi: any, + eventType: string + ): Promise { + const iface = new Interface(abi) + let receipt: ethers.TransactionReceipt + try { + receipt = await fetchTransactionReceipt(transactionHash, provider) + } catch (e) { + INDEXER_LOGGER.error(`Error retrieving receipt: ${e.message}`) + } + if (receipt) { + let eventHash: string + for (const [key, value] of Object.entries(EVENT_HASHES)) { + if (value.type === eventType) { + eventHash = key + break + } + } + if (eventHash === '') { + INDEXER_LOGGER.error(`Event hash couldn't be found!`) + return null + } + + let eventObj: any + for (const log of receipt.logs) { + if (log.topics[0] === eventHash) { + eventObj = { + topics: log.topics, + data: log.data + } + break + } + } + + if (!eventObj) { + INDEXER_LOGGER.error( + `Event object couldn't be retrieved! Event hash not present in logs topics` + ) + return null + } + + return iface.parseLog(eventObj) + } else { + INDEXER_LOGGER.error('Receipt could not be fetched') + } + } + + protected async getNFTInfo( + nftAddress: string, + signer: Signer, + owner: string, + timestamp: number + ): Promise { + const nftContract = new ethers.Contract(nftAddress, ERC721Template.abi, signer) + const state = parseInt((await nftContract.getMetaData())[2]) + CORE_LOGGER.info(`NFT state: ${state}`) + const id = parseInt(await nftContract.getId()) + const tokenURI = await nftContract.tokenURI(id) + return { + state, + address: nftAddress, + name: await nftContract.name(), + symbol: await nftContract.symbol(), + owner, + created: timestampToDateTime(timestamp), + tokenURI + } + } + + protected async createOrUpdateDDO(ddo: VersionedDDO, method: string): Promise { + try { + const { ddo: ddoDatabase, ddoState } = await getDatabase() + if (ddo instanceof DeprecatedDDO) { + const { id, nftAddress } = ddo.getDDOFields() + await Promise.all([ddoDatabase.delete(id), ddoState.delete(id)]) + const saveDDO = await ddoDatabase.create(ddo.getDDOData()) + await ddoState.create(this.networkId, saveDDO.id, nftAddress, undefined, true) + + return saveDDO + } + const saveDDO = await ddoDatabase.update({ ...ddo.getDDOData() }) + await ddoState.update( + this.networkId, + saveDDO.id, + saveDDO.nftAddress, + saveDDO.indexedMetadata?.event?.tx, + true + ) + INDEXER_LOGGER.logMessage( + `Saved or updated DDO : ${saveDDO.id} from network: ${this.networkId} triggered by: ${method}` + ) + return saveDDO + } catch (err) { + const { ddoState } = await getDatabase() + const { id, nftAddress } = ddo.getDDOFields() + const tx = + ddo instanceof DeprecatedDDO + ? undefined + : ddo.getAssetFields().indexedMetadata?.event?.txid + + await ddoState.update(this.networkId, id, nftAddress, tx, true, err.message) + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Error found on ${this.networkId} triggered by: ${method} while creating or updating DDO: ${err}`, + true + ) + } + } + + protected checkDdoHash(decryptedDocument: any, documentHashFromContract: any): boolean { + const utf8Bytes = toUtf8Bytes(JSON.stringify(decryptedDocument)) + const expectedMetadata = hexlify(utf8Bytes) + if (create256Hash(expectedMetadata.toString()) !== documentHashFromContract) { + INDEXER_LOGGER.error(`DDO checksum does not match.`) + return false + } + return true + } + + protected async getDDO( + ddoDatabase: AbstractDdoDatabase, + nftAddress: string, + chainId: number + ): Promise { + const did = + 'did:op:' + + createHash('sha256') + .update(getAddress(nftAddress) + chainId.toString(10)) + .digest('hex') + const didOpe = + 'did:ope:' + + createHash('sha256') + .update(getAddress(nftAddress) + chainId.toString(10)) + .digest('hex') + + let ddo = await ddoDatabase.retrieve(did) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected OrderStarted changed for ${did}, but it does not exists, try with ddo:ope.` + ) + ddo = await ddoDatabase.retrieve(didOpe) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected OrderStarted changed for ${didOpe}, but it does not exists.` + ) + } + } + return ddo + } + + protected async decryptDDO( + decryptorURL: string, + flag: string, + eventCreator: string, + contractAddress: string, + chainId: number, + txId: string, + metadataHash: string, + metadata: any + ): Promise { + let ddo + // Log the flag value + INDEXER_LOGGER.logMessage(`decryptDDO: flag=${flag}`) + if ((parseInt(flag) & 2) !== 0) { + INDEXER_LOGGER.logMessage( + `Decrypting DDO from network: ${this.networkId} created by: ${eventCreator} encrypted by: ${decryptorURL}` + ) + const config = await getConfiguration() + const { keys } = config + let nonce: string + try { + if (URLUtils.isValidUrl(decryptorURL)) { + INDEXER_LOGGER.logMessage( + `decryptDDO: Making HTTP request for nonce. DecryptorURL: ${decryptorURL}` + ) + const nonceResponse = await axios.get( + `${decryptorURL}/api/services/nonce?userAddress=${keys.ethAddress}`, + { timeout: 20000 } + ) + nonce = + nonceResponse.status === 200 && nonceResponse.data + ? String(parseInt(nonceResponse.data.nonce) + 1) + : Date.now().toString() + } else { + nonce = Date.now().toString() + } + } catch (err) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `decryptDDO: Error getting nonce, using timestamp: ${err.message}` + ) + nonce = Date.now().toString() + } + const nodeId = keys.peerId.toString() + + const wallet: ethers.Wallet = new ethers.Wallet(process.env.PRIVATE_KEY as string) + + const useTxIdOrContractAddress = txId || contractAddress + const message = String( + useTxIdOrContractAddress + keys.ethAddress + chainId.toString() + nonce + ) + + const messageHash = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + + const messageHashBytes = ethers.getBytes(messageHash) + const signature = await wallet.signMessage(messageHashBytes) + + const recoveredAddress = ethers.verifyMessage(messageHashBytes, signature) + INDEXER_LOGGER.logMessage( + `decryptDDO: recovered address: ${recoveredAddress}, expected: ${keys.ethAddress}` + ) + + if (URLUtils.isValidUrl(decryptorURL)) { + try { + const payload = { + transactionId: txId, + chainId, + decrypterAddress: keys.ethAddress, + dataNftAddress: contractAddress, + signature, + nonce + } + const response = await withRetrial(async () => { + try { + const res = await axios({ + method: 'post', + url: `${decryptorURL}/api/services/decrypt`, + data: payload, + timeout: 30000 + }) + + if (res.status !== 200 && res.status !== 201) { + const message = `bProvider exception on decrypt DDO. Status: ${res.status}, ${res.statusText}` + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, message) + throw new Error(message) // do NOT retry + } + return res + } catch (err: any) { + // Retry ONLY on ECONNREFUSED + if ( + err.code === 'ECONNREFUSED' || + (err.message && err.message.includes('ECONNREFUSED')) + ) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Decrypt request failed with ECONNREFUSED, retrying...`, + true + ) + throw err + } + + throw err + } + }) + + let responseHash + if (response.data instanceof Object) { + responseHash = create256Hash(JSON.stringify(response.data)) + ddo = response.data + } else { + ddo = JSON.parse(response.data) + responseHash = create256Hash(ddo) + } + if (responseHash !== metadataHash) { + const msg = `Hash check failed: response=${ddo}, decrypted ddo hash=${responseHash}\n metadata hash=${metadataHash}` + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, msg) + throw new Error(msg) + } + } catch (err) { + CORE_LOGGER.error(`Error on decrypting DDO: ${JSON.stringify(err)}`) + const message = `Provider exception on decrypt DDO. Status: ${err.message}` + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, message) + throw new Error(message) + } + } else { + const node = OceanNode.getInstance(config, await getDatabase()) + if (nodeId === decryptorURL) { + const decryptDDOTask: DecryptDDOCommand = { + command: PROTOCOL_COMMANDS.DECRYPT_DDO, + transactionId: txId, + decrypterAddress: keys.ethAddress, + chainId, + encryptedDocument: metadata, + documentHash: metadataHash, + dataNftAddress: contractAddress, + signature, + nonce + } + try { + const response = await node + .getCoreHandlers() + .getHandler(PROTOCOL_COMMANDS.DECRYPT_DDO) + .handle(decryptDDOTask) + ddo = JSON.parse(await streamToString(response.stream as Readable)) + } catch (error) { + const message = `Node exception on decrypt DDO. Status: ${error.message}` + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, message) + throw new Error(message) + } + } else { + try { + const p2pNode = await node.getP2PNode() + let isBinaryContent = false + const sink = async function (source: any) { + let first = true + for await (const chunk of source) { + if (first) { + first = false + try { + const str = uint8ArrayToString(chunk.subarray()) // Obs: we need to specify the length of the subarrays + const decoded = JSON.parse(str) + if ('headers' in decoded) { + if (str?.toLowerCase().includes('application/octet-stream')) { + isBinaryContent = true + } + } + if (decoded.httpStatus !== 200) { + INDEXER_LOGGER.logMessage( + `Error in sink method : ${decoded.httpStatus} errro: ${decoded.error}` + ) + throw new Error('Error in sink method', decoded.error) + } + } catch (e) { + INDEXER_LOGGER.logMessage( + `Error in sink method } error: ${e.message}` + ) + throw new Error(`Error in sink method ${e.message}`) + } + } else { + if (isBinaryContent) { + return chunk.subarray() + } else { + const str = uint8ArrayToString(chunk.subarray()) + return str + } + } + } + } + const message = { + command: PROTOCOL_COMMANDS.DECRYPT_DDO, + transactionId: txId, + decrypterAddress: keys.ethAddress, + chainId, + encryptedDocument: metadata, + documentHash: metadataHash, + dataNftAddress: contractAddress, + signature, + nonce + } + const response = await p2pNode.sendTo( + decryptorURL, + JSON.stringify(message), + sink + ) + ddo = JSON.parse(await streamToString(response.stream as Readable)) + } catch (error) { + const message = `Node exception on decrypt DDO. Status: ${error.message}` + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, message) + throw new Error(message) + } + } + } + } else { + INDEXER_LOGGER.logMessage( + `Decompressing DDO from network: ${this.networkId} created by: ${eventCreator} ecnrypted by: ${decryptorURL}` + ) + const byteArray = getBytes(metadata) + const utf8String = toUtf8String(byteArray) + ddo = JSON.parse(utf8String) + } + + return ddo + } + + protected decryptDDOIPFS( + decryptorURL: string, + eventCreator: string, + metadata: any + ): Promise { + INDEXER_LOGGER.logMessage( + `Decompressing DDO from network: ${this.networkId} created by: ${eventCreator} ecnrypted by: ${decryptorURL}` + ) + const byteArray = getBytes(metadata) + const utf8String = toUtf8String(byteArray) + const proof = JSON.parse(utf8String) + return proof + } + + protected getDataFromProof( + proof: any + ): { header: any; ddoObj: Record; signature: string } | null { + INDEXER_LOGGER.logMessage(`Decompressing JWT`) + const data = proof.split('.') + if (data.length > 2) { + const header = JSON.parse(Buffer.from(data[0], 'base64').toString('utf-8')) + let ddoObj = JSON.parse(Buffer.from(data[1], 'base64').toString('utf-8')) + if (ddoObj.vc) ddoObj = ddoObj.vc + const signature = data[2] + + return { header, ddoObj, signature } + } + return null + } + + public abstract processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider, + eventName?: string + ): Promise +} diff --git a/src/components/Indexer/processors/DispenserActivatedEventProcessor.ts b/src/components/Indexer/processors/DispenserActivatedEventProcessor.ts new file mode 100644 index 000000000..e10055e16 --- /dev/null +++ b/src/components/Indexer/processors/DispenserActivatedEventProcessor.ts @@ -0,0 +1,119 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider, ZeroAddress } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { + getDtContract, + getDid, + doesDispenserAlreadyExist, + findServiceIdByDatatoken, + getPricesByDt, + isValidDispenserContract +} from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import Dispenser from '@oceanprotocol/contracts/artifacts/contracts/pools/dispenser/Dispenser.sol/Dispenser.json' assert { type: 'json' } + +export class DispenserActivatedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + Dispenser.abi, + EVENTS.DISPENSER_ACTIVATED + ) + const datatokenAddress = decodedEventData.args[0].toString() + if (!datatokenAddress) { + INDEXER_LOGGER.error( + `Datatoken address is not found in decoded event. Decoded event: ${JSON.stringify( + decodedEventData + )}` + ) + return null + } + if (datatokenAddress === ZeroAddress) { + INDEXER_LOGGER.error( + `Datatoken address is ZERO ADDRESS. Cannot find DDO by ZERO ADDRESS contract.` + ) + return null + } + const datatokenContract = getDtContract(signer, datatokenAddress) + + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + try { + const { ddo: ddoDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, nftAddress, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected DispenserActivated changed for ${did}, but it does not exists.` + ) + return + } + if (!(await isValidDispenserContract(event.address, chainId, signer))) { + INDEXER_LOGGER.warn( + `Dispenser contract ${event.address} is not approved by Router. + Abort updating DDO pricing! Returning the existing DDO...` + ) + return ddo + } + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getAssetFields().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + + if (!Array.isArray(ddoInstance.getAssetFields().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + + if (ddoInstance.getAssetFields().indexedMetadata.stats.length !== 0) { + for (const stat of ddoInstance.getAssetFields().indexedMetadata.stats) { + if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + !doesDispenserAlreadyExist(event.address, stat.prices)[0] + ) { + stat.prices.push({ + type: 'dispenser', + price: '0', + contract: event.address, + token: datatokenAddress + }) + break + } else if (doesDispenserAlreadyExist(event.address, stat.prices)[0]) { + break + } + } + } else { + INDEXER_LOGGER.logMessage(`[DispenserActivated] - No stats were found on the ddo`) + const serviceIdToFind = findServiceIdByDatatoken(ddoInstance, datatokenAddress) + if (!serviceIdToFind) { + INDEXER_LOGGER.logMessage( + `[DispenserActivated] - This datatoken does not contain this service. Invalid service id!` + ) + return + } + ddo.indexedMetadata.stats.push({ + datatokenAddress, + name: await datatokenContract.name(), + serviceId: serviceIdToFind, + orders: 0, + prices: await getPricesByDt(datatokenContract, signer) + }) + } + + const savedDDO = await this.createOrUpdateDDO( + ddoInstance, + EVENTS.DISPENSER_ACTIVATED + ) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/DispenserCreatedEventProcessor.ts b/src/components/Indexer/processors/DispenserCreatedEventProcessor.ts new file mode 100644 index 000000000..643615705 --- /dev/null +++ b/src/components/Indexer/processors/DispenserCreatedEventProcessor.ts @@ -0,0 +1,121 @@ +import { DDOManager, PriceType } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider, ZeroAddress } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { + getDtContract, + getDid, + doesDispenserAlreadyExist, + findServiceIdByDatatoken, + getPricesByDt, + isValidDispenserContract +} from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import Dispenser from '@oceanprotocol/contracts/artifacts/contracts/pools/dispenser/Dispenser.sol/Dispenser.json' assert { type: 'json' } + +export class DispenserCreatedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + Dispenser.abi, + EVENTS.DISPENSER_CREATED + ) + const datatokenAddress = decodedEventData.args[0].toString() + if (!datatokenAddress) { + INDEXER_LOGGER.error( + `Datatoken address is not found in decoded event. Decoded event: ${JSON.stringify( + decodedEventData + )}` + ) + return null + } + if (datatokenAddress === ZeroAddress) { + INDEXER_LOGGER.error( + `Datatoken address is ZERO ADDRESS. Cannot find DDO by ZERO ADDRESS contract.` + ) + return null + } + const datatokenContract = getDtContract(signer, datatokenAddress) + + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + try { + const { ddo: ddoDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, nftAddress, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected DispenserCreated changed for ${did}, but it does not exists.` + ) + return + } + if (!(await isValidDispenserContract(event.address, chainId, signer))) { + INDEXER_LOGGER.warn( + `Dispenser contract ${event.address} is not approved by Router. + Abort updating DDO pricing! Returning the existing DDO...` + ) + return ddo + } + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getAssetFields().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + + if (!Array.isArray(ddoInstance.getAssetFields().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + + if (ddoInstance.getAssetFields().indexedMetadata.stats.length !== 0) { + for (const stat of ddoInstance.getAssetFields().indexedMetadata.stats) { + if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + !doesDispenserAlreadyExist(event.address, stat.prices)[0] + ) { + const price = { + type: 'dispenser' as PriceType, + price: '0', + contract: event.address, + token: datatokenAddress + } + stat.prices.push(price) + break + } else if (doesDispenserAlreadyExist(event.address, stat.prices)[0]) { + break + } + } + } else { + INDEXER_LOGGER.logMessage(`[DispenserCreated] - No stats were found on the ddo`) + const serviceIdToFind = findServiceIdByDatatoken(ddoInstance, datatokenAddress) + if (!serviceIdToFind) { + INDEXER_LOGGER.logMessage( + `[DispenserCreated] - This datatoken does not contain this service. Invalid service id!` + ) + return + } + const { stats } = ddoInstance.getAssetFields().indexedMetadata + stats.push({ + datatokenAddress, + name: await datatokenContract.name(), + symbol: await datatokenContract.symbol(), + serviceId: serviceIdToFind, + orders: 0, + prices: await getPricesByDt(datatokenContract, signer) + }) + + ddoInstance.updateFields({ indexedMetadata: { stats } }) + } + + const savedDDO = await this.createOrUpdateDDO(ddoInstance, EVENTS.DISPENSER_CREATED) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/DispenserDeactivatedEventProcessor.ts b/src/components/Indexer/processors/DispenserDeactivatedEventProcessor.ts new file mode 100644 index 000000000..b99b15455 --- /dev/null +++ b/src/components/Indexer/processors/DispenserDeactivatedEventProcessor.ts @@ -0,0 +1,128 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider, ZeroAddress } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { + getDtContract, + getDid, + doesDispenserAlreadyExist, + findServiceIdByDatatoken, + getPricesByDt, + isValidDispenserContract +} from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import Dispenser from '@oceanprotocol/contracts/artifacts/contracts/pools/dispenser/Dispenser.sol/Dispenser.json' assert { type: 'json' } + +export class DispenserDeactivatedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + Dispenser.abi, + EVENTS.DISPENSER_DEACTIVATED + ) + const datatokenAddress = decodedEventData.args[0].toString() + if (!datatokenAddress) { + INDEXER_LOGGER.error( + `Datatoken address is not found in decoded event. Decoded event: ${JSON.stringify( + decodedEventData + )}` + ) + return null + } + if (datatokenAddress === ZeroAddress) { + INDEXER_LOGGER.error( + `Datatoken address is ZERO ADDRESS. Cannot find DDO by ZERO ADDRESS contract.` + ) + return null + } + const datatokenContract = getDtContract(signer, datatokenAddress) + + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + try { + const { ddo: ddoDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, nftAddress, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected DispenserDeactivated changed for ${did}, but it does not exists.` + ) + return + } + if (!(await isValidDispenserContract(event.address, chainId, signer))) { + INDEXER_LOGGER.warn( + `Dispenser contract ${event.address} is not approved by Router. + Abort updating DDO pricing! Returning the existing DDO...` + ) + return ddo + } + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getAssetFields().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + + if (!Array.isArray(ddoInstance.getAssetFields().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + + if (ddoInstance.getAssetFields().indexedMetadata.stats.length !== 0) { + for (const stat of ddoInstance.getAssetFields().indexedMetadata.stats) { + if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + doesDispenserAlreadyExist(event.address, stat.prices)[0] + ) { + const price = doesDispenserAlreadyExist(event.address, stat.prices)[1] + const index = stat.prices.indexOf(price) + stat.prices.splice(index, 1) + break + } else if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + !doesDispenserAlreadyExist(event.address, stat.prices)[0] + ) { + INDEXER_LOGGER.logMessage( + `Detected DispenserDeactivated changed for ${event.address}, but dispenser does not exist in the DDO pricing.` + ) + break + } + } + } else { + INDEXER_LOGGER.logMessage( + `[DispenserDeactivated] - No stats were found on the ddo` + ) + const serviceIdToFind = findServiceIdByDatatoken(ddoInstance, datatokenAddress) + if (!serviceIdToFind) { + INDEXER_LOGGER.logMessage( + `[DispenserDeactivated] - This datatoken does not contain this service. Invalid service id!` + ) + return + } + const { stats } = ddoInstance.getAssetFields().indexedMetadata + stats.push({ + datatokenAddress, + name: await datatokenContract.name(), + symbol: await datatokenContract.symbol(), + serviceId: serviceIdToFind, + orders: 0, + prices: await getPricesByDt(datatokenContract, signer) + }) + + ddoInstance.updateFields({ indexedMetadata: { stats } }) + } + + const savedDDO = await this.createOrUpdateDDO( + ddoInstance, + EVENTS.DISPENSER_DEACTIVATED + ) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/ExchangeActivatedEventProcessor.ts b/src/components/Indexer/processors/ExchangeActivatedEventProcessor.ts new file mode 100644 index 000000000..64a3c5bdd --- /dev/null +++ b/src/components/Indexer/processors/ExchangeActivatedEventProcessor.ts @@ -0,0 +1,127 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider, ZeroAddress } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { + getDtContract, + getDid, + doesFreAlreadyExist, + findServiceIdByDatatoken, + getPricesByDt, + isValidFreContract +} from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import FixedRateExchange from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json' assert { type: 'json' } + +export class ExchangeActivatedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + try { + if (!(await isValidFreContract(event.address, chainId, signer))) { + INDEXER_LOGGER.error( + `Fixed Rate Exhange contract ${event.address} is not approved by Router. Abort updating DDO pricing!` + ) + return null + } + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + FixedRateExchange.abi, + EVENTS.EXCHANGE_ACTIVATED + ) + INDEXER_LOGGER.logMessage(`event: ${JSON.stringify(event)}`) + INDEXER_LOGGER.logMessage( + `decodedEventData in exchange activated: ${JSON.stringify(decodedEventData)}` + ) + const exchangeId = decodedEventData.args[0].toString() + const freContract = new ethers.Contract( + event.address, + FixedRateExchange.abi, + signer + ) + const exchange = await freContract.getExchange(exchangeId) + + const datatokenAddress = exchange[1] + if (datatokenAddress === ZeroAddress) { + INDEXER_LOGGER.error( + `Datatoken address is ZERO ADDRESS. Cannot find DDO by ZERO ADDRESS contract.` + ) + return null + } + const datatokenContract = getDtContract(signer, datatokenAddress) + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + + const { ddo: ddoDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, nftAddress, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected ExchangeActivated changed for ${did}, but it does not exists.` + ) + return null + } + + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getAssetFields().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + + if (!Array.isArray(ddoInstance.getAssetFields().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + if (ddoInstance.getAssetFields().indexedMetadata.stats.length !== 0) { + for (const stat of ddoInstance.getAssetFields().indexedMetadata.stats) { + if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + !doesFreAlreadyExist(exchangeId, stat.prices)[0] + ) { + stat.prices.push({ + type: 'fixedrate', + price: ethers.formatEther(exchange[5]), + contract: event.address, + token: exchange[3], + exchangeId + }) + break + } else if (doesFreAlreadyExist(event.address, stat.prices)[0]) { + break + } + } + } else { + INDEXER_LOGGER.logMessage(`[ExchangeActivated] - No stats were found on the ddo`) + const serviceIdToFind = findServiceIdByDatatoken(ddoInstance, datatokenAddress) + if (!serviceIdToFind) { + INDEXER_LOGGER.logMessage( + `[ExchangeActivated] - This datatoken does not contain this service. Invalid service id!` + ) + return null + } + const { stats } = ddoInstance.getAssetFields().indexedMetadata + stats.push({ + datatokenAddress, + name: await datatokenContract.name(), + symbol: await datatokenContract.symbol(), + serviceId: serviceIdToFind, + orders: 0, + prices: await getPricesByDt(datatokenContract, signer) + }) + + ddoInstance.updateFields({ indexedMetadata: { stats } }) + } + + const savedDDO = await this.createOrUpdateDDO( + ddoInstance, + EVENTS.EXCHANGE_ACTIVATED + ) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/ExchangeCreatedEventProcessor.ts b/src/components/Indexer/processors/ExchangeCreatedEventProcessor.ts new file mode 100644 index 000000000..d13e81c2b --- /dev/null +++ b/src/components/Indexer/processors/ExchangeCreatedEventProcessor.ts @@ -0,0 +1,122 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider, ZeroAddress } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { + getDtContract, + getDid, + doesFreAlreadyExist, + findServiceIdByDatatoken, + getPricesByDt, + isValidFreContract +} from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import FixedRateExchange from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json' assert { type: 'json' } + +export class ExchangeCreatedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + try { + if (!(await isValidFreContract(event.address, chainId, signer))) { + INDEXER_LOGGER.error( + `Fixed Rate Exhange contract ${event.address} is not approved by Router. Abort updating DDO pricing!` + ) + return null + } + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + FixedRateExchange.abi, + EVENTS.EXCHANGE_CREATED + ) + const exchangeId = decodedEventData.args[0].toString() + const freContract = new ethers.Contract( + event.address, + FixedRateExchange.abi, + signer + ) + const exchange = await freContract.getExchange(exchangeId) + + const datatokenAddress = exchange[1] + if (datatokenAddress === ZeroAddress) { + INDEXER_LOGGER.error( + `Datatoken address is ZERO ADDRESS. Cannot find DDO by ZERO ADDRESS contract.` + ) + return null + } + const datatokenContract = getDtContract(signer, datatokenAddress) + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + + const { ddo: ddoDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, nftAddress, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected ExchangeCreated changed for ${did}, but it does not exists.` + ) + return null + } + + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getAssetFields().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + + if (!Array.isArray(ddoInstance.getAssetFields().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + + if (ddoInstance.getAssetFields().indexedMetadata.stats.length !== 0) { + for (const stat of ddoInstance.getAssetFields().indexedMetadata.stats) { + if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + !doesFreAlreadyExist(exchangeId, stat.prices)[0] + ) { + stat.prices.push({ + type: 'fixedrate', + price: ethers.formatEther(exchange[5]), + contract: event.address, + token: exchange[3], + exchangeId + }) + break + } else if (doesFreAlreadyExist(event.address, stat.prices)[0]) { + break + } + } + } else { + INDEXER_LOGGER.logMessage(`[ExchangeCreated] - No stats were found on the ddo`) + const serviceIdToFind = findServiceIdByDatatoken(ddoInstance, datatokenAddress) + if (!serviceIdToFind) { + INDEXER_LOGGER.logMessage( + `[ExchangeCreated] - This datatoken does not contain this service. Invalid service id!` + ) + return null + } + + const { stats } = ddoInstance.getAssetFields().indexedMetadata + stats.push({ + datatokenAddress, + name: await datatokenContract.name(), + symbol: await datatokenContract.symbol(), + serviceId: serviceIdToFind, + orders: 0, + prices: await getPricesByDt(datatokenContract, signer) + }) + + ddoInstance.updateFields({ indexedMetadata: { stats } }) + } + + const savedDDO = await this.createOrUpdateDDO(ddoInstance, EVENTS.EXCHANGE_CREATED) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/ExchangeDeactivatedEventProcessor.ts b/src/components/Indexer/processors/ExchangeDeactivatedEventProcessor.ts new file mode 100644 index 000000000..e81515bdf --- /dev/null +++ b/src/components/Indexer/processors/ExchangeDeactivatedEventProcessor.ts @@ -0,0 +1,132 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider, ZeroAddress } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { + getDtContract, + getDid, + doesFreAlreadyExist, + findServiceIdByDatatoken, + getPricesByDt, + isValidFreContract +} from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import FixedRateExchange from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json' assert { type: 'json' } + +export class ExchangeDeactivatedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + if (!(await isValidFreContract(event.address, chainId, signer))) { + INDEXER_LOGGER.error( + `Fixed Rate Exhange contract ${event.address} is not approved by Router. Abort updating DDO pricing!` + ) + return null + } + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + FixedRateExchange.abi, + EVENTS.EXCHANGE_DEACTIVATED + ) + const exchangeId = decodedEventData.args[0].toString() + const freContract = new ethers.Contract(event.address, FixedRateExchange.abi, signer) + let exchange + try { + exchange = await freContract.getExchange(exchangeId) + } catch (e) { + INDEXER_LOGGER.error(`Could not fetch exchange details: ${e.message}`) + } + if (!exchange) { + INDEXER_LOGGER.error( + `Exchange not found...Aborting processing exchange created event` + ) + return null + } + const datatokenAddress = exchange[1] + if (datatokenAddress === ZeroAddress) { + INDEXER_LOGGER.error( + `Datatoken address is ZERO ADDRESS. Cannot find DDO by ZERO ADDRESS contract.` + ) + return null + } + const datatokenContract = getDtContract(signer, datatokenAddress) + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + try { + const { ddo: ddoDatabase } = await getDatabase() + const ddo = await ddoDatabase.retrieve(did) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected ExchangeDeactivated changed for ${did}, but it does not exists.` + ) + return null + } + + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getAssetFields().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + + if (!Array.isArray(ddoInstance.getAssetFields().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + if (ddoInstance.getAssetFields().indexedMetadata.stats.length !== 0) { + for (const stat of ddoInstance.getAssetFields().indexedMetadata.stats) { + if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + doesFreAlreadyExist(exchangeId, stat.prices)[0] + ) { + const price = doesFreAlreadyExist(exchangeId, stat.prices)[1] + const index = stat.prices.indexOf(price) + stat.prices.splice(index, 1) + break + } else if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + !doesFreAlreadyExist(exchangeId, stat.prices)[0] + ) { + INDEXER_LOGGER.logMessage( + `Detected ExchangeDeactivated changed for ${event.address}, but exchange ${exchangeId} does not exist in the DDO pricing.` + ) + break + } + } + } else { + INDEXER_LOGGER.logMessage( + `[ExchangeDeactivated] - No stats were found on the ddo` + ) + const serviceIdToFind = findServiceIdByDatatoken(ddoInstance, datatokenAddress) + if (!serviceIdToFind) { + INDEXER_LOGGER.logMessage( + `[ExchangeDeactivated] - This datatoken does not contain this service. Invalid service id!` + ) + return null + } + const { stats } = ddoInstance.getAssetFields().indexedMetadata + stats.push({ + datatokenAddress, + name: await datatokenContract.name(), + symbol: await datatokenContract.symbol(), + serviceId: serviceIdToFind, + orders: 0, + prices: await getPricesByDt(datatokenContract, signer) + }) + + ddoInstance.updateFields({ indexedMetadata: { stats } }) + } + + const savedDDO = await this.createOrUpdateDDO( + ddoInstance, + EVENTS.EXCHANGE_DEACTIVATED + ) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/ExchangeRateChangedEventProcessor.ts b/src/components/Indexer/processors/ExchangeRateChangedEventProcessor.ts new file mode 100644 index 000000000..706d81a0e --- /dev/null +++ b/src/components/Indexer/processors/ExchangeRateChangedEventProcessor.ts @@ -0,0 +1,130 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider, ZeroAddress } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { + getDtContract, + getDid, + doesFreAlreadyExist, + findServiceIdByDatatoken, + getPricesByDt, + isValidFreContract +} from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import FixedRateExchange from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json' assert { type: 'json' } + +export class ExchangeRateChangedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + try { + if (!(await isValidFreContract(event.address, chainId, signer))) { + INDEXER_LOGGER.error( + `Fixed Rate Exhange contract ${event.address} is not approved by Router. Abort updating DDO pricing!` + ) + return null + } + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + FixedRateExchange.abi, + EVENTS.EXCHANGE_RATE_CHANGED + ) + const exchangeId = ethers.toUtf8Bytes(decodedEventData.args[0].toString()) + const newRate = decodedEventData.args[2].toString() + const freContract = new ethers.Contract( + event.address, + FixedRateExchange.abi, + signer + ) + const exchange = await freContract.getExchange(exchangeId) + const datatokenAddress = exchange[1] + if (datatokenAddress === ZeroAddress) { + INDEXER_LOGGER.error( + `Datatoken address is ZERO ADDRESS. Cannot find DDO by ZERO ADDRESS contract.` + ) + return null + } + const datatokenContract = getDtContract(signer, datatokenAddress) + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + + const { ddo: ddoDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, nftAddress, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected ExchangeRateChanged changed for ${did}, but it does not exists.` + ) + return + } + + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getAssetFields().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + + if (!Array.isArray(ddoInstance.getAssetFields().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + if (ddoInstance.getAssetFields().indexedMetadata.stats.length !== 0) { + for (const stat of ddoInstance.getAssetFields().indexedMetadata.stats) { + if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + doesFreAlreadyExist(exchangeId, stat.prices)[0] + ) { + const price = doesFreAlreadyExist(exchangeId, stat.prices)[1] + price.price = newRate + break + } else if ( + stat.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase() && + !doesFreAlreadyExist(exchangeId, stat.prices)[0] + ) { + INDEXER_LOGGER.logMessage( + `[ExchangeRateChanged] - Could not find the exchange in DDO ${did} prices` + ) + return + } + } + } else { + INDEXER_LOGGER.logMessage( + `[ExchangeRateChanged] - No stats were found on the ddo` + ) + const serviceIdToFind = findServiceIdByDatatoken(ddoInstance, datatokenAddress) + if (!serviceIdToFind) { + INDEXER_LOGGER.logMessage( + `[ExchangeRateChanged] - This datatoken does not contain this service. Invalid service id!` + ) + return + } + const { stats } = ddoInstance.getAssetFields().indexedMetadata + stats.push({ + datatokenAddress, + name: await datatokenContract.name(), + symbol: await datatokenContract.symbol(), + serviceId: serviceIdToFind, + orders: 0, + prices: await getPricesByDt(datatokenContract, signer) + }) + + ddoInstance.updateFields({ indexedMetadata: { stats } }) + } + + const savedDDO = await this.createOrUpdateDDO( + ddoInstance, + EVENTS.EXCHANGE_RATE_CHANGED + ) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Error processing ExchangeRateChangedEvent: ${err}`, + true + ) + } + } +} diff --git a/src/components/Indexer/processors/MetadataEventProcessor.ts b/src/components/Indexer/processors/MetadataEventProcessor.ts new file mode 100644 index 000000000..15fead32f --- /dev/null +++ b/src/components/Indexer/processors/MetadataEventProcessor.ts @@ -0,0 +1,447 @@ +import { DDOManager, DDO, VersionedDDO } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider, getAddress } from 'ethers' +import { + ENVIRONMENT_VARIABLES, + EVENTS, + MetadataStates +} from '../../../utils/constants.js' +import { deleteIndexedMetadataIfExists } from '../../../utils/asset.js' +import { getConfiguration } from '../../../utils/config.js' +import { checkCredentialOnAccessList } from '../../../utils/credentials.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { asyncCallWithTimeout, streamToString } from '../../../utils/util.js' +import { PolicyServer } from '../../policyServer/index.js' +import { wasNFTDeployedByOurFactory, getPricingStatsForDddo } from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } +import { Purgatory } from '../purgatory.js' +import { isRemoteDDO } from '../../core/utils/validateDdoHandler.js' +import { Storage } from '../../storage/index.js' +import { Readable } from 'stream' + +export class MetadataEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider, + eventName: string + ): Promise { + let did = 'did:op' + try { + const { ddo: ddoDatabase, ddoState } = await getDatabase() + const wasDeployedByUs = await wasNFTDeployedByOurFactory( + chainId, + signer, + getAddress(event.address) + ) + + if (!wasDeployedByUs) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `NFT not deployed by OPF factory`, + true + ) + return + } + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + ERC721Template.abi, + eventName + ) + const metadata = decodedEventData.args[4] + const metadataHash = decodedEventData.args[5] + const flag = decodedEventData.args[3] + const owner = decodedEventData.args[0] + const decryptedDDO = await this.decryptDDO( + decodedEventData.args[2], + flag, + owner, + event.address, + chainId, + event.transactionHash, + metadataHash, + metadata + ) + let ddo = await this.processDDO(decryptedDDO) + if ( + !isRemoteDDO(decryptedDDO) && + parseInt(flag) !== 2 && + !this.checkDdoHash(ddo, metadataHash) + ) { + return + } + if (ddo.encryptedData) { + const proof = await this.decryptDDOIPFS( + decodedEventData.args[2], + owner, + ddo.encryptedData + ) + const data = this.getDataFromProof(proof) + const ddoInstance = DDOManager.getDDOClass(data.ddoObj) + ddo = ddoInstance.updateFields({ + proof: { signature: data.signature, header: data.header } + }) + } + const clonedDdo = structuredClone(ddo) + const updatedDdo = deleteIndexedMetadataIfExists(clonedDdo) + const ddoInstance = DDOManager.getDDOClass(updatedDdo) + if (updatedDdo.id !== ddoInstance.makeDid(event.address, chainId.toString(10))) { + INDEXER_LOGGER.error( + `Decrypted DDO ID is not matching the generated hash for DID.` + ) + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + 'Decrypted DDO ID does not match generated DID.' + ) + return + } + // for unencrypted DDOs + if ((parseInt(flag) & 2) === 0 && !this.checkDdoHash(updatedDdo, metadataHash)) { + INDEXER_LOGGER.error('Unencrypted DDO hash does not match metadata hash.') + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + 'Unencrypted DDO hash does not match metadata hash.' + ) + return + } + + // check authorized publishers + const { authorizedPublishers, authorizedPublishersList } = await getConfiguration() + if (authorizedPublishers.length > 0) { + // if is not there, do not index + const authorized: string[] = authorizedPublishers.filter((address) => + // do a case insensitive search + address.toLowerCase().includes(owner.toLowerCase()) + ) + if (!authorized.length) { + INDEXER_LOGGER.error( + `DDO owner ${owner} is NOT part of the ${ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS.name} group.` + ) + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + `DDO owner ${owner} is NOT part of the ${ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS.name} group.` + ) + return + } + } + if (authorizedPublishersList) { + // check accessList + const isAuthorized = await checkCredentialOnAccessList( + authorizedPublishersList, + String(chainId), + owner, + signer + ) + if (!isAuthorized) { + INDEXER_LOGGER.error( + `DDO owner ${owner} is NOT part of the ${ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS_LIST.name} access group.` + ) + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + `DDO owner ${owner} is NOT part of the ${ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS_LIST.name} access group.` + ) + return + } + } + + // stuff that we overwrite + did = ddoInstance.getDid() + const { services } = ddoInstance.getDDOFields() + ddoInstance.updateFields({ + chainId, + nftAddress: event.address, + datatokens: await this.getTokenInfo(services, signer) + }) + + INDEXER_LOGGER.logMessage( + `Processed new DDO data ${ddoInstance.getDid()} with txHash ${ + event.transactionHash + } from block ${event.blockNumber}`, + true + ) + + let previousDdoInstance + const previousDdo = await ddoDatabase.retrieve(ddoInstance.getDid()) + if (previousDdo) { + previousDdoInstance = DDOManager.getDDOClass(previousDdo) + } + if (eventName === EVENTS.METADATA_CREATED) { + if ( + previousDdoInstance && + previousDdoInstance.getAssetFields().indexedMetadata.nft.state === + MetadataStates.ACTIVE + ) { + const previousTxId = + previousDdoInstance.getAssetFields().indexedMetadata?.event?.txid + // If it's the same transaction being reprocessed, just skip (idempotent) + if (previousTxId === event.transactionHash) { + INDEXER_LOGGER.logMessage( + `DDO ${ddoInstance.getDid()} already indexed from same transaction ${ + event.transactionHash + }. Skipping reprocessing.`, + true + ) + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + true, + ' ' + ) + return + } + INDEXER_LOGGER.logMessage( + `DDO ${ddoInstance.getDid()} is already registered as active from different transaction ${previousTxId}`, + true + ) + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + `DDO ${ddoInstance.getDid()} is already registered as active from transaction ${previousTxId}` + ) + return + } + } + + if (eventName === EVENTS.METADATA_UPDATED) { + if (!previousDdoInstance) { + INDEXER_LOGGER.logMessage( + `Previous DDO with did ${ddoInstance.getDid()} was not found the database. Maybe it was deleted/hidden to some violation issues`, + true + ) + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + `Previous DDO with did ${ddoInstance.getDid()} was not found the database. Maybe it was deleted/hidden to some violation issues` + ) + return + } + const [isUpdateable, error] = this.isUpdateable( + previousDdoInstance, + event.transactionHash, + event.blockNumber + ) + if (!isUpdateable) { + INDEXER_LOGGER.error( + `Error encountered when checking if the asset is eligiable for update: ${error}` + ) + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + error + ) + return + } + } + const from = decodedEventData.args[0].toString() + let ddoUpdatedWithPricing + // we need to store the event data (either metadata created or update and is updatable) + if ( + [EVENTS.METADATA_CREATED, EVENTS.METADATA_UPDATED].includes(eventName) && + this.isValidDtAddressFromServices(ddoInstance.getDDOFields().services) + ) { + const ddoWithPricing = await getPricingStatsForDddo(ddoInstance, signer) + const nft = await this.getNFTInfo( + ddoWithPricing.getDDOFields().nftAddress, + signer, + owner, + parseInt(decodedEventData.args[6]) + ) + + let block + let datetime + if (event.blockNumber) { + block = event.blockNumber + // try get block & timestamp from block (only wait 2.5 secs maximum) + const promiseFn = provider.getBlock(event.blockNumber) + const result = await asyncCallWithTimeout(promiseFn, 2500) + if (result.data !== null && !result.timeout) { + datetime = new Date(result.data.timestamp * 1000).toJSON() + } + } + + const fieldsToUpdate = { + indexedMetadata: { + nft, + event: { + txid: event.transactionHash, + from, + contract: event.address, + block, + datetime + } + } + } + ddoWithPricing.updateFields(fieldsToUpdate) + + // policyServer check + const policyServer = new PolicyServer() + let policyStatus + if (eventName === EVENTS.METADATA_UPDATED) + policyStatus = await policyServer.checkUpdateDDO( + ddoWithPricing.getDDOData() as DDO, + this.networkId, + event.transactionHash, + event + ) + else + policyStatus = await policyServer.checknewDDO( + ddoWithPricing.getDDOData() as DDO, + this.networkId, + event.transactionHash, + event + ) + if (!policyStatus.success) { + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + policyStatus.message + ) + return + } + ddoUpdatedWithPricing = ddoWithPricing + } + // always call, but only create instance once + const purgatory = await Purgatory.getInstance() + // if purgatory is disabled just return false + const state = await this.getPurgatoryState(ddo, from, purgatory) + + ddoUpdatedWithPricing.updateFields({ + indexedMetadata: { purgatory: { state } } + }) + if (state === false) { + // TODO: insert in a different collection for purgatory DDOs + const saveDDO = await this.createOrUpdateDDO(ddoUpdatedWithPricing, eventName) + INDEXER_LOGGER.logMessage(`saved DDO: ${JSON.stringify(saveDDO)}`) + return saveDDO + } + } catch (error) { + const { ddoState } = await getDatabase() + await ddoState.update( + this.networkId, + did, + event.address, + event.transactionHash, + false, + error.message + ) + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Error processMetadataEvents for did: ${did} and txHash: ${event.transactionHash} and error: ${error}`, + true + ) + } + } + + async getPurgatoryState( + ddo: any, + owner: string, + purgatory: Purgatory + ): Promise { + if (purgatory.isEnabled()) { + const state: boolean = + (await purgatory.isBannedAsset(ddo.id)) || + (await purgatory.isBannedAccount(owner)) + return state + } + return false + } + + async updatePurgatoryStateDdo( + ddo: VersionedDDO, + owner: string, + purgatory: Purgatory + ): Promise> { + if (!purgatory.isEnabled()) { + return ddo.updateFields({ + indexedMetadata: { + purgatory: { + state: false + } + } + }) + } + + const state: boolean = + (await purgatory.isBannedAsset(ddo.getDid())) || + (await purgatory.isBannedAccount(owner)) + return ddo.updateFields({ + indexedMetadata: { + purgatory: { + state + } + } + }) + } + + isUpdateable( + previousDdo: VersionedDDO, + txHash: string, + block: number + ): [boolean, string] { + let errorMsg: string + const ddoTxId = previousDdo.getAssetFields().indexedMetadata?.event?.txid + // do not update if we have the same txid + if (txHash === ddoTxId) { + errorMsg = `Previous DDO has the same tx id, no need to update: event-txid=${txHash} <> asset-event-txid=${ddoTxId}` + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_DEBUG, errorMsg, true) + return [false, errorMsg] + } + const ddoBlock = previousDdo.getAssetFields().indexedMetadata?.event?.block + // do not update if we have the same block + if (block === ddoBlock) { + errorMsg = `Asset was updated later (block: ${ddoBlock}) vs transaction block: ${block}` + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_DEBUG, errorMsg, true) + return [false, errorMsg] + } + + return [true, ''] + } + + async processDDO(ddo: any) { + if (isRemoteDDO(ddo)) { + INDEXER_LOGGER.logMessage('DDO is remote', true) + + const storage = Storage.getStorageClass(ddo.remote, await getConfiguration()) + const result = await storage.getReadableStream() + const streamToStringDDO = await streamToString(result.stream as Readable) + + return JSON.parse(streamToStringDDO) + } + + return ddo + } +} diff --git a/src/components/Indexer/processors/MetadataStateEventProcessor.ts b/src/components/Indexer/processors/MetadataStateEventProcessor.ts new file mode 100644 index 000000000..8c55455e8 --- /dev/null +++ b/src/components/Indexer/processors/MetadataStateEventProcessor.ts @@ -0,0 +1,99 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider } from 'ethers' +import { EVENTS, MetadataStates } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } +import { getDid } from '../utils.js' + +export class MetadataStateEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + _signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + INDEXER_LOGGER.logMessage(`Processing metadata state event...`, true) + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + ERC721Template.abi, + EVENTS.METADATA_STATE + ) + const metadataState = parseInt(decodedEventData.args[1].toString()) + INDEXER_LOGGER.logMessage(`Processed new metadata state ${metadataState} `, true) + INDEXER_LOGGER.logMessage( + `NFT address in processing MetadataState: ${event.address} `, + true + ) + const did = getDid(event.address, chainId) + + try { + const { ddo: ddoDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, event.address, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected MetadataState changed for ${did}, but it does not exists.` + ) + return + } + + const ddoInstance = DDOManager.getDDOClass(ddo) + INDEXER_LOGGER.logMessage(`Found did ${did} on network ${chainId}`) + + if ( + 'nft' in ddoInstance.getAssetFields().indexedMetadata && + ddoInstance.getAssetFields().indexedMetadata.nft.state !== metadataState + ) { + if ( + ddoInstance.getAssetFields().indexedMetadata.nft.state === + MetadataStates.ACTIVE && + [MetadataStates.REVOKED, MetadataStates.DEPRECATED].includes(metadataState) + ) { + INDEXER_LOGGER.logMessage( + `DDO became non-visible from ${ + ddoInstance.getAssetFields().indexedMetadata.nft.state + } to ${metadataState}` + ) + + // We should keep it here, because in further development we'll store + // the previous structure of the non-visible DDOs (full version) + // in case their state changes back to active. + const shortDdoInstance = DDOManager.getDDOClass({ + id: ddo.id, + version: 'deprecated', + chainId, + nftAddress: ddo.nftAddress, + indexedMetadata: { + nft: { + state: metadataState + } + } + }) + + const savedDDO = await this.createOrUpdateDDO( + shortDdoInstance, + EVENTS.METADATA_STATE + ) + return savedDDO + } + } + + // Still update until we validate and polish schemas for DDO. + // But it should update ONLY if the first condition is met. + // Check https://github.com/oceanprotocol/aquarius/blob/84a560ea972485e46dd3c2cfc3cdb298b65d18fa/aquarius/events/processors.py#L663 + ddoInstance.getDDOData().indexedMetadata.nft = { + state: metadataState + } + INDEXER_LOGGER.logMessage( + `Found did ${did} for state updating on network ${chainId}` + ) + const savedDDO = await this.createOrUpdateDDO(ddoInstance, EVENTS.METADATA_STATE) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/OrderReusedEventProcessor.ts b/src/components/Indexer/processors/OrderReusedEventProcessor.ts new file mode 100644 index 000000000..3cca654cd --- /dev/null +++ b/src/components/Indexer/processors/OrderReusedEventProcessor.ts @@ -0,0 +1,122 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { + getDtContract, + getDid, + findServiceIdByDatatoken, + getPricesByDt +} from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' assert { type: 'json' } + +export class OrderReusedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + ERC20Template.abi, + EVENTS.ORDER_REUSED + ) + const startOrderId = decodedEventData.args[0].toString() + const timestamp = parseInt(decodedEventData.args[2].toString()) + const payer = decodedEventData.args[1].toString() + INDEXER_LOGGER.logMessage(`Processed reused order at ${timestamp}`, true) + + const datatokenContract = getDtContract(signer, event.address) + + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + try { + const { ddo: ddoDatabase, order: orderDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, nftAddress, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected OrderReused changed for ${did}, but it does not exists.` + ) + return + } + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getAssetFields().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + + if (!Array.isArray(ddoInstance.getAssetFields().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + + if (ddoInstance.getAssetFields().indexedMetadata.stats.length !== 0) { + for (const stat of ddoInstance.getAssetFields().indexedMetadata.stats) { + if (stat.datatokenAddress.toLowerCase() === event.address?.toLowerCase()) { + stat.orders += 1 + break + } + } + } else { + INDEXER_LOGGER.logMessage(`[OrderReused] - No stats were found on the ddo`) + const serviceIdToFind = findServiceIdByDatatoken(ddoInstance, event.address) + if (!serviceIdToFind) { + INDEXER_LOGGER.logMessage( + `[OrderReused] - This datatoken does not contain this service. Invalid service id!` + ) + return + } + const existingStats = ddoInstance.getAssetFields().indexedMetadata.stats + existingStats.push({ + datatokenAddress: event.address, + name: await datatokenContract.name(), + symbol: await datatokenContract.symbol(), + serviceId: serviceIdToFind, + orders: 1, + prices: await getPricesByDt(datatokenContract, signer) + }) + + ddoInstance.updateFields({ + indexedMetadata: { + stats: existingStats + } + }) + } + + try { + const startOrder = await orderDatabase.retrieve(startOrderId) + if (!startOrder) { + INDEXER_LOGGER.logMessage( + `Detected OrderReused changed for order ${startOrderId}, but it does not exists.` + ) + return + } + await orderDatabase.create( + event.transactionHash, + 'reuseOrder', + timestamp, + startOrder.consumer, + payer, + event.address, + nftAddress, + did, + startOrderId + ) + } catch (error) { + INDEXER_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Error retrieving startOrder for reuseOrder: ${error}`, + true + ) + } + + const savedDDO = await this.createOrUpdateDDO(ddoInstance, EVENTS.ORDER_REUSED) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/OrderStartedEventProcessor.ts b/src/components/Indexer/processors/OrderStartedEventProcessor.ts new file mode 100644 index 000000000..73f9ade9e --- /dev/null +++ b/src/components/Indexer/processors/OrderStartedEventProcessor.ts @@ -0,0 +1,97 @@ +import { DDOManager } from '@oceanprotocol/ddo-js' +import { ethers, Signer, JsonRpcApiProvider } from 'ethers' +import { EVENTS } from '../../../utils/constants.js' +import { getDatabase } from '../../../utils/database.js' +import { INDEXER_LOGGER } from '../../../utils/logging/common.js' +import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' +import { getDtContract, getDid, getPricesByDt } from '../utils.js' +import { BaseEventProcessor } from './BaseProcessor.js' +import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' assert { type: 'json' } + +export class OrderStartedEventProcessor extends BaseEventProcessor { + async processEvent( + event: ethers.Log, + chainId: number, + signer: Signer, + provider: JsonRpcApiProvider + ): Promise { + const decodedEventData = await this.getEventData( + provider, + event.transactionHash, + ERC20Template.abi, + EVENTS.ORDER_STARTED + ) + const serviceIndex = parseInt(decodedEventData.args[3].toString()) + const timestamp = parseInt(decodedEventData.args[4].toString()) + const consumer = decodedEventData.args[0].toString() + const payer = decodedEventData.args[1].toString() + INDEXER_LOGGER.logMessage( + `Processed new order for service index ${serviceIndex} at ${timestamp}`, + true + ) + const datatokenContract = getDtContract(signer, event.address) + + const nftAddress = await datatokenContract.getERC721Address() + const did = getDid(nftAddress, chainId) + try { + const { ddo: ddoDatabase, order: orderDatabase } = await getDatabase() + const ddo = await this.getDDO(ddoDatabase, nftAddress, chainId) + if (!ddo) { + INDEXER_LOGGER.logMessage( + `Detected OrderStarted changed for ${did}, but it does not exists.` + ) + return + } + const ddoInstance = DDOManager.getDDOClass(ddo) + if (!ddoInstance.getDDOData().indexedMetadata) { + ddoInstance.updateFields({ indexedMetadata: {} }) + } + if (!Array.isArray(ddoInstance.getDDOData().indexedMetadata.stats)) { + ddoInstance.updateFields({ indexedMetadata: { stats: [] } }) + } + if ( + ddoInstance.getDDOData().indexedMetadata.stats.length !== 0 && + ddoInstance + .getDDOFields() + .services[serviceIndex].datatokenAddress?.toLowerCase() === + event.address?.toLowerCase() + ) { + for (const stat of ddoInstance.getDDOData().indexedMetadata.stats) { + if (stat.datatokenAddress.toLowerCase() === event.address?.toLowerCase()) { + stat.orders += 1 + break + } + } + } else if (ddoInstance.getDDOData().indexedMetadata.stats.length === 0) { + const existingStats = ddoInstance.getDDOData().indexedMetadata.stats + existingStats.push({ + datatokenAddress: event.address, + name: await datatokenContract.name(), + symbol: await datatokenContract.symbol(), + serviceId: ddoInstance.getDDOFields().services[serviceIndex].id, + orders: 1, + prices: await getPricesByDt(datatokenContract, signer) + }) + + ddoInstance.updateFields({ indexedMetadata: { stats: existingStats } }) + } + await orderDatabase.create( + event.transactionHash, + 'startOrder', + timestamp, + consumer, + payer, + ddoInstance.getDDOFields().services[serviceIndex].datatokenAddress, + nftAddress, + did + ) + INDEXER_LOGGER.logMessage( + `Found did ${did} for order starting on network ${chainId}` + ) + const savedDDO = await this.createOrUpdateDDO(ddoInstance, EVENTS.ORDER_STARTED) + return savedDDO + } catch (err) { + INDEXER_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error retrieving DDO: ${err}`, true) + } + } +} diff --git a/src/components/Indexer/processors/index.ts b/src/components/Indexer/processors/index.ts new file mode 100644 index 000000000..dc6501a82 --- /dev/null +++ b/src/components/Indexer/processors/index.ts @@ -0,0 +1,16 @@ +import { BaseEventProcessor } from './BaseProcessor' + +export * from './DispenserActivatedEventProcessor.js' +export * from './DispenserCreatedEventProcessor.js' +export * from './DispenserDeactivatedEventProcessor.js' +export * from './ExchangeActivatedEventProcessor.js' +export * from './ExchangeCreatedEventProcessor.js' +export * from './ExchangeDeactivatedEventProcessor.js' +export * from './ExchangeRateChangedEventProcessor.js' +export * from './MetadataEventProcessor.js' +export * from './MetadataStateEventProcessor.js' +export * from './OrderReusedEventProcessor.js' +export * from './OrderStartedEventProcessor.js' +export * from './BaseProcessor.js' + +export type ProcessorConstructor = new (chainId: number) => BaseEventProcessor diff --git a/src/components/Indexer/utils.ts b/src/components/Indexer/utils.ts index b50daefc8..cf7298215 100644 --- a/src/components/Indexer/utils.ts +++ b/src/components/Indexer/utils.ts @@ -1,67 +1,54 @@ -import { JsonRpcApiProvider, Signer, ethers, getAddress, Interface } from 'ethers' +import { JsonRpcApiProvider, Signer, ethers, getAddress } from 'ethers' import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json' assert { type: 'json' } import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } -import { - ENVIRONMENT_VARIABLES, - EVENTS, - EVENT_HASHES, - existsEnvironmentVariable, - getAllowedValidators -} from '../../utils/index.js' -import { BlocksEvents, NetworkEvent, ProcessingEvents } from '../../@types/blockchain.js' -import { - MetadataEventProcessor, - MetadataStateEventProcessor, - OrderReusedEventProcessor, - OrderStartedEventProcessor -} from './processor.js' +import { EVENT_HASHES, isDefined } from '../../utils/index.js' +import { NetworkEvent } from '../../@types/blockchain.js' import { INDEXER_LOGGER } from '../../utils/logging/common.js' -import { fetchEventFromTransaction } from '../../utils/util.js' import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' assert { type: 'json' } -import { LOG_LEVELS_STR } from '../../utils/logging/Logger.js' import { getOceanArtifactsAdressesByChainId } from '../../utils/address.js' import { CommandStatus, JobStatus } from '../../@types/commands.js' import { create256Hash } from '../../utils/crypt.js' +import Dispenser from '@oceanprotocol/contracts/artifacts/contracts/pools/dispenser/Dispenser.sol/Dispenser.json' assert { type: 'json' } +import FixedRateExchange from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json' assert { type: 'json' } +import { createHash } from 'crypto' +import { ServicePrice } from '../../@types/IndexedMetadata.js' +import { VersionedDDO } from '@oceanprotocol/ddo-js' +import FactoryRouter from '@oceanprotocol/contracts/artifacts/contracts/pools/FactoryRouter.sol/FactoryRouter.json' assert { type: 'json' } -let metadataEventProccessor: MetadataEventProcessor -let metadataStateEventProcessor: MetadataStateEventProcessor -let orderReusedEventProcessor: OrderReusedEventProcessor -let orderStartedEventProcessor: OrderStartedEventProcessor - -function getMetadataEventProcessor(chainId: number): MetadataEventProcessor { - if (!metadataEventProccessor) { - metadataEventProccessor = new MetadataEventProcessor(chainId) - } - return metadataEventProccessor -} - -function getMetadataStateEventProcessor(chainId: number): MetadataStateEventProcessor { - if (!metadataStateEventProcessor) { - metadataStateEventProcessor = new MetadataStateEventProcessor(chainId) - } - return metadataStateEventProcessor -} - -function getOrderReusedEventProcessor(chainId: number): OrderReusedEventProcessor { - if (!orderReusedEventProcessor) { - orderReusedEventProcessor = new OrderReusedEventProcessor(chainId) +export const getContractAddress = (chainId: number, contractName: string): string => { + const addressFile = getOceanArtifactsAdressesByChainId(chainId) + if (addressFile && contractName in addressFile) { + return getAddress(addressFile[contractName]) } - return orderReusedEventProcessor + return '' } -function getOrderStartedEventProcessor(chainId: number): OrderStartedEventProcessor { - if (!orderStartedEventProcessor) { - orderStartedEventProcessor = new OrderStartedEventProcessor(chainId) +export const isValidFreContract = async ( + address: string, + chainId: number, + signer: Signer +) => { + const router = getContractAddress(chainId, 'Router') + const routerContract = new ethers.Contract(router, FactoryRouter.abi, signer) + try { + return await routerContract.isFixedRateContract(address) + } catch (e) { + INDEXER_LOGGER.error(`Could not fetch FRE contract status: ${e.message}`) } - return orderStartedEventProcessor } -export const getContractAddress = (chainId: number, contractName: string): string => { - const addressFile = getOceanArtifactsAdressesByChainId(chainId) - if (addressFile && contractName in addressFile) { - return getAddress(addressFile[contractName]) +export const isValidDispenserContract = async ( + address: string, + chainId: number, + signer: Signer +) => { + const router = getContractAddress(chainId, 'Router') + const routerContract = new ethers.Contract(router, FactoryRouter.abi, signer) + try { + return await routerContract.isDispenserContract(address) + } catch (e) { + INDEXER_LOGGER.error(`Could not fetch dispenser contract status: ${e.message}`) } - return '' } export const getDeployedContractBlock = (network: number) => { @@ -90,36 +77,23 @@ export const retrieveChunkEvents = async ( try { const eventHashes = Object.keys(EVENT_HASHES) const startIndex = lastIndexedBlock + 1 - const blockLogs = await provider.getLogs({ + const details = { fromBlock: startIndex, toBlock: lastIndexedBlock + count, topics: [eventHashes] - }) - return blockLogs - } catch (error) { - throw new Error(` Error processing chunk of blocks events ${error.message}`) - } -} - -export const processBlocks = async ( - blockLogs: ethers.Log[], - signer: Signer, - provider: JsonRpcApiProvider, - network: number, - lastIndexedBlock: number, - count: number -): Promise => { - try { - const events: any[] | BlocksEvents = - blockLogs && blockLogs.length > 0 - ? await processChunkLogs(blockLogs, signer, provider, network) - : [] - - return { - lastBlock: lastIndexedBlock + count, - foundEvents: events } + INDEXER_LOGGER.debug( + `Retrieving events from block ${startIndex} to ${lastIndexedBlock + count}` + ) + const blockLogs = await provider.getLogs(details) + return blockLogs } catch (error) { + INDEXER_LOGGER.error( + `Error retrieving events from block ${lastIndexedBlock + 1} to ${ + lastIndexedBlock + count + }:` + ) + INDEXER_LOGGER.error(error) throw new Error(` Error processing chunk of blocks events ${error.message}`) } } @@ -133,120 +107,6 @@ export function findEventByKey(keyToFind: string): NetworkEvent { return null } -export const processChunkLogs = async ( - logs: readonly ethers.Log[], - signer: Signer, - provider: JsonRpcApiProvider, - chainId: number -): Promise => { - const storeEvents: BlocksEvents = {} - if (logs.length > 0) { - const allowedValidators = getAllowedValidators() - const checkMetadataValidated = allowedValidators.length > 0 - for (const log of logs) { - const event = findEventByKey(log.topics[0]) - - if (event && Object.values(EVENTS).includes(event.type)) { - // only log & process the ones we support - INDEXER_LOGGER.logMessage( - `-- ${event.type} -- triggered for ${log.transactionHash}`, - true - ) - if ( - event.type === EVENTS.METADATA_CREATED || - event.type === EVENTS.METADATA_UPDATED || - event.type === EVENTS.METADATA_STATE - ) { - if (checkMetadataValidated) { - const txReceipt = await provider.getTransactionReceipt(log.transactionHash) - const metadataProofs = fetchEventFromTransaction( - txReceipt, - 'MetadataValidated', - new Interface(ERC20Template.abi) - ) - if (!metadataProofs) { - INDEXER_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `Metadata Proof validator not allowed`, - true - ) - continue - } - const validators = metadataProofs.map((metadataProof) => - getAddress(metadataProof.args[0].toString()) - ) - const allowed = allowedValidators.filter( - (allowedValidator) => validators.indexOf(allowedValidator) !== -1 - ) - if (!allowed.length) { - INDEXER_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `Metadata Proof validators list is empty`, - true - ) - continue - } - } - } - if ( - event.type === EVENTS.METADATA_CREATED || - event.type === EVENTS.METADATA_UPDATED - ) { - const processor = getMetadataEventProcessor(chainId) - const rets = await processor.processEvent( - log, - chainId, - signer, - provider, - event.type - ) - if (rets) storeEvents[event.type] = rets - } else if (event.type === EVENTS.METADATA_STATE) { - const processor = getMetadataStateEventProcessor(chainId) - storeEvents[event.type] = await processor.processEvent(log, chainId, provider) - } else if (event.type === EVENTS.EXCHANGE_CREATED) { - storeEvents[event.type] = procesExchangeCreated() - } else if (event.type === EVENTS.EXCHANGE_RATE_CHANGED) { - storeEvents[event.type] = processExchangeRateChanged() - } else if (event.type === EVENTS.ORDER_STARTED) { - const processor = getOrderStartedEventProcessor(chainId) - storeEvents[event.type] = await processor.processEvent( - log, - chainId, - signer, - provider - ) - } else if (event.type === EVENTS.ORDER_REUSED) { - const processor = getOrderReusedEventProcessor(chainId) - storeEvents[event.type] = await processor.processEvent( - log, - chainId, - signer, - provider - ) - } else if (event.type === EVENTS.TOKEN_URI_UPDATE) { - storeEvents[event.type] = processTokenUriUpadate() - } - } - } - return storeEvents - } - - return {} -} - -const procesExchangeCreated = (): string => { - return 'EXCHANGE_CREATED' -} - -const processExchangeRateChanged = (): string => { - return 'EXCHANGE_RATE_CHANGED' -} - -const processTokenUriUpadate = (): string => { - return 'TOKEN_URI_UPDATE' -} - export const getNFTContract = (signer: Signer, address: string): ethers.Contract => { address = getAddress(address) return getContract(signer, 'ERC721Template', address) @@ -309,7 +169,7 @@ export async function wasNFTDeployedByOurFactory( // default in seconds const DEFAULT_INDEXER_CRAWLING_INTERVAL = 1000 * 30 // 30 seconds export const getCrawlingInterval = (): number => { - if (existsEnvironmentVariable(ENVIRONMENT_VARIABLES.INDEXER_INTERVAL)) { + if (isDefined(process.env.INDEXER_INTERVAL)) { const number: any = process.env.INDEXER_INTERVAL if (!isNaN(number) && number > 0) { return number @@ -330,3 +190,266 @@ export function buildJobIdentifier(command: string, extra: string[]): JobStatus hash: create256Hash(extra.join('')) } } + +export function findServiceIdByDatatoken( + ddo: VersionedDDO, + datatokenAddress: string +): string { + for (const s of ddo.getDDOFields().services) { + if (s.datatokenAddress.toLowerCase() === datatokenAddress.toLowerCase()) { + return s.id + } + } + return null +} + +export function doesDispenserAlreadyExist( + dispenserAddress: string, + prices: ServicePrice[] +): [boolean, ServicePrice?] { + for (const price of prices) { + if (dispenserAddress.toLowerCase() === price.contract.toLowerCase()) { + return [true, price] + } + } + return [false, null] +} + +export function doesFreAlreadyExist( + exchangeId: ethers.BytesLike, + prices: ServicePrice[] +): [boolean, ServicePrice?] { + for (const price of prices) { + if (exchangeId === price.exchangeId) { + return [true, price] + } + } + return [false, null] +} + +export async function getPricesByDt( + datatoken: ethers.Contract, + signer: Signer +): Promise { + let dispensers = [] + let fixedRates = [] + let prices: ServicePrice[] = [] + try { + dispensers = await datatoken.getDispensers() + } catch (e) { + INDEXER_LOGGER.error(`[GET PRICES] failure when retrieving dispensers: ${e}`) + } + try { + fixedRates = await datatoken.getFixedRates() + } catch (e) { + INDEXER_LOGGER.error( + `[GET PRICES] failure when retrieving fixed rate exchanges: ${e}` + ) + } + if (dispensers.length === 0 && fixedRates.length === 0) { + prices = [] + } else { + if (dispensers) { + for (const dispenser of dispensers) { + const dispenserContract = new ethers.Contract(dispenser, Dispenser.abi, signer) + try { + const [isActive, ,] = await dispenserContract.status( + await datatoken.getAddress() + ) + if (isActive === true) { + prices.push({ + type: 'dispenser', + price: '0', + contract: dispenser, + token: await datatoken.getAddress() + }) + } + } catch (e) { + INDEXER_LOGGER.error( + `[GET PRICES] failure when retrieving dispenser status from contracts: ${e}` + ) + } + } + } + + if (fixedRates) { + for (const fixedRate of fixedRates) { + const fixedRateContract = new ethers.Contract( + fixedRate[0], + FixedRateExchange.abi, + signer + ) + try { + const [, , , baseTokenAddress, , pricing, isActive, , , , , ,] = + await fixedRateContract.getExchange(fixedRate[1]) + if (isActive === true) { + prices.push({ + type: 'fixedrate', + price: ethers.formatEther(pricing), + token: baseTokenAddress, + contract: fixedRate[0], + exchangeId: fixedRate[1] + }) + } + } catch (e) { + INDEXER_LOGGER.error( + `[GET PRICES] failure when retrieving exchange status from contracts: ${e}` + ) + } + } + } + } + return prices +} + +export async function getPricingStatsForDddo( + ddo: VersionedDDO, + signer: Signer +): Promise { + const ddoData = ddo.getDDOData() + + if (!ddoData.indexedMetadata) { + ddoData.indexedMetadata = {} + } + + if (!Array.isArray(ddoData.indexedMetadata?.stats)) { + ddoData.indexedMetadata.stats = [] + } + + const stats = ddoData.indexedMetadata?.stats || [] + + for (const service of ddo.getDDOFields().services) { + const datatoken = new ethers.Contract( + service.datatokenAddress, + ERC20Template.abi, + signer + ) + let dispensers = [] + let fixedRates = [] + const prices: ServicePrice[] = [] + try { + dispensers = await datatoken.getDispensers() + } catch (e) { + INDEXER_LOGGER.error(`Contract call fails when retrieving dispensers: ${e}`) + } + try { + fixedRates = await datatoken.getFixedRates() + } catch (e) { + INDEXER_LOGGER.error( + `Contract call fails when retrieving fixed rate exchanges: ${e}` + ) + } + if (dispensers.length === 0 && fixedRates.length === 0) { + stats.push({ + datatokenAddress: service.datatokenAddress, + name: await datatoken.name(), + symbol: await datatoken.symbol(), + serviceId: service.id, + orders: 0, + prices: [] + }) + } else { + if (dispensers) { + for (const dispenser of dispensers) { + const dispenserContract = new ethers.Contract(dispenser, Dispenser.abi, signer) + try { + const [isActive, ,] = await dispenserContract.status( + await datatoken.getAddress() + ) + if (isActive === true) { + prices.push({ + type: 'dispenser', + price: '0', + contract: dispenser, + token: service.datatokenAddress + }) + stats.push({ + datatokenAddress: service.datatokenAddress, + name: await datatoken.name(), + symbol: await datatoken.symbol(), + serviceId: service.id, + orders: 0, + prices + }) + } + } catch (e) { + INDEXER_LOGGER.error( + `[GET PRICES] failure when retrieving dispenser status from contracts: ${e}` + ) + } + } + } + } + + if (fixedRates) { + for (const fixedRate of fixedRates) { + const fixedRateContract = new ethers.Contract( + fixedRate[0], + FixedRateExchange.abi, + signer + ) + try { + const [, , , baseTokenAddress, , pricing, isActive, , , , , ,] = + await fixedRateContract.getExchange(fixedRate[1]) + if (isActive === true) { + prices.push({ + type: 'fixedrate', + price: ethers.formatEther(pricing), + token: baseTokenAddress, + contract: fixedRate[0], + exchangeId: fixedRate[1] + }) + stats.push({ + datatokenAddress: service.datatokenAddress, + name: await datatoken.name(), + symbol: await datatoken.symbol(), + serviceId: service.id, + orders: 0, // just created + prices + }) + } + } catch (e) { + INDEXER_LOGGER.error( + `[GET PRICES] failure when retrieving exchange status from contracts: ${e}` + ) + } + } + } + } + + ddo.updateFields({ indexedMetadata: { stats } }) + return ddo +} + +export function getDid(nftAddress: string, chainId: number): string { + return ( + 'did:ope:' + + createHash('sha256') + .update(getAddress(nftAddress) + chainId.toString(10)) + .digest('hex') + ) +} + +export async function withRetrial( + fn: () => Promise, + maxRetries: number = 5, + delay: number = 2000 +): Promise { + let lastError: Error + + for (let attempt = 0; attempt < maxRetries; attempt++) { + try { + return await fn() + } catch (error) { + lastError = error + + if (attempt === maxRetries - 1) { + throw lastError + } + + await new Promise((resolve) => setTimeout(resolve, delay)) + } + } + + throw lastError +} diff --git a/src/components/Indexer/version.ts b/src/components/Indexer/version.ts new file mode 100644 index 000000000..ff07932d3 --- /dev/null +++ b/src/components/Indexer/version.ts @@ -0,0 +1,46 @@ +/** + * Compares two semantic version strings + * @param v1 First version + * @param v2 Second version + * @returns -1 if v1 < v2, 0 if v1 = v2, 1 if v1 > v2 + */ +export function compareVersions(v1: string, v2: string): number { + const parts1 = v1.split('.').map(Number) + const parts2 = v2.split('.').map(Number) + + for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) { + const part1 = i < parts1.length ? parts1[i] : 0 + const part2 = i < parts2.length ? parts2[i] : 0 + + if (part1 < part2) return -1 + if (part1 > part2) return 1 + } + + return 0 +} + +/** + * Checks if reindexing is needed based on version comparison + * @param currentVersion Current node version + * @param dbVersion Version stored in database + * @param minVersion Minimum version that requires reindexing + * @returns boolean indicating if reindexing is needed + */ +export function isReindexingNeeded( + currentVersion: string, + dbVersion: string | null, + minVersion: string +): boolean { + // If no DB version exists, reindexing is needed + if (!dbVersion) return true + + // If current version is less than min version, something is wrong + if (compareVersions(currentVersion, minVersion) < 0) { + throw new Error( + `Current version ${currentVersion} is less than minimum required version ${minVersion}` + ) + } + + // If DB version is less than min version, reindexing is needed + return compareVersions(dbVersion, minVersion) < 0 +} diff --git a/src/components/P2P/handleProtocolCommands.ts b/src/components/P2P/handleProtocolCommands.ts index 924b47f05..507234d19 100644 --- a/src/components/P2P/handleProtocolCommands.ts +++ b/src/components/P2P/handleProtocolCommands.ts @@ -7,8 +7,12 @@ import { Command } from '../../@types/commands.js' import { P2PCommandResponse } from '../../@types/OceanNode' import { GENERIC_EMOJIS, LOG_LEVELS_STR } from '../../utils/logging/Logger.js' import StreamConcat from 'stream-concat' -import { Handler } from '../core/handler/handler.js' +import { BaseHandler } from '../core/handler/handler.js' import { getConfiguration } from '../../utils/index.js' +import { + checkGlobalConnectionsRateLimit, + checkRequestsRateLimit +} from '../../utils/validators.js' export class ReadableString extends Readable { private sent = false @@ -60,10 +64,14 @@ export async function handleProtocolCommands(otherPeerConnection: any) { return status } - const denyList = await (await getConfiguration()).denyList + const configuration = await getConfiguration() + // check deny list configs + const { denyList } = configuration if (denyList.peers.length > 0) { if (denyList.peers.includes(remotePeer.toString())) { - P2P_LOGGER.error(`Incoming request denied to peer: ${remotePeer}`) + P2P_LOGGER.warn( + `Incoming request denied to peer: ${remotePeer} (peer its on deny list)` + ) if (connectionStatus === 'open') { statusStream = new ReadableString( @@ -79,6 +87,47 @@ export async function handleProtocolCommands(otherPeerConnection: any) { return } } + // check connections rate limit + const now = Date.now() + + const rateLimitCheck = checkRequestsRateLimit(remoteAddr, configuration, now) + if (!rateLimitCheck.valid) { + P2P_LOGGER.warn( + `Incoming request denied to peer: ${remotePeer} (rate limit exceeded)` + ) + if (connectionStatus === 'open') { + statusStream = new ReadableString( + JSON.stringify(buildWrongCommandStatus(403, 'Rate limit exceeded')) + ) + try { + await pipe(statusStream, otherPeerConnection.stream.sink) + } catch (e) { + P2P_LOGGER.error(e) + } + } + await closeStreamConnection(otherPeerConnection.connection, remotePeer) + return + } + + // check global rate limits (not ip related) + const connectionsRateValidation = checkGlobalConnectionsRateLimit(configuration, now) + if (!connectionsRateValidation.valid) { + P2P_LOGGER.warn( + `Exceeded limit of connections per minute ${configuration.maxConnections}: ${connectionsRateValidation.error}` + ) + if (connectionStatus === 'open') { + statusStream = new ReadableString( + JSON.stringify(buildWrongCommandStatus(403, 'Rate limit exceeded')) + ) + try { + await pipe(statusStream, otherPeerConnection.stream.sink) + } catch (e) { + P2P_LOGGER.error(e) + } + } + await closeStreamConnection(otherPeerConnection.connection, remotePeer) + return + } try { // eslint-disable-next-line no-unreachable-loop @@ -122,7 +171,7 @@ export async function handleProtocolCommands(otherPeerConnection: any) { P2P_LOGGER.logMessage('Performing P2P task: ' + JSON.stringify(task), true) // we get the handler from the running instance // no need to create a new instance of Handler on every request - const handler: Handler = this.getCoreHandlers().getHandler(task.command) + const handler: BaseHandler = this.getCoreHandlers().getHandler(task.command) let response: P2PCommandResponse = null if (handler === null) { status = { httpStatus: 501, error: `No handler found for command: ${task.command}` } @@ -141,15 +190,15 @@ export async function handleProtocolCommands(otherPeerConnection: any) { if (connectionStatus === 'open') { if (sendStream == null) { await pipe(statusStream, otherPeerConnection.stream.sink) + await closeStreamConnection(otherPeerConnection.connection, remotePeer) } else { const combinedStream = new StreamConcat([statusStream, sendStream], { highWaterMark: JSON.stringify(status).length // important for reading chunks correctly on sink! }) await pipe(combinedStream, otherPeerConnection.stream.sink) + // Don't close for data streams - sender closes when done reading } } - - await closeStreamConnection(otherPeerConnection.connection, remotePeer) } catch (err) { P2P_LOGGER.logMessageWithEmoji( 'handleProtocolCommands Error: ' + err.message, diff --git a/src/components/P2P/index.ts b/src/components/P2P/index.ts index 9e9ec1c79..ceef74337 100644 --- a/src/components/P2P/index.ts +++ b/src/components/P2P/index.ts @@ -1,14 +1,8 @@ // import diff from 'hyperdiff' -import { P2PCommandResponse, TypesenseSearchResponse } from '../../@types/index' +import { P2PCommandResponse } from '../../@types/index' import EventEmitter from 'node:events' -import clone from 'lodash.clonedeep' - -import { - // handlePeerConnect, - // handlePeerDiscovery, - // handlePeerDisconnect, - handleProtocolCommands -} from './handlers.js' +import lodash from 'lodash' +import { handleProtocolCommands } from './handlers.js' import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string' @@ -24,26 +18,33 @@ import { tcp } from '@libp2p/tcp' import { webSockets } from '@libp2p/websockets' import { circuitRelayTransport, circuitRelayServer } from '@libp2p/circuit-relay-v2' import { createLibp2p, Libp2p } from 'libp2p' -import { identify } from '@libp2p/identify' +import { identify, identifyPush } from '@libp2p/identify' import { autoNAT } from '@libp2p/autonat' import { uPnPNAT } from '@libp2p/upnp-nat' import { ping } from '@libp2p/ping' import { dcutr } from '@libp2p/dcutr' -import { kadDHT, passthroughMapper } from '@libp2p/kad-dht' -// import { gossipsub } from '@chainsafe/libp2p-gossipsub' +import { + kadDHT, + passthroughMapper, + removePrivateAddressesMapper, + removePublicAddressesMapper +} from '@libp2p/kad-dht' import { EVENTS, cidFromRawString } from '../../utils/index.js' import { Transform } from 'stream' import { Database } from '../database' -import { OceanNodeConfig, FindDDOResponse } from '../../@types/OceanNode' +import { + OceanNodeConfig, + FindDDOResponse, + dhtFilterMethod +} from '../../@types/OceanNode.js' // eslint-disable-next-line camelcase -import is_ip_private from 'private-ip' -import ip from 'ip' +import ipaddr from 'ipaddr.js' import { GENERIC_EMOJIS, LOG_LEVELS_STR } from '../../utils/logging/Logger.js' import { INDEXER_DDO_EVENT_EMITTER } from '../Indexer/index.js' import { P2P_LOGGER } from '../../utils/logging/common.js' import { CoreHandlersRegistry } from '../core/handler/coreHandlersRegistry' -import { type Multiaddr, multiaddr } from '@multiformats/multiaddr' +import { Multiaddr, multiaddr } from '@multiformats/multiaddr' // import { getIPv4, getIPv6 } from '../../utils/ip.js' const DEFAULT_OPTIONS = { @@ -57,10 +58,6 @@ type DDOCache = { dht: Map } -// republish any ddos we are providing to the network every 4 hours -// (we can put smaller interval for testing purposes) -const REPUBLISH_INTERVAL_HOURS = 1000 * 60 * 60 * 4 // 4 hours - let index = 0 export class OceanP2P extends EventEmitter { @@ -107,7 +104,6 @@ export class OceanP2P extends EventEmitter { async start(options: any = null) { this._topic = 'oceanprotocol' this._libp2p = await this.createNode(this._config) - this._libp2p.addEventListener('peer:connect', (evt: any) => { this.handlePeerConnect(evt) }) @@ -117,16 +113,21 @@ export class OceanP2P extends EventEmitter { this._libp2p.addEventListener('peer:discovery', (details: any) => { this.handlePeerDiscovery(details) }) - - this._options = Object.assign({}, clone(DEFAULT_OPTIONS), clone(options)) + this._options = Object.assign( + {}, + lodash.cloneDeep(DEFAULT_OPTIONS), + lodash.cloneDeep(options) + ) this._peers = [] this._connections = {} this._protocol = '/ocean/nodes/1.0.0' - // this._interval = setInterval(this._pollPeers.bind(this), this._options.pollInterval) - this._libp2p.handle(this._protocol, handleProtocolCommands.bind(this)) + this._interval = setInterval(this._flushAdvertiseQueue.bind(this), 60 * 1000) // every 60 seconds - setInterval(this.republishStoredDDOS.bind(this), REPUBLISH_INTERVAL_HOURS) + // only enable handling of commands if not bootstrap node + if (!this._config.isBootstrap) { + this._libp2p.handle(this._protocol, handleProtocolCommands.bind(this)) + } this._idx = index++ @@ -138,7 +139,7 @@ export class OceanP2P extends EventEmitter { // listen for indexer events and advertise did INDEXER_DDO_EVENT_EMITTER.addListener(EVENTS.METADATA_CREATED, (did) => { P2P_LOGGER.info(`Listened "${EVENTS.METADATA_CREATED}"`) - this.advertiseDid(did) + this.advertiseString(did) }) } @@ -157,18 +158,10 @@ export class OceanP2P extends EventEmitter { P2P_LOGGER.debug('Connection closed to:' + peerId.toString()) // Emitted when a peer has been found } - async handlePeerDiscovery(details: any) { + handlePeerDiscovery(details: any) { try { const peerInfo = details.detail - // P2P_LOGGER.debug('Discovered new peer:' + peerInfo.id.toString()) - if (peerInfo.multiaddrs) { - await this._libp2p.peerStore.save(peerInfo.id, { - multiaddrs: peerInfo.multiaddrs - }) - await this._libp2p.peerStore.patch(peerInfo.id, { - multiaddrs: peerInfo.multiaddrs - }) - } + P2P_LOGGER.debug('Discovered new peer:' + peerInfo.id.toString()) } catch (e) { // no panic if it failed // console.error(e) @@ -195,40 +188,40 @@ export class OceanP2P extends EventEmitter { try { const maddr = multiaddr(addr) // always filter loopback - if (ip.isLoopback(maddr.nodeAddress().address)) { - // disabled logs because of flooding - // P2P_LOGGER.debug('Deny announcement of loopback ' + maddr.nodeAddress().address) + const addressString = maddr.nodeAddress().address + + if (!ipaddr.isValid(addressString)) { + return false + } + + const parsedAddr = ipaddr.parse(addressString) + const range = parsedAddr.range() + + if (range === 'loopback') { return false } // check filters for (const filter of this._config.p2pConfig.filterAnnouncedAddresses) { - if (ip.cidrSubnet(filter).contains(maddr.nodeAddress().address)) { - // disabled logs because of flooding - // P2P_LOGGER.debug( - // 'Deny announcement of filtered ' + - // maddr.nodeAddress().address + - // '(belongs to ' + - // filter + - // ')' - // ) - return false + try { + const parsedCIDR = ipaddr.parseCIDR(filter) + if ((parsedAddr as any).match(parsedCIDR as any)) { + return false + } + } catch (e) { + P2P_LOGGER.error(`Invalid CIDR filter in config: ${filter}`) } } if ( this._config.p2pConfig.announcePrivateIp === false && - (is_ip_private(maddr.nodeAddress().address) || - ip.isPrivate(maddr.nodeAddress().address)) + (range === 'private' || range === 'uniqueLocal') ) { // disabled logs because of flooding // P2P_LOGGER.debug( // 'Deny announcement of private address ' + maddr.nodeAddress().address // ) return false - } else { - // disabled logs because of flooding - // P2P_LOGGER.debug('Allow announcement of ' + maddr.nodeAddress().address) - return true } + return true } catch (e) { // we reach this part when having circuit relay. this is fine return true @@ -238,6 +231,8 @@ export class OceanP2P extends EventEmitter { async createNode(config: OceanNodeConfig): Promise { try { this._publicAddress = config.keys.peerId.toString() + P2P_LOGGER.info(`Starting P2P Node with peerID: ${this._publicAddress}`) + this._publicKey = config.keys.publicKey this._privateKey = config.keys.privateKey /** @type {import('libp2p').Libp2pOptions} */ @@ -279,8 +274,23 @@ export class OceanP2P extends EventEmitter { multiaddrs.filter((m) => this.shouldAnnounce(m)) } } + const dhtOptions = { + allowQueryWithZeroPeers: false, + maxInboundStreams: config.p2pConfig.dhtMaxInboundStreams, + maxOutboundStreams: config.p2pConfig.dhtMaxOutboundStreams, + clientMode: false, // always be a server + kBucketSize: 20, + protocol: '/ocean/nodes/1.0.0/kad/1.0.0', + peerInfoMapper: passthroughMapper // see below + } + if (config.p2pConfig.dhtFilter === dhtFilterMethod.filterPrivate) + dhtOptions.peerInfoMapper = removePrivateAddressesMapper + if (config.p2pConfig.dhtFilter === dhtFilterMethod.filterPublic) + dhtOptions.peerInfoMapper = removePublicAddressesMapper let servicesConfig = { identify: identify(), + dht: kadDHT(dhtOptions), + identifyPush: identifyPush(), /* pubsub: gossipsub({ fallbackToFloodsub: false, @@ -295,27 +305,10 @@ export class OceanP2P extends EventEmitter { // enabled: true allowedTopics: ['oceanprotocol._peer-discovery._p2p._pubsub', 'oceanprotocol'] }), */ - dht: kadDHT({ - // this is necessary because this node is not connected to the public network - // it can be removed if, for example bootstrappers are configured - allowQueryWithZeroPeers: true, - maxInboundStreams: config.p2pConfig.dhtMaxInboundStreams, - maxOutboundStreams: config.p2pConfig.dhtMaxOutboundStreams, - - clientMode: false, - kBucketSize: 20, - protocol: '/ocean/nodes/1.0.0/kad/1.0.0', - peerInfoMapper: passthroughMapper - // protocolPrefix: '/ocean/nodes/1.0.0' - // randomWalk: { - // enabled: true, // Allows to disable discovery (enabled by default) - // interval: 300e3, - // timeout: 10e3 - // } - }), ping: ping(), dcutr: dcutr() } + // eslint-disable-next-line no-constant-condition, no-self-compare if (config.p2pConfig.enableCircuitRelayServer) { P2P_LOGGER.info('Enabling Circuit Relay Server') @@ -423,13 +416,6 @@ export class OceanP2P extends EventEmitter { this._upnp_interval = setInterval(this.UPnpCron.bind(this), 3000) } - if (config.p2pConfig.enableDHTServer) { - try { - await node.services.dht.setMode('server') - } catch (e) { - P2P_LOGGER.warn(`Failed to set mode server for DHT`) - } - } return node } catch (e) { P2P_LOGGER.logMessageWithEmoji( @@ -601,10 +587,27 @@ export class OceanP2P extends EventEmitter { return finalmultiaddrs } + async findPeerInDht(peerName: string, timeout?: number) { + try { + const peer = peerIdFromString(peerName) + const data = await this._libp2p.peerRouting.findPeer(peer, { + signal: + isNaN(timeout) || timeout === 0 + ? AbortSignal.timeout(5000) + : AbortSignal.timeout(timeout), + useCache: true, + useNetwork: true + }) + return data + } catch (e) {} + return null + } + async sendTo( peerName: string, message: string, - sink: any + sink: any, + multiAddrs?: string[] ): Promise { P2P_LOGGER.logMessage('SendTo() node ' + peerName + ' task: ' + message, true) @@ -626,7 +629,17 @@ export class OceanP2P extends EventEmitter { response.status.error = 'Invalid peer' return response } - const multiaddrs: Multiaddr[] = await this.getPeerMultiaddrs(peerName) + let multiaddrs: Multiaddr[] = [] + + if (!multiAddrs || multiAddrs.length < 1) { + // if they are no forced multiaddrs, try to find node multiaddr from peerStore/dht + multiaddrs = await this.getPeerMultiaddrs(peerName) + } else { + // just used what we were instructed to use + for (const addr of multiAddrs) { + multiaddrs.push(new Multiaddr(addr)) + } + } if (multiaddrs.length < 1) { response.status.httpStatus = 404 response.status.error = `Cannot find any address to dial for peer: ${peerId}` @@ -637,14 +650,22 @@ export class OceanP2P extends EventEmitter { let stream // dial/connect to the target node try { - stream = await this._libp2p.dialProtocol(multiaddrs, this._protocol, { - signal: AbortSignal.timeout(3000), + const options = { + signal: AbortSignal.timeout(10000), priority: 100, runOnTransientConnection: true - }) + } + const connection = await this._libp2p.dial(multiaddrs, options) + if (connection.remotePeer.toString() !== peerId.toString()) { + response.status.httpStatus = 404 + response.status.error = `Invalid peer on the other side: ${connection.remotePeer.toString()}` + P2P_LOGGER.error(response.status.error) + return response + } + stream = await connection.newStream(this._protocol, options) } catch (e) { response.status.httpStatus = 404 - response.status.error = `Cannot connect to peer: ${peerId}` + response.status.error = `Cannot connect to peer ${peerId}: ${e.message}` P2P_LOGGER.error(response.status.error) return response } @@ -663,9 +684,12 @@ export class OceanP2P extends EventEmitter { sink ) } catch (err) { - P2P_LOGGER.error(`Unable to send P2P message: ${err.message}`) - response.status.httpStatus = 404 - response.status.error = err.message + P2P_LOGGER.error( + `Cannot connect to peer - Unable to send P2P message: ${err.message}` + ) + response.status.httpStatus = 500 + response.status.error = `Cannot connect to peer - Unable to send P2P message: ${err.message}` + response.stream = null } } else { response.status.httpStatus = 404 @@ -729,17 +753,34 @@ export class OceanP2P extends EventEmitter { } } - async advertiseDid(did: string) { - P2P_LOGGER.logMessage('Advertising ' + did, true) + async _flushAdvertiseQueue() { + if (this._pendingAdvertise.length > 0) { + P2P_LOGGER.debug( + `Flushing advertise queue with ${this._pendingAdvertise.length} items` + ) + const list = JSON.parse(JSON.stringify(this._pendingAdvertise)) + for (const did of list) { + this._pendingAdvertise = this._pendingAdvertise.filter((item) => item !== did) + + await this.advertiseString(did) + } + // this._pendingAdvertise = [] + } + } + + async advertiseString(did: string) { try { + const cid = await cidFromRawString(did) + P2P_LOGGER.debug('Advertising "' + did + `" as CID:` + cid) const x = (await this.getAllOceanPeers()).length if (x > 0) { - const cid = await cidFromRawString(did) const multiAddrs = this._libp2p.components.addressManager.getAddresses() // console.log('multiaddrs: ', multiAddrs) - await this._libp2p.contentRouting.provide(cid, multiAddrs) + this._libp2p.contentRouting.provide(cid, multiAddrs).catch((err: any) => { + P2P_LOGGER.error(`Error advertising DDO: ${err}`) + }) } else { - P2P_LOGGER.verbose( + P2P_LOGGER.debug( 'Could not find any Ocean peers. Nobody is listening at the moment, skipping...' ) // save it for retry later @@ -753,67 +794,50 @@ export class OceanP2P extends EventEmitter { } } - async getProvidersForDid(did: string) { - P2P_LOGGER.logMessage('Fetching providers for ' + did, true) - const cid = await cidFromRawString(did) + getCommonPeers( + rets: Array> + ): Array<{ id: string; multiaddrs: any[] }> { + return rets.reduce( + (acc, curr) => + acc.filter((item) => curr.some((el) => el.id.toString() === item.id.toString())), + rets[0] // Initialize with first subarray + ) + } + + async getProvidersForStrings( + input: string[], + timeout?: number + ): Promise> { + const rets = await Promise.all( + input.map(async (x) => { + const providers = await this.getProvidersForString(x, timeout) + return providers && providers.length > 0 ? providers : [] // Keep only valid results + }) + ) + return this.getCommonPeers(rets) + } + + async getProvidersForString( + input: string, + timeout?: number + ): Promise> { + P2P_LOGGER.logMessage('Fetching providers for ' + input, true) + const cid = await cidFromRawString(input) const peersFound = [] try { const f = await this._libp2p.contentRouting.findProviders(cid, { - queryFuncTimeout: 20000 // 20 seconds + queryFuncTimeout: timeout || 20000 // 20 seconds // on timeout the query ends with an abort signal => CodeError: Query aborted }) for await (const value of f) { peersFound.push(value) } } catch (e) { - P2P_LOGGER.error('getProvidersForDid()' + e.message) + P2P_LOGGER.error('getProvidersForString()' + e.message) } return peersFound } - // republish the ddos we have - // related: https://github.com/libp2p/go-libp2p-kad-dht/issues/323 - async republishStoredDDOS() { - try { - if (!this.db) { - P2P_LOGGER.logMessage( - `republishStoredDDOS() attempt aborted because there is no database!`, - true - ) - return - } - const db = this.db.ddo - const searchParameters = { - q: '*' - } - - const result: TypesenseSearchResponse[] = await db.search(searchParameters) - if (result && result.length > 0 && result[0].found) { - P2P_LOGGER.logMessage(`Will republish cid for ${result[0].found} documents`, true) - result[0].hits.forEach((hit: any) => { - const ddo = hit.document - this.advertiseDid(ddo.id) - // populate hash table if not exists - // (even if no peers are listening, it still goes to the pending publish table) - if (!this._ddoDHT.dht.has(ddo.id)) { - this.cacheDDO(ddo) - } - // todo check stuff like purgatory - }) - // update time - this._ddoDHT.updated = new Date().getTime() - } else { - P2P_LOGGER.logMessage('There is nothing to republish, skipping...', true) - } - } catch (err) { - P2P_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `Caught "${err.message}" on republishStoredDDOS()`, - true - ) - } - } - // cache a ddos object cacheDDO(ddo: any) { this._ddoDHT.dht.set(ddo.id, { @@ -822,6 +846,7 @@ export class OceanP2P extends EventEmitter { lastUpdateTime: ddo.metadata.updated, provider: this.getPeerId() }) + this._ddoDHT.updated = new Date().getTime() } /** @@ -867,7 +892,7 @@ export class OceanP2P extends EventEmitter { // if already added before, create() will return null, but still advertise it try { await db.create(ddo) - await this.advertiseDid(ddo.id) + await this.advertiseString(ddo.id) // populate hash table this.cacheDDO(ddo) count++ diff --git a/src/components/c2d/compute_engine_base.ts b/src/components/c2d/compute_engine_base.ts index ef147eea5..73c794c24 100644 --- a/src/components/c2d/compute_engine_base.ts +++ b/src/components/c2d/compute_engine_base.ts @@ -5,14 +5,30 @@ import type { ComputeAlgorithm, ComputeAsset, ComputeJob, - ComputeOutput -} from '../../@types/C2D.js' -import { C2DClusterType } from '../../@types/C2D.js' + ComputeOutput, + ComputeResourceRequest, + ComputeResourceRequestWithPrice, + ComputeResourceType, + ComputeResource, + ComputeResourcesPricingInfo, + DBComputeJobPayment, + DBComputeJob, + dockerDeviceRequest, + DBComputeJobMetadata, + ComputeEnvFees +} from '../../@types/C2D/C2D.js' +import { C2DClusterType } from '../../@types/C2D/C2D.js' +import { C2DDatabase } from '../database/C2DDatabase.js' +import { Escrow } from '../core/utils/escrow.js' -export class C2DEngine { +export abstract class C2DEngine { private clusterConfig: C2DClusterInfo - public constructor(cluster: C2DClusterInfo) { + public db: C2DDatabase + public escrow: Escrow + public constructor(cluster: C2DClusterInfo, db: C2DDatabase, escrow: Escrow) { this.clusterConfig = cluster + this.db = db + this.escrow = escrow } getC2DConfig(): C2DClusterInfo { @@ -26,19 +42,53 @@ export class C2DEngine { } // functions which need to be implemented by all engine types - // eslint-disable-next-line require-await - public async getComputeEnvironments(chainId: number): Promise { - throw new Error(`Not implemented`) - } + public abstract getComputeEnvironments(chainId?: number): Promise - public async start(): Promise { - // overwritten by classes for start actions + // overwritten by classes for start actions + public start(): Promise { + return null } - public async stop(): Promise { - // overwritten by classes for cleanup + // overwritten by classes for cleanup + public stop(): Promise { + return null } + public abstract startComputeJob( + assets: ComputeAsset[], + algorithm: ComputeAlgorithm, + output: ComputeOutput, + environment: string, + owner: string, + maxJobDuration: number, + resources: ComputeResourceRequest[], + payment: DBComputeJobPayment, + jobId: string, + metadata?: DBComputeJobMetadata, + additionalViewers?: string[], + queueMaxWaitTime?: number + ): Promise + + public abstract stopComputeJob( + jobId: string, + owner: string, + agreementId?: string + ): Promise + + public abstract getComputeJobStatus( + consumerAddress?: string, + agreementId?: string, + jobId?: string + ): Promise + + public abstract getComputeJobResult( + consumerAddress: string, + jobId: string, + index: number + ): Promise<{ stream: Readable; headers: any }> + + public abstract cleanupExpiredStorage(job: DBComputeJob): Promise + public async envExists( chainId: number, envIdWithHash?: string, @@ -77,52 +127,376 @@ export class C2DEngine { return null } - // eslint-disable-next-line require-await - public async startComputeJob( - assets: ComputeAsset[], - algorithm: ComputeAlgorithm, - output: ComputeOutput, - owner: string, - environment: string, - validUntil: number, - chainId: number, - agreementId: string - ): Promise { - throw new Error(`Not implemented`) + public getStreamableLogs(jobId: string): Promise { + throw new Error(`Not implemented for this engine type`) } - // eslint-disable-next-line require-await - public async stopComputeJob( - jobId: string, - owner: string, - agreementId?: string - ): Promise { - throw new Error(`Not implemented`) + protected async getJobEnvironment(job: DBComputeJob): Promise { + const environments: ComputeEnvironment[] = await ( + await this.getComputeEnvironments() + ).filter((env: ComputeEnvironment) => env.id === job.environment) + // found it + if (environments.length === 1) { + const environment = environments[0] + return environment + } + return null } + /* Returns ComputeResources for a specific resource + */ + public getMaxMinResource( + id: ComputeResourceType, + env: ComputeEnvironment, + isFree: boolean + ): ComputeResource { + const paid = this.getResource(env.resources, id) + if (!paid) { + return { + id, + total: 0, + max: 0, + min: 0 + } + } + let free = null + if (isFree && 'free' in env && 'resources' in env.free) { + free = this.getResource(env.free.resources, id) + if (!free) { + // this resource is not listed under free, so it's not available + return { + id, + total: 0, + max: 0, + min: 0 + } + } + } + const total = 'total' in paid ? paid.total : 0 + const max = 'max' in paid ? paid.max : 0 + const min = 'min' in paid ? paid.min : 0 + const ret: ComputeResource = { + id, + total: free && 'total' in free ? free.total : total, + max: free && 'max' in free ? free.max : max, + min: free && 'min' in free ? free.min : min + } + + return ret + } + + // make sure that all requests have cpu, ram, storage // eslint-disable-next-line require-await - public async getComputeJobStatus( - consumerAddress?: string, - agreementId?: string, - jobId?: string - ): Promise { - throw new Error(`Not implemented`) + public async checkAndFillMissingResources( + resources: ComputeResourceRequest[], + env: ComputeEnvironment, + isFree: boolean + ): Promise { + if (isFree && !('free' in env)) throw new Error('This env does not support free jobs') + const properResources: ComputeResourceRequest[] = [] + const elements: string[] = [] + + for (const res of env.free.resources) elements.push(res.id) + for (const res of env.resources) if (!elements.includes(res.id)) elements.push(res.id) + + /* if (isFree && 'free' in env && 'resources' in env.free) { + for (const res of env.free.resources) elements.push(res.id) + } else for (const res of env.resources) elements.push(res.id) + */ + for (const device of elements) { + let desired = this.getResourceRequest(resources, device) + const minMax = this.getMaxMinResource(device, env, isFree) + if (!desired && minMax.min >= 0) { + // it's required + desired = minMax.min + } else { + if (desired < minMax.min) desired = minMax.min + if (desired > minMax.max) { + throw new Error( + 'Not enough ' + + device + + ' resources. Requested ' + + desired + + ', but max is ' + + minMax.max + ) + } + } + properResources.push({ id: device, amount: desired }) + } + + return properResources } + public async getUsedResources(env: ComputeEnvironment): Promise { + const usedResources: { [x: string]: any } = {} + const usedFreeResources: { [x: string]: any } = {} + const jobs = await this.db.getRunningJobs(this.getC2DConfig().hash) + let totalJobs = 0 + let totalFreeJobs = 0 + let queuedJobs = 0 + let queuedFreeJobs = 0 + let maxWaitTime = 0 + let maxWaitTimeFree = 0 + for (const job of jobs) { + if (job.environment === env.id) { + if (job.queueMaxWaitTime === 0) { + totalJobs++ + if (job.isFree) totalFreeJobs++ + + for (const resource of job.resources) { + if (!(resource.id in usedResources)) usedResources[resource.id] = 0 + usedResources[resource.id] += resource.amount + if (job.isFree) { + if (!(resource.id in usedFreeResources)) usedFreeResources[resource.id] = 0 + usedFreeResources[resource.id] += resource.amount + } + } + } else { + // queued job + queuedJobs++ + maxWaitTime += job.maxJobDuration + if (job.isFree) { + queuedFreeJobs++ + maxWaitTimeFree += job.maxJobDuration + } + } + } + } + return { + totalJobs, + totalFreeJobs, + usedResources, + usedFreeResources, + queuedJobs, + queuedFreeJobs, + maxWaitTime, + maxWaitTimeFree + } + } + + // overridden by each engine if required // eslint-disable-next-line require-await - public async getComputeJobResult( - consumerAddress: string, - jobId: string, - index: number - ): Promise { - throw new Error(`Not implemented`) + public async checkIfResourcesAreAvailable( + resourcesRequest: ComputeResourceRequest[], + env: ComputeEnvironment, + isFree: boolean + ) { + for (const request of resourcesRequest) { + let envResource = this.getResource(env.resources, request.id) + if (!envResource) throw new Error(`No such resource ${request.id}`) + if (envResource.total - envResource.inUse < request.amount) + throw new Error(`Not enough available ${request.id}`) + if (isFree) { + if (!env.free) throw new Error(`No free resources`) + envResource = this.getResource(env.free.resources, request.id) + if (!envResource) throw new Error(`No such free resource ${request.id}`) + if (envResource.total - envResource.inUse < request.amount) + throw new Error(`Not enough available ${request.id} for free`) + } + } + if ('maxJobs' in env && env.maxJobs && env.runningJobs + 1 > env.maxJobs) { + throw new Error(`Too many running jobs `) + } + if ( + isFree && + 'free' in env && + `maxJobs` in env.free && + env.free.maxJobs && + env.runningfreeJobs + 1 > env.free.maxJobs + ) { + throw new Error(`Too many running free jobs `) + } } -} -export class C2DEngineLocal extends C2DEngine { - // eslint-disable-next-line no-useless-constructor - public constructor(clusterConfig: C2DClusterInfo) { - super(clusterConfig) + public getResource(resources: ComputeResource[], id: ComputeResourceType) { + if (!resources) return null + for (const resource of resources) { + if (resource.id === id) { + return resource + } + } + return null + } + + public getResourceRequest( + resources: ComputeResourceRequest[], + id: ComputeResourceType + ) { + if (!resources) return null + for (const resource of resources) { + if (resource.id === id) { + return resource.amount + } + } + return null + } + + public getDockerDeviceRequest( + requests: ComputeResourceRequest[], + resources: ComputeResource[] + ): dockerDeviceRequest[] | null { + if (!resources) return null + + const grouped: Record = {} + + for (const resource of requests) { + const res = this.getResource(resources, resource.id) + const init = res?.init?.deviceRequests + if (!init) continue + + const key = `${init.Driver}-${JSON.stringify(init.Capabilities)}` + if (!grouped[key]) { + grouped[key] = { + Driver: init.Driver, + Capabilities: init.Capabilities, + DeviceIDs: [], + Options: init.Options ?? null, + Count: undefined + } + } + + if (init.DeviceIDs?.length) { + grouped[key].DeviceIDs!.push(...init.DeviceIDs) + } + } + + return Object.values(grouped) + } + + public getDockerAdvancedConfig( + requests: ComputeResourceRequest[], + resources: ComputeResource[] + ) { + const ret = { + Devices: [] as any[], + GroupAdd: [] as string[], + SecurityOpt: [] as string[], + Binds: [] as string[], + CapAdd: [] as string[], + CapDrop: [] as string[], + IpcMode: null as string, + ShmSize: 0 as number + } + for (const resource of requests) { + const res = this.getResource(resources, resource.id) + if (res.init && res.init.advanced) { + for (const [key, value] of Object.entries(res.init.advanced)) { + switch (key) { + case 'IpcMode': + ret.IpcMode = value as string + break + case 'ShmSize': + ret.ShmSize = value as number + break + case 'GroupAdd': + for (const grp of value as string[]) { + if (!ret.GroupAdd.includes(grp)) ret.GroupAdd.push(grp) + } + break + case 'CapAdd': + for (const grp of value as string[]) { + if (!ret.CapAdd.includes(grp)) ret.CapAdd.push(grp) + } + break + case 'CapDrop': + for (const grp of value as string[]) { + if (!ret.CapDrop.includes(grp)) ret.CapDrop.push(grp) + } + break + case 'Devices': + for (const device of value as string[]) { + if (!ret.Devices.find((d) => d.PathOnHost === device)) + ret.Devices.push({ + PathOnHost: device, + PathInContainer: device, + CgroupPermissions: 'rwm' + }) + } + break + case 'SecurityOpt': + for (const [secKeys, secValues] of Object.entries(value)) + if (!ret.SecurityOpt.includes(secKeys + '=' + secValues)) + ret.SecurityOpt.push(secKeys + '=' + secValues) + break + case 'Binds': + for (const grp of value as string[]) { + if (!ret.Binds.includes(grp)) ret.Binds.push(grp) + } + break + } + } + } + } + return ret + } + + public getEnvPricesForToken( + env: ComputeEnvironment, + chainId: number, + token: string + ): ComputeResourcesPricingInfo[] { + console.log(env) + if (!env.fees || !(chainId in env.fees) || !env.fees[chainId]) { + return null + } + console.log(env.fees) + for (const fee of env.fees[chainId]) { + console.log(fee) + console.log(fee.feeToken) + console.log(token) + // eslint-disable-next-line security/detect-possible-timing-attacks + if (fee.feeToken === token) { + console.log('Found') + return fee.prices + } else console.log('NOT Found') + } + + return null + } + + public getResourcePrice( + prices: ComputeResourcesPricingInfo[], + id: ComputeResourceType + ) { + for (const pr of prices) { + if (pr.id === id) { + return pr.price + } + } + return 0 + } + + public getTotalCostOfJob( + resources: ComputeResourceRequestWithPrice[], + duration: number, + fee: ComputeEnvFees + ) { + let cost: number = 0 + for (const request of resources) { + const price = fee.prices.find((p) => p.id === request.id)?.price + if (price) { + cost += price * request.amount * Math.ceil(duration / 60) + } + } + return cost + } + + public calculateResourcesCost( + resourcesRequest: ComputeResourceRequest[], + env: ComputeEnvironment, + chainId: number, + token: string, + maxJobDuration: number + ): number | null { + if (maxJobDuration < env.minJobDuration) maxJobDuration = env.minJobDuration + const prices = this.getEnvPricesForToken(env, chainId, token) + if (!prices) return null + let cost: number = 0 + for (const request of resourcesRequest) { + const resourcePrice = this.getResourcePrice(prices, request.id) + cost += resourcePrice * request.amount * Math.ceil(maxJobDuration / 60) + } + return cost } - // not implemented yet } diff --git a/src/components/c2d/compute_engine_docker.ts b/src/components/c2d/compute_engine_docker.ts new file mode 100644 index 000000000..38ebb3597 --- /dev/null +++ b/src/components/c2d/compute_engine_docker.ts @@ -0,0 +1,2062 @@ +/* eslint-disable security/detect-non-literal-fs-filename */ +import { Readable } from 'stream' +import os from 'os' +import { + C2DStatusNumber, + C2DStatusText, + DBComputeJobMetadata +} from '../../@types/C2D/C2D.js' +import type { + C2DClusterInfo, + ComputeEnvironment, + ComputeAlgorithm, + ComputeAsset, + ComputeJob, + ComputeOutput, + DBComputeJob, + DBComputeJobPayment, + ComputeResult, + RunningPlatform, + ComputeEnvFeesStructure, + ComputeResourceRequest, + ComputeEnvFees +} from '../../@types/C2D/C2D.js' +import { getConfiguration } from '../../utils/config.js' +import { C2DEngine } from './compute_engine_base.js' +import { C2DDatabase } from '../database/C2DDatabase.js' +import { Escrow } from '../core/utils/escrow.js' +import { create256Hash } from '../../utils/crypt.js' +import { Storage } from '../storage/index.js' +import Dockerode from 'dockerode' +import type { ContainerCreateOptions, HostConfig, VolumeCreateOptions } from 'dockerode' +import * as tar from 'tar' +import * as tarStream from 'tar-stream' +import { + createWriteStream, + existsSync, + mkdirSync, + rmSync, + writeFileSync, + appendFileSync, + statSync, + createReadStream +} from 'fs' +import { pipeline } from 'node:stream/promises' +import { CORE_LOGGER } from '../../utils/logging/common.js' +import { AssetUtils } from '../../utils/asset.js' +import { FindDdoHandler } from '../core/handler/ddoHandler.js' +import { OceanNode } from '../../OceanNode.js' +import { decryptFilesObject, omitDBComputeFieldsFromComputeJob } from './index.js' +import { ValidateParams } from '../httpRoutes/validateCommands.js' +import { Service } from '@oceanprotocol/ddo-js' +import { getOceanTokenAddressForChain } from '../../utils/address.js' + +export class C2DEngineDocker extends C2DEngine { + private envs: ComputeEnvironment[] = [] + + public docker: Dockerode + private cronTimer: any + private cronTime: number = 2000 + private jobImageSizes: Map = new Map() + private static DEFAULT_DOCKER_REGISTRY = 'https://registry-1.docker.io' + + public constructor(clusterConfig: C2DClusterInfo, db: C2DDatabase, escrow: Escrow) { + super(clusterConfig, db, escrow) + + this.docker = null + if (clusterConfig.connection.socketPath) { + try { + this.docker = new Dockerode({ socketPath: clusterConfig.connection.socketPath }) + } catch (e) { + CORE_LOGGER.error('Could not create Docker container: ' + e.message) + } + } + if ( + clusterConfig.connection.protocol && + clusterConfig.connection.host && + clusterConfig.connection.port + ) { + try { + this.docker = new Dockerode({ + protocol: clusterConfig.connection.protocol, + host: clusterConfig.connection.host, + port: clusterConfig.connection.port + }) + } catch (e) { + CORE_LOGGER.error('Could not create Docker container: ' + e.message) + } + } + // TO DO C2D - create envs + try { + if (!existsSync(clusterConfig.tempFolder)) + mkdirSync(clusterConfig.tempFolder, { recursive: true }) + } catch (e) { + CORE_LOGGER.error( + 'Could not create Docker container temporary folders: ' + e.message + ) + } + // envs are build on start function + } + + public override async start() { + // let's build the env. Swarm and k8 will build multiple envs, based on arhitecture + const config = await getConfiguration() + const envConfig = await this.getC2DConfig().connection + console.log(config) + console.log(envConfig) + let sysinfo = null + try { + sysinfo = await this.docker.info() + } catch (e) { + CORE_LOGGER.error('Could not get docker info: ' + e.message) + // since we cannot connect to docker, we cannot start the engine -> no envs + return + } + // console.log(sysinfo) + let fees: ComputeEnvFeesStructure = null + const supportedChains: number[] = [] + if (config.supportedNetworks) { + for (const chain of Object.keys(config.supportedNetworks)) { + supportedChains.push(parseInt(chain)) + } + } + for (const feeChain of Object.keys(envConfig.fees)) { + // for (const feeConfig of envConfig.fees) { + // console.log(feeChain) + if (supportedChains.includes(parseInt(feeChain))) { + if (fees === null) fees = {} + if (!(feeChain in fees)) fees[feeChain] = [] + const tmpFees: ComputeEnvFees[] = [] + for (let i = 0; i < envConfig.fees[feeChain].length; i++) { + if ( + envConfig.fees[feeChain][i].prices && + envConfig.fees[feeChain][i].prices.length > 0 + ) { + if (!envConfig.fees[feeChain][i].feeToken) { + const tokenAddress = await getOceanTokenAddressForChain(parseInt(feeChain)) + if (tokenAddress) { + envConfig.fees[feeChain][i].feeToken = tokenAddress + tmpFees.push(envConfig.fees[feeChain][i]) + } else { + CORE_LOGGER.error( + `Unable to find Ocean token address for chain ${feeChain} and no custom token provided` + ) + } + } else { + tmpFees.push(envConfig.fees[feeChain][i]) + } + } else { + CORE_LOGGER.error( + `Unable to find prices for fee ${JSON.stringify( + envConfig.fees[feeChain][i] + )} on chain ${feeChain}` + ) + } + } + fees[feeChain] = tmpFees + } + + /* for (const chain of Object.keys(config.supportedNetworks)) { + const chainId = parseInt(chain) + if (task.chainId && task.chainId !== chainId) continue + result[chainId] = await computeEngines.fetchEnvironments(chainId) + } */ + } + this.envs.push({ + id: '', // this.getC2DConfig().hash + '-' + create256Hash(JSON.stringify(this.envs[i])), + runningJobs: 0, + consumerAddress: config.keys.ethAddress, + platform: { + architecture: sysinfo.Architecture, + os: sysinfo.OSType + }, + access: { + addresses: [], + accessLists: [] + }, + fees, + queuedJobs: 0, + queuedFreeJobs: 0, + queMaxWaitTime: 0, + queMaxWaitTimeFree: 0 + }) + if (`access` in envConfig) this.envs[0].access = envConfig.access + + if (`storageExpiry` in envConfig) this.envs[0].storageExpiry = envConfig.storageExpiry + if (`maxJobDuration` in envConfig) + this.envs[0].maxJobDuration = envConfig.maxJobDuration + if (`maxJobs` in envConfig) this.envs[0].maxJobs = envConfig.maxJobs + // let's add resources + this.envs[0].resources = [] + this.envs[0].resources.push({ + id: 'cpu', + type: 'cpu', + total: sysinfo.NCPU, + max: sysinfo.NCPU, + min: 1, + description: os.cpus()[0].model + }) + this.envs[0].resources.push({ + id: 'ram', + type: 'ram', + total: Math.floor(sysinfo.MemTotal / 1024 / 1024 / 1024), + max: Math.floor(sysinfo.MemTotal / 1024 / 1024 / 1024), + min: 1 + }) + + if (envConfig.resources) { + for (const res of envConfig.resources) { + // allow user to add other resources + if (res.id !== 'cpu' && res.id !== 'ram') { + if (!res.max) res.max = res.total + if (!res.min) res.min = 0 + this.envs[0].resources.push(res) + } + } + } + /* TODO - get namedresources & discreete one + if (sysinfo.GenericResources) { + for (const [key, value] of Object.entries(sysinfo.GenericResources)) { + for (const [type, val] of Object.entries(value)) { + // for (const resType in sysinfo.GenericResources) { + if (type === 'NamedResourceSpec') { + // if we have it, ignore it + const resourceId = val.Value + const resourceType = val.Kind + let found = false + for (const res of this.envs[0].resources) { + if (res.id === resourceId) { + found = true + break + } + } + if (!found) { + this.envs[0].resources.push({ + id: resourceId, + kind: resourceType, + total: 1, + max: 1, + min: 0 + }) + } + } + } + } + } + */ + // limits for free env + if ('free' in envConfig) { + this.envs[0].free = { + access: { + addresses: [], + accessLists: [] + } + } + if (`access` in envConfig.free) this.envs[0].free.access = envConfig.free.access + if (`storageExpiry` in envConfig.free) + this.envs[0].free.storageExpiry = envConfig.free.storageExpiry + if (`maxJobDuration` in envConfig.free) + this.envs[0].free.maxJobDuration = envConfig.free.maxJobDuration + if (`maxJobs` in envConfig.free) this.envs[0].free.maxJobs = envConfig.free.maxJobs + if ('resources' in envConfig.free) { + // TO DO - check if resource is also listed in this.envs[0].resources, if not, ignore it + this.envs[0].free.resources = envConfig.free.resources + } + } + this.envs[0].id = + this.getC2DConfig().hash + '-' + create256Hash(JSON.stringify(this.envs[0])) + + // only now set the timer + if (!this.cronTimer) { + this.setNewTimer() + } + } + + // eslint-disable-next-line require-await + public override async getComputeEnvironments( + chainId?: number + ): Promise { + /** + * Returns all cluster's compute environments, filtered by a specific chainId if needed. Env's id already contains the cluster hash + */ + if (!this.docker) return [] + const filteredEnvs = [] + // const systemInfo = this.docker ? await this.docker.info() : null + for (const computeEnv of this.envs) { + if ( + !chainId || + (computeEnv.fees && Object.hasOwn(computeEnv.fees, String(chainId))) + ) { + // TO DO - At some point in time we need to handle multiple runtimes + // console.log('********************************') + // console.log(systemInfo.GenericResources) + // console.log('********************************') + // if (systemInfo.Runtimes) computeEnv.runtimes = systemInfo.Runtimes + // if (systemInfo.DefaultRuntime) + // computeEnv.defaultRuntime = systemInfo.DefaultRuntime + const { + totalJobs, + totalFreeJobs, + usedResources, + usedFreeResources, + queuedJobs, + queuedFreeJobs, + maxWaitTime, + maxWaitTimeFree + } = await this.getUsedResources(computeEnv) + computeEnv.runningJobs = totalJobs + computeEnv.runningfreeJobs = totalFreeJobs + computeEnv.queuedJobs = queuedJobs + computeEnv.queuedFreeJobs = queuedFreeJobs + computeEnv.queMaxWaitTime = maxWaitTime + computeEnv.queMaxWaitTimeFree = maxWaitTimeFree + for (let i = 0; i < computeEnv.resources.length; i++) { + if (computeEnv.resources[i].id in usedResources) + computeEnv.resources[i].inUse = usedResources[computeEnv.resources[i].id] + else computeEnv.resources[i].inUse = 0 + } + if (computeEnv.free && computeEnv.free.resources) { + for (let i = 0; i < computeEnv.free.resources.length; i++) { + if (computeEnv.free.resources[i].id in usedFreeResources) + computeEnv.free.resources[i].inUse = + usedFreeResources[computeEnv.free.resources[i].id] + else computeEnv.free.resources[i].inUse = 0 + } + } + filteredEnvs.push(computeEnv) + } + } + + return filteredEnvs + } + + private static parseImage(image: string) { + let registry = C2DEngineDocker.DEFAULT_DOCKER_REGISTRY + let name = image + let ref = 'latest' + + const atIdx = name.indexOf('@') + const colonIdx = name.lastIndexOf(':') + + if (atIdx !== -1) { + ref = name.slice(atIdx + 1) + name = name.slice(0, atIdx) + } else if (colonIdx !== -1 && !name.slice(colonIdx).includes('/')) { + ref = name.slice(colonIdx + 1) + name = name.slice(0, colonIdx) + } + + const firstSlash = name.indexOf('/') + if (firstSlash !== -1) { + const potential = name.slice(0, firstSlash) + if (potential.includes('.') || potential.includes(':')) { + registry = potential.includes('localhost') + ? `http://${potential}` + : `https://${potential}` + name = name.slice(firstSlash + 1) + } + } + + if (registry === C2DEngineDocker.DEFAULT_DOCKER_REGISTRY && !name.includes('/')) { + name = `library/${name}` + } + + return { registry, name, ref } + } + + public static async getDockerManifest(image: string): Promise { + const { registry, name, ref } = C2DEngineDocker.parseImage(image) + const url = `${registry}/v2/${name}/manifests/${ref}` + let headers: Record = { + Accept: + 'application/vnd.docker.distribution.manifest.v2+json, application/vnd.oci.image.manifest.v1+json, application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.oci.image.index.v1+json' + } + let response = await fetch(url, { headers }) + + if (response.status === 401) { + const match = (response.headers.get('www-authenticate') || '').match( + /Bearer realm="([^"]+)",service="([^"]+)"/ + ) + if (match) { + const tokenUrl = new URL(match[1]) + tokenUrl.searchParams.set('service', match[2]) + tokenUrl.searchParams.set('scope', `repository:${name}:pull`) + const { token } = (await fetch(tokenUrl.toString()).then((r) => r.json())) as { + token: string + } + headers = { ...headers, Authorization: `Bearer ${token}` } + response = await fetch(url, { headers }) + } + } + + if (!response.ok) { + const body = await response.text() + throw new Error( + `Failed to get manifest: ${response.status} ${response.statusText} - ${body}` + ) + } + return await response.json() + } + + /** + * Checks the docker image by looking at the manifest + * @param image name or tag + * @returns boolean + */ + public static async checkDockerImage( + image: string, + platform?: RunningPlatform + ): Promise { + try { + const manifest = await C2DEngineDocker.getDockerManifest(image) + + const platforms = Array.isArray(manifest.manifests) + ? manifest.manifests.map((entry: any) => entry.platform) + : [manifest.platform] + + const isValidPlatform = platforms.some((entry: any) => + checkManifestPlatform(entry, platform) + ) + + return { valid: isValidPlatform } + } catch (err: any) { + CORE_LOGGER.error(`Unable to get Manifest for image ${image}: ${err.message}`) + if (err.errors?.length) CORE_LOGGER.error(JSON.stringify(err.errors)) + + return { + valid: false, + status: 404, + reason: err.errors?.length ? JSON.stringify(err.errors) : err.message + } + } + } + + // eslint-disable-next-line require-await + public override async startComputeJob( + assets: ComputeAsset[], + algorithm: ComputeAlgorithm, + output: ComputeOutput, + environment: string, + owner: string, + maxJobDuration: number, + resources: ComputeResourceRequest[], + payment: DBComputeJobPayment, + jobId: string, + metadata?: DBComputeJobMetadata, + additionalViewers?: string[], + queueMaxWaitTime?: number + ): Promise { + if (!this.docker) return [] + // TO DO - iterate over resources and get default runtime + const isFree: boolean = !(payment && payment.lockTx) + + if (metadata && Object.keys(metadata).length > 0) { + const metadataSize = JSON.stringify(metadata).length + if (metadataSize > 1024) { + throw new Error('Metadata size is too large') + } + } + + const envIdWithHash = environment && environment.indexOf('-') > -1 + const env = await this.getComputeEnvironment( + payment && payment.chainId ? payment.chainId : null, + envIdWithHash ? environment : null, + environment + ) + if (!env) { + throw new Error(`Invalid environment ${environment}`) + } + // C2D - Check image, check arhitecture, etc + const image = getAlgorithmImage(algorithm, jobId) + // ex: node@sha256:1155995dda741e93afe4b1c6ced2d01734a6ec69865cc0997daf1f4db7259a36 + if (!image) { + // send a 500 with the error message + throw new Error( + `Unable to extract docker image ${image} from algoritm: ${JSON.stringify( + algorithm + )}` + ) + } + let additionalDockerFiles: { [key: string]: any } = null + if ( + algorithm.meta && + algorithm.meta.container && + algorithm.meta.container.additionalDockerFiles + ) { + additionalDockerFiles = JSON.parse( + JSON.stringify(algorithm.meta.container.additionalDockerFiles) + ) + // make sure that we don't keep them in the db structure + algorithm.meta.container.additionalDockerFiles = null + if (queueMaxWaitTime && queueMaxWaitTime > 0) { + throw new Error(`additionalDockerFiles cannot be used with queued jobs`) + } + } + const job: DBComputeJob = { + clusterHash: this.getC2DConfig().hash, + containerImage: image, + owner, + jobId, + dateCreated: String(Date.now() / 1000), + dateFinished: null, + status: + queueMaxWaitTime && queueMaxWaitTime > 0 + ? C2DStatusNumber.JobQueued + : C2DStatusNumber.JobStarted, + statusText: + queueMaxWaitTime && queueMaxWaitTime > 0 + ? C2DStatusText.JobQueued + : C2DStatusText.JobStarted, + results: [], + algorithm, + assets, + maxJobDuration, + environment, + configlogURL: null, + publishlogURL: null, + algologURL: null, + outputsURL: null, + stopRequested: false, + isRunning: true, + isStarted: false, + resources, + isFree, + algoStartTimestamp: '0', + algoStopTimestamp: '0', + payment, + metadata, + additionalViewers, + terminationDetails: { exitCode: null, OOMKilled: null }, + algoDuration: 0, + queueMaxWaitTime: queueMaxWaitTime || 0 + } + + if (algorithm.meta.container && algorithm.meta.container.dockerfile) { + // we need to build the image if job is not queued + if (queueMaxWaitTime === 0) { + job.status = C2DStatusNumber.BuildImage + job.statusText = C2DStatusText.BuildImage + } + } else { + // already built, we need to validate it + const validation = await C2DEngineDocker.checkDockerImage(image, env.platform) + console.log('Validation: ', validation) + if (!validation.valid) + throw new Error( + `Cannot find image ${image} for ${env.platform.architecture}. Maybe it does not exist or it's build for other arhitectures.` + ) + if (queueMaxWaitTime === 0) { + job.status = C2DStatusNumber.PullImage + job.statusText = C2DStatusText.PullImage + } + } + + await this.makeJobFolders(job) + // make sure we actually were able to insert on DB + const addedId = await this.db.newJob(job) + if (!addedId) { + return [] + } + if (queueMaxWaitTime === 0) { + if (algorithm.meta.container && algorithm.meta.container.dockerfile) { + this.buildImage(job, additionalDockerFiles) + } else { + this.pullImage(job) + } + } + // only now set the timer + if (!this.cronTimer) { + this.setNewTimer() + } + const cjob: ComputeJob = omitDBComputeFieldsFromComputeJob(job) + // we add cluster hash to user output + cjob.jobId = this.getC2DConfig().hash + '-' + cjob.jobId + // cjob.jobId = jobId + return [cjob] + } + + // eslint-disable-next-line require-await + public override async stopComputeJob( + jobId: string, + owner: string, + agreementId?: string + ): Promise { + const jobs = await this.db.getJob(jobId, agreementId, owner) + if (jobs.length === 0) { + return [] + } + const statusResults = [] + for (const job of jobs) { + job.stopRequested = true + await this.db.updateJob(job) + const res: ComputeJob = omitDBComputeFieldsFromComputeJob(job) + statusResults.push(res) + } + + return statusResults + } + + // eslint-disable-next-line require-await + protected async getResults(jobId: string): Promise { + const res: ComputeResult[] = [] + let index = 0 + try { + const logStat = statSync( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/logs/image.log' + ) + if (logStat) { + res.push({ + filename: 'image.log', + filesize: logStat.size, + type: 'imageLog', + index + }) + index = index + 1 + } + } catch (e) {} + try { + const logStat = statSync( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/logs/configuration.log' + ) + if (logStat) { + res.push({ + filename: 'configuration.log', + filesize: logStat.size, + type: 'configurationLog', + index + }) + index = index + 1 + } + } catch (e) {} + try { + const logStat = statSync( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/logs/algorithm.log' + ) + if (logStat) { + res.push({ + filename: 'algorithm.log', + filesize: logStat.size, + type: 'algorithmLog', + index + }) + index = index + 1 + } + } catch (e) {} + try { + const outputStat = statSync( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/outputs/outputs.tar' + ) + if (outputStat) { + res.push({ + filename: 'outputs.tar', + filesize: outputStat.size, + type: 'output', + index + }) + index = index + 1 + } + } catch (e) {} + try { + const logStat = statSync( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/logs/publish.log' + ) + if (logStat) { + res.push({ + filename: 'publish.log', + filesize: logStat.size, + type: 'publishLog', + index + }) + index = index + 1 + } + } catch (e) {} + return res + } + + // eslint-disable-next-line require-await + public override async getComputeJobStatus( + consumerAddress?: string, + agreementId?: string, + jobId?: string + ): Promise { + const jobs = await this.db.getJob(jobId, agreementId, consumerAddress) + if (jobs.length === 0) { + return [] + } + const statusResults = [] + for (const job of jobs) { + const res: ComputeJob = omitDBComputeFieldsFromComputeJob(job) + // add results for algoLogs + res.results = await this.getResults(job.jobId) + statusResults.push(res) + } + + return statusResults + } + + // eslint-disable-next-line require-await + public override async getComputeJobResult( + consumerAddress: string, + jobId: string, + index: number + ): Promise<{ stream: Readable; headers: any }> { + const jobs = await this.db.getJob(jobId, null, null) + if (jobs.length === 0 || jobs.length > 1) { + throw new Error(`Cannot find job with id ${jobId}`) + } + if ( + jobs[0].owner !== consumerAddress && + (!jobs[0].additionalViewers || !jobs[0].additionalViewers.includes(consumerAddress)) + ) { + // consumerAddress is not the owner and not in additionalViewers + throw new Error( + `${consumerAddress} is not authorized to get results for job with id ${jobId}` + ) + } + const results = await this.getResults(jobId) + for (const i of results) { + if (i.index === index) { + if (i.type === 'algorithmLog') { + return { + stream: createReadStream( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/logs/algorithm.log' + ), + headers: { + 'Content-Type': 'text/plain' + } + } + } + if (i.type === 'configurationLog') { + return { + stream: createReadStream( + this.getC2DConfig().tempFolder + + '/' + + jobId + + '/data/logs/configuration.log' + ), + headers: { + 'Content-Type': 'text/plain' + } + } + } + if (i.type === 'publishLog') { + return { + stream: createReadStream( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/logs/publish.log' + ), + headers: { + 'Content-Type': 'text/plain' + } + } + } + if (i.type === 'imageLog') { + return { + stream: createReadStream( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/logs/image.log' + ), + headers: { + 'Content-Type': 'text/plain' + } + } + } + if (i.type === 'output') { + return { + stream: createReadStream( + this.getC2DConfig().tempFolder + '/' + jobId + '/data/outputs/outputs.tar' + ), + headers: { + 'Content-Type': 'application/octet-stream' + } + } + } + } + } + return null + } + + // eslint-disable-next-line require-await + public override async getStreamableLogs(jobId: string): Promise { + const jobRes: DBComputeJob[] = await this.db.getJob(jobId) + if (jobRes.length === 0) return null + if (!jobRes[0].isRunning) return null + try { + const job = jobRes[0] + const container = await this.docker.getContainer(job.jobId + '-algoritm') + const details = await container.inspect() + if (details.State.Running === false) return null + return await container.logs({ + stdout: true, + stderr: true, + follow: true + }) + } catch (e) { + return null + } + } + + private async setNewTimer() { + // don't set the cron if we don't have compute environments + if ((await this.getComputeEnvironments()).length > 0) + this.cronTimer = setInterval(this.InternalLoop.bind(this), this.cronTime) + } + + private async InternalLoop() { + // this is the internal loop of docker engine + // gets list of all running jobs and process them one by one + clearInterval(this.cronTimer) + this.cronTimer = null + // get all running jobs + const jobs = await this.db.getRunningJobs(this.getC2DConfig().hash) + + if (jobs.length === 0) { + // CORE_LOGGER.info('No C2D jobs found for engine ' + this.getC2DConfig().hash) + this.setNewTimer() + return + } else { + CORE_LOGGER.info(`Got ${jobs.length} jobs for engine ${this.getC2DConfig().hash}`) + CORE_LOGGER.debug(JSON.stringify(jobs)) + } + const promises: any = [] + for (const job of jobs) { + promises.push(this.processJob(job)) + } + // wait for all promises, there is no return + await Promise.all(promises) + // set the cron again + this.setNewTimer() + } + + private async createDockerContainer( + containerInfo: ContainerCreateOptions, + retry: boolean = false + ): Promise | null { + try { + const container = await this.docker.createContainer(containerInfo) + return container + } catch (e) { + CORE_LOGGER.error(`Unable to create docker container: ${e.message}`) + if ( + e.message + .toLowerCase() + .includes('--storage-opt is supported only for overlay over xfs') && + retry + ) { + delete containerInfo.HostConfig.StorageOpt + CORE_LOGGER.info('Retrying again without HostConfig.StorageOpt options...') + // Retry without that option because it does not work + return this.createDockerContainer(containerInfo) + } + return null + } + } + + private async inspectContainer(container: Dockerode.Container): Promise { + try { + const data = await container.inspect() + return data.State + } catch (e) { + CORE_LOGGER.error(`Unable to inspect docker container: ${e.message}`) + return null + } + } + + private async createDockerVolume( + volume: VolumeCreateOptions, + retry: boolean = false + ): Promise { + try { + await this.docker.createVolume(volume) + return true + } catch (e) { + CORE_LOGGER.error(`Unable to create docker volume: ${e.message}`) + if ( + e.message.toLowerCase().includes('quota size requested but no quota support') && + retry + ) { + delete volume.DriverOpts + CORE_LOGGER.info('Retrying again without DriverOpts options...') + try { + return this.createDockerVolume(volume) + } catch (e) { + CORE_LOGGER.error( + `Unable to create docker volume without DriverOpts: ${e.message}` + ) + return false + } + } + return false + } + } + + // eslint-disable-next-line require-await + private async processJob(job: DBComputeJob) { + console.log(`Process job started: [STATUS: ${job.status}: ${job.statusText}]`) + console.log(job) + // has to : + // - monitor running containers and stop them if over limits + // - monitor disc space and clean up + /* steps: + - wait until image is ready + - create volume + - after image is ready, create the container + - download assets & algo into temp folder + - download DDOS + - tar and upload assets & algo to container + - start the container + - check if container is exceeding validUntil + - if yes, stop it + - download /data/outputs and store it locally (or upload it somewhere) + - delete the container + - delete the volume + */ + if (job.status === C2DStatusNumber.JobQueued) { + // check if we can start the job now + const now = String(Date.now() / 1000) + if (job.queueMaxWaitTime < parseFloat(now) - parseFloat(job.dateCreated)) { + job.status = C2DStatusNumber.JobQueuedExpired + job.statusText = C2DStatusText.JobQueuedExpired + job.isRunning = false + job.dateFinished = now + await this.db.updateJob(job) + await this.cleanupJob(job) + return + } + // check if resources are available now + try { + const env = await this.getComputeEnvironment( + job.payment && job.payment.chainId ? job.payment.chainId : null, + job.environment, + null + ) + await this.checkIfResourcesAreAvailable(job.resources, env, true) + } catch (err) { + // resources are still not available + return + } + // resources are now available, let's start the job + const { algorithm } = job + if (algorithm.meta.container && algorithm.meta.container.dockerfile) { + job.status = C2DStatusNumber.BuildImage + job.statusText = C2DStatusText.BuildImage + this.buildImage(job, null) + } else { + job.status = C2DStatusNumber.PullImage + job.statusText = C2DStatusText.PullImage + this.pullImage(job) + } + await this.db.updateJob(job) + } + + if (job.status === C2DStatusNumber.ConfiguringVolumes) { + // create the volume & create container + // TO DO C2D: Choose driver & size + // get env info + const envResource = this.envs[0].resources + const volume: VolumeCreateOptions = { + Name: job.jobId + '-volume' + } + // volume + /* const diskSize = this.getResourceRequest(job.resources, 'disk') + if (diskSize && diskSize > 0) { + volume.DriverOpts = { + o: 'size=' + String(diskSize), + device: 'local', + type: 'local' + } + } */ + const volumeCreated = await this.createDockerVolume(volume, true) + if (!volumeCreated) { + job.status = C2DStatusNumber.VolumeCreationFailed + job.statusText = C2DStatusText.VolumeCreationFailed + job.isRunning = false + job.dateFinished = String(Date.now() / 1000) + await this.db.updateJob(job) + await this.cleanupJob(job) + return + } + + // create the container + const mountVols: any = { '/data': {} } + const hostConfig: HostConfig = { + Mounts: [ + { + Type: 'volume', + Source: volume.Name, + Target: '/data', + ReadOnly: false + } + ] + } + // disk + // if (diskSize && diskSize > 0) { + // hostConfig.StorageOpt = { + // size: String(diskSize) + // } + // } + // ram + const ramSize = this.getResourceRequest(job.resources, 'ram') + if (ramSize && ramSize > 0) { + hostConfig.Memory = ramSize * 1024 * 1024 * 1024 // config is in GB, docker wants bytes + // set swap to same memory value means no swap (otherwise it use like 2X mem) + hostConfig.MemorySwap = hostConfig.Memory + } + const cpus = this.getResourceRequest(job.resources, 'cpu') + if (cpus && cpus > 0) { + hostConfig.CpuPeriod = 100000 // 100 miliseconds is usually the default + hostConfig.CpuQuota = Math.floor(cpus * hostConfig.CpuPeriod) + } + const containerInfo: ContainerCreateOptions = { + name: job.jobId + '-algoritm', + Image: job.containerImage, + AttachStdin: false, + AttachStdout: true, + AttachStderr: true, + Tty: true, + OpenStdin: false, + StdinOnce: false, + Volumes: mountVols, + HostConfig: hostConfig + } + // TO DO - iterate over resources and get default runtime + // TO DO - check resources and pass devices + const dockerDeviceRequest = this.getDockerDeviceRequest(job.resources, envResource) + if (dockerDeviceRequest) { + containerInfo.HostConfig.DeviceRequests = dockerDeviceRequest + } + const advancedConfig = this.getDockerAdvancedConfig(job.resources, envResource) + if (advancedConfig.Devices) + containerInfo.HostConfig.Devices = advancedConfig.Devices + if (advancedConfig.GroupAdd) + containerInfo.HostConfig.GroupAdd = advancedConfig.GroupAdd + if (advancedConfig.SecurityOpt) + containerInfo.HostConfig.SecurityOpt = advancedConfig.SecurityOpt + if (advancedConfig.Binds) containerInfo.HostConfig.Binds = advancedConfig.Binds + if (advancedConfig.CapAdd) containerInfo.HostConfig.CapAdd = advancedConfig.CapAdd + if (advancedConfig.CapDrop) + containerInfo.HostConfig.CapDrop = advancedConfig.CapDrop + if (advancedConfig.IpcMode) + containerInfo.HostConfig.IpcMode = advancedConfig.IpcMode + if (advancedConfig.ShmSize) + containerInfo.HostConfig.ShmSize = advancedConfig.ShmSize + if (job.algorithm.meta.container.entrypoint) { + const newEntrypoint = job.algorithm.meta.container.entrypoint.replace( + '$ALGO', + 'data/transformations/algorithm' + ) + containerInfo.Entrypoint = newEntrypoint.split(' ') + } + if (job.algorithm.envs) { + const envVars: string[] = [] + for (const key of Object.keys(job.algorithm.envs)) { + envVars.push(`${key}=${job.algorithm.envs[key]}`) + } + containerInfo.Env = envVars + } + const container = await this.createDockerContainer(containerInfo, true) + if (container) { + console.log('Container created: ', container) + job.status = C2DStatusNumber.Provisioning + job.statusText = C2DStatusText.Provisioning + await this.db.updateJob(job) + } else { + job.status = C2DStatusNumber.ContainerCreationFailed + job.statusText = C2DStatusText.ContainerCreationFailed + job.isRunning = false + job.dateFinished = String(Date.now() / 1000) + await this.db.updateJob(job) + await this.cleanupJob(job) + return + } + return + } + if (job.status === C2DStatusNumber.Provisioning) { + // download algo & assets + const ret = await this.uploadData(job) + console.log('Upload data') + console.log(ret) + job.status = ret.status + job.statusText = ret.statusText + if (job.status !== C2DStatusNumber.RunningAlgorithm) { + // failed, let's close it + job.isRunning = false + job.dateFinished = String(Date.now() / 1000) + await this.db.updateJob(job) + await this.cleanupJob(job) + } else { + await this.db.updateJob(job) + } + } + if (job.status === C2DStatusNumber.RunningAlgorithm) { + let container + let details + try { + container = await this.docker.getContainer(job.jobId + '-algoritm') + console.log(`Container retrieved: ${JSON.stringify(container)}`) + details = await container.inspect() + console.log('Container inspect') + console.log(details) + } catch (e) { + console.error( + 'Could not retrieve container: ' + + e.message + + '\nBack to configuring volumes to create the container...' + ) + job.isStarted = false + job.status = C2DStatusNumber.ConfiguringVolumes + job.statusText = C2DStatusText.ConfiguringVolumes + job.isRunning = false + await this.db.updateJob(job) + return + } + + if (job.isStarted === false) { + // make sure is not started + if (details && details.State.Running === false) { + try { + await container.start() + job.isStarted = true + job.algoStartTimestamp = String(Date.now() / 1000) + await this.db.updateJob(job) + CORE_LOGGER.info(`Container started successfully for job ${job.jobId}`) + + await this.measureContainerBaseSize(job, container) + return + } catch (e) { + // container failed to start + job.algoStartTimestamp = String(Date.now() / 1000) + job.algoStopTimestamp = String(Date.now() / 1000) + try { + const algoLogFile = + this.getC2DConfig().tempFolder + + '/' + + job.jobId + + '/data/logs/algorithm.log' + writeFileSync(algoLogFile, String(e.message)) + } catch (e) { + console.log('Failed to write') + console.log(e) + } + console.error('could not start container: ' + e.message) + console.log(e) + job.status = C2DStatusNumber.AlgorithmFailed + job.statusText = C2DStatusText.AlgorithmFailed + + job.isRunning = false + job.dateFinished = String(Date.now() / 1000) + await this.db.updateJob(job) + await this.cleanupJob(job) + return + } + } + } else { + const canContinue = await this.monitorDiskUsage(job) + if (!canContinue) { + // Job was terminated due to disk quota exceeded + return + } + + console.log('running, need to stop it?') + const timeNow = Date.now() / 1000 + const expiry = parseFloat(job.algoStartTimestamp) + job.maxJobDuration + console.log('timeNow: ' + timeNow + ' , Expiry: ' + expiry) + if (timeNow > expiry || job.stopRequested) { + // we need to stop the container + // make sure is running + console.log('We need to stop') + console.log(details.State.Running) + if (details.State.Running === true) { + try { + await container.stop() + } catch (e) { + // we should never reach this, unless the container is already stopped or deleted by someone else + console.log(e) + } + } + console.log('Stopped') + job.isStarted = false + job.status = C2DStatusNumber.PublishingResults + job.statusText = C2DStatusText.PublishingResults + job.algoStopTimestamp = String(Date.now() / 1000) + job.isRunning = false + await this.db.updateJob(job) + return + } else { + if (details.State.Running === false) { + job.isStarted = false + job.status = C2DStatusNumber.PublishingResults + job.statusText = C2DStatusText.PublishingResults + job.algoStopTimestamp = String(Date.now() / 1000) + job.isRunning = false + await this.db.updateJob(job) + return + } + } + } + } + if (job.status === C2DStatusNumber.PublishingResults) { + // get output + job.status = C2DStatusNumber.JobFinished + job.statusText = C2DStatusText.JobFinished + let container + try { + container = await this.docker.getContainer(job.jobId + '-algoritm') + console.log(`Container retrieved: ${JSON.stringify(container)}`) + } catch (e) { + console.error('Could not retrieve container: ' + e.message) + job.isRunning = false + job.dateFinished = String(Date.now() / 1000) + try { + const algoLogFile = + this.getC2DConfig().tempFolder + '/' + job.jobId + '/data/logs/algorithm.log' + writeFileSync(algoLogFile, String(e.message)) + } catch (e) { + console.log('Failed to write') + console.log(e) + } + await this.db.updateJob(job) + await this.cleanupJob(job) + return + } + const state = await this.inspectContainer(container) + if (state) { + job.terminationDetails.OOMKilled = state.OOMKilled + job.terminationDetails.exitCode = state.ExitCode + } else { + job.terminationDetails.OOMKilled = null + job.terminationDetails.exitCode = null + } + + const outputsArchivePath = + this.getC2DConfig().tempFolder + '/' + job.jobId + '/data/outputs/outputs.tar' + try { + if (container) { + await pipeline( + await container.getArchive({ path: '/data/outputs' }), + createWriteStream(outputsArchivePath) + ) + } + } catch (e) { + console.log(e) + job.status = C2DStatusNumber.ResultsUploadFailed + job.statusText = C2DStatusText.ResultsUploadFailed + } + job.isRunning = false + job.dateFinished = String(Date.now() / 1000) + await this.db.updateJob(job) + await this.cleanupJob(job) + } + } + + // eslint-disable-next-line require-await + private async cleanupJob(job: DBComputeJob) { + // cleaning up + // - claim payment or release lock + // - get algo logs + // - delete volume + // - delete container + + this.jobImageSizes.delete(job.jobId) + + // payments + const algoDuration = + parseFloat(job.algoStopTimestamp) - parseFloat(job.algoStartTimestamp) + + job.algoDuration = algoDuration + await this.db.updateJob(job) + if (!job.isFree && job.payment) { + let txId = null + const env = await this.getComputeEnvironment(job.payment.chainId, job.environment) + let minDuration = 0 + + if (algoDuration < 0) minDuration += algoDuration * -1 + else minDuration += algoDuration + if ( + env && + `minJobDuration` in env && + env.minJobDuration && + minDuration < env.minJobDuration + ) { + minDuration = env.minJobDuration + } + let cost = 0 + if (minDuration > 0) { + // we need to claim + const fee = env.fees[job.payment.chainId].find( + (fee) => fee.feeToken === job.payment.token + ) + cost = this.getTotalCostOfJob(job.resources, minDuration, fee) + const proof = JSON.stringify(omitDBComputeFieldsFromComputeJob(job)) + try { + txId = await this.escrow.claimLock( + job.payment.chainId, + job.jobId, + job.payment.token, + job.owner, + cost, + proof + ) + } catch (e) { + console.log(e) + } + } else { + // release the lock, we are not getting paid + try { + txId = await this.escrow.cancelExpiredLocks( + job.payment.chainId, + job.jobId, + job.payment.token, + job.owner + ) + } catch (e) { + console.log(e) + } + } + if (txId) { + job.payment.claimTx = txId + job.payment.cost = cost + await this.db.updateJob(job) + } + } + try { + const container = await this.docker.getContainer(job.jobId + '-algoritm') + if (container) { + if (job.status !== C2DStatusNumber.AlgorithmFailed) { + writeFileSync( + this.getC2DConfig().tempFolder + '/' + job.jobId + '/data/logs/algorithm.log', + await container.logs({ + stdout: true, + stderr: true, + follow: false + }) + ) + } + await container.remove() + } + } catch (e) { + // console.error('Container not found! ' + e.message) + } + try { + const volume = await this.docker.getVolume(job.jobId + '-volume') + if (volume) { + try { + await volume.remove() + } catch (e) { + console.log(e) + } + } + } catch (e) { + // console.error('Container volume not found! ' + e.message) + } + if (job.algorithm.meta.container && job.algorithm.meta.container.dockerfile) { + const image = getAlgorithmImage(job.algorithm, job.jobId) + if (image) { + try { + await this.docker.getImage(image).remove({ force: true }) + } catch (e) { + console.log('Could not delete image: ' + image + ' : ' + e.message) + } + } + } + try { + // remove folders + rmSync(this.getC2DConfig().tempFolder + '/' + job.jobId + '/data/inputs', { + recursive: true, + force: true + }) + } catch (e) { + console.error( + `Could not delete inputs from path ${this.getC2DConfig().tempFolder} for job ID ${ + job.jobId + }! ` + e.message + ) + } + try { + rmSync(this.getC2DConfig().tempFolder + '/' + job.jobId + '/data/transformations', { + recursive: true, + force: true + }) + } catch (e) { + console.error( + `Could not delete algorithms from path ${ + this.getC2DConfig().tempFolder + } for job ID ${job.jobId}! ` + e.message + ) + } + } + + private deleteOutputFolder(job: DBComputeJob) { + rmSync(this.getC2DConfig().tempFolder + '/' + job.jobId + '/data/outputs/', { + recursive: true, + force: true + }) + } + + private getDiskQuota(job: DBComputeJob): number { + if (!job.resources) return 0 + + const diskResource = job.resources.find((resource) => resource.id === 'disk') + return diskResource ? diskResource.amount : 0 + } + + // Inspect the real runtime size of the container + private async measureContainerBaseSize( + job: DBComputeJob, + container: Dockerode.Container + ): Promise { + try { + if (this.jobImageSizes.has(job.jobId)) { + CORE_LOGGER.debug(`Using cached base size for job ${job.jobId.slice(-8)}`) + return + } + + // Wait for container filesystem to stabilize + await new Promise((resolve) => setTimeout(resolve, 3000)) + + const actualBaseSize = await this.getContainerDiskUsage(container.id, '/') + this.jobImageSizes.set(job.jobId, actualBaseSize) + + CORE_LOGGER.info( + `Base container ${job.containerImage} runtime size: ${( + actualBaseSize / + 1024 / + 1024 / + 1024 + ).toFixed(2)}GB` + ) + } catch (error) { + CORE_LOGGER.error(`Failed to measure base container size: ${error.message}`) + this.jobImageSizes.set(job.jobId, 0) + } + } + + private async getContainerDiskUsage( + containerName: string, + path: string = '/data' + ): Promise { + try { + const container = this.docker.getContainer(containerName) + const containerInfo = await container.inspect() + if (!containerInfo.State.Running) { + CORE_LOGGER.debug( + `Container ${containerName} is not running, cannot check disk usage` + ) + return 0 + } + + const exec = await container.exec({ + Cmd: ['du', '-sb', path], + AttachStdout: true, + AttachStderr: true + }) + + const stream = await exec.start({ Detach: false, Tty: false }) + + const chunks: Buffer[] = [] + for await (const chunk of stream) { + chunks.push(chunk as Buffer) + } + + const output = Buffer.concat(chunks).toString() + + const match = output.match(/(\d+)\s/) + return match ? parseInt(match[1], 10) : 0 + } catch (error) { + CORE_LOGGER.error( + `Failed to get container disk usage for ${containerName}: ${error.message}` + ) + return 0 + } + } + + private async monitorDiskUsage(job: DBComputeJob): Promise { + const diskQuota = this.getDiskQuota(job) + if (diskQuota <= 0) return true + + const containerName = job.jobId + '-algoritm' + const totalUsage = await this.getContainerDiskUsage(containerName, '/') + const baseImageSize = this.jobImageSizes.get(job.jobId) || 0 + const algorithmUsage = Math.max(0, totalUsage - baseImageSize) + + const usageGB = (algorithmUsage / 1024 / 1024 / 1024).toFixed(2) + const quotaGB = diskQuota.toFixed(1) + const usagePercent = ( + (algorithmUsage / 1024 / 1024 / 1024 / diskQuota) * + 100 + ).toFixed(1) + + CORE_LOGGER.info( + `Job ${job.jobId.slice(-8)} disk: ${usageGB}GB / ${quotaGB}GB (${usagePercent}%)` + ) + + if (algorithmUsage / 1024 / 1024 / 1024 > diskQuota) { + CORE_LOGGER.warn( + `DISK QUOTA EXCEEDED - Stopping job ${job.jobId}: ${usageGB}GB used, ${quotaGB}GB allowed` + ) + + try { + const container = this.docker.getContainer(containerName) + await container.stop() + CORE_LOGGER.info(`Container stopped for job ${job.jobId}`) + } catch (e) { + CORE_LOGGER.warn(`Could not stop container: ${e.message}`) + } + + job.status = C2DStatusNumber.DiskQuotaExceeded + job.statusText = C2DStatusText.DiskQuotaExceeded + job.isRunning = false + job.isStarted = false + job.algoStopTimestamp = String(Date.now() / 1000) + job.dateFinished = String(Date.now() / 1000) + + await this.db.updateJob(job) + CORE_LOGGER.info(`Job ${job.jobId} terminated - DISK QUOTA EXCEEDED`) + + return false + } + + return true + } + + private async pullImage(originaljob: DBComputeJob) { + const job = JSON.parse(JSON.stringify(originaljob)) as DBComputeJob + const imageLogFile = + this.getC2DConfig().tempFolder + '/' + job.jobId + '/data/logs/image.log' + try { + const pullStream = await this.docker.pull(job.containerImage) + await new Promise((resolve, reject) => { + let wroteStatusBanner = false + this.docker.modem.followProgress( + pullStream, + (err: any, res: any) => { + // onFinished + if (err) { + appendFileSync(imageLogFile, String(err.message)) + return reject(err) + } + const logText = `Successfully pulled image: ${job.containerImage}` + CORE_LOGGER.debug(logText) + appendFileSync(imageLogFile, logText + '\n') + resolve(res) + }, + (progress: any) => { + // onProgress + if (!wroteStatusBanner) { + wroteStatusBanner = true + CORE_LOGGER.debug('############# Pull docker image status: ##############') + } + // only write the status banner once, its cleaner + let logText = '' + if (progress.id) logText += progress.id + ' : ' + progress.status + else logText = progress.status + CORE_LOGGER.debug("Pulling image for jobId '" + job.jobId + "': " + logText) + console.log(progress) + appendFileSync(imageLogFile, logText + '\n') + } + ) + }) + job.status = C2DStatusNumber.ConfiguringVolumes + job.statusText = C2DStatusText.ConfiguringVolumes + this.db.updateJob(job) + } catch (err) { + const logText = `Unable to pull docker image: ${job.containerImage}: ${err.message}` + CORE_LOGGER.error(logText) + appendFileSync(imageLogFile, logText) + job.status = C2DStatusNumber.PullImageFailed + job.statusText = C2DStatusText.PullImageFailed + job.isRunning = false + job.dateFinished = String(Date.now() / 1000) + await this.db.updateJob(job) + await this.cleanupJob(job) + } + } + + private async buildImage( + originaljob: DBComputeJob, + additionalDockerFiles: { [key: string]: any } + ) { + const job = JSON.parse(JSON.stringify(originaljob)) as DBComputeJob + const imageLogFile = + this.getC2DConfig().tempFolder + '/' + job.jobId + '/data/logs/image.log' + try { + const pack = tarStream.pack() + + // Append the Dockerfile to the tar archive + pack.entry({ name: 'Dockerfile' }, job.algorithm.meta.container.dockerfile) + // Append any additional files to the tar archive + if (additionalDockerFiles) { + for (const filePath of Object.keys(additionalDockerFiles)) { + pack.entry({ name: filePath }, additionalDockerFiles[filePath]) + } + } + pack.finalize() + + // Build the image using the tar stream as context + const buildStream = await this.docker.buildImage(pack, { + t: job.containerImage + }) + + // Optional: listen to build output + buildStream.on('data', (data) => { + try { + const text = JSON.parse(data.toString('utf8')) + CORE_LOGGER.debug( + "Building image for jobId '" + job.jobId + "': " + text.stream.trim() + ) + appendFileSync(imageLogFile, String(text.stream)) + } catch (e) { + // console.log('non json build data: ', data.toString('utf8')) + } + }) + + await new Promise((resolve, reject) => { + buildStream.on('end', () => { + CORE_LOGGER.debug(`Image '${job.containerImage}' built successfully.`) + + resolve() + }) + buildStream.on('error', (err) => { + CORE_LOGGER.debug(`Error building image '${job.containerImage}':` + err.message) + appendFileSync(imageLogFile, String(err.message)) + reject(err) + }) + }) + job.status = C2DStatusNumber.ConfiguringVolumes + job.statusText = C2DStatusText.ConfiguringVolumes + this.db.updateJob(job) + } catch (err) { + CORE_LOGGER.error( + `Unable to build docker image: ${job.containerImage}: ${err.message}` + ) + appendFileSync(imageLogFile, String(err.message)) + job.status = C2DStatusNumber.BuildImageFailed + job.statusText = C2DStatusText.BuildImageFailed + job.isRunning = false + job.dateFinished = String(Date.now() / 1000) + await this.db.updateJob(job) + await this.cleanupJob(job) + } + } + + private addUserDataToFilesObject( + filesObject: any, + userData: { [key: string]: any } + ): any { + if (filesObject?.url && userData) { + const url = new URL(filesObject.url) + const userDataObj = typeof userData === 'string' ? JSON.parse(userData) : userData + for (const [key, value] of Object.entries(userDataObj)) { + url.searchParams.append(key, String(value)) + } + filesObject.url = url.toString() + CORE_LOGGER.info('Appended userData to file url: ' + filesObject.url) + } + return filesObject + } + + private async uploadData( + job: DBComputeJob + ): Promise<{ status: C2DStatusNumber; statusText: C2DStatusText }> { + const config = await getConfiguration() + const ret = { + status: C2DStatusNumber.RunningAlgorithm, + statusText: C2DStatusText.RunningAlgorithm + } + const jobFolderPath = this.getC2DConfig().tempFolder + '/' + job.jobId + const fullAlgoPath = jobFolderPath + '/data/transformations/algorithm' + const configLogPath = jobFolderPath + '/data/logs/configuration.log' + + try { + appendFileSync( + configLogPath, + "Writing algocustom data to '/data/inputs/algoCustomData.json'\n" + ) + const customdataPath = + this.getC2DConfig().tempFolder + + '/' + + job.jobId + + '/data/inputs/algoCustomData.json' + writeFileSync(customdataPath, JSON.stringify(job.algorithm.algocustomdata ?? {})) + + let storage = null + + if (job.algorithm.meta.rawcode && job.algorithm.meta.rawcode.length > 0) { + // we have the code, just write it + appendFileSync(configLogPath, `Writing raw algo code to ${fullAlgoPath}\n`) + writeFileSync(fullAlgoPath, job.algorithm.meta.rawcode) + } else { + // do we have a files object? + if (job.algorithm.fileObject) { + // is it unencrypted? + if (job.algorithm.fileObject.type) { + // we can get the storage directly + try { + storage = Storage.getStorageClass(job.algorithm.fileObject, config) + } catch (e) { + CORE_LOGGER.error(`Unable to get storage class for algorithm: ${e.message}`) + appendFileSync( + configLogPath, + `Unable to get storage class for algorithm: ${e.message}\n` + ) + return { + status: C2DStatusNumber.AlgorithmProvisioningFailed, + statusText: C2DStatusText.AlgorithmProvisioningFailed + } + } + } else { + // ok, maybe we have this encrypted instead + CORE_LOGGER.info( + 'algorithm file object seems to be encrypted, checking it...' + ) + // 1. Decrypt the files object + try { + const decryptedFileObject = await decryptFilesObject( + job.algorithm.fileObject + ) + storage = Storage.getStorageClass(decryptedFileObject, config) + } catch (e) { + CORE_LOGGER.error(`Unable to decrypt algorithm files object: ${e.message}`) + appendFileSync( + configLogPath, + `Unable to decrypt algorithm files object: ${e.message}\n` + ) + return { + status: C2DStatusNumber.AlgorithmProvisioningFailed, + statusText: C2DStatusText.AlgorithmProvisioningFailed + } + } + } + } else { + // no files object, try to get information from documentId and serviceId + CORE_LOGGER.info( + 'algorithm file object seems to be missing, checking "serviceId" and "documentId"...' + ) + const { serviceId, documentId } = job.algorithm + appendFileSync( + configLogPath, + `Using ${documentId} and serviceId ${serviceId} to get algorithm files.\n` + ) + // we can get it from this info + if (serviceId && documentId) { + const algoDdo = await new FindDdoHandler( + OceanNode.getInstance() + ).findAndFormatDdo(documentId) + // 1. Get the service + const service: Service = AssetUtils.getServiceById(algoDdo, serviceId) + if (!service) { + CORE_LOGGER.error( + `Could not find service with ID ${serviceId} in DDO ${documentId}` + ) + appendFileSync( + configLogPath, + `Could not find service with ID ${serviceId} in DDO ${documentId}\n` + ) + return { + status: C2DStatusNumber.AlgorithmProvisioningFailed, + statusText: C2DStatusText.AlgorithmProvisioningFailed + } + } + try { + // 2. Decrypt the files object + const decryptedFileObject = await decryptFilesObject(service.files) + storage = Storage.getStorageClass(decryptedFileObject, config) + } catch (e) { + CORE_LOGGER.error(`Unable to decrypt algorithm files object: ${e.message}`) + appendFileSync( + configLogPath, + `Unable to decrypt algorithm files object: ${e.message}\n` + ) + return { + status: C2DStatusNumber.AlgorithmProvisioningFailed, + statusText: C2DStatusText.AlgorithmProvisioningFailed + } + } + } + } + + if (storage) { + await pipeline( + (await storage.getReadableStream()).stream, + createWriteStream(fullAlgoPath) + ) + } else { + CORE_LOGGER.info( + 'Could not extract any files object from the compute algorithm, skipping...' + ) + appendFileSync( + configLogPath, + 'Could not extract any files object from the compute algorithm, skipping...\n' + ) + } + } + } catch (e) { + CORE_LOGGER.error( + 'Unable to write algorithm to path: ' + fullAlgoPath + ': ' + e.message + ) + appendFileSync( + configLogPath, + 'Unable to write algorithm to path: ' + fullAlgoPath + ': ' + e.message + '\n' + ) + return { + status: C2DStatusNumber.AlgorithmProvisioningFailed, + statusText: C2DStatusText.AlgorithmProvisioningFailed + } + } + + // now for the assets + for (const i in job.assets) { + const asset = job.assets[i] + let storage = null + let fileInfo = null + console.log('checking now asset: ', i) + appendFileSync(configLogPath, `Downloading asset ${i} to /data/inputs/\n`) + // without this check it would break if no fileObject is present + if (asset.fileObject) { + try { + if (asset.fileObject.type) { + storage = Storage.getStorageClass(asset.fileObject, config) + } else { + CORE_LOGGER.info('asset file object seems to be encrypted, checking it...') + // get the encrypted bytes + let filesObject: any = await decryptFilesObject(asset.fileObject) + filesObject = await this.addUserDataToFilesObject(filesObject, asset.userdata) + storage = Storage.getStorageClass(filesObject, config) + } + + // we need the file info for the name (but could be something else here) + fileInfo = await storage.getFileInfo({ + type: storage.getStorageType(asset.fileObject) + }) + } catch (e) { + CORE_LOGGER.error(`Unable to get storage class for asset: ${e.message}`) + appendFileSync( + configLogPath, + `Unable to get storage class for asset: ${e.message}\n` + ) + return { + status: C2DStatusNumber.DataProvisioningFailed, + statusText: C2DStatusText.DataProvisioningFailed + } + } + } else { + // we need to go the hard way + const { serviceId, documentId } = asset + appendFileSync( + configLogPath, + `Using ${documentId} and serviceId ${serviceId} for this asset.\n` + ) + if (serviceId && documentId) { + // need to get the file + try { + const ddo = await new FindDdoHandler( + OceanNode.getInstance() + ).findAndFormatDdo(documentId) + // 2. Get the service + const service: Service = AssetUtils.getServiceById(ddo, serviceId) + // 3. Decrypt the url + let decryptedFileObject = await decryptFilesObject(service.files) + decryptedFileObject = await this.addUserDataToFilesObject( + decryptedFileObject, + asset.userdata + ) + storage = Storage.getStorageClass(decryptedFileObject, config) + fileInfo = await storage.getFileInfo({ + type: storage.getStorageType(decryptedFileObject) + }) + } catch (e) { + CORE_LOGGER.error(`Unable to get storage class for asset: ${e.message}`) + appendFileSync( + configLogPath, + `Unable to get storage class for asset: ${e.message}\n` + ) + return { + status: C2DStatusNumber.DataProvisioningFailed, + statusText: C2DStatusText.DataProvisioningFailed + } + } + } + } + + if (storage && fileInfo) { + const fullPath = jobFolderPath + '/data/inputs/' + fileInfo[0].name + appendFileSync(configLogPath, `Downloading asset to ${fullPath}\n`) + try { + await pipeline( + (await storage.getReadableStream()).stream, + createWriteStream(fullPath) + ) + } catch (e) { + CORE_LOGGER.error( + 'Unable to write input data to path: ' + fullPath + ': ' + e.message + ) + appendFileSync( + configLogPath, + 'Unable to write input data to path: ' + fullPath + ': ' + e.message + '\n' + ) + return { + status: C2DStatusNumber.DataProvisioningFailed, + statusText: C2DStatusText.DataProvisioningFailed + } + } + } else { + CORE_LOGGER.info( + 'Could not extract any files object from the compute asset, skipping...' + ) + appendFileSync( + configLogPath, + 'Could not extract any files object from the compute asset, skipping...\n' + ) + } + } + CORE_LOGGER.info('All good with data provisioning, will start uploading it...') + appendFileSync( + configLogPath, + 'All good with data provisioning, will start uploading it...\n' + ) + // now, we have to create a tar arhive + const folderToTar = jobFolderPath + '/data' + const destination = jobFolderPath + '/tarData/upload.tar.gz' + try { + tar.create( + { + gzip: true, + file: destination, + sync: true, + C: folderToTar + }, + ['./'] + ) + // check if tar.gz actually exists + + if (existsSync(destination)) { + // now, upload it to the container + const container = await this.docker.getContainer(job.jobId + '-algoritm') + + try { + // await container2.putArchive(destination, { + const stream = await container.putArchive(destination, { + path: '/data' + }) + console.log('PutArchive') + console.log(stream) + + console.log('Done uploading') + } catch (e) { + appendFileSync( + configLogPath, + 'Data upload to container failed: ' + e.message + '\n' + ) + return { + status: C2DStatusNumber.DataUploadFailed, + statusText: C2DStatusText.DataUploadFailed + } + } + } else { + CORE_LOGGER.debug('No data to upload, empty tar.gz') + appendFileSync(configLogPath, `No data to upload, empty tar.gz\n`) + } + } catch (e) { + CORE_LOGGER.debug(e.message) + appendFileSync(configLogPath, `Error creating data archive: ${e.message}\n`) + return { + status: C2DStatusNumber.DataProvisioningFailed, + statusText: C2DStatusText.DataProvisioningFailed + } + } + + rmSync(jobFolderPath + '/data/inputs', { + recursive: true, + force: true + }) + rmSync(jobFolderPath + '/data/transformations', { + recursive: true, + force: true + }) + rmSync(jobFolderPath + '/tarData', { + recursive: true, + force: true + }) + return ret + } + + // eslint-disable-next-line require-await + private async makeJobFolders(job: DBComputeJob) { + try { + const baseFolder = this.getC2DConfig().tempFolder + '/' + job.jobId + console.log('BASE FOLDER: ' + baseFolder) + if (!existsSync(baseFolder)) mkdirSync(baseFolder) + if (!existsSync(baseFolder + '/data')) mkdirSync(baseFolder + '/data') + if (!existsSync(baseFolder + '/data/inputs')) mkdirSync(baseFolder + '/data/inputs') + if (!existsSync(baseFolder + '/data/transformations')) + mkdirSync(baseFolder + '/data/transformations') + // ddo directory + if (!existsSync(baseFolder + '/data/ddos')) { + mkdirSync(baseFolder + '/data/ddos') + } + if (!existsSync(baseFolder + '/data/outputs')) + mkdirSync(baseFolder + '/data/outputs') + if (!existsSync(baseFolder + '/data/logs')) mkdirSync(baseFolder + '/data/logs') + if (!existsSync(baseFolder + '/tarData')) mkdirSync(baseFolder + '/tarData') // used to upload and download data + } catch (e) {} + } + + // clean up temporary files + public override async cleanupExpiredStorage( + job: DBComputeJob, + isCleanAfterDownload: boolean = false + ): Promise { + if (!job) return false + CORE_LOGGER.info('Cleaning up C2D storage for Job: ' + job.jobId) + try { + // delete the storage + // for free env, the container is deleted as soon as we download the results + // so we avoid trying to do it again + if (!isCleanAfterDownload) { + await this.cleanupJob(job) + } + + // delete output folders + await this.deleteOutputFolder(job) + // delete the job + await this.db.deleteJob(job.jobId) + return true + } catch (e) { + CORE_LOGGER.error('Error cleaning up C2D storage and Job: ' + e.message) + } + return false + } +} + +// this uses the docker engine, but exposes only one env, the free one + +export function getAlgorithmImage(algorithm: ComputeAlgorithm, jobId: string): string { + if (!algorithm.meta || !algorithm.meta.container) { + return null + } + if (algorithm.meta.container.dockerfile) { + return jobId.toLowerCase() + '-image:latest' + } + let { image } = algorithm.meta.container + if (algorithm.meta.container.checksum) + image = image + '@' + algorithm.meta.container.checksum + else if (algorithm.meta.container.tag) + image = image + ':' + algorithm.meta.container.tag + else image = image + ':latest' + // console.log('Using image: ' + image) + return image +} + +export function checkManifestPlatform( + manifestPlatform: any, + envPlatform?: RunningPlatform +): boolean { + if (!manifestPlatform || !envPlatform) return true // skips if not present + if (envPlatform.architecture === 'amd64') envPlatform.architecture = 'x86_64' // x86_64 is compatible with amd64 + if (manifestPlatform.architecture === 'amd64') manifestPlatform.architecture = 'x86_64' // x86_64 is compatible with amd64 + + if ( + envPlatform.architecture !== manifestPlatform.architecture || + envPlatform.os !== manifestPlatform.os + ) + return false + return true +} diff --git a/src/components/c2d/compute_engine_opf_k8.ts b/src/components/c2d/compute_engine_opf_k8.ts deleted file mode 100644 index 9956cdcf2..000000000 --- a/src/components/c2d/compute_engine_opf_k8.ts +++ /dev/null @@ -1,284 +0,0 @@ -import { Readable } from 'stream' -import type { - C2DClusterInfo, - ComputeEnvironment, - ComputeAlgorithm, - ComputeAsset, - ComputeJob, - ComputeOutput, - OPFK8ComputeStage, - OPFK8ComputeStageAlgorithm, - OPFK8ComputeStageInput, - OPFK8ComputeWorkflow, - OPFK8ComputeStart, - OPFK8ComputeStop, - OPFK8ComputeGetStatus, - OPFK8ComputeGetResult -} from '../../@types/C2D.js' -import { sign } from '../core/utils/nonceHandler.js' -import axios from 'axios' -import { getConfiguration } from '../../utils/config.js' -import { ZeroAddress } from 'ethers' -import { getProviderFeeToken } from '../../components/core/utils/feesHandler.js' -import { URLUtils } from '../../utils/url.js' -import { C2DEngine } from './compute_engine_base.js' - -export class C2DEngineOPFK8 extends C2DEngine { - // eslint-disable-next-line no-useless-constructor - public constructor(clusterConfig: C2DClusterInfo) { - super(clusterConfig) - } - - public override async getComputeEnvironments( - chainId: number - ): Promise { - /** - * Returns all cluster's compute environments for a specific chainId. Env's id already contains the cluster hash - */ - const envs: ComputeEnvironment[] = [] - const clusterHash = this.getC2DConfig().hash - const baseUrl = URLUtils.sanitizeURLPath(this.getC2DConfig().connection) - const url = `${baseUrl}api/v1/operator/environments?chain_id=${chainId}` - try { - const { data } = await axios.get(url) - if (!data) return envs - // we need to add hash to each env id - for (const [index, val] of data.entries()) { - data[index].id = `${clusterHash}-${val.id}` - if (!data[index].feeToken || data[index].feeToken?.toLowerCase() === ZeroAddress) - data[index].feeToken = await getProviderFeeToken(chainId) - } - return data - } catch {} - return envs - } - - public override async startComputeJob( - assets: ComputeAsset[], - algorithm: ComputeAlgorithm, - output: ComputeOutput, - owner: string, - environment: string, - validUntil: number, - chainId: number, - agreementId: string - ): Promise { - // let's build the stage first - // start with stage.input - const config = await getConfiguration() - const stagesInput: OPFK8ComputeStageInput[] = [] - let index = 0 - for (const asset of assets) { - if (asset.url) - stagesInput.push({ - index, - url: [asset.url] - }) - else - stagesInput.push({ - index, - id: asset.documentId, - remote: { - txId: asset.transferTxId, - serviceId: asset.serviceId, - userdata: asset.userdata ? asset.userdata : {} - } - }) - index++ - } - let getOuput = {} - if (output) { - getOuput = output - } else if (config.hasHttp && config.c2dNodeUri) { - getOuput = { - metadataUri: config.c2dNodeUri - } - } - // continue with algorithm - const stageAlgorithm: OPFK8ComputeStageAlgorithm = {} - if (algorithm.url) { - stageAlgorithm.url = algorithm.url - } else { - stageAlgorithm.remote = { - txId: algorithm.transferTxId, - serviceId: algorithm.serviceId, - userdata: algorithm.userdata ? algorithm.userdata : {} - } - } - if (algorithm.documentId) stageAlgorithm.id = algorithm.documentId - if ('meta' in algorithm && 'rawcode' in algorithm.meta && algorithm.meta.rawcode) - stageAlgorithm.rawcode = algorithm.meta.rawcode - if ('meta' in algorithm && 'container' in algorithm.meta && algorithm.meta.container) - stageAlgorithm.container = algorithm.meta.container - const stage: OPFK8ComputeStage = { - index: 0, - input: stagesInput, - algorithm: stageAlgorithm, - output: getOuput, - compute: { - Instances: 1, - namespace: environment, - maxtime: 3600 - } - } - // now, let's build the workflow - const workflow: OPFK8ComputeWorkflow = { - stages: [stage] - } - // and the full payload - const nonce: number = new Date().getTime() - const providerSignature = await sign(String(nonce), config.keys.privateKey) - const payload: OPFK8ComputeStart = { - workflow, - owner, - providerSignature, - providerAddress: config.keys.ethAddress, - environment, - validUntil, - nonce, - agreementId, - chainId - } - // and send it to remote op-service - - try { - const response = await axios({ - method: 'post', - url: `${URLUtils.sanitizeURLPath( - this.getC2DConfig().connection - )}api/v1/operator/compute`, - data: payload - }) - if (response.status !== 200) { - const message = `Exception on startCompute. Status: ${response.status}, ${response.statusText}` - throw new Error(message) - } - const jobs: ComputeJob[] = response.data - const newResponse = JSON.parse(JSON.stringify(jobs)) as ComputeJob[] - const { hash } = this.getC2DConfig() - // we need to prepend cluster hash to each jobId - for (let i = 0; i < jobs.length; i++) { - newResponse[i].jobId = hash + '-' + jobs[i].jobId - } - return newResponse - } catch (e) {} - throw new Error(`startCompute Failure`) - } - - public override async stopComputeJob( - jobId: string, - owner: string, - agreementId?: string - ): Promise { - // and the full payload - const nonce: number = new Date().getTime() - const config = await getConfiguration() - // current provider (python) signature is owner + job_id + nonce OR owner + nonce - const providerSignature = await sign(String(nonce), config.keys.privateKey) - const payload: OPFK8ComputeStop = { - owner, - providerSignature, - providerAddress: config.keys.ethAddress, - nonce, - jobId, - agreementId - } - try { - const response = await axios({ - method: 'put', - url: `${URLUtils.sanitizeURLPath( - this.getC2DConfig().connection - )}api/v1/operator/compute`, - data: payload - }) - if (response.status !== 200) { - const message = `Exception on stopCompute. Status: ${response.status}, ${response.statusText}` - throw new Error(message) - } - return response.data - } catch (e) {} - throw new Error(`stopCompute Failure`) - } - - public override async getComputeJobStatus( - consumerAddress?: string, - agreementId?: string, - jobId?: string - ): Promise { - const nonce: number = new Date().getTime() - const config = await getConfiguration() - let message: string - if (jobId) message = String(nonce + consumerAddress + jobId) - else message = String(nonce + consumerAddress + jobId) - const providerSignature = await sign(message, config.keys.privateKey) - - const payload: OPFK8ComputeGetStatus = { - providerSignature, - providerAddress: config.keys.ethAddress, - nonce, - owner: consumerAddress, - agreementId, - jobId - } - try { - const response = await axios({ - method: 'get', - url: `${URLUtils.sanitizeURLPath( - this.getC2DConfig().connection - )}api/v1/operator/compute`, - data: payload - }) - if (response.status !== 200) { - // do not throw, just return [] - return [] - } - - return response.data - } catch (e) { - console.error(e) - } - throw new Error(`getComputeJobStatus Failure`) - } - - public override async getComputeJobResult( - consumerAddress: string, - jobId: string, - index: number - ): Promise { - const nonce: number = new Date().getTime() - const config = await getConfiguration() - // signature check on operator service is only owner + jobId - // nonce is not part of signature message - const message: string = jobId - ? String(consumerAddress + jobId) - : String(consumerAddress) - const providerSignature = await sign(message, config.keys.privateKey) - - const payload: OPFK8ComputeGetResult = { - providerSignature, - providerAddress: config.keys.ethAddress, - nonce, - owner: consumerAddress, - jobId, - index - } - try { - const response = await axios({ - method: 'get', - url: `${URLUtils.sanitizeURLPath( - this.getC2DConfig().connection - )}api/v1/operator/getResult`, - data: payload, - responseType: 'stream' - }) - if (response.status !== 200) { - const message = `Exception on getComputeJobResult. Status: ${response.status}, ${response.statusText}` - throw new Error(message) - } - return response.data - } catch (e) { - console.error(e) - } - throw new Error(`getComputeJobStatus Failure`) - } -} diff --git a/src/components/c2d/compute_engines.ts b/src/components/c2d/compute_engines.ts index 9991ac9e4..b0bd6ad91 100644 --- a/src/components/c2d/compute_engines.ts +++ b/src/components/c2d/compute_engines.ts @@ -1,17 +1,23 @@ -import { C2DClusterType, ComputeEnvironment } from '../../@types/C2D.js' +import { C2DClusterType, ComputeEnvironment } from '../../@types/C2D/C2D.js' import { C2DEngine } from './compute_engine_base.js' -import { C2DEngineOPFK8 } from './compute_engine_opf_k8.js' +import { C2DEngineDocker } from './compute_engine_docker.js' import { OceanNodeConfig } from '../../@types/OceanNode.js' +import { C2DDatabase } from '../database/C2DDatabase.js' +import { Escrow } from '../core/utils/escrow.js' export class C2DEngines { public engines: C2DEngine[] - public constructor(config: OceanNodeConfig) { + public constructor(config: OceanNodeConfig, db: C2DDatabase, escrow: Escrow) { // let's see what engines do we have and initialize them one by one + // for docker, we need to add the "free" + + // TO DO - check if we have multiple config.c2dClusters with the same host + // if yes, do not create multiple engines if (config && config.c2dClusters) { this.engines = [] for (const cluster of config.c2dClusters) { - if (cluster.type === C2DClusterType.OPF_K8) { - this.engines.push(new C2DEngineOPFK8(cluster)) + if (cluster.type === C2DClusterType.DOCKER) { + this.engines.push(new C2DEngineDocker(cluster, db, escrow)) } } } @@ -64,8 +70,25 @@ export class C2DEngines { throw new Error(`C2D Engine not found by hash: ${clusterHash}`) } + async getC2DByEnvId(envId: string): Promise { + /** + * Searches all envs and returns engine class + * + * @param envId - Environment Id + * + */ + const { engines } = this + for (const i of engines) { + const environments = await i.getComputeEnvironments() + for (const env of environments) { + if (env.id === envId) return i + } + } + throw new Error(`C2D Engine not found by id: ${envId}`) + } + async fetchEnvironments( - chainId: number, + chainId?: number, engine?: C2DEngine ): Promise { /** diff --git a/src/components/c2d/index.ts b/src/components/c2d/index.ts index 5e7fb9cfc..96a9ee741 100644 --- a/src/components/c2d/index.ts +++ b/src/components/c2d/index.ts @@ -1,48 +1,60 @@ import { OceanNode } from '../../OceanNode.js' -import { CORE_LOGGER } from '../../utils/logging/common.js' import { createHash } from 'crypto' import { FindDdoHandler } from '../core/handler/ddoHandler.js' -import { getConfiguration } from '../../utils/config.js' -import { ComputeGetEnvironmentsHandler } from '../core/compute/index.js' -import { PROTOCOL_COMMANDS } from '../../utils/constants.js' -import { streamToObject } from '../../utils/util.js' -import { Readable } from 'stream' import { ArweaveFileObject, IpfsFileObject, - UrlFileObject + UrlFileObject, + BaseFileObject, + EncryptMethod } from '../../@types/fileObject.js' -import { AlgoChecksums } from '../../@types/C2D.js' -import { DDO } from '../../@types/DDO/DDO.js' import { getFile } from '../../utils/file.js' import urlJoin from 'url-join' import { fetchFileMetadata } from '../../utils/asset.js' +import { DDO, DDOManager } from '@oceanprotocol/ddo-js' +import { deleteKeysFromObject, sanitizeServiceFiles } from '../../utils/util.js' + +import { decrypt } from '../../utils/crypt.js' +import { CORE_LOGGER } from '../../utils/logging/common.js' +import { AlgoChecksums, ComputeJob, DBComputeJob } from '../../@types/index.js' export { C2DEngine } from './compute_engine_base.js' -export async function checkC2DEnvExists( - envId: string, - oceanNode: OceanNode -): Promise { - const config = await getConfiguration() - const { supportedNetworks } = config - for (const supportedNetwork of Object.keys(supportedNetworks)) { - const getEnvironmentsTask = { - command: PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS, - chainId: parseInt(supportedNetwork) - } - const response = await new ComputeGetEnvironmentsHandler(oceanNode).handle( - getEnvironmentsTask +export async function decryptFilesObject( + serviceFiles: any +): Promise { + try { + // 2. Decrypt the url + const decryptedUrlBytes = await decrypt( + Uint8Array.from(Buffer.from(sanitizeServiceFiles(serviceFiles), 'hex')), + EncryptMethod.ECIES ) - if (response.status.httpStatus === 200) { - const computeEnvironments = await streamToObject(response.stream as Readable) - for (const computeEnvironment of computeEnvironments[parseInt(supportedNetwork)]) { - if (computeEnvironment.id === envId) { - return true - } - } - } + + // 3. Convert the decrypted bytes back to a string + const decryptedFilesString = Buffer.from(decryptedUrlBytes as Uint8Array).toString() + const decryptedFileArray = JSON.parse(decryptedFilesString) + + console.log('decryptedFileArray: ', decryptedFileArray) + return decryptedFileArray.files[0] + } catch (err) { + CORE_LOGGER.error('Error decrypting files object: ' + err.message) + return null } - return false +} + +export function omitDBComputeFieldsFromComputeJob(dbCompute: DBComputeJob): ComputeJob { + const job: ComputeJob = deleteKeysFromObject(dbCompute, [ + 'clusterHash', + 'configlogURL', + 'publishlogURL', + 'algologURL', + 'outputsURL', + // 'algorithm', + // 'assets', + 'isRunning', + 'isStarted', + 'containerImage' + ]) as ComputeJob + return job } export async function getAlgoChecksums( @@ -66,22 +78,22 @@ export async function getAlgoChecksums( file.type === 'url' ? (file as UrlFileObject).url : file.type === 'arweave' - ? urlJoin( - process.env.ARWEAVE_GATEWAY, - (file as ArweaveFileObject).transactionId - ) - : file.type === 'ipfs' - ? urlJoin(process.env.IPFS_GATEWAY, (file as IpfsFileObject).hash) - : null + ? urlJoin( + process.env.ARWEAVE_GATEWAY, + (file as ArweaveFileObject).transactionId + ) + : file.type === 'ipfs' + ? urlJoin(process.env.IPFS_GATEWAY, (file as IpfsFileObject).hash) + : null const { contentChecksum } = await fetchFileMetadata(url, 'get', false) checksums.files = checksums.files.concat(contentChecksum) } - + const ddoInstance = DDOManager.getDDOClass(algoDDO) + const { metadata } = ddoInstance.getDDOFields() as any checksums.container = createHash('sha256') .update( - algoDDO.metadata.algorithm.container.entrypoint + - algoDDO.metadata.algorithm.container.checksum + metadata.algorithm.container.entrypoint + metadata.algorithm.container.checksum ) .digest('hex') return checksums @@ -97,13 +109,15 @@ export async function validateAlgoForDataset( files: string container: string }, - datasetDDO: DDO, + datasetDDO: DDO | Record, datasetServiceId: string, oceanNode: OceanNode ) { try { - const datasetService = datasetDDO.services.find( - (service) => service.id === datasetServiceId + const ddoInstance = DDOManager.getDDOClass(datasetDDO) + const { services } = ddoInstance.getDDOFields() as any + const datasetService = services.find( + (service: any) => service.id === datasetServiceId ) if (!datasetService) { throw new Error('Dataset service not found') @@ -124,7 +138,7 @@ export async function validateAlgoForDataset( // if is set only allow if match if (compute.publisherTrustedAlgorithms) { const trustedAlgo = compute.publisherTrustedAlgorithms.find( - (algo) => algo.did === algoDID + (algo: any) => algo.did === algoDID ) if (trustedAlgo) { return ( @@ -136,10 +150,12 @@ export async function validateAlgoForDataset( } if (compute.publisherTrustedAlgorithmPublishers) { const algoDDO = await new FindDdoHandler(oceanNode).findAndFormatDdo(algoDID) + const algoInstance = DDOManager.getDDOClass(algoDDO) + const { nftAddress } = algoInstance.getDDOFields() if (algoDDO) { return compute.publisherTrustedAlgorithmPublishers - .map((address) => address?.toLowerCase()) - .includes(algoDDO.nftAddress?.toLowerCase()) + .map((address: string) => address?.toLowerCase()) + .includes(nftAddress?.toLowerCase()) } return false } diff --git a/src/components/core/admin/IndexingThreadHandler.ts b/src/components/core/admin/IndexingThreadHandler.ts index 51c33dcd4..a0d87e031 100644 --- a/src/components/core/admin/IndexingThreadHandler.ts +++ b/src/components/core/admin/IndexingThreadHandler.ts @@ -8,11 +8,11 @@ import { validateCommandParameters, ValidateParams } from '../../httpRoutes/validateCommands.js' -import { AdminHandler } from './adminHandler.js' +import { AdminCommandHandler } from './adminHandler.js' import { checkSupportedChainId } from '../../../utils/blockchain.js' -export class IndexingThreadHandler extends AdminHandler { - validate(command: StartStopIndexingCommand): ValidateParams { +export class IndexingThreadHandler extends AdminCommandHandler { + async validateAdminCommand(command: StartStopIndexingCommand): Promise { if ( !validateCommandParameters(command, ['action']) || ![IndexingCommand.START_THREAD, IndexingCommand.STOP_THREAD].includes( @@ -24,12 +24,12 @@ export class IndexingThreadHandler extends AdminHandler { `Missing or invalid "action" and/or "chainId" fields for command: "${command}".` ) } - return super.validate(command) + return await super.validate(command) } // eslint-disable-next-line require-await async handle(task: StartStopIndexingCommand): Promise { - const validation = this.validate(task) + const validation = await this.validateAdminCommand(task) if (!validation.valid) { return buildInvalidParametersResponse(validation) } diff --git a/src/components/core/admin/adminHandler.ts b/src/components/core/admin/adminHandler.ts index 42612e8f3..c6bd50ed1 100644 --- a/src/components/core/admin/adminHandler.ts +++ b/src/components/core/admin/adminHandler.ts @@ -1,14 +1,39 @@ -import { AdminCommand } from '../../../@types/commands.js' +import { AdminCommand, IValidateAdminCommandHandler } from '../../../@types/commands.js' import { ValidateParams, validateCommandParameters, - buildInvalidRequestMessage + buildInvalidRequestMessage, + buildRateLimitReachedResponse, + buildInvalidParametersResponse } from '../../httpRoutes/validateCommands.js' import { validateAdminSignature } from '../../../utils/auth.js' -import { Handler } from '../handler/handler.js' +import { BaseHandler } from '../handler/handler.js' +import { P2PCommandResponse } from '../../../@types/OceanNode.js' +import { ReadableString } from '../../P2P/handleProtocolCommands.js' +import { CommonValidation } from '../../../utils/validators.js' -export abstract class AdminHandler extends Handler { - validate(command: AdminCommand): ValidateParams { +export abstract class AdminCommandHandler + extends BaseHandler + implements IValidateAdminCommandHandler +{ + async verifyParamsAndRateLimits(task: AdminCommand): Promise { + if (!(await this.checkRateLimit())) { + return buildRateLimitReachedResponse() + } + // then validate the command arguments + const validation = await this.validate(task) + if (!validation.valid) { + return buildInvalidParametersResponse(validation) + } + + // all good! + return { + stream: new ReadableString('OK'), + status: { httpStatus: 200, error: null } + } + } + + async validate(command: AdminCommand): Promise { const commandValidation = validateCommandParameters(command, [ 'expiryTimestamp', 'signature' @@ -16,7 +41,7 @@ export abstract class AdminHandler extends Handler { if (!commandValidation.valid) { return buildInvalidRequestMessage(commandValidation.reason) } - const signatureValidation = validateAdminSignature( + const signatureValidation: CommonValidation = await validateAdminSignature( command.expiryTimestamp, command.signature ) @@ -25,8 +50,6 @@ export abstract class AdminHandler extends Handler { `Signature check failed: ${signatureValidation.error}` ) } - return { - valid: true - } + return { valid: true } } } diff --git a/src/components/core/admin/collectFeesHandler.ts b/src/components/core/admin/collectFeesHandler.ts index fb103cba2..b86c6f50b 100644 --- a/src/components/core/admin/collectFeesHandler.ts +++ b/src/components/core/admin/collectFeesHandler.ts @@ -1,4 +1,4 @@ -import { AdminHandler } from './adminHandler.js' +import { AdminCommandHandler } from './adminHandler.js' import { AdminCollectFeesCommand, AdminCollectFeesHandlerResponse @@ -21,8 +21,8 @@ import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/template import { CORE_LOGGER } from '../../../utils/logging/common.js' import { Readable } from 'stream' -export class CollectFeesHandler extends AdminHandler { - validate(command: AdminCollectFeesCommand): ValidateParams { +export class CollectFeesHandler extends AdminCommandHandler { + async validate(command: AdminCollectFeesCommand): Promise { if ( !validateCommandParameters(command, [ 'chainId', @@ -40,11 +40,11 @@ export class CollectFeesHandler extends AdminHandler { CORE_LOGGER.error(msg) return buildInvalidRequestMessage(msg) } - return super.validate(command) + return await super.validate(command) } async handle(task: AdminCollectFeesCommand): Promise { - const validation = this.validate(task) + const validation = await this.validate(task) if (!validation.valid) { return buildInvalidParametersResponse(validation) } diff --git a/src/components/core/admin/fetchConfigHandler.ts b/src/components/core/admin/fetchConfigHandler.ts new file mode 100644 index 000000000..7f1f005de --- /dev/null +++ b/src/components/core/admin/fetchConfigHandler.ts @@ -0,0 +1,43 @@ +import { AdminCommandHandler } from './adminHandler.js' +import { AdminFetchConfigCommand } from '../../../@types/commands.js' +import { P2PCommandResponse } from '../../../@types/OceanNode.js' +import { + ValidateParams, + buildInvalidParametersResponse +} from '../../httpRoutes/validateCommands.js' +import { ReadableString } from '../../P2P/handleProtocolCommands.js' +import { loadConfigFromFile } from '../../../utils/config/index.js' + +export class FetchConfigHandler extends AdminCommandHandler { + async validate(command: AdminFetchConfigCommand): Promise { + return await super.validate(command) + } + + async handle(task: AdminFetchConfigCommand): Promise { + const validation = await this.validate(task) + if (!validation.valid) { + return new Promise((resolve) => { + resolve(buildInvalidParametersResponse(validation)) + }) + } + + try { + const config = loadConfigFromFile() + config.keys.privateKey = '[*** HIDDEN CONTENT ***]' + + return new Promise((resolve) => { + resolve({ + status: { httpStatus: 200 }, + stream: new ReadableString(JSON.stringify(config)) + }) + }) + } catch (error) { + return new Promise((resolve) => { + resolve({ + status: { httpStatus: 500, error: `Error fetching config: ${error.message}` }, + stream: null + }) + }) + } + } +} diff --git a/src/components/core/admin/pushConfigHandler.ts b/src/components/core/admin/pushConfigHandler.ts new file mode 100644 index 000000000..14d0ecb6d --- /dev/null +++ b/src/components/core/admin/pushConfigHandler.ts @@ -0,0 +1,88 @@ +import { AdminCommandHandler } from './adminHandler.js' +import { AdminPushConfigCommand } from '../../../@types/commands.js' +import { P2PCommandResponse } from '../../../@types/OceanNode.js' +import { + ValidateParams, + buildInvalidParametersResponse, + buildInvalidRequestMessage +} from '../../httpRoutes/validateCommands.js' +import { CORE_LOGGER } from '../../../utils/logging/common.js' +import { ReadableString } from '../../P2P/handleProtocolCommands.js' +import { getConfiguration, getConfigFilePath } from '../../../utils/config/index.js' +import { OceanNodeConfigSchema } from '../../../utils/config/schemas.js' +import fs from 'fs' + +export class PushConfigHandler extends AdminCommandHandler { + async validate(command: AdminPushConfigCommand): Promise { + const baseValidation = await super.validate(command) + if (!baseValidation.valid) { + return baseValidation + } + + if (!command.config || typeof command.config !== 'object') { + return buildInvalidRequestMessage('Config must be a valid object') + } + + // Pre-validate the config fields using Zod schema + try { + const currentConfig = await getConfiguration() + const mergedConfig = { ...currentConfig, ...command.config } + + OceanNodeConfigSchema.parse(mergedConfig) + } catch (error) { + if (error.name === 'ZodError') { + const issues = error.issues + .map((issue: any) => `${issue.path.join('.')}: ${issue.message}`) + .join(', ') + return buildInvalidRequestMessage(`Config validation failed: ${issues}`) + } + return buildInvalidRequestMessage(`Config validation error: ${error.message}`) + } + + return { valid: true } + } + + async handle(task: AdminPushConfigCommand): Promise { + const validation = await this.validate(task) + if (!validation.valid) { + return new Promise((resolve) => { + resolve(buildInvalidParametersResponse(validation)) + }) + } + + try { + const configPath = getConfigFilePath() + const configContent = await fs.promises.readFile(configPath, 'utf-8') + const currentConfig = JSON.parse(configContent) + + const mergedConfig = { ...currentConfig, ...task.config } + await this.saveConfigToFile(mergedConfig) + + const newConfig = await getConfiguration(true, false) + newConfig.keys.privateKey = '[*** HIDDEN CONTENT ***]' + CORE_LOGGER.logMessage('Configuration reloaded successfully') + + return new Promise((resolve) => { + resolve({ + status: { httpStatus: 200 }, + stream: new ReadableString(JSON.stringify(newConfig)) + }) + }) + } catch (error) { + CORE_LOGGER.error(`Error pushing config: ${error.message}`) + return new Promise((resolve) => { + resolve({ + status: { httpStatus: 500, error: `Error pushing config: ${error.message}` }, + stream: null + }) + }) + } + } + + private async saveConfigToFile(config: Record): Promise { + const configPath = getConfigFilePath() + const content = JSON.stringify(config, null, 4) + await fs.promises.writeFile(configPath, content, 'utf-8') + CORE_LOGGER.logMessage(`Config saved to: ${configPath}`) + } +} diff --git a/src/components/core/admin/reindexChainHandler.ts b/src/components/core/admin/reindexChainHandler.ts index 911bbbfe5..10ac997bc 100644 --- a/src/components/core/admin/reindexChainHandler.ts +++ b/src/components/core/admin/reindexChainHandler.ts @@ -1,4 +1,4 @@ -import { AdminHandler } from './adminHandler.js' +import { AdminCommandHandler } from './adminHandler.js' import { AdminReindexChainCommand } from '../../../@types/commands.js' import { validateCommandParameters, @@ -12,18 +12,18 @@ import { CORE_LOGGER } from '../../../utils/logging/common.js' import { checkSupportedChainId } from '../../../utils/blockchain.js' import { ReadableString } from '../../P2P/handleProtocolCommands.js' -export class ReindexChainHandler extends AdminHandler { - validate(command: AdminReindexChainCommand): ValidateParams { +export class ReindexChainHandler extends AdminCommandHandler { + async validateAdminCommand(command: AdminReindexChainCommand): Promise { if (!validateCommandParameters(command, ['chainId'])) { return buildInvalidRequestMessage( `Missing chainId field for command: "${command}".` ) } - return super.validate(command) + return await super.validate(command) } async handle(task: AdminReindexChainCommand): Promise { - const validation = this.validate(task) + const validation = await this.validateAdminCommand(task) if (!validation.valid) { return buildInvalidParametersResponse(validation) } diff --git a/src/components/core/admin/reindexTxHandler.ts b/src/components/core/admin/reindexTxHandler.ts index 9fdbf6cb3..f9c746da0 100644 --- a/src/components/core/admin/reindexTxHandler.ts +++ b/src/components/core/admin/reindexTxHandler.ts @@ -1,4 +1,4 @@ -import { AdminHandler } from './adminHandler.js' +import { AdminCommandHandler } from './adminHandler.js' import { validateCommandParameters, buildInvalidRequestMessage, @@ -12,8 +12,8 @@ import { CORE_LOGGER } from '../../../utils/logging/common.js' import { ReadableString } from '../../P2P/handleProtocolCommands.js' import { checkSupportedChainId } from '../../../utils/blockchain.js' -export class ReindexTxHandler extends AdminHandler { - validate(command: AdminReindexTxCommand): ValidateParams { +export class ReindexTxHandler extends AdminCommandHandler { + async validate(command: AdminReindexTxCommand): Promise { if (!validateCommandParameters(command, ['chainId', 'txId'])) { return buildInvalidRequestMessage( `Missing chainId or txId fields for command: "${command}".` @@ -22,11 +22,11 @@ export class ReindexTxHandler extends AdminHandler { if (!/^0x([A-Fa-f0-9]{64})$/.test(command.txId)) { return buildInvalidRequestMessage(`Invalid format for transaction ID.`) } - return super.validate(command) + return await super.validate(command) } async handle(task: AdminReindexTxCommand): Promise { - const validation = this.validate(task) + const validation = await this.validate(task) if (!validation.valid) { return buildInvalidParametersResponse(validation) } diff --git a/src/components/core/admin/stopNodeHandler.ts b/src/components/core/admin/stopNodeHandler.ts index 9d705d50e..6b11cd5be 100644 --- a/src/components/core/admin/stopNodeHandler.ts +++ b/src/components/core/admin/stopNodeHandler.ts @@ -1,4 +1,4 @@ -import { AdminHandler } from './adminHandler.js' +import { AdminCommandHandler } from './adminHandler.js' import { AdminStopNodeCommand } from '../../../@types/commands.js' import { P2PCommandResponse } from '../../../@types/OceanNode.js' import { @@ -8,13 +8,13 @@ import { import { CORE_LOGGER } from '../../../utils/logging/common.js' import { ReadableString } from '../../P2P/handleProtocolCommands.js' -export class StopNodeHandler extends AdminHandler { - validate(command: AdminStopNodeCommand): ValidateParams { - return super.validate(command) +export class StopNodeHandler extends AdminCommandHandler { + async validate(command: AdminStopNodeCommand): Promise { + return await super.validate(command) } - handle(task: AdminStopNodeCommand): Promise { - const validation = this.validate(task) + async handle(task: AdminStopNodeCommand): Promise { + const validation = await this.validate(task) if (!validation.valid) { return new Promise((resolve, reject) => { resolve(buildInvalidParametersResponse(validation)) diff --git a/src/components/core/compute/environments.ts b/src/components/core/compute/environments.ts index 8561d66c4..95e8b0b6d 100644 --- a/src/components/core/compute/environments.ts +++ b/src/components/core/compute/environments.ts @@ -1,16 +1,14 @@ import { Readable } from 'stream' import { P2PCommandResponse } from '../../../@types/index.js' -import { ComputeEnvByChain } from '../../../@types/C2D.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' -import { Handler } from '../handler/handler.js' +import { CommandHandler } from '../handler/handler.js' import { ComputeGetEnvironmentsCommand } from '../../../@types/commands.js' -import { getConfiguration } from '../../../utils/config.js' import { ValidateParams, buildInvalidRequestMessage, validateCommandParameters } from '../../httpRoutes/validateCommands.js' -export class ComputeGetEnvironmentsHandler extends Handler { +export class ComputeGetEnvironmentsHandler extends CommandHandler { validate(command: ComputeGetEnvironmentsCommand): ValidateParams { const validateCommand = validateCommandParameters(command, []) if (!validateCommand.valid) { @@ -27,14 +25,8 @@ export class ComputeGetEnvironmentsHandler extends Handler { return validationResponse } try { - const result: ComputeEnvByChain = {} const computeEngines = this.getOceanNode().getC2DEngines() - const config = await getConfiguration() - for (const chain of Object.keys(config.supportedNetworks)) { - const chainId = parseInt(chain) - if (task.chainId && task.chainId !== chainId) continue - result[chainId] = await computeEngines.fetchEnvironments(chainId) - } + const result = await computeEngines.fetchEnvironments(task.chainId) CORE_LOGGER.logMessage( 'ComputeGetEnvironmentsCommand Response: ' + JSON.stringify(result, null, 2), diff --git a/src/components/core/compute/getResults.ts b/src/components/core/compute/getResults.ts index ffa242349..682278f07 100644 --- a/src/components/core/compute/getResults.ts +++ b/src/components/core/compute/getResults.ts @@ -1,8 +1,7 @@ import { P2PCommandResponse } from '../../../@types/index.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' -import { Handler } from '../handler/handler.js' +import { CommandHandler } from '../handler/handler.js' import { ComputeGetResultCommand } from '../../../@types/commands.js' -import { checkNonce, NonceResponse } from '../utils/nonceHandler.js' import { buildInvalidRequestMessage, validateCommandParameters, @@ -10,15 +9,9 @@ import { } from '../../httpRoutes/validateCommands.js' import { isAddress } from 'ethers' -export class ComputeGetResultHandler extends Handler { +export class ComputeGetResultHandler extends CommandHandler { validate(command: ComputeGetResultCommand): ValidateParams { - const validation = validateCommandParameters(command, [ - 'consumerAddress', - 'signature', - 'nonce', - 'jobId', - 'index' - ]) + const validation = validateCommandParameters(command, ['jobId', 'index']) if (validation.valid) { if (command.consumerAddress && !isAddress(command.consumerAddress)) { return buildInvalidRequestMessage( @@ -38,33 +31,17 @@ export class ComputeGetResultHandler extends Handler { return validationResponse } - let error = null - - // signature message to check against - const message = task.consumerAddress + task.jobId + task.index.toString() + task.nonce - const nonceCheckResult: NonceResponse = await checkNonce( - this.getOceanNode().getDatabase().nonce, + const authValidationResponse = await this.validateTokenOrSignature( + task.authorization, task.consumerAddress, - parseInt(task.nonce), + task.nonce, task.signature, - message // task.jobId + task.index.toString() + String(task.consumerAddress + task.jobId + task.index.toString() + task.nonce) ) - - if (!nonceCheckResult.valid) { - // eslint-disable-next-line prefer-destructuring - error = nonceCheckResult.error + if (authValidationResponse.status.httpStatus !== 200) { + return authValidationResponse } - if (error) { - CORE_LOGGER.logMessage(error, true) - return { - stream: null, - status: { - httpStatus: 400, - error - } - } - } // split jobId (which is already in hash-jobId format) and get the hash // then get jobId which might contain dashes as well const index = task.jobId.indexOf('-') @@ -90,16 +67,15 @@ export class ComputeGetResultHandler extends Handler { jobId, task.index ) - const anyResp: any = respStream as any const response: P2PCommandResponse = { - stream: respStream, + stream: respStream?.stream, status: { httpStatus: 200 } } // need to pass the headers properly - if (anyResp.headers) { - response.status.headers = anyResp.headers + if (respStream?.headers) { + response.status.headers = respStream?.headers } return response } catch (error) { diff --git a/src/components/core/compute/getStatus.ts b/src/components/core/compute/getStatus.ts index 23b330298..666289e05 100644 --- a/src/components/core/compute/getStatus.ts +++ b/src/components/core/compute/getStatus.ts @@ -1,8 +1,8 @@ import { Readable } from 'stream' import { P2PCommandResponse } from '../../../@types/index.js' -import { ComputeJob } from '../../../@types/C2D.js' +import { ComputeJob } from '../../../@types/C2D/C2D.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' -import { Handler } from '../handler/handler.js' +import { CommandHandler } from '../handler/handler.js' import { ComputeGetStatusCommand } from '../../../@types/commands.js' import { ValidateParams, @@ -11,7 +11,7 @@ import { } from '../../httpRoutes/validateCommands.js' import { isAddress } from 'ethers' -export class ComputeGetStatusHandler extends Handler { +export class ComputeGetStatusHandler extends CommandHandler { validate(command: ComputeGetStatusCommand): ValidateParams { const validation = validateCommandParameters(command, []) if (validation.valid) { @@ -44,20 +44,29 @@ export class ComputeGetStatusHandler extends Handler { // split jobId (which is already in hash-jobId format) and get the hash // then get jobId which might contain dashes as well const index = task.jobId.indexOf('-') - const hash = task.jobId.slice(0, index) - engines = [await this.getOceanNode().getC2DEngines().getC2DByHash(hash)] - jobId = task.jobId.slice(index + 1) + if (index > 0) { + const hash = task.jobId.slice(0, index) + engines = [await this.getOceanNode().getC2DEngines().getC2DByHash(hash)] + jobId = task.jobId.slice(index + 1) + } else { + engines = await this.getOceanNode().getC2DEngines().getAllEngines() + } } else { engines = await this.getOceanNode().getC2DEngines().getAllEngines() + CORE_LOGGER.logMessage( + 'ComputeGetStatusCommand: No jobId provided, querying all C2D clusters' + ) } for (const engine of engines) { + CORE_LOGGER.logMessage(`ComputeGetStatusCommand: Querying engine`) const jobs = await engine.getComputeJobStatus( task.consumerAddress, task.agreementId, jobId ) - response.push(...jobs) + + if (jobs && jobs.length > 0) response.push(...jobs) } CORE_LOGGER.logMessage( 'ComputeGetStatusCommand Response: ' + JSON.stringify(response, null, 2), diff --git a/src/components/core/compute/getStreamableLogs.ts b/src/components/core/compute/getStreamableLogs.ts new file mode 100644 index 000000000..45c701d28 --- /dev/null +++ b/src/components/core/compute/getStreamableLogs.ts @@ -0,0 +1,93 @@ +import { P2PCommandResponse } from '../../../@types/index.js' +import { CORE_LOGGER } from '../../../utils/logging/common.js' +import { CommandHandler } from '../handler/handler.js' +import { ComputeGetStreamableLogsCommand } from '../../../@types/commands.js' +import { Stream } from 'stream' +import { + buildInvalidRequestMessage, + validateCommandParameters, + ValidateParams +} from '../../httpRoutes/validateCommands.js' +import { isAddress } from 'ethers' + +export class ComputeGetStreamableLogsHandler extends CommandHandler { + validate(command: ComputeGetStreamableLogsCommand): ValidateParams { + const validation = validateCommandParameters(command, ['jobId']) + if (validation.valid) { + if (command.consumerAddress && !isAddress(command.consumerAddress)) { + return buildInvalidRequestMessage( + 'Parameter : "consumerAddress" is not a valid web3 address' + ) + } + } + return validation + } + + async handle(task: ComputeGetStreamableLogsCommand): Promise { + const oceanNode = this.getOceanNode() + + const validationResponse = await this.verifyParamsAndRateLimits(task) + if (this.shouldDenyTaskHandling(validationResponse)) { + return validationResponse + } + + const authValidationResponse = await this.validateTokenOrSignature( + task.authorization, + task.consumerAddress, + task.nonce, + task.signature, + String(task.consumerAddress + task.jobId + task.nonce) + ) + if (authValidationResponse.status.httpStatus !== 200) { + return authValidationResponse + } + + // split jobId (which is already in hash-jobId format) and get the hash + // then get jobId which might contain dashes as well + const index = task.jobId.indexOf('-') + const hash = task.jobId.slice(0, index) + const jobId = task.jobId.slice(index + 1) + + // env might contain + let engine + try { + engine = await oceanNode.getC2DEngines().getC2DByHash(hash) + } catch (e) { + return { + stream: null, + status: { + httpStatus: 500, + error: 'Invalid C2D Environment' + } + } + } + try { + const respStream = await engine.getStreamableLogs(jobId) + if (!respStream) { + return { + stream: null, + status: { + httpStatus: 404 + } + } + } + const response: P2PCommandResponse = { + stream: respStream as unknown as Stream, + status: { + httpStatus: 200 + } + } + + return response + } catch (error) { + CORE_LOGGER.error(error.message) + return { + stream: null, + status: { + httpStatus: 500, + error: error.message + } + } + } + } +} diff --git a/src/components/core/compute/index.ts b/src/components/core/compute/index.ts index 14d73f5cc..2beb8c621 100644 --- a/src/components/core/compute/index.ts +++ b/src/components/core/compute/index.ts @@ -4,3 +4,4 @@ export * from './stopCompute.js' export * from './getStatus.js' export * from './getResults.js' export * from './initialize.js' +export * from './getStreamableLogs.js' diff --git a/src/components/core/compute/initialize.ts b/src/components/core/compute/initialize.ts index 1c5f58bec..e820d2b87 100644 --- a/src/components/core/compute/initialize.ts +++ b/src/components/core/compute/initialize.ts @@ -1,7 +1,8 @@ import { Readable } from 'stream' -import { P2PCommandResponse } from '../../../@types/index.js' +import { P2PCommandResponse } from '../../../@types/OceanNode.js' +import { C2DClusterType } from '../../../@types/C2D/C2D.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' -import { Handler } from '../handler/handler.js' +import { CommandHandler } from '../handler/handler.js' import { ComputeInitializeCommand } from '../../../@types/commands.js' import { ProviderComputeInitializeResults } from '../../../@types/Fees.js' import { @@ -13,6 +14,7 @@ import { } from '../../../utils/asset.js' import { verifyProviderFees, createProviderFee } from '../utils/feesHandler.js' import { Blockchain } from '../../../utils/blockchain.js' + import { validateOrderTransaction } from '../utils/validateOrders.js' import { EncryptMethod } from '../../../@types/fileObject.js' import { decrypt } from '../../../utils/crypt.js' @@ -22,17 +24,26 @@ import { validateCommandParameters } from '../../httpRoutes/validateCommands.js' import { isAddress } from 'ethers' -import { getConfiguration } from '../../../utils/index.js' +import { getConfiguration, isPolicyServerConfigured } from '../../../utils/index.js' import { sanitizeServiceFiles } from '../../../utils/util.js' import { FindDdoHandler } from '../handler/ddoHandler.js' import { isOrderingAllowedForAsset } from '../handler/downloadHandler.js' -export class ComputeInitializeHandler extends Handler { +import { getNonceAsNumber } from '../utils/nonceHandler.js' +import { C2DEngineDocker, getAlgorithmImage } from '../../c2d/compute_engine_docker.js' +import { Credentials, DDOManager } from '@oceanprotocol/ddo-js' +import { areKnownCredentialTypes, checkCredentials } from '../../../utils/credentials.js' +import { PolicyServer } from '../../policyServer/index.js' +import { generateUniqueID, getAlgoChecksums, validateAlgoForDataset } from './utils.js' + +export class ComputeInitializeHandler extends CommandHandler { validate(command: ComputeInitializeCommand): ValidateParams { const validation = validateCommandParameters(command, [ 'datasets', 'algorithm', - 'compute', - 'consumerAddress' + 'payment', + 'consumerAddress', + 'environment' + // we might also need a "signature" (did + nonce) for confidential evm template 4 ]) if (validation.valid) { if (command.consumerAddress && !isAddress(command.consumerAddress)) { @@ -40,17 +51,14 @@ export class ComputeInitializeHandler extends Handler { 'Parameter : "consumerAddress" is not a valid web3 address' ) } - const { validUntil } = command.compute - if (validUntil <= new Date().getTime() / 1000) { - const errorMsg = `Error validating validUntil ${validUntil}. It is not in the future.` - CORE_LOGGER.error(errorMsg) - return buildInvalidRequestMessage(errorMsg) - } else if (!command.compute || !command.compute.env) { - CORE_LOGGER.error(`Invalid compute environment: ${command.compute.env}`) - return buildInvalidRequestMessage( - `Invalid compute environment: ${command.compute.env}` - ) + if (!command.payment.chainId || !command.payment.token) { + return buildInvalidRequestMessage('Invalid payment options') + } + if (command.maxJobDuration && parseInt(String(command.maxJobDuration)) <= 0) { + return buildInvalidRequestMessage('Invalid maxJobDuration') } + + return validation } return validation @@ -61,21 +69,153 @@ export class ComputeInitializeHandler extends Handler { if (this.shouldDenyTaskHandling(validationResponse)) { return validationResponse } - + if (!task.queueMaxWaitTime) { + task.queueMaxWaitTime = 0 + } + let engine + let env + let resourcesNeeded try { - let foundValidCompute = null const node = this.getOceanNode() + const config = await getConfiguration() + try { + // split compute env (which is already in hash-envId format) and get the hash + // then get env which might contain dashes as well + const eIndex = task.environment.indexOf('-') + const hash = task.environment.slice(0, eIndex) + engine = await this.getOceanNode().getC2DEngines().getC2DByHash(hash) + } catch (e) { + return { + stream: null, + status: { + httpStatus: 500, + error: 'Invalid C2D Environment' + } + } + } + + const algoChecksums = await getAlgoChecksums( + task.algorithm.documentId, + task.algorithm.serviceId, + node, + config + ) + + const isRawCodeAlgorithm = task.algorithm.meta?.rawcode + const hasValidChecksums = algoChecksums.container && algoChecksums.files + + if (!isRawCodeAlgorithm && !hasValidChecksums) { + const errorMessage = + 'Failed to retrieve algorithm checksums. Both container and files checksums are required.' + CORE_LOGGER.error(errorMessage) + return { + stream: null, + status: { + httpStatus: 500, + error: errorMessage + } + } + } + if (engine === null) { + return { + stream: null, + status: { + httpStatus: 500, + error: 'Invalid C2D Environment' + } + } + } + try { + env = await engine.getComputeEnvironment(task.payment.chainId, task.environment) + if (!env) { + return { + stream: null, + status: { + httpStatus: 500, + error: 'Invalid C2D Environment' + } + } + } + if (!task.maxJobDuration || task.maxJobDuration > env.maxJobDuration) { + task.maxJobDuration = env.maxJobDuration + } + resourcesNeeded = await engine.checkAndFillMissingResources( + task.payment.resources, + env, + false + ) + } catch (e) { + return { + stream: null, + status: { + httpStatus: 500, + error: String(e) + } + } + } + // check if we have the required token as payment method + const prices = engine.getEnvPricesForToken( + env, + task.payment.chainId, + task.payment.token + ) + if (!prices) { + return { + stream: null, + status: { + httpStatus: 500, + error: `This compute env does not accept payments on chain: ${task.payment.chainId} using token ${task.payment.token}` + } + } + } + + const escrowAddress = await engine.escrow.getEscrowContractAddressForChain( + task.payment.chainId + ) + if (!escrowAddress) { + return { + stream: null, + status: { + httpStatus: 500, + error: `Cannot handle payments on chainId: ${task.payment.chainId}` + } + } + } + // let's calculate payment needed based on resources request and maxJobDuration + const cost = engine.calculateResourcesCost( + resourcesNeeded, + env, + task.payment.chainId, + task.payment.token, + task.maxJobDuration + ) const allFees: ProviderComputeInitializeResults = { algorithm: null, - datasets: [] + datasets: [], + payment: { + escrowAddress, + payee: env.consumerAddress, + chainId: task.payment.chainId, + minLockSeconds: engine.escrow.getMinLockTime( + task.maxJobDuration + task.queueMaxWaitTime + ), + token: task.payment.token, + amount: await engine.escrow.getPaymentAmountInWei( + cost, + task.payment.chainId, + task.payment.token + ) + } } + // check algo let index = 0 + const policyServer = new PolicyServer() for (const elem of [...[task.algorithm], ...task.datasets]) { const result: any = { validOrder: false } if ('documentId' in elem && elem.documentId) { result.did = elem.documentId - result.serviceId = elem.documentId + result.serviceId = elem.serviceId const ddo = await new FindDdoHandler(node).findAndFormatDdo(elem.documentId) if (!ddo) { const error = `DDO ${elem.documentId} not found` @@ -87,6 +227,13 @@ export class ComputeInitializeHandler extends Handler { } } } + const ddoInstance = DDOManager.getDDOClass(ddo) + const { + chainId: ddoChainId, + nftAddress, + credentials, + metadata + } = ddoInstance.getDDOFields() const isOrdable = isOrderingAllowedForAsset(ddo) if (!isOrdable.isOrdable) { CORE_LOGGER.error(isOrdable.reason) @@ -98,6 +245,63 @@ export class ComputeInitializeHandler extends Handler { } } } + if (metadata.type !== 'algorithm') { + const index = task.datasets.findIndex( + (d) => d.documentId === ddoInstance.getDid() + ) + const safeIndex = index === -1 ? 0 : index + const validAlgoForDataset = await validateAlgoForDataset( + task.algorithm.documentId, + algoChecksums, + ddoInstance, + task.datasets[safeIndex].serviceId, + node + ) + if (!validAlgoForDataset) { + return { + stream: null, + status: { + httpStatus: 400, + error: `Algorithm ${ + task.algorithm.documentId + } not allowed to run on the dataset: ${ddoInstance.getDid()}` + } + } + } + } + // check credentials (DDO level) + let accessGrantedDDOLevel: boolean + if (credentials) { + // if POLICY_SERVER_URL exists, then ocean-node will NOT perform any checks. + // It will just use the existing code and let PolicyServer decide. + if (isPolicyServerConfigured()) { + const response = await policyServer.checkStartCompute( + ddoInstance.getDid(), + ddo, + elem.serviceId, + task.consumerAddress, + task.policyServer + ) + accessGrantedDDOLevel = response.success + } else { + accessGrantedDDOLevel = areKnownCredentialTypes(credentials as Credentials) + ? checkCredentials(credentials as Credentials, task.consumerAddress) + : true + } + if (!accessGrantedDDOLevel) { + CORE_LOGGER.logMessage( + `Error: Access to asset ${ddoInstance.getDid()} was denied`, + true + ) + return { + stream: null, + status: { + httpStatus: 403, + error: `Error: Access to asset ${ddoInstance.getDid()} was denied` + } + } + } + } const service = AssetUtils.getServiceById(ddo, elem.serviceId) if (!service) { const error = `Cannot find service ${elem.serviceId} in DDO ${elem.documentId}` @@ -109,10 +313,44 @@ export class ComputeInitializeHandler extends Handler { } } } + // check credentials on service level + // if using a policy server and we are here it means that access was granted (they are merged/assessed together) + if (service.credentials) { + let accessGrantedServiceLevel: boolean + if (isPolicyServerConfigured()) { + // we use the previous check or we do it again + // (in case there is no DDO level credentials and we only have Service level ones) + const response = await policyServer.checkStartCompute( + ddo.id, + ddo, + elem.serviceId, + task.consumerAddress, + task.policyServer + ) + accessGrantedServiceLevel = accessGrantedDDOLevel || response.success + } else { + accessGrantedServiceLevel = areKnownCredentialTypes(service.credentials) + ? checkCredentials(service.credentials, task.consumerAddress) + : true + } + if (!accessGrantedServiceLevel) { + CORE_LOGGER.logMessage( + `Error: Access to service with id ${service.id} was denied`, + true + ) + return { + stream: null, + status: { + httpStatus: 403, + error: `Error: Access to service with id ${service.id} was denied` + } + } + } + } const config = await getConfiguration() const { rpc, network, chainId, fallbackRPCs } = - config.supportedNetworks[ddo.chainId] + config.supportedNetworks[ddoChainId] const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) const { ready, error } = await blockchain.isNetworkReady() if (!ready) { @@ -125,10 +363,38 @@ export class ComputeInitializeHandler extends Handler { } } + // docker images? + const clusters = config.c2dClusters + let hasDockerImages = false + for (const cluster of clusters) { + if (cluster.type === C2DClusterType.DOCKER) { + hasDockerImages = true + break + } + } + if (hasDockerImages) { + const algoImage = getAlgorithmImage(task.algorithm, generateUniqueID(task)) + if (algoImage) { + const validation: ValidateParams = await C2DEngineDocker.checkDockerImage( + algoImage, + env.platform + ) + if (!validation.valid) { + return { + stream: null, + status: { + httpStatus: validation.status, + error: `Initialize Compute failed for image ${algoImage} :${validation.reason}` + } + } + } + } + } + const signer = blockchain.getSigner() // check if oasis evm or similar - const confidentialEVM = isConfidentialChainDDO(ddo.chainId, service) + const confidentialEVM = isConfidentialChainDDO(BigInt(ddoChainId), service) // let's see if we can access this asset let canDecrypt = false try { @@ -144,19 +410,34 @@ export class ComputeInitializeHandler extends Handler { service.datatokenAddress, signer ) - if (isTemplate4 && (await isERC20Template4Active(ddo.chainId, signer))) { - // call smart contract to decrypt - const serviceIndex = AssetUtils.getServiceIndexById(ddo, service.id) - const filesObject = await getFilesObjectFromConfidentialEVM( - serviceIndex, - service.datatokenAddress, - signer, - task.consumerAddress, - null, // TODO, we will need to have a signature verification - ddo.id - ) - if (filesObject !== null) { - canDecrypt = true + if (isTemplate4) { + if (!task.signature) { + CORE_LOGGER.error( + 'Could not decrypt ddo files on template 4, missing consumer signature!' + ) + } else if (await isERC20Template4Active(ddoChainId, signer)) { + // we need to get the proper data for the signature + const consumeData = + task.consumerAddress + + task.datasets[0].documentId + + getNonceAsNumber(task.consumerAddress) + // call smart contract to decrypt + const serviceIndex = AssetUtils.getServiceIndexById(ddo, service.id) + const filesObject = await getFilesObjectFromConfidentialEVM( + serviceIndex, + service.datatokenAddress, + signer, + task.consumerAddress, + task.signature, // we will need to have a signature verification + consumeData + ) + if (filesObject !== null) { + canDecrypt = true + } + } else { + CORE_LOGGER.error( + 'Could not decrypt ddo files on template 4, template is not active!' + ) } } } @@ -177,26 +458,12 @@ export class ComputeInitializeHandler extends Handler { const provider = blockchain.getProvider() result.datatoken = service.datatokenAddress - result.chainId = ddo.chainId + result.chainId = ddoChainId // start with assumption than we need new providerfees let validFee = { isValid: false, - isComputeValid: false, message: false } - const env = await this.getOceanNode() - .getC2DEngines() - .getExactComputeEnv(task.compute.env, ddo.chainId) - if (!env) { - const error = `Compute environment: ${task.compute.env} not available on chainId: ${ddo.chainId}` - return { - stream: null, - status: { - httpStatus: 500, - error - } - } - } result.consumerAddress = env.consumerAddress if ('transferTxId' in elem && elem.transferTxId) { // search for that compute env and see if it has access to dataset @@ -204,7 +471,7 @@ export class ComputeInitializeHandler extends Handler { elem.transferTxId, env.consumerAddress, provider, - ddo.nftAddress, + nftAddress, service.datatokenAddress, AssetUtils.getServiceIndexById(ddo, service.id), service.timeout, @@ -217,53 +484,19 @@ export class ComputeInitializeHandler extends Handler { elem.transferTxId, task.consumerAddress, provider, - service, - task.compute.env, - task.compute.validUntil + service ) } else { // no point in checking provider fees if order is expired result.validOrder = false } } - if (validFee.isComputeValid === true) { - foundValidCompute = { txId: elem.transferTxId, chainId: ddo.chainId } - } if (validFee.isValid === false) { - // providerFee is no longer valid, so we need to create one - const now = new Date().getTime() / 1000 - let bestValidUntil: number = 0 - if (service.timeout === 0) { - bestValidUntil = task.compute.validUntil // no need to pay more if asset is available for days, but we need houts - } else { - bestValidUntil = Math.min(now + service.timeout, task.compute.validUntil) - } - if (foundValidCompute || !canDecrypt) { - // we already have a valid compute fee with another asset, or it's an asset not served by us - // in any case, we need an access providerFee - if (canDecrypt) { - result.providerFee = await createProviderFee( - ddo, - service, - bestValidUntil, - null, - null - ) - } else { - // TO DO: Edge case when this asset is served by a remote provider. - // We should connect to that provider and get the fee - } + if (canDecrypt) { + result.providerFee = await createProviderFee(ddo, service, service.timeout) } else { - // we need to create a compute fee - // we can only create computeFee if the asset is ours.. - result.providerFee = await createProviderFee( - ddo, - service, - bestValidUntil, - env, - task.compute.validUntil - ) - foundValidCompute = { txId: null, chainId: ddo.chainId } + // TO DO: Edge case when this asset is served by a remote provider. + // We should connect to that provider and get the fee } } } @@ -271,12 +504,7 @@ export class ComputeInitializeHandler extends Handler { else allFees.datasets.push(result) index = index + 1 } - if (!foundValidCompute) { - // edge case, where all assets have valid orders and valid provider fees (for download) - // unfortunatelly, none have valid compute provider fees. let's create for the first asset that is published on a chainId that matches our env - // just take any asset and create provider fees with compute - console.log('TO DO!!!!') - } + return { stream: Readable.from(JSON.stringify(allFees)), status: { diff --git a/src/components/core/compute/startCompute.ts b/src/components/core/compute/startCompute.ts index 7d10ba894..7c0a0e9d5 100644 --- a/src/components/core/compute/startCompute.ts +++ b/src/components/core/compute/startCompute.ts @@ -1,10 +1,12 @@ import { Readable } from 'stream' import { P2PCommandResponse } from '../../../@types/index.js' -import { ComputeAsset } from '../../../@types/C2D.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' -import { Handler } from '../handler/handler.js' -import { ComputeStartCommand } from '../../../@types/commands.js' -import { getAlgoChecksums, validateAlgoForDataset } from './utils.js' +import { + FreeComputeStartCommand, + PaidComputeStartCommand +} from '../../../@types/commands.js' +import { CommandHandler } from '../handler/handler.js' +import { generateUniqueID, getAlgoChecksums, validateAlgoForDataset } from './utils.js' import { ValidateParams, buildInvalidRequestMessage, @@ -19,24 +21,34 @@ import { isERC20Template4Active } from '../../../utils/asset.js' import { EncryptMethod } from '../../../@types/fileObject.js' +import { + ComputeAccessList, + ComputeResourceRequestWithPrice +} from '../../../@types/C2D/C2D.js' import { decrypt } from '../../../utils/crypt.js' -import { verifyProviderFees } from '../utils/feesHandler.js' +// import { verifyProviderFees } from '../utils/feesHandler.js' import { Blockchain } from '../../../utils/blockchain.js' import { validateOrderTransaction } from '../utils/validateOrders.js' -import { getConfiguration } from '../../../utils/index.js' +import { getConfiguration, isPolicyServerConfigured } from '../../../utils/index.js' import { sanitizeServiceFiles } from '../../../utils/util.js' import { FindDdoHandler } from '../handler/ddoHandler.js' -import { ProviderFeeValidation } from '../../../@types/Fees.js' +// import { ProviderFeeValidation } from '../../../@types/Fees.js' import { isOrderingAllowedForAsset } from '../handler/downloadHandler.js' -export class ComputeStartHandler extends Handler { - validate(command: ComputeStartCommand): ValidateParams { +import { Credentials, DDOManager } from '@oceanprotocol/ddo-js' +import { getNonceAsNumber } from '../utils/nonceHandler.js' +import { PolicyServer } from '../../policyServer/index.js' +import { + areKnownCredentialTypes, + checkCredentials, + findAccessListCredentials +} from '../../../utils/credentials.js' +export class PaidComputeStartHandler extends CommandHandler { + validate(command: PaidComputeStartCommand): ValidateParams { const commandValidation = validateCommandParameters(command, [ - 'consumerAddress', - 'signature', - 'nonce', 'environment', 'algorithm', - 'dataset' + 'datasets', + 'maxJobDuration' ]) if (commandValidation.valid) { if (!isAddress(command.consumerAddress)) { @@ -44,24 +56,43 @@ export class ComputeStartHandler extends Handler { 'Parameter : "consumerAddress" is not a valid web3 address' ) } + if (parseInt(String(command.maxJobDuration)) <= 0) { + return buildInvalidRequestMessage('Invalid maxJobDuration') + } } return commandValidation } - async handle(task: ComputeStartCommand): Promise { + async handle(task: PaidComputeStartCommand): Promise { const validationResponse = await this.verifyParamsAndRateLimits(task) if (this.shouldDenyTaskHandling(validationResponse)) { return validationResponse } + if (!task.queueMaxWaitTime) { + task.queueMaxWaitTime = 0 + } + const authValidationResponse = await this.validateTokenOrSignature( + task.authorization, + task.consumerAddress, + task.nonce, + task.signature, + String(task.consumerAddress + task.datasets[0]?.documentId + task.nonce) + ) + + if (authValidationResponse.status.httpStatus !== 200) { + return authValidationResponse + } + try { + const node = this.getOceanNode() // split compute env (which is already in hash-envId format) and get the hash // then get env which might contain dashes as well const eIndex = task.environment.indexOf('-') const hash = task.environment.slice(0, eIndex) - const envId = task.environment.slice(eIndex + 1) let engine + let env try { - engine = await this.getOceanNode().getC2DEngines().getC2DByHash(hash) + engine = await node.getC2DEngines().getC2DByHash(hash) } catch (e) { return { stream: null, @@ -71,33 +102,95 @@ export class ComputeStartHandler extends Handler { } } } - const node = this.getOceanNode() - const assets: ComputeAsset[] = [task.dataset] - if (task.additionalDatasets) assets.push(...task.additionalDatasets) + + try { + env = await engine.getComputeEnvironment(null, task.environment) + if (!env) { + return { + stream: null, + status: { + httpStatus: 500, + error: 'Invalid C2D Environment' + } + } + } + if (!task.maxJobDuration || task.maxJobDuration > env.maxJobDuration) { + task.maxJobDuration = env.maxJobDuration + } + task.resources = await engine.checkAndFillMissingResources( + task.resources, + env, + false + ) + } catch (e) { + return { + stream: null, + status: { + httpStatus: 400, + error: e?.message || String(e) + } + } + } + try { + await engine.checkIfResourcesAreAvailable(task.resources, env, true) + } catch (e) { + if (task.queueMaxWaitTime > 0) { + CORE_LOGGER.verbose( + `Compute resources not available, queuing job for max ${task.queueMaxWaitTime} seconds` + ) + } else { + return { + stream: null, + status: { + httpStatus: 400, + error: e?.message || String(e) + } + } + } + } const { algorithm } = task - let foundValidCompute = null + const config = await getConfiguration() + + const accessGranted = await validateAccess(task.consumerAddress, env.access) + if (!accessGranted) { + return { + stream: null, + status: { + httpStatus: 403, + error: 'Access denied' + } + } + } const algoChecksums = await getAlgoChecksums( task.algorithm.documentId, task.algorithm.serviceId, - this.getOceanNode() + node, + config ) - if (!algoChecksums.container || !algoChecksums.files) { - CORE_LOGGER.error(`Error retrieveing algorithm checksums!`) + + const isRawCodeAlgorithm = task.algorithm.meta?.rawcode + const hasValidChecksums = algoChecksums.container && algoChecksums.files + + if (!isRawCodeAlgorithm && !hasValidChecksums) { + const errorMessage = + 'Failed to retrieve algorithm checksums. Both container and files checksums are required.' + CORE_LOGGER.error(errorMessage) return { stream: null, status: { httpStatus: 500, - error: `Error retrieveing algorithm checksums!` + error: errorMessage } } } + const policyServer = new PolicyServer() // check algo - for (const elem of [...[task.algorithm], ...assets]) { + for (const elem of [...[task.algorithm], ...task.datasets]) { const result: any = { validOrder: false } if ('documentId' in elem && elem.documentId) { result.did = elem.documentId - result.serviceId = elem.documentId + result.serviceId = elem.serviceId const ddo = await new FindDdoHandler(node).findAndFormatDdo(elem.documentId) if (!ddo) { const error = `DDO ${elem.documentId} not found` @@ -109,6 +202,13 @@ export class ComputeStartHandler extends Handler { } } } + const ddoInstance = DDOManager.getDDOClass(ddo) + const { + chainId: ddoChainId, + metadata, + nftAddress, + credentials + } = ddoInstance.getDDOFields() const isOrdable = isOrderingAllowedForAsset(ddo) if (!isOrdable.isOrdable) { CORE_LOGGER.error(isOrdable.reason) @@ -120,6 +220,39 @@ export class ComputeStartHandler extends Handler { } } } + // check credentials (DDO level) + let accessGrantedDDOLevel: boolean + if (credentials) { + // if POLICY_SERVER_URL exists, then ocean-node will NOT perform any checks. + // It will just use the existing code and let PolicyServer decide. + if (isPolicyServerConfigured()) { + const response = await policyServer.checkStartCompute( + ddo.id, + ddo, + elem.serviceId, + task.consumerAddress, + task.policyServer + ) + accessGrantedDDOLevel = response.success + } else { + accessGrantedDDOLevel = areKnownCredentialTypes(credentials as Credentials) + ? checkCredentials(credentials as Credentials, task.consumerAddress) + : true + } + if (!accessGrantedDDOLevel) { + CORE_LOGGER.logMessage( + `Error: Access to asset ${ddoInstance.getDid()} was denied`, + true + ) + return { + stream: null, + status: { + httpStatus: 403, + error: `Error: Access to asset ${ddoInstance.getDid()} was denied` + } + } + } + } const service = AssetUtils.getServiceById(ddo, elem.serviceId) if (!service) { const error = `Cannot find service ${elem.serviceId} in DDO ${elem.documentId}` @@ -131,10 +264,45 @@ export class ComputeStartHandler extends Handler { } } } + // check credentials on service level + // if using a policy server and we are here it means that access was granted (they are merged/assessed together) + if (service.credentials) { + let accessGrantedServiceLevel: boolean + if (isPolicyServerConfigured()) { + // we use the previous check or we do it again + // (in case there is no DDO level credentials and we only have Service level ones) + const response = await policyServer.checkStartCompute( + ddoInstance.getDid(), + ddo, + elem.serviceId, + task.consumerAddress, + task.policyServer + ) + accessGrantedServiceLevel = accessGrantedDDOLevel || response.success + } else { + accessGrantedServiceLevel = areKnownCredentialTypes(service.credentials) + ? checkCredentials(service.credentials, task.consumerAddress) + : true + } + + if (!accessGrantedServiceLevel) { + CORE_LOGGER.logMessage( + `Error: Access to service with id ${service.id} was denied`, + true + ) + return { + stream: null, + status: { + httpStatus: 403, + error: `Error: Access to service with id ${service.id} was denied` + } + } + } + } const config = await getConfiguration() const { rpc, network, chainId, fallbackRPCs } = - config.supportedNetworks[ddo.chainId] + config.supportedNetworks[ddoChainId] const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) const { ready, error } = await blockchain.isNetworkReady() if (!ready) { @@ -150,7 +318,7 @@ export class ComputeStartHandler extends Handler { const signer = blockchain.getSigner() // let's see if we can access this asset // check if oasis evm or similar - const confidentialEVM = isConfidentialChainDDO(ddo.chainId, service) + const confidentialEVM = isConfidentialChainDDO(BigInt(ddoChainId), service) let canDecrypt = false try { if (!confidentialEVM) { @@ -165,7 +333,12 @@ export class ComputeStartHandler extends Handler { service.datatokenAddress, signer ) - if (isTemplate4 && (await isERC20Template4Active(ddo.chainId, signer))) { + if (isTemplate4 && (await isERC20Template4Active(ddoChainId, signer))) { + // we need to get the proper data for the signature + const consumeData = + task.consumerAddress + + task.datasets[0].documentId + + getNonceAsNumber(task.consumerAddress) // call smart contract to decrypt const serviceIndex = AssetUtils.getServiceIndexById(ddo, service.id) const filesObject = await getFilesObjectFromConfidentialEVM( @@ -173,8 +346,8 @@ export class ComputeStartHandler extends Handler { service.datatokenAddress, signer, task.consumerAddress, - task.signature, // TODO, we will need to have a signature verification - ddo.id + task.signature, // we will need to have a signature verification + consumeData ) if (filesObject != null) { canDecrypt = true @@ -195,12 +368,16 @@ export class ComputeStartHandler extends Handler { } } } - if (ddo.metadata.type !== 'algorithm') { + if (metadata.type !== 'algorithm') { + const index = task.datasets.findIndex( + (d) => d.documentId === ddoInstance.getDid() + ) + const safeIndex = index === -1 ? 0 : index const validAlgoForDataset = await validateAlgoForDataset( task.algorithm.documentId, algoChecksums, - ddo, - ddo.services[0].id, + ddoInstance, + task.datasets[safeIndex].serviceId, node ) if (!validAlgoForDataset) { @@ -208,7 +385,11 @@ export class ComputeStartHandler extends Handler { stream: null, status: { httpStatus: 400, - error: `Algorithm ${task.algorithm.documentId} not allowed to run on the dataset: ${ddo.id}` + error: `Algorithm ${task.algorithm.documentId} with serviceId ${ + task.algorithm.serviceId + } not allowed to run on the dataset: ${ddoInstance.getDid()} with serviceId: ${ + task.datasets[safeIndex].serviceId + }` } } } @@ -216,9 +397,8 @@ export class ComputeStartHandler extends Handler { const provider = blockchain.getProvider() result.datatoken = service.datatokenAddress - result.chainId = ddo.chainId + result.chainId = ddoChainId - const env = await engine.getComputeEnvironment(ddo.chainId, task.environment) if (!('transferTxId' in elem) || !elem.transferTxId) { const error = `Missing transferTxId for DDO ${elem.documentId}` return { @@ -235,7 +415,7 @@ export class ComputeStartHandler extends Handler { elem.transferTxId, env.consumerAddress, provider, - ddo.nftAddress, + nftAddress, service.datatokenAddress, AssetUtils.getServiceIndexById(ddo, service.id), service.timeout, @@ -252,78 +432,419 @@ export class ComputeStartHandler extends Handler { } } result.validOrder = elem.transferTxId - // start with assumption than we need new providerfees - const validFee: ProviderFeeValidation = - foundValidCompute === null - ? await verifyProviderFees( - elem.transferTxId, - task.consumerAddress, - provider, - service, - task.environment, - 0 - ) - : { - isValid: false, - isComputeValid: false, - message: false, - validUntil: 0 - } - if (validFee.isComputeValid === true) { + if (!('meta' in algorithm) && metadata.type === 'algorithm') { + const { entrypoint, image, tag, checksum } = metadata.algorithm.container + const container = { entrypoint, image, tag, checksum } + algorithm.meta = { + language: metadata.algorithm.language, + version: metadata.algorithm.version, + container + } + } + } + } + // let's lock the amount + const prices = engine.getEnvPricesForToken( + env, + task.payment.chainId, + task.payment.token + ) + if (!prices) { + return { + stream: null, + status: { + httpStatus: 500, + error: `This compute env does not accept payments on chain: ${task.payment.chainId} using token ${task.payment.token}` + } + } + } + const resources: ComputeResourceRequestWithPrice[] = [] + + for (const res of task.resources) { + const price = engine.getResourcePrice(prices, res.id) + resources.push({ + id: res.id, + amount: res.amount, + price + }) + } + const s = { + assets: task.datasets, + algorithm, + output: task.output, + environment: env.id, + owner: task.consumerAddress, + maxJobDuration: task.maxJobDuration, + chainId: task.payment.chainId, + agreementId: '', + resources, + metadata: task.metadata + } + // job ID unicity + const jobId = generateUniqueID(s) + // let's calculate payment needed based on resources request and maxJobDuration + const cost = engine.calculateResourcesCost( + task.resources, + env, + task.payment.chainId, + task.payment.token, + task.maxJobDuration + ) + let agreementId + try { + agreementId = await engine.escrow.createLock( + task.payment.chainId, + jobId, + task.payment.token, + task.consumerAddress, + cost, + engine.escrow.getMinLockTime( + Number(task.maxJobDuration) + Number(task.queueMaxWaitTime) + ) + ) + } catch (e) { + if (e.message.includes('insufficient funds for intrinsic transaction cost')) { + return { + stream: null, + status: { + httpStatus: 400, + error: + 'Node insufficient gas funds. If you are the node owner, please add gas funds to the node.' + } + } + } + return { + stream: null, + status: { + httpStatus: 400, + error: e?.message || String(e) + } + } + } + try { + const response = await engine.startComputeJob( + task.datasets, + algorithm, + task.output, + env.id, + task.consumerAddress, + task.maxJobDuration, + task.resources, + { + chainId: task.payment.chainId, + token: task.payment.token, + lockTx: agreementId, + claimTx: null, + cost: 0 + }, + jobId, + task.metadata, + task.additionalViewers, + task.queueMaxWaitTime + ) + CORE_LOGGER.logMessage( + 'ComputeStartCommand Response: ' + JSON.stringify(response, null, 2), + true + ) + + return { + stream: Readable.from(JSON.stringify(response)), + status: { + httpStatus: 200 + } + } + } catch (e) { + try { + await engine.escrow.cancelExpiredLocks( + task.payment.chainId, + jobId, + task.payment.token, + task.consumerAddress + ) + } catch (cancelError) { + // is fine if it fails + } + return { + stream: null, + status: { + httpStatus: 400, + error: e?.message || String(e) + } + } + } + } catch (error) { + CORE_LOGGER.error(error.message) + return { + stream: null, + status: { + httpStatus: 500, + error: error.message + } + } + } + } +} + +export class FreeComputeStartHandler extends CommandHandler { + validate(command: FreeComputeStartCommand): ValidateParams { + const commandValidation = validateCommandParameters(command, [ + 'algorithm', + 'datasets', + 'environment' + ]) + if (commandValidation.valid) { + if (!isAddress(command.consumerAddress)) { + return buildInvalidRequestMessage( + 'Parameter : "consumerAddress" is not a valid web3 address' + ) + } + } + return commandValidation + } + + async handle(task: FreeComputeStartCommand): Promise { + const thisNode = this.getOceanNode() + const validationResponse = await this.verifyParamsAndRateLimits(task) + if (this.shouldDenyTaskHandling(validationResponse)) { + return validationResponse + } + if (!task.queueMaxWaitTime) { + task.queueMaxWaitTime = 0 + } + const authValidationResponse = await this.validateTokenOrSignature( + task.authorization, + task.consumerAddress, + task.nonce, + task.signature, + String(task.nonce) + ) + if (authValidationResponse.status.httpStatus !== 200) { + return authValidationResponse + } + + let engine = null + try { + // split compute env (which is already in hash-envId format) and get the hash + // then get env which might contain dashes as well + const eIndex = task.environment.indexOf('-') + const hash = task.environment.slice(0, eIndex) + // const envId = task.environment.slice(eIndex + 1) + try { + engine = await thisNode.getC2DEngines().getC2DByHash(hash) + } catch (e) { + return { + stream: null, + status: { + httpStatus: 500, + error: 'Invalid C2D Environment' + } + } + } + if (engine === null) { + return { + stream: null, + status: { + httpStatus: 500, + error: 'Invalid C2D Environment' + } + } + } + const policyServer = new PolicyServer() + for (const elem of [...[task.algorithm], ...task.datasets]) { + if (!('documentId' in elem)) { + continue + } + const ddo = await new FindDdoHandler(this.getOceanNode()).findAndFormatDdo( + elem.documentId + ) + if (!ddo) { + const error = `DDO ${elem.documentId} not found` + return { + stream: null, + status: { + httpStatus: 500, + error + } + } + } + const ddoInstance = DDOManager.getDDOClass(ddo) + const { credentials } = ddoInstance.getDDOFields() + // check credentials (DDO level) + let accessGrantedDDOLevel: boolean + if (credentials) { + // if POLICY_SERVER_URL exists, then ocean-node will NOT perform any checks. + // It will just use the existing code and let PolicyServer decide. + if (isPolicyServerConfigured()) { + const response = await policyServer.checkStartCompute( + ddoInstance.getDid(), + ddo, + elem.serviceId, + task.consumerAddress, + task.policyServer + ) + accessGrantedDDOLevel = response.success + } else { + accessGrantedDDOLevel = areKnownCredentialTypes(credentials as Credentials) + ? checkCredentials(credentials as Credentials, task.consumerAddress) + : true + } + if (!accessGrantedDDOLevel) { CORE_LOGGER.logMessage( - `Found a valid compute providerFee ${elem.transferTxId}`, + `Error: Access to asset ${ddoInstance.getDid()} was denied`, true ) - foundValidCompute = { - txId: elem.transferTxId, - chainId: ddo.chainId, - validUntil: validFee.validUntil + return { + stream: null, + status: { + httpStatus: 403, + error: `Error: Access to asset ${ddoInstance.getDid()} was denied` + } } } - if (!('meta' in algorithm) && ddo.metadata.type === 'algorithm') { - const { entrypoint, image, tag, checksum } = ddo.metadata.algorithm.container - const container = { entrypoint, image, tag, checksum } - algorithm.meta = { - language: ddo.metadata.algorithm.language, - version: ddo.metadata.algorithm.version, - container + } + const service = AssetUtils.getServiceById(ddo, elem.serviceId) + if (!service) { + const error = `Cannot find service ${elem.serviceId} in DDO ${elem.documentId}` + return { + stream: null, + status: { + httpStatus: 500, + error } - if ('format' in ddo.metadata.algorithm) { - algorithm.meta.format = ddo.metadata.algorithm.format + } + } + // check credentials on service level + // if using a policy server and we are here it means that access was granted (they are merged/assessed together) + if (service.credentials) { + let accessGrantedServiceLevel: boolean + if (isPolicyServerConfigured()) { + // we use the previous check or we do it again + // (in case there is no DDO level credentials and we only have Service level ones) + const response = await policyServer.checkStartCompute( + ddo.id, + ddo, + service.id, + task.consumerAddress, + task.policyServer + ) + accessGrantedServiceLevel = accessGrantedDDOLevel || response.success + } else { + accessGrantedServiceLevel = areKnownCredentialTypes(service.credentials) + ? checkCredentials(service.credentials, task.consumerAddress) + : true + } + + if (!accessGrantedServiceLevel) { + CORE_LOGGER.logMessage( + `Error: Access to service with id ${service.id} was denied`, + true + ) + return { + stream: null, + status: { + httpStatus: 403, + error: `Error: Access to service with id ${service.id} was denied` + } } } } } - if (!foundValidCompute) { - CORE_LOGGER.logMessage(`Cannot find a valid compute providerFee`, true) + const env = await engine.getComputeEnvironment(null, task.environment) + if (!env) { return { stream: null, status: { - httpStatus: 400, - error: `Invalid compute environment: ${task.environment}` + httpStatus: 500, + error: 'Invalid C2D Environment' } } } - // TODO - hardcoded values. - // - validate providerFees -> will generate chainId & agreementId & validUntil - const { chainId } = foundValidCompute - const agreementId = foundValidCompute.txId - const { validUntil } = foundValidCompute + try { + const accessGranted = await validateAccess(task.consumerAddress, env.free.access) + if (!accessGranted) { + return { + stream: null, + status: { + httpStatus: 403, + error: 'Access denied' + } + } + } + task.resources = await engine.checkAndFillMissingResources( + task.resources, + env, + true + ) + + if (!task.maxJobDuration || task.maxJobDuration > env.free.maxJobDuration) { + task.maxJobDuration = env.free.maxJobDuration + } + } catch (e) { + console.error(e) + return { + stream: null, + status: { + httpStatus: 400, + error: String(e) + } + } + } + try { + await engine.checkIfResourcesAreAvailable(task.resources, env, true) + } catch (e) { + if (task.queueMaxWaitTime > 0) { + CORE_LOGGER.verbose( + `Compute resources not available, queuing job for max ${task.queueMaxWaitTime} seconds` + ) + } else { + return { + stream: null, + status: { + httpStatus: 400, + error: e?.message || String(e) + } + } + } + } + // console.log(task.resources) + /* + return { + stream: null, + status: { + httpStatus: 200, + error: null + } + } */ + const s = { + assets: task.datasets, + algorithm: task.algorithm, + output: task.output, + environment: task.environment, + owner: task.consumerAddress, + maxJobDuration: task.maxJobDuration, + resources: task.resources, + metadata: task.metadata + } + const jobId = generateUniqueID(s) const response = await engine.startComputeJob( - assets, - algorithm, + task.datasets, + task.algorithm, task.output, + task.environment, task.consumerAddress, - envId, - validUntil, - chainId, - agreementId + task.maxJobDuration, + task.resources, + null, + jobId, + task.metadata, + task.additionalViewers, + task.queueMaxWaitTime ) CORE_LOGGER.logMessage( - 'ComputeStartCommand Response: ' + JSON.stringify(response, null, 2), + 'FreeComputeStartCommand Response: ' + JSON.stringify(response, null, 2), true ) @@ -345,3 +866,51 @@ export class ComputeStartHandler extends Handler { } } } + +async function validateAccess( + consumerAddress: string, + access: ComputeAccessList | undefined +): Promise { + if (!access) { + return true + } + + if (access.accessLists.length === 0 && access.addresses.length === 0) { + return true + } + + if (access.addresses.includes(consumerAddress)) { + return true + } + + if (access.accessLists.length > 0) { + const config = await getConfiguration() + const { supportedNetworks } = config + + for (const accessListAddress of access.accessLists) { + for (const chainIdStr of Object.keys(supportedNetworks)) { + const { rpc, network, chainId, fallbackRPCs } = supportedNetworks[chainIdStr] + try { + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const signer = blockchain.getSigner() + + const hasAccess = await findAccessListCredentials( + signer, + accessListAddress, + consumerAddress + ) + if (hasAccess) { + return true + } + } catch (error) { + CORE_LOGGER.logMessage( + `Failed to check access list ${accessListAddress} on chain ${chainIdStr}: ${error.message}`, + true + ) + } + } + } + } + + return false +} diff --git a/src/components/core/compute/stopCompute.ts b/src/components/core/compute/stopCompute.ts index 72f3c4662..bed33cd9d 100644 --- a/src/components/core/compute/stopCompute.ts +++ b/src/components/core/compute/stopCompute.ts @@ -1,7 +1,7 @@ import { Readable } from 'stream' import { P2PCommandResponse } from '../../../@types/index.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' -import { Handler } from '../handler/handler.js' +import { CommandHandler } from '../handler/handler.js' import { ComputeStopCommand } from '../../../@types/commands.js' import { ValidateParams, @@ -10,14 +10,9 @@ import { } from '../../httpRoutes/validateCommands.js' import { isAddress } from 'ethers' -export class ComputeStopHandler extends Handler { +export class ComputeStopHandler extends CommandHandler { validate(command: ComputeStopCommand): ValidateParams { - const validation = validateCommandParameters(command, [ - 'consumerAddress', - 'signature', - 'nonce', - 'jobId' - ]) + const validation = validateCommandParameters(command, ['jobId']) if (validation.valid) { if (!isAddress(command.consumerAddress)) { return buildInvalidRequestMessage( @@ -33,6 +28,18 @@ export class ComputeStopHandler extends Handler { if (this.shouldDenyTaskHandling(validationResponse)) { return validationResponse } + + const authValidationResponse = await this.validateTokenOrSignature( + task.authorization, + task.consumerAddress, + task.nonce, + task.signature, + String(task.consumerAddress + (task.jobId || '')) + ) + if (authValidationResponse.status.httpStatus !== 200) { + return authValidationResponse + } + try { // split jobId (which is already in hash-jobId format) and get the hash // then get jobId which might contain dashes as well diff --git a/src/components/core/compute/utils.ts b/src/components/core/compute/utils.ts index c7fbe7940..be55400c5 100644 --- a/src/components/core/compute/utils.ts +++ b/src/components/core/compute/utils.ts @@ -1,11 +1,11 @@ import { OceanNode } from '../../../OceanNode.js' -import { AlgoChecksums } from '../../../@types/C2D.js' +import { AlgoChecksums } from '../../../@types/C2D/C2D.js' +import { OceanNodeConfig } from '../../../@types/OceanNode.js' import { ArweaveFileObject, IpfsFileObject, UrlFileObject } from '../../../@types/fileObject.js' -import { DDO } from '../../../@types/DDO/DDO.js' import { getFile } from '../../../utils/file.js' import urlJoin from 'url-join' import { fetchFileMetadata } from '../../../utils/asset.js' @@ -13,15 +13,28 @@ import { fetchFileMetadata } from '../../../utils/asset.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' import { createHash } from 'crypto' import { FindDdoHandler } from '../../core/handler/ddoHandler.js' +import { DDOManager, VersionedDDO } from '@oceanprotocol/ddo-js' + +export function generateUniqueID(jobStructure: any): string { + const timestamp = + BigInt(Date.now()) * 1_000_000n + (process.hrtime.bigint() % 1_000_000n) + const random = Math.random() + const jobId = createHash('sha256') + .update(JSON.stringify(jobStructure) + timestamp.toString() + random.toString()) + .digest('hex') + return jobId +} export async function getAlgoChecksums( algoDID: string, algoServiceId: string, - oceanNode: OceanNode + oceanNode: OceanNode, + config: OceanNodeConfig ): Promise { const checksums: AlgoChecksums = { files: '', - container: '' + container: '', + serviceId: algoServiceId } try { const algoDDO = await new FindDdoHandler(oceanNode).findAndFormatDdo(algoDID) @@ -35,22 +48,20 @@ export async function getAlgoChecksums( file.type === 'url' ? (file as UrlFileObject).url : file.type === 'arweave' - ? urlJoin( - process.env.ARWEAVE_GATEWAY, - (file as ArweaveFileObject).transactionId - ) - : file.type === 'ipfs' - ? urlJoin(process.env.IPFS_GATEWAY, (file as IpfsFileObject).hash) - : null + ? urlJoin(config.arweaveGateway, (file as ArweaveFileObject).transactionId) + : file.type === 'ipfs' + ? urlJoin(config.ipfsGateway, (file as IpfsFileObject).hash) + : null const { contentChecksum } = await fetchFileMetadata(url, 'get', false) checksums.files = checksums.files.concat(contentChecksum) } + const ddoInstance = DDOManager.getDDOClass(algoDDO) + const { metadata } = ddoInstance.getDDOFields() checksums.container = createHash('sha256') .update( - algoDDO.metadata.algorithm.container.entrypoint + - algoDDO.metadata.algorithm.container.checksum + metadata.algorithm.container.entrypoint + metadata.algorithm.container.checksum ) .digest('hex') return checksums @@ -65,54 +76,73 @@ export async function validateAlgoForDataset( algoChecksums: { files: string container: string + serviceId?: string }, - datasetDDO: DDO, + ddoInstance: VersionedDDO, datasetServiceId: string, oceanNode: OceanNode ) { try { - const datasetService = datasetDDO.services.find( - (service) => service.id === datasetServiceId + const { services } = ddoInstance.getDDOFields() as any + const datasetService = services.find( + (service: any) => service.id === datasetServiceId ) if (!datasetService) { throw new Error('Dataset service not found') } + if (datasetService.type === 'access') { + return true + } const { compute } = datasetService if (datasetService.type !== 'compute' || !compute) { throw new Error('Service not compute') } + const publishers = compute.publisherTrustedAlgorithmPublishers || [] + const algorithms = compute.publisherTrustedAlgorithms || [] + + // If no restrictions are set, deny by default + const hasTrustedPublishers = publishers.length > 0 + const hasTrustedAlgorithms = algorithms.length > 0 + if (!hasTrustedPublishers && !hasTrustedAlgorithms) return false if (algoDID) { - if ( - // if not set allow them all - !compute.publisherTrustedAlgorithms && - !compute.publisherTrustedAlgorithmPublishers - ) { - return true - } - // if is set only allow if match - if (compute.publisherTrustedAlgorithms) { - const trustedAlgo = compute.publisherTrustedAlgorithms.find( - (algo) => algo.did === algoDID - ) - if (trustedAlgo) { - return ( - trustedAlgo.filesChecksum === algoChecksums.files && - trustedAlgo.containerSectionChecksum === algoChecksums.container - ) - } - return false - } - if (compute.publisherTrustedAlgorithmPublishers) { - const algoDDO = await new FindDdoHandler(oceanNode).findAndFormatDdo(algoDID) - if (algoDDO) { - return compute.publisherTrustedAlgorithmPublishers - .map((address) => address?.toLowerCase()) - .includes(algoDDO.nftAddress?.toLowerCase()) + // Check if algorithm is explicitly trusted + const isAlgoTrusted = + hasTrustedAlgorithms && + algorithms.some((algo: any) => { + const didMatch = algo.did === '*' || algo.did === algoDID + const filesMatch = + algo.filesChecksum === '*' || algo.filesChecksum === algoChecksums.files + const containerMatch = + algo.containerSectionChecksum === '*' || + algo.containerSectionChecksum === algoChecksums.container + if ('serviceId' in algo) { + const serviceIdMatch = + algo.serviceId === '*' || algo.serviceId === algoChecksums.serviceId + return didMatch && filesMatch && containerMatch && serviceIdMatch + } + + return didMatch && filesMatch && containerMatch + }) + + // Check if algorithm publisher is trusted + let isPublisherTrusted = false + if (hasTrustedPublishers) { + if (!publishers.includes('*')) { + const algoDDO = await new FindDdoHandler(oceanNode).findAndFormatDdo(algoDID) + if (!algoDDO) return false + const algoInstance = DDOManager.getDDOClass(algoDDO) + const { nftAddress } = algoInstance.getDDOFields() + + isPublisherTrusted = publishers + .map((addr: string) => addr?.toLowerCase()) + .includes(nftAddress?.toLowerCase()) + } else { + isPublisherTrusted = true } - return false } - return true + + return isAlgoTrusted || isPublisherTrusted } return compute.allowRawAlgorithm diff --git a/src/components/core/handler/authHandler.ts b/src/components/core/handler/authHandler.ts new file mode 100644 index 000000000..8e960c14f --- /dev/null +++ b/src/components/core/handler/authHandler.ts @@ -0,0 +1,118 @@ +import { CommandHandler } from './handler.js' +import { P2PCommandResponse } from '../../../@types/OceanNode.js' +import { + ValidateParams, + validateCommandParameters +} from '../../httpRoutes/validateCommands.js' +import { ReadableString } from '../../P2P/handlers.js' +import { Command } from '../../../@types/commands.js' +import { Readable } from 'stream' +import { checkNonce, NonceResponse } from '../utils/nonceHandler.js' + +export interface AuthMessage { + address: string + nonce: string + signature: string +} + +export interface CreateAuthTokenCommand extends AuthMessage, Command { + validUntil?: number | null +} + +export interface InvalidateAuthTokenCommand extends AuthMessage, Command { + token: string +} + +export class CreateAuthTokenHandler extends CommandHandler { + validate(command: CreateAuthTokenCommand): ValidateParams { + return validateCommandParameters(command, ['address', 'signature']) + } + + async handle(task: CreateAuthTokenCommand): Promise { + const { address, nonce, signature } = task + const nonceDb = this.getOceanNode().getDatabase().nonce + const validationResponse = await this.verifyParamsAndRateLimits(task) + if (this.shouldDenyTaskHandling(validationResponse)) { + return validationResponse + } + + try { + const nonceCheckResult: NonceResponse = await checkNonce( + nonceDb, + address, + parseInt(nonce), + signature, + String(address + nonce) + ) + + if (!nonceCheckResult.valid) { + return { + stream: null, + status: { httpStatus: 401, error: nonceCheckResult.error } + } + } + + const createdAt = Date.now() + const jwtToken = await this.getOceanNode() + .getAuth() + .getJWTToken(task.address, task.nonce, createdAt) + + await this.getOceanNode() + .getAuth() + .insertToken(task.address, jwtToken, task.validUntil, createdAt) + + return { + stream: Readable.from(JSON.stringify({ token: jwtToken })), + status: { httpStatus: 200, error: null } + } + } catch (error) { + return { + stream: null, + status: { httpStatus: 500, error: `Error creating auth token: ${error}` } + } + } + } +} + +export class InvalidateAuthTokenHandler extends CommandHandler { + validate(command: InvalidateAuthTokenCommand): ValidateParams { + return validateCommandParameters(command, ['address', 'signature', 'token']) + } + + async handle(task: InvalidateAuthTokenCommand): Promise { + const { address, nonce, signature, token } = task + const nonceDb = this.getOceanNode().getDatabase().nonce + const validationResponse = await this.verifyParamsAndRateLimits(task) + if (this.shouldDenyTaskHandling(validationResponse)) { + return validationResponse + } + + try { + const isValid = await checkNonce( + nonceDb, + address, + parseInt(nonce), + signature, + String(address + nonce) + ) + if (!isValid) { + return { + stream: null, + status: { httpStatus: 400, error: 'Invalid signature' } + } + } + + await this.getOceanNode().getAuth().invalidateToken(token) + + return { + stream: new ReadableString(JSON.stringify({ success: true })), + status: { httpStatus: 200, error: null } + } + } catch (error) { + return { + stream: null, + status: { httpStatus: 500, error: `Error invalidating auth token: ${error}` } + } + } + } +} diff --git a/src/components/core/handler/coreHandlersRegistry.ts b/src/components/core/handler/coreHandlersRegistry.ts index 82f0a3540..f84357160 100644 --- a/src/components/core/handler/coreHandlersRegistry.ts +++ b/src/components/core/handler/coreHandlersRegistry.ts @@ -12,10 +12,9 @@ import { import { DownloadHandler } from './downloadHandler.js' import { FileInfoHandler } from './fileInfoHandler.js' import { PolicyServerPassthroughHandler } from './policyServer.js' -import { EchoHandler } from './echoHandler.js' import { EncryptHandler, EncryptFileHandler } from './encryptHandler.js' import { FeesHandler } from './feesHandler.js' -import { Handler } from './handler.js' +import { BaseHandler, CommandHandler } from './handler.js' import { NonceHandler } from './nonceHandler.js' import { QueryHandler } from './queryHandler.js' import { DetailedStatusHandler, StatusHandler } from './statusHandler.js' @@ -23,27 +22,40 @@ import { OceanNode } from '../../../OceanNode.js' import { Command } from '../../../@types/commands.js' import { ComputeGetEnvironmentsHandler, - ComputeStartHandler, + PaidComputeStartHandler, + FreeComputeStartHandler, ComputeStopHandler, ComputeGetStatusHandler, ComputeGetResultHandler, - ComputeInitializeHandler + ComputeInitializeHandler, + ComputeGetStreamableLogsHandler } from '../compute/index.js' import { StopNodeHandler } from '../admin/stopNodeHandler.js' import { ReindexTxHandler } from '../admin/reindexTxHandler.js' import { ReindexChainHandler } from '../admin/reindexChainHandler.js' import { IndexingThreadHandler } from '../admin/IndexingThreadHandler.js' import { CollectFeesHandler } from '../admin/collectFeesHandler.js' +import { FetchConfigHandler } from '../admin/fetchConfigHandler.js' +import { PushConfigHandler } from '../admin/pushConfigHandler.js' +import { AdminCommandHandler } from '../admin/adminHandler.js' +import { + GetP2PPeerHandler, + GetP2PPeersHandler, + GetP2PNetworkStatsHandler, + FindPeerHandler +} from './p2p.js' +import { CreateAuthTokenHandler, InvalidateAuthTokenHandler } from './authHandler.js' +import { GetJobsHandler } from './getJobs.js' export type HandlerRegistry = { handlerName: string // name of the handler - handlerImpl: Handler // class that implements it + handlerImpl: BaseHandler // class that implements it } // we can use this factory class to create adittional handlers // and then register them on the Ocean Node instance export class HandlerFactory { - static buildHandlerForTask(task: Command, impl: Handler): HandlerRegistry { + static buildHandlerForTask(task: Command, impl: BaseHandler): HandlerRegistry { if (!task || !impl) { const msg = 'Invalid task/handler parameters!' OCEAN_NODE_LOGGER.error(msg) @@ -66,7 +78,7 @@ export class CoreHandlersRegistry { // eslint-disable-next-line no-use-before-define private static instance: CoreHandlersRegistry // map of handlers registered - private coreHandlers: Map = new Map() + private coreHandlers: Map = new Map() // private readonly node: OceanP2P private constructor(node: OceanNode) { @@ -85,7 +97,6 @@ export class CoreHandlersRegistry { ) this.registerCoreHandler(PROTOCOL_COMMANDS.FIND_DDO, new FindDdoHandler(node)) this.registerCoreHandler(PROTOCOL_COMMANDS.GET_FEES, new FeesHandler(node)) - this.registerCoreHandler(PROTOCOL_COMMANDS.ECHO, new EchoHandler(node)) this.registerCoreHandler(PROTOCOL_COMMANDS.FILE_INFO, new FileInfoHandler(node)) this.registerCoreHandler( PROTOCOL_COMMANDS.POLICY_SERVER_PASSTHROUGH, @@ -99,7 +110,11 @@ export class CoreHandlersRegistry { ) this.registerCoreHandler( PROTOCOL_COMMANDS.COMPUTE_START, - new ComputeStartHandler(node) + new PaidComputeStartHandler(node) + ) + this.registerCoreHandler( + PROTOCOL_COMMANDS.FREE_COMPUTE_START, + new FreeComputeStartHandler(node) ) this.registerCoreHandler(PROTOCOL_COMMANDS.COMPUTE_STOP, new ComputeStopHandler(node)) this.registerCoreHandler( @@ -110,6 +125,10 @@ export class CoreHandlersRegistry { PROTOCOL_COMMANDS.COMPUTE_GET_RESULT, new ComputeGetResultHandler(node) ) + this.registerCoreHandler( + PROTOCOL_COMMANDS.COMPUTE_GET_STREAMABLE_LOGS, + new ComputeGetStreamableLogsHandler(node) + ) this.registerCoreHandler( PROTOCOL_COMMANDS.COMPUTE_INITIALIZE, new ComputeInitializeHandler(node) @@ -125,17 +144,41 @@ export class CoreHandlersRegistry { new IndexingThreadHandler(node) ) this.registerCoreHandler(PROTOCOL_COMMANDS.COLLECT_FEES, new CollectFeesHandler(node)) + this.registerCoreHandler(PROTOCOL_COMMANDS.GET_P2P_PEER, new GetP2PPeerHandler(node)) + this.registerCoreHandler( + PROTOCOL_COMMANDS.GET_P2P_PEERS, + new GetP2PPeersHandler(node) + ) + this.registerCoreHandler( + PROTOCOL_COMMANDS.GET_P2P_NETWORK_STATS, + new GetP2PNetworkStatsHandler(node) + ) + this.registerCoreHandler(PROTOCOL_COMMANDS.FIND_PEER, new FindPeerHandler(node)) + this.registerCoreHandler( + PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + new CreateAuthTokenHandler(node) + ) + this.registerCoreHandler( + PROTOCOL_COMMANDS.INVALIDATE_AUTH_TOKEN, + new InvalidateAuthTokenHandler(node) + ) + this.registerCoreHandler(PROTOCOL_COMMANDS.FETCH_CONFIG, new FetchConfigHandler(node)) + this.registerCoreHandler(PROTOCOL_COMMANDS.PUSH_CONFIG, new PushConfigHandler(node)) + this.registerCoreHandler(PROTOCOL_COMMANDS.JOBS, new GetJobsHandler(node)) } - public static getInstance(node: OceanNode): CoreHandlersRegistry { - if (!CoreHandlersRegistry.instance) { + public static getInstance( + node: OceanNode, + newInstance: boolean = false + ): CoreHandlersRegistry { + if (!CoreHandlersRegistry.instance || newInstance) { this.instance = new CoreHandlersRegistry(node) } return this.instance } // private method for registering the core handlers - private registerCoreHandler(handlerName: string, handlerObj: Handler) { + private registerCoreHandler(handlerName: string, handlerObj: BaseHandler) { if (!this.coreHandlers.has(handlerName)) { this.coreHandlers.set(handlerName, handlerObj) } @@ -145,14 +188,14 @@ export class CoreHandlersRegistry { public registerHandler(handler: HandlerRegistry) { if ( !this.coreHandlers.has(handler.handlerName) && - handler.handlerImpl instanceof Handler + handler.handlerImpl instanceof BaseHandler ) { this.coreHandlers.set(handler.handlerName, handler.handlerImpl) } } // pass the handler name from the SUPPORTED_PROTOCOL_COMMANDS keys - public getHandler(handlerName: string): Handler | null { + public getHandler(handlerName: string): any { if (!SUPPORTED_PROTOCOL_COMMANDS.includes(handlerName)) { OCEAN_NODE_LOGGER.error( `Invalid handler "${handlerName}". No known associated protocol command!` @@ -168,7 +211,7 @@ export class CoreHandlersRegistry { return this.coreHandlers.get(handlerName) } - public getHandlerForTask(task: Command): Handler | null { + public getHandlerForTask(task: Command): CommandHandler | AdminCommandHandler | null { return this.getHandler(task.command) } diff --git a/src/components/core/handler/ddoHandler.ts b/src/components/core/handler/ddoHandler.ts index f9cf76229..2e88a258c 100644 --- a/src/components/core/handler/ddoHandler.ts +++ b/src/components/core/handler/ddoHandler.ts @@ -1,4 +1,4 @@ -import { Handler } from './handler.js' +import { CommandHandler } from './handler.js' import { EVENTS, MetadataStates, PROTOCOL_COMMANDS } from '../../../utils/constants.js' import { P2PCommandResponse, FindDDOResponse } from '../../../@types/index.js' import { Readable } from 'stream' @@ -12,19 +12,13 @@ import { import { toString as uint8ArrayToString } from 'uint8arrays/to-string' import { GENERIC_EMOJIS, LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' import { sleep, readStream } from '../../../utils/util.js' -import { DDO } from '../../../@types/DDO/DDO.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' import { Blockchain } from '../../../utils/blockchain.js' import { ethers, isAddress } from 'ethers' import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } // import lzma from 'lzma-native' import lzmajs from 'lzma-purejs-requirejs' -import { - isRemoteDDO, - getValidationSignature, - makeDid, - validateObject -} from '../utils/validateDdoHandler.js' +import { getValidationSignature, isRemoteDDO } from '../utils/validateDdoHandler.js' import { getConfiguration, hasP2PInterface } from '../../../utils/config.js' import { GetDdoCommand, @@ -32,7 +26,6 @@ import { DecryptDDOCommand, ValidateDDOCommand } from '../../../@types/commands.js' -import { Storage } from '../../../components/storage/index.js' import { EncryptMethod } from '../../../@types/fileObject.js' import { ValidateParams, @@ -44,7 +37,11 @@ import { getNetworkHeight, wasNFTDeployedByOurFactory } from '../../Indexer/utils.js' -import { validateDDOHash } from '../../../utils/asset.js' +import { deleteIndexedMetadataIfExists, validateDDOHash } from '../../../utils/asset.js' +import { Asset, DDO, DDOManager } from '@oceanprotocol/ddo-js' +import { checkCredentialOnAccessList } from '../../../utils/credentials.js' +import { createHash } from 'crypto' +import { Storage } from '../../../components/storage/index.js' const MAX_NUM_PROVIDERS = 5 // after 60 seconds it returns whatever info we have available @@ -52,7 +49,7 @@ const MAX_RESPONSE_WAIT_TIME_SECONDS = 60 // wait time for reading the next getDDO command const MAX_WAIT_TIME_SECONDS_GET_DDO = 5 -export class DecryptDdoHandler extends Handler { +export class DecryptDdoHandler extends CommandHandler { validate(command: DecryptDDOCommand): ValidateParams { const validation = validateCommandParameters(command, [ 'decrypterAddress', @@ -70,6 +67,21 @@ export class DecryptDdoHandler extends Handler { return validation } + checkId(id: string, dataNftAddress: string, chainId: string): Boolean { + const didV5 = + 'did:ope:' + + createHash('sha256') + .update(ethers.getAddress(dataNftAddress) + chainId) + .digest('hex') + + const didV4 = + 'did:op:' + + createHash('sha256') + .update(ethers.getAddress(dataNftAddress) + chainId) + .digest('hex') + return id === didV4 || id === didV5 + } + async handle(task: DecryptDDOCommand): Promise { const validationResponse = await this.verifyParamsAndRateLimits(task) if (this.shouldDenyTaskHandling(validationResponse)) { @@ -80,7 +92,6 @@ export class DecryptDdoHandler extends Handler { try { decrypterAddress = ethers.getAddress(task.decrypterAddress) } catch (error) { - CORE_LOGGER.logMessage(`Decrypt DDO: error ${error}`, true) return { stream: null, status: { @@ -92,10 +103,6 @@ export class DecryptDdoHandler extends Handler { const nonce = Number(task.nonce) if (isNaN(nonce)) { - CORE_LOGGER.logMessage( - `Decrypt DDO: error ${task.nonce} value is not a number`, - true - ) return { stream: null, status: { @@ -110,7 +117,6 @@ export class DecryptDdoHandler extends Handler { const existingNonce = await dbNonce.retrieve(decrypterAddress) if (existingNonce && existingNonce.nonce === nonce) { - CORE_LOGGER.logMessage(`Decrypt DDO: error ${task.nonce} duplicate nonce`, true) return { stream: null, status: { @@ -124,10 +130,8 @@ export class DecryptDdoHandler extends Handler { const chainId = String(task.chainId) const config = await getConfiguration() const supportedNetwork = config.supportedNetworks[chainId] - // check if supported chainId if (!supportedNetwork) { - CORE_LOGGER.logMessage(`Decrypt DDO: Unsupported chain id ${chainId}`, true) return { stream: null, status: { @@ -145,7 +149,6 @@ export class DecryptDdoHandler extends Handler { .includes(decrypterAddress?.toLowerCase()) && decrypterAddress?.toLowerCase() !== config.keys.ethAddress?.toLowerCase() ) { - CORE_LOGGER.logMessage('Decrypt DDO: Decrypter not authorized', true) return { stream: null, status: { @@ -186,12 +189,7 @@ export class DecryptDdoHandler extends Handler { signer, dataNftAddress ) - if (!wasDeployedByUs) { - CORE_LOGGER.logMessage( - 'Decrypt DDO: Asset not deployed by the data NFT factory', - true - ) return { stream: null, status: { @@ -201,11 +199,29 @@ export class DecryptDdoHandler extends Handler { } } + // access list checks, needs blockchain connection + const { authorizedDecryptersList } = config + + const isAllowed = await checkCredentialOnAccessList( + authorizedDecryptersList, + chainId, + decrypterAddress, + signer + ) + if (!isAllowed) { + return { + stream: null, + status: { + httpStatus: 403, + error: `Decrypt DDO: Decrypter ${decrypterAddress} not authorized per access list` + } + } + } + const transactionId = task.transactionId ? String(task.transactionId) : '' let encryptedDocument: Uint8Array let flags: number let documentHash: string - if (transactionId) { try { const receipt = await provider.getTransactionReceipt(transactionId) @@ -228,7 +244,6 @@ export class DecryptDdoHandler extends Handler { encryptedDocument = ethers.getBytes(eventData.args[4]) documentHash = eventData.args[5] } catch (error) { - CORE_LOGGER.logMessage(`Decrypt DDO: error ${error}`, true) return { stream: null, status: { @@ -241,9 +256,9 @@ export class DecryptDdoHandler extends Handler { try { encryptedDocument = ethers.getBytes(task.encryptedDocument) flags = Number(task.flags) + // eslint-disable-next-line prefer-destructuring documentHash = task.documentHash } catch (error) { - CORE_LOGGER.logMessage(`Decrypt DDO: error ${error}`, true) return { stream: null, status: { @@ -253,7 +268,6 @@ export class DecryptDdoHandler extends Handler { } } } - const templateContract = new ethers.Contract( dataNftAddress, ERC721Template.abi, @@ -268,7 +282,6 @@ export class DecryptDdoHandler extends Handler { MetadataStates.REVOKED ].includes(metaDataState) ) { - CORE_LOGGER.logMessage(`Decrypt DDO: error metadata state ${metaDataState}`, true) return { stream: null, status: { @@ -277,7 +290,6 @@ export class DecryptDdoHandler extends Handler { } } } - if ( ![ MetadataStates.ACTIVE, @@ -297,11 +309,10 @@ export class DecryptDdoHandler extends Handler { let decryptedDocument: Buffer // check if DDO is ECIES encrypted - if (flags & 2) { + if ((flags & 2) !== 0) { try { decryptedDocument = await decrypt(encryptedDocument, EncryptMethod.ECIES) } catch (error) { - CORE_LOGGER.logMessage(`Decrypt DDO: error ${error}`, true) return { stream: null, status: { @@ -310,9 +321,7 @@ export class DecryptDdoHandler extends Handler { } } } - } - - if (flags & 1) { + } else { try { decryptedDocument = lzmajs.decompressFile(decryptedDocument) /* @@ -325,7 +334,6 @@ export class DecryptDdoHandler extends Handler { ) */ } catch (error) { - CORE_LOGGER.logMessage(`Decrypt DDO: error ${error}`, true) return { stream: null, status: { @@ -338,8 +346,7 @@ export class DecryptDdoHandler extends Handler { // did matches const ddo = JSON.parse(decryptedDocument.toString()) - if (ddo.id !== makeDid(dataNftAddress, chainId)) { - CORE_LOGGER.error(`Decrypted DDO ID is not matching the generated hash for DID.`) + if (ddo.id && !this.checkId(ddo.id, dataNftAddress, chainId)) { return { stream: null, status: { @@ -348,34 +355,41 @@ export class DecryptDdoHandler extends Handler { } } } + const decryptedDocumentString = decryptedDocument.toString() + const ddoObject = JSON.parse(decryptedDocumentString) - // checksum matches - const decryptedDocumentHash = create256Hash(decryptedDocument.toString()) - if (decryptedDocumentHash !== documentHash) { - CORE_LOGGER.logMessage( - `Decrypt DDO: error checksum does not match ${decryptedDocumentHash} with ${documentHash}`, - true - ) - return { - stream: null, - status: { - httpStatus: 400, - error: 'Decrypt DDO: checksum does not match' + let stream = Readable.from(decryptedDocumentString) + if (isRemoteDDO(ddoObject)) { + const storage = Storage.getStorageClass(ddoObject.remote, config) + const result = await storage.getReadableStream() + stream = result.stream as Readable + } else { + // checksum matches + const decryptedDocumentHash = create256Hash(decryptedDocument.toString()) + if (decryptedDocumentHash !== documentHash) { + return { + stream: null, + status: { + httpStatus: 400, + error: 'Decrypt DDO: checksum does not match' + } } } } // check signature try { + const useTxIdOrContractAddress = transactionId || dataNftAddress + const message = String( - transactionId + dataNftAddress + decrypterAddress + chainId + nonce + useTxIdOrContractAddress + decrypterAddress + chainId + nonce ) const messageHash = ethers.solidityPackedKeccak256( ['bytes'], [ethers.hexlify(ethers.toUtf8Bytes(message))] ) + const messageHashBytes = ethers.getBytes(messageHash) const addressFromHashSignature = ethers.verifyMessage(messageHash, task.signature) - const messageHashBytes = ethers.toBeArray(messageHash) const addressFromBytesSignature = ethers.verifyMessage( messageHashBytes, task.signature @@ -388,7 +402,6 @@ export class DecryptDdoHandler extends Handler { throw new Error('address does not match') } } catch (error) { - CORE_LOGGER.logMessage(`Decrypt DDO: error signature ${error}`, true) return { stream: null, status: { @@ -398,23 +411,12 @@ export class DecryptDdoHandler extends Handler { } } - const decryptedDocumentString = decryptedDocument.toString() - const ddoObject = JSON.parse(decryptedDocumentString) - - let stream = Readable.from(decryptedDocumentString) - - if (isRemoteDDO(ddoObject)) { - const storage = Storage.getStorageClass(ddoObject.remote, config) - const result = await storage.getReadableStream() - stream = result.stream as Readable - } - return { stream, status: { httpStatus: 200 } } } catch (error) { - CORE_LOGGER.logMessage(`Decrypt DDO: error ${error}`, true) + CORE_LOGGER.info(`ERROR Decrypt DDO: ${JSON.stringify(error)}`) // should be logged by caller return { stream: null, status: { httpStatus: 500, error: `Decrypt DDO: Unknown error ${error}` } @@ -423,7 +425,7 @@ export class DecryptDdoHandler extends Handler { } } -export class GetDdoHandler extends Handler { +export class GetDdoHandler extends CommandHandler { validate(command: GetDdoCommand): ValidateParams { let validation = validateCommandParameters(command, ['id']) if (validation.valid) { @@ -460,7 +462,7 @@ export class GetDdoHandler extends Handler { } } -export class FindDdoHandler extends Handler { +export class FindDdoHandler extends CommandHandler { validate(command: FindDDOCommand): ValidateParams { let validation = validateCommandParameters(command, ['id']) if (validation.valid) { @@ -496,7 +498,6 @@ export class FindDdoHandler extends Handler { // if we have the result cached recently we return that result if (hasCachedDDO(task, p2pNode)) { // 'found cached DDO' - CORE_LOGGER.logMessage('Found local cached version for DDO id: ' + task.id, true) resultList.push(p2pNode.getDDOCache().dht.get(task.id)) return { stream: Readable.from(JSON.stringify(resultList, null, 4)), @@ -551,17 +552,12 @@ export class FindDdoHandler extends Handler { if (isResponseLegit) { const ddoInfo: FindDDOResponse = { id: ddo.id, - lastUpdateTx: ddo.event.tx, + lastUpdateTx: ddo.indexedMetadata.event.txid, lastUpdateTime: ddo.metadata.updated, provider: peer } resultList.push(ddoInfo) - CORE_LOGGER.logMessage( - `Succesfully processed DDO info, id: ${ddo.id} from remote peer: ${peer}`, - true - ) - // is it cached? const ddoCache = p2pNode.getDDOCache() if (ddoCache.dht.has(ddo.id)) { @@ -613,7 +609,7 @@ export class FindDdoHandler extends Handler { }, 1000 * MAX_RESPONSE_WAIT_TIME_SECONDS) // check other providers for this ddo - const providers = await p2pNode.getProvidersForDid(task.id) + const providers = await p2pNode.getProvidersForString(task.id) // check if includes self and exclude from check list if (providers.length > 0) { // exclude this node from the providers list if present @@ -756,7 +752,7 @@ export class FindDdoHandler extends Handler { const formattedServices = ddoData.services.map(formatService) // Map the DDO data to the DDO interface - const ddo: DDO = { + const ddo: Asset = { '@context': ddoData['@context'], id: ddoData.id, version: ddoData.version, @@ -765,7 +761,11 @@ export class FindDdoHandler extends Handler { metadata: ddoData.metadata, services: formattedServices, credentials: ddoData.credentials, - event: ddoData.event + indexedMetadata: { + stats: ddoData.indexedMetadata.stats, + event: ddoData.indexedMetadata.event, + nft: ddoData.indexedMetadata.nft + } } return ddo @@ -783,7 +783,12 @@ export class FindDdoHandler extends Handler { } } -export class ValidateDDOHandler extends Handler { +export async function skipValidation(): Promise { + const configuration = await getConfiguration() + return configuration.validateUnsignedDDO +} + +export class ValidateDDOHandler extends CommandHandler { validate(command: ValidateDDOCommand): ValidateParams { let validation = validateCommandParameters(command, ['ddo']) if (validation.valid) { @@ -795,15 +800,27 @@ export class ValidateDDOHandler extends Handler { async handle(task: ValidateDDOCommand): Promise { const validationResponse = await this.verifyParamsAndRateLimits(task) + const shouldSkipValidation = await skipValidation() + if (!shouldSkipValidation) { + const validationResponse = await this.validateTokenOrSignature( + task.authorization, + task.publisherAddress, + task.nonce, + task.signature, + String(task.publisherAddress + task.nonce) + ) + if (validationResponse.status.httpStatus !== 200) { + return validationResponse + } + } + if (this.shouldDenyTaskHandling(validationResponse)) { return validationResponse } + try { - const validation = await validateObject( - task.ddo, - task.ddo.chainId, - task.ddo.nftAddress - ) + const ddoInstance = DDOManager.getDDOClass(task.ddo) + const validation = await ddoInstance.validate() if (validation[0] === false) { CORE_LOGGER.logMessageWithEmoji( `Validation failed with error: ${validation[1]}`, @@ -836,6 +853,32 @@ export class ValidateDDOHandler extends Handler { } } +export function validateDdoSignedByPublisher( + ddo: DDO, + nonce: string, + signature: string, + publisherAddress: string +): boolean { + try { + const message = ddo.id + nonce + const messageHash = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.getBytes(messageHash) + // Try both verification methods for backward compatibility + const addressFromHashSignature = ethers.verifyMessage(messageHash, signature) + const addressFromBytesSignature = ethers.verifyMessage(messageHashBytes, signature) + return ( + addressFromHashSignature?.toLowerCase() === publisherAddress?.toLowerCase() || + addressFromBytesSignature?.toLowerCase() === publisherAddress?.toLowerCase() + ) + } catch (error) { + CORE_LOGGER.logMessage(`Error: ${error}`, true) + return false + } +} + export function validateDDOIdentifier(identifier: string): ValidateParams { const valid = identifier && identifier.length > 0 && identifier.startsWith('did:op') if (!valid) { @@ -856,11 +899,14 @@ export function validateDDOIdentifier(identifier: string): ValidateParams { * @returns validation result */ async function checkIfDDOResponseIsLegit(ddo: any): Promise { - const { nftAddress, chainId, event } = ddo - let isValid = validateDDOHash(ddo.id, nftAddress, chainId) + const clonedDdo = structuredClone(ddo) + const { indexedMetadata } = clonedDdo + const updatedDdo = deleteIndexedMetadataIfExists(ddo) + const { nftAddress, chainId } = updatedDdo + let isValid = validateDDOHash(updatedDdo.id, nftAddress, chainId) // 1) check hash sha256(nftAddress + chainId) if (!isValid) { - CORE_LOGGER.error(`Asset ${ddo.id} does not have a valid hash`) + CORE_LOGGER.error(`Asset ${updatedDdo.id} does not have a valid hash`) return false } @@ -894,19 +940,25 @@ async function checkIfDDOResponseIsLegit(ddo: any): Promise { ) if (!wasDeployedByUs) { - CORE_LOGGER.error(`Asset ${ddo.id} not deployed by the data NFT factory`) + CORE_LOGGER.error(`Asset ${updatedDdo.id} not deployed by the data NFT factory`) return false } // 5) check block & events const networkBlock = await getNetworkHeight(blockchain.getProvider()) - if (!event.block || event.block < 0 || networkBlock < event.block) { - CORE_LOGGER.error(`Event block: ${event.block} is either missing or invalid`) + if ( + !indexedMetadata.event.block || + indexedMetadata.event.block < 0 || + networkBlock < indexedMetadata.event.block + ) { + CORE_LOGGER.error( + `Event block: ${indexedMetadata.event.block} is either missing or invalid` + ) return false } // check events on logs - const txId: string = event.tx // NOTE: DDO is txid, Asset is tx + const txId: string = indexedMetadata.event.txid || indexedMetadata.event.tx // NOTE: DDO is txid, Asset is tx if (!txId) { CORE_LOGGER.error(`DDO event missing tx data, cannot confirm transaction`) return false diff --git a/src/components/core/handler/downloadHandler.ts b/src/components/core/handler/downloadHandler.ts index 1f50f772f..f14f441d4 100644 --- a/src/components/core/handler/downloadHandler.ts +++ b/src/components/core/handler/downloadHandler.ts @@ -1,10 +1,5 @@ -import { Handler } from './handler.js' -import { checkNonce, NonceResponse } from '../utils/nonceHandler.js' -import { - ENVIRONMENT_VARIABLES, - MetadataStates, - PROTOCOL_COMMANDS -} from '../../../utils/constants.js' +import { CommandHandler } from './handler.js' +import { MetadataStates, PROTOCOL_COMMANDS } from '../../../utils/constants.js' import { P2PCommandResponse } from '../../../@types/OceanNode.js' import { verifyProviderFees } from '../utils/feesHandler.js' import { decrypt } from '../../../utils/crypt.js' @@ -20,14 +15,13 @@ import { isDataTokenTemplate4, isERC20Template4Active } from '../../../utils/asset.js' -import { Service } from '../../../@types/DDO/Service.js' -import { ArweaveStorage, IpfsStorage, Storage } from '../../storage/index.js' +import { Storage } from '../../storage/index.js' import { Blockchain, - existsEnvironmentVariable, - getConfiguration + getConfiguration, + isPolicyServerConfigured } from '../../../utils/index.js' -import { checkCredentials } from '../../../utils/credentials.js' +import { areKnownCredentialTypes, checkCredentials } from '../../../utils/credentials.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' import { OceanNode } from '../../../OceanNode.js' import { DownloadCommand, DownloadURLCommand } from '../../../@types/commands.js' @@ -37,22 +31,21 @@ import { validateCommandParameters, ValidateParams } from '../../httpRoutes/validateCommands.js' -import { DDO } from '../../../@types/DDO/DDO.js' import { sanitizeServiceFiles } from '../../../utils/util.js' -import { getNFTContract } from '../../Indexer/utils.js' import { OrdableAssetResponse } from '../../../@types/Asset.js' import { PolicyServer } from '../../policyServer/index.js' +import { Asset, Credentials, DDO, DDOManager, Service } from '@oceanprotocol/ddo-js' export const FILE_ENCRYPTION_ALGORITHM = 'aes-256-cbc' -export function isOrderingAllowedForAsset(asset: DDO): OrdableAssetResponse { +export function isOrderingAllowedForAsset(asset: Asset): OrdableAssetResponse { if (!asset) { return { isOrdable: false, reason: `Asset provided is either null, either undefined ${asset}` } } else if ( - asset.nft && - !(asset.nft.state in [MetadataStates.ACTIVE, MetadataStates.UNLISTED]) + asset.indexedMetadata.nft && + !(asset.indexedMetadata.nft.state in [MetadataStates.ACTIVE, MetadataStates.UNLISTED]) ) { return { isOrdable: false, @@ -77,29 +70,12 @@ export async function handleDownloadUrlCommand( try { // Determine the type of storage and get a readable stream const storage = Storage.getStorageClass(task.fileObject, config) - if ( - storage instanceof ArweaveStorage && - !existsEnvironmentVariable(ENVIRONMENT_VARIABLES.ARWEAVE_GATEWAY) - ) { - CORE_LOGGER.logMessageWithEmoji( - 'Failure executing downloadURL task: Oean-node does not support arweave storage type files! ', - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return { - stream: null, - status: { - httpStatus: 501, - error: 'Error: Oean-node does not support arweave storage type files!' - } - } - } else if ( - storage instanceof IpfsStorage && - !existsEnvironmentVariable(ENVIRONMENT_VARIABLES.IPFS_GATEWAY) - ) { + + // Validate storage configuration (checks if gateways are configured) + const [isValid, validationError] = storage.validate() + if (!isValid) { CORE_LOGGER.logMessageWithEmoji( - 'Failure executing downloadURL task: Oean-node does not support ipfs storage type files! ', + `Failure executing downloadURL task: ${validationError}`, true, GENERIC_EMOJIS.EMOJI_CROSS_MARK, LOG_LEVELS_STR.LEVEL_ERROR @@ -108,7 +84,7 @@ export async function handleDownloadUrlCommand( stream: null, status: { httpStatus: 501, - error: 'Error: Oean-node does not support ipfs storage type files!' + error: `Error: ${validationError}` } } } @@ -126,8 +102,9 @@ export async function handleDownloadUrlCommand( headers['Content-Length'.toLowerCase()] = fileMetadata.contentLength if (!('Content-Disposition'?.toLowerCase() in objTemp)) - headers['Content-Disposition'.toLowerCase()] = - `attachment;filename=${fileMetadata.name}` + headers[ + 'Content-Disposition'.toLowerCase() + ] = `attachment;filename=${fileMetadata.name}` if (encryptFile) { // we parse the string into the object again const encryptedObject = ethCrypto.cipher.parse(task.aes_encrypted_key) @@ -192,12 +169,14 @@ export async function handleDownloadUrlCommand( } export function validateFilesStructure( - ddo: DDO, + ddo: DDO | Record, service: Service, decriptedFileObject: any ): boolean { + const ddoInstance = DDOManager.getDDOClass(ddo) + const { nftAddress } = ddoInstance.getDDOFields() if ( - decriptedFileObject.nftAddress?.toLowerCase() !== ddo.nftAddress?.toLowerCase() || + decriptedFileObject.nftAddress?.toLowerCase() !== nftAddress?.toLowerCase() || decriptedFileObject.datatokenAddress?.toLowerCase() !== service.datatokenAddress?.toLowerCase() ) { @@ -206,22 +185,30 @@ export function validateFilesStructure( return true } -export class DownloadHandler extends Handler { +export class DownloadHandler extends CommandHandler { validate(command: DownloadCommand): ValidateParams { return validateCommandParameters(command, [ 'fileIndex', 'documentId', 'serviceId', - 'transferTxId', - 'nonce', - 'consumerAddress', - 'signature' + 'transferTxId' ]) } // No encryption here yet async handle(task: DownloadCommand): Promise { const validationResponse = await this.verifyParamsAndRateLimits(task) + const isAuthRequestValid = await this.validateTokenOrSignature( + task.authorization, + task.consumerAddress, + task.nonce, + task.signature, + String(task.documentId + task.nonce) + ) + if (isAuthRequestValid.status.httpStatus !== 200) { + return isAuthRequestValid + } + if (this.shouldDenyTaskHandling(validationResponse)) { return validationResponse } @@ -233,7 +220,7 @@ export class DownloadHandler extends Handler { const ddo = await handler.findAndFormatDdo(task.documentId) if (ddo) { - CORE_LOGGER.logMessage('DDO for asset found: ' + ddo, true) + CORE_LOGGER.logMessage('DDO for asset found: ' + JSON.stringify(ddo), true) } else { CORE_LOGGER.logMessage( 'No DDO for asset found. Cannot proceed with download.', @@ -247,6 +234,14 @@ export class DownloadHandler extends Handler { } } } + const ddoInstance = DDOManager.getDDOClass(ddo) + const { + chainId: ddoChainId, + nftAddress, + metadata, + credentials + } = ddoInstance.getDDOFields() + const policyServer = new PolicyServer() const isOrdable = isOrderingAllowedForAsset(ddo) if (!isOrdable.isOrdable) { @@ -261,7 +256,7 @@ export class DownloadHandler extends Handler { } // 2. Validate ddo and credentials - if (!ddo.chainId || !ddo.nftAddress || !ddo.metadata) { + if (!ddoChainId || !nftAddress || !metadata) { CORE_LOGGER.logMessage('Error: DDO malformed or disabled', true) return { stream: null, @@ -272,47 +267,43 @@ export class DownloadHandler extends Handler { } } - // check credentials - if (ddo.credentials) { - const accessGranted = checkCredentials(ddo.credentials, task.consumerAddress) - if (!accessGranted) { - CORE_LOGGER.logMessage(`Error: Access to asset ${ddo.id} was denied`, true) + // check credentials (DDO level) + let accessGrantedDDOLevel: boolean + if (credentials) { + // if POLICY_SERVER_URL exists, then ocean-node will NOT perform any checks. + // It will just use the existing code and let PolicyServer decide. + if (isPolicyServerConfigured()) { + const response = await policyServer.checkDownload( + ddoInstance.getDid(), + ddo, + task.serviceId, + task.consumerAddress, + task.policyServer + ) + accessGrantedDDOLevel = response.success + } else { + accessGrantedDDOLevel = areKnownCredentialTypes(credentials as Credentials) + ? checkCredentials(credentials as Credentials, task.consumerAddress) + : true + } + if (!accessGrantedDDOLevel) { + CORE_LOGGER.logMessage( + `Error: Access to asset ${ddoInstance.getDid()} was denied`, + true + ) return { stream: null, status: { httpStatus: 403, - error: `Error: Access to asset ${ddo.id} was denied` + error: `Error: Access to asset ${ddoInstance.getDid()} was denied` } } } } - // 3. Validate nonce and signature - const nonceCheckResult: NonceResponse = await checkNonce( - this.getOceanNode().getDatabase().nonce, - task.consumerAddress, - parseInt(task.nonce), - task.signature, - String(ddo.id + task.nonce) - ) - - if (!nonceCheckResult.valid) { - CORE_LOGGER.logMessage( - 'Invalid nonce or signature, unable to proceed with download: ' + - nonceCheckResult.error, - true - ) - return { - stream: null, - status: { - httpStatus: 500, - error: nonceCheckResult.error - } - } - } // from now on, we need blockchain checks const config = await getConfiguration() - const { rpc, network, chainId, fallbackRPCs } = config.supportedNetworks[ddo.chainId] + const { rpc, network, chainId, fallbackRPCs } = config.supportedNetworks[ddoChainId] let provider let blockchain try { @@ -340,55 +331,43 @@ export class DownloadHandler extends Handler { } if (!rpc) { CORE_LOGGER.logMessage( - `Cannot proceed with download. RPC not configured for this chain ${ddo.chainId}`, + `Cannot proceed with download. RPC not configured for this chain ${ddoChainId}`, true ) return { stream: null, status: { httpStatus: 500, - error: `Cannot proceed with download. RPC not configured for this chain ${ddo.chainId}` + error: `Cannot proceed with download. RPC not configured for this chain ${ddoChainId}` } } } - // check lifecycle state of the asset - const nftContract = getNFTContract(blockchain.getSigner(), ddo.nftAddress) - const nftState = Number(await nftContract.metaDataState()) - if (nftState !== 0 && nftState !== 5) { - CORE_LOGGER.logMessage( - `Error: Asset with id ${ddo.id} is not in an active state`, - true - ) - return { - stream: null, - status: { - httpStatus: 500, - error: `Error: Asset with id ${ddo.id} is not in an active state` - } - } - } - let service: Service = AssetUtils.getServiceById(ddo, task.serviceId) + let service = AssetUtils.getServiceById(ddo, task.serviceId) if (!service) service = AssetUtils.getServiceByIndex(ddo, Number(task.serviceId)) if (!service) throw new Error('Cannot find service') - // check lifecycle state of the service - undefined state is considered active - if (service.state && service.state !== 0 && service.state !== 5) { - CORE_LOGGER.logMessage( - `Error: Service with id ${service.id} is not in an active state`, - true - ) - return { - stream: null, - status: { - httpStatus: 500, - error: `Error: Service with id ${service.id} is not in an active state` - } - } - } // check credentials on service level + // if using a policy server and we are here it means that access was granted (they are merged/assessed together) if (service.credentials) { - const accessGranted = checkCredentials(service.credentials, task.consumerAddress) - if (!accessGranted) { + let accessGrantedServiceLevel: boolean + if (isPolicyServerConfigured()) { + // we use the previous check or we do it again + // (in case there is no DDO level credentials and we only have Service level ones) + const response = await policyServer.checkDownload( + ddoInstance.getDid(), + ddo, + service.id, + task.consumerAddress, + task.policyServer + ) + accessGrantedServiceLevel = accessGrantedDDOLevel || response.success + } else { + accessGrantedServiceLevel = areKnownCredentialTypes(service.credentials) + ? checkCredentials(service.credentials, task.consumerAddress) + : true + } + + if (!accessGrantedServiceLevel) { CORE_LOGGER.logMessage( `Error: Access to service with id ${service.id} was denied`, true @@ -396,12 +375,13 @@ export class DownloadHandler extends Handler { return { stream: null, status: { - httpStatus: 500, + httpStatus: 403, error: `Error: Access to service with id ${service.id} was denied` } } } } + // 4. Check service type const serviceType = service.type if (serviceType === 'compute') { @@ -411,7 +391,7 @@ export class DownloadHandler extends Handler { const environments = await this.getOceanNode() .getC2DEngines() - .fetchEnvironments(ddo.chainId) + .fetchEnvironments(ddoChainId) for (const env of environments) computeAddrs.push(env.consumerAddress?.toLowerCase()) @@ -432,9 +412,7 @@ export class DownloadHandler extends Handler { task.transferTxId, task.consumerAddress, provider, - service, - null, - null + service ) if (!validFee.isValid) { return { @@ -451,7 +429,7 @@ export class DownloadHandler extends Handler { task.transferTxId, task.consumerAddress, provider, - ddo.nftAddress, + nftAddress, service.datatokenAddress, AssetUtils.getServiceIndexById(ddo, task.serviceId), service.timeout, @@ -476,26 +454,6 @@ export class DownloadHandler extends Handler { } } } - // policyServer check - const policyServer = new PolicyServer() - const policyStatus = await policyServer.checkDownload( - ddo.id, - ddo, - service.id, - task.fileIndex, - task.transferTxId, - task.consumerAddress, - task.policyServer - ) - if (!policyStatus.success) { - return { - stream: null, - status: { - httpStatus: 405, - error: policyStatus.message - } - } - } try { // 7. Decrypt the url @@ -504,13 +462,13 @@ export class DownloadHandler extends Handler { let decriptedFileObject: any = null let decryptedFileData: any = null // check if confidential EVM - const confidentialEVM = isConfidentialChainDDO(ddo.chainId, service) + const confidentialEVM = isConfidentialChainDDO(BigInt(ddoChainId), service) // check that files is missing and template 4 is active on the chain if (confidentialEVM) { const signer = blockchain.getSigner() const isTemplate4 = await isDataTokenTemplate4(service.datatokenAddress, signer) - if (!isTemplate4 || !(await isERC20Template4Active(ddo.chainId, signer))) { + if (!isTemplate4 || !(await isERC20Template4Active(ddoChainId, signer))) { const errorMsg = 'Cannot decrypt DDO files, Template 4 is not active for confidential EVM!' CORE_LOGGER.error(errorMsg) @@ -554,6 +512,17 @@ export class DownloadHandler extends Handler { decriptedFileObject = decryptedFileData.files[task.fileIndex] } + if (decriptedFileObject?.url && task.userData) { + const url = new URL(decriptedFileObject.url) + const userDataObj = + typeof task.userData === 'string' ? JSON.parse(task.userData) : task.userData + for (const [key, value] of Object.entries(userDataObj)) { + url.searchParams.append(key, String(value)) + } + decriptedFileObject.url = url.toString() + CORE_LOGGER.info('Appended userData to file url: ' + decriptedFileObject.url) + } + if (!validateFilesStructure(ddo, service, decryptedFileData)) { CORE_LOGGER.error( 'Unauthorized download operation. Decrypted "nftAddress" and "datatokenAddress" do not match the original DDO' diff --git a/src/components/core/handler/echoHandler.ts b/src/components/core/handler/echoHandler.ts deleted file mode 100644 index 9c97bb284..000000000 --- a/src/components/core/handler/echoHandler.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { P2PCommandResponse } from '../../../@types/index.js' -import { EchoCommand } from '../../../@types/commands.js' -import { ReadableString } from '../../P2P/handleProtocolCommands.js' -import { - validateCommandParameters, - ValidateParams -} from '../../httpRoutes/validateCommands.js' -import { Handler } from './handler.js' - -export class EchoHandler extends Handler { - validate(command: EchoCommand): ValidateParams { - return validateCommandParameters(command, []) - } - - async handle(task: EchoCommand): Promise { - const validationResponse = await this.verifyParamsAndRateLimits(task) - if (this.shouldDenyTaskHandling(validationResponse)) { - return validationResponse - } - return { - status: { - httpStatus: 200, - error: null - }, - stream: new ReadableString('OK') - } - } -} diff --git a/src/components/core/handler/encryptHandler.ts b/src/components/core/handler/encryptHandler.ts index 43213085a..74e5c909d 100644 --- a/src/components/core/handler/encryptHandler.ts +++ b/src/components/core/handler/encryptHandler.ts @@ -1,4 +1,4 @@ -import { Handler } from './handler.js' +import { CommandHandler } from './handler.js' import { P2PCommandResponse } from '../../../@types/OceanNode.js' import { EncryptCommand, EncryptFileCommand } from '../../../@types/commands.js' import * as base58 from 'base58-js' @@ -21,7 +21,7 @@ export const SUPPORTED_ENCRYPTION_METHODS = [ EncryptMethod.ECIES.toString() ] -export class EncryptHandler extends Handler { +export class EncryptHandler extends CommandHandler { validate(command: EncryptCommand): ValidateParams { const commandValidation = validateCommandParameters(command, ['blob']) if (!commandValidation.valid) { @@ -80,7 +80,7 @@ export class EncryptHandler extends Handler { } } -export class EncryptFileHandler extends Handler { +export class EncryptFileHandler extends CommandHandler { validate(command: EncryptFileCommand): ValidateParams { const validateCommand = validateCommandParameters(command, []) if (validateCommand.valid) { diff --git a/src/components/core/handler/feesHandler.ts b/src/components/core/handler/feesHandler.ts index 985e5f45b..41d81c483 100644 --- a/src/components/core/handler/feesHandler.ts +++ b/src/components/core/handler/feesHandler.ts @@ -1,4 +1,4 @@ -import { Handler } from './handler.js' +import { CommandHandler } from './handler.js' import { GetFeesCommand } from '../../../@types/commands.js' import { P2PCommandResponse } from '../../../@types/OceanNode.js' import { createProviderFee } from '../utils/feesHandler.js' @@ -16,8 +16,9 @@ import { ProviderInitialize } from '../../../@types/Fees.js' import { getNonce } from '../utils/nonceHandler.js' import { streamToString } from '../../../utils/util.js' import { isOrderingAllowedForAsset } from './downloadHandler.js' +import { DDOManager } from '@oceanprotocol/ddo-js' -export class FeesHandler extends Handler { +export class FeesHandler extends CommandHandler { validate(command: GetFeesCommand): ValidateParams { let validation = validateCommandParameters(command, ['ddoId', 'serviceId']) if (validation.valid) { @@ -58,8 +59,9 @@ export class FeesHandler extends Handler { } } } - - const service = ddo.services.find((what: any) => what.id === task.serviceId) + const ddoInstance = DDOManager.getDDOClass(ddo) + const { services } = ddoInstance.getDDOFields() as any + const service = services.find((what: any) => what.id === task.serviceId) if (!service) { errorMsg = 'Invalid serviceId' } @@ -98,7 +100,7 @@ export class FeesHandler extends Handler { const nonce = await streamToString(nonceHandlerResponse.stream as Readable) try { - const providerFee = await createProviderFee(ddo, service, validUntil, null, null) + const providerFee = await createProviderFee(ddo, service, validUntil) if (providerFee) { const response: ProviderInitialize = { providerFee, diff --git a/src/components/core/handler/fileInfoHandler.ts b/src/components/core/handler/fileInfoHandler.ts index ad89de96f..4139849a7 100644 --- a/src/components/core/handler/fileInfoHandler.ts +++ b/src/components/core/handler/fileInfoHandler.ts @@ -6,10 +6,11 @@ import { IpfsFileObject, UrlFileObject } from '../../../@types/fileObject.js' +import { OceanNodeConfig } from '../../../@types/OceanNode.js' import { FileInfoCommand } from '../../../@types/commands.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' import { Storage } from '../../storage/index.js' -import { Handler } from './handler.js' +import { CommandHandler } from './handler.js' import { validateDDOIdentifier } from './ddoHandler.js' import { fetchFileMetadata } from '../../../utils/asset.js' import { @@ -19,22 +20,24 @@ import { } from '../../httpRoutes/validateCommands.js' import { getFile } from '../../../utils/file.js' import { getConfiguration } from '../../../utils/index.js' -async function formatMetadata(file: ArweaveFileObject | IpfsFileObject | UrlFileObject) { +async function formatMetadata( + file: ArweaveFileObject | IpfsFileObject | UrlFileObject, + config: OceanNodeConfig +) { const url = file.type === 'url' ? (file as UrlFileObject).url : file.type === 'arweave' - ? urlJoin(process.env.ARWEAVE_GATEWAY, (file as ArweaveFileObject).transactionId) - : file.type === 'ipfs' - ? urlJoin(process.env.IPFS_GATEWAY, (file as IpfsFileObject).hash) - : null + ? urlJoin(config.arweaveGateway, (file as ArweaveFileObject).transactionId) + : file.type === 'ipfs' + ? urlJoin(config.ipfsGateway, (file as IpfsFileObject).hash) + : null const { contentLength, contentType, contentChecksum } = await fetchFileMetadata( url, 'get', false ) - CORE_LOGGER.logMessage(`Metadata for file: ${contentLength} ${contentType}`) return { valid: true, @@ -45,7 +48,7 @@ async function formatMetadata(file: ArweaveFileObject | IpfsFileObject | UrlFile type: file.type } } -export class FileInfoHandler extends Handler { +export class FileInfoHandler extends CommandHandler { validate(command: FileInfoCommand): ValidateParams { let validation = validateCommandParameters(command, []) // all optional? weird if (validation.valid) { @@ -76,10 +79,11 @@ export class FileInfoHandler extends Handler { } try { const oceanNode = this.getOceanNode() + const config = await getConfiguration() let fileInfo = [] if (task.file && task.type) { - const storage = Storage.getStorageClass(task.file, await getConfiguration()) + const storage = Storage.getStorageClass(task.file, config) fileInfo = await storage.getFileInfo({ type: task.type, @@ -88,11 +92,11 @@ export class FileInfoHandler extends Handler { } else if (task.did && task.serviceId) { const fileArray = await getFile(task.did, task.serviceId, oceanNode) if (task.fileIndex) { - const fileMetadata = await formatMetadata(fileArray[task.fileIndex]) + const fileMetadata = await formatMetadata(fileArray[task.fileIndex], config) fileInfo.push(fileMetadata) } else { for (const file of fileArray) { - const fileMetadata = await formatMetadata(file) + const fileMetadata = await formatMetadata(file, config) fileInfo.push(fileMetadata) } } diff --git a/src/components/core/handler/getJobs.ts b/src/components/core/handler/getJobs.ts new file mode 100644 index 000000000..e50f5c4b1 --- /dev/null +++ b/src/components/core/handler/getJobs.ts @@ -0,0 +1,54 @@ +import { Readable } from 'stream' +import { GetJobsCommand } from '../../../@types/commands.js' +import { CORE_LOGGER } from '../../../utils/logging/common.js' +import { buildInvalidRequestMessage } from '../../httpRoutes/validateCommands.js' +import { CommandHandler } from './handler.js' +import { P2PCommandResponse } from '../../../@types/OceanNode.js' + +export class GetJobsHandler extends CommandHandler { + validate(command: GetJobsCommand) { + if (command.fromTimestamp && typeof command.fromTimestamp !== 'string') { + return buildInvalidRequestMessage( + 'Parameter : "fromTimestamp" is not a valid string' + ) + } + return { valid: true } + } + + async handle(task: GetJobsCommand): Promise { + const validationResponse = await this.verifyParamsAndRateLimits(task) + if (this.shouldDenyTaskHandling(validationResponse)) { + return validationResponse + } + + try { + const { c2d } = this.getOceanNode().getDatabase() + if (!c2d) { + throw new Error('C2D database not initialized') + } + + const jobs = await c2d.getJobs( + task.environments, + task.fromTimestamp, + task.consumerAddrs + ) + return { + stream: Readable.from(JSON.stringify(jobs)), + status: { + httpStatus: 200, + error: null + } + } + } catch (error) { + const message = error instanceof Error ? error.message : String(error) + CORE_LOGGER.error('Error retrieving node jobs: ' + message) + return { + status: { + httpStatus: 500, + error: message + }, + stream: null + } + } + } +} diff --git a/src/components/core/handler/handler.ts b/src/components/core/handler/handler.ts index 93aafdc94..762f22c15 100644 --- a/src/components/core/handler/handler.ts +++ b/src/components/core/handler/handler.ts @@ -1,34 +1,29 @@ import { P2PCommandResponse } from '../../../@types/OceanNode.js' -import { OceanNode } from '../../../OceanNode.js' -import { Command, ICommandHandler } from '../../../@types/commands.js' +import { OceanNode, RequestDataCheck, RequestLimiter } from '../../../OceanNode.js' import { - ValidateParams, + Command, + ICommandHandler, + IValidateCommandHandler +} from '../../../@types/commands.js' +import { + // ValidateParams, buildInvalidParametersResponse, - buildRateLimitReachedResponse + buildRateLimitReachedResponse, + ValidateParams } from '../../httpRoutes/validateCommands.js' import { getConfiguration } from '../../../utils/index.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' import { ReadableString } from '../../P2P/handlers.js' +import { CONNECTION_HISTORY_DELETE_THRESHOLD } from '../../../utils/constants.js' -export interface RequestLimiter { - requester: string | string[] // IP address or peer ID - lastRequestTime: number // time of the last request done (in miliseconds) - numRequests: number // number of requests done in the specific time period -} - -export interface RequestDataCheck { - valid: boolean - updatedRequestData: RequestLimiter -} -export abstract class Handler implements ICommandHandler { - private nodeInstance?: OceanNode - private requestMap: Map +export abstract class BaseHandler implements ICommandHandler { + private nodeInstance: OceanNode public constructor(oceanNode: OceanNode) { this.nodeInstance = oceanNode - this.requestMap = new Map() } - abstract validate(command: Command): ValidateParams + // abstract validate(command: Command): ValidateParams + abstract verifyParamsAndRateLimits(task: Command): Promise abstract handle(task: Command): Promise @@ -38,33 +33,40 @@ export abstract class Handler implements ICommandHandler { // TODO LOG, implement all handlers async checkRateLimit(): Promise { - const ratePerSecond = (await getConfiguration()).rateLimit + const requestMap = this.getOceanNode().getRequestMap() + const ratePerMinute = (await getConfiguration()).rateLimit const caller: string | string[] = this.getOceanNode().getRemoteCaller() const requestTime = new Date().getTime() let isOK = true + // we have to clear this from time to time, so it does not grow forever + if (requestMap.size > CONNECTION_HISTORY_DELETE_THRESHOLD) { + CORE_LOGGER.info('Request history reached threeshold, cleaning cache...') + requestMap.clear() + } + const self = this // common stuff const updateRequestData = function (remoteCaller: string) { const updatedRequestData = self.checkRequestData( remoteCaller, requestTime, - ratePerSecond + ratePerMinute ) isOK = updatedRequestData.valid - self.requestMap.set(remoteCaller, updatedRequestData.updatedRequestData) + requestMap.set(remoteCaller, updatedRequestData.updatedRequestData) } let data: RequestLimiter = null if (Array.isArray(caller)) { for (const remote of caller) { - if (!this.requestMap.has(remote)) { + if (!requestMap.has(remote)) { data = { requester: remote, lastRequestTime: requestTime, numRequests: 1 } - this.requestMap.set(remote, data) + requestMap.set(remote, data) } else { updateRequestData(remote) } @@ -72,20 +74,20 @@ export abstract class Handler implements ICommandHandler { if (!isOK) { CORE_LOGGER.warn( `Request denied (rate limit exceeded) for remote caller ${remote}. Current request map: ${JSON.stringify( - this.requestMap.get(remote) + requestMap.get(remote) )}` ) return false } } } else { - if (!this.requestMap.has(caller)) { + if (!requestMap.has(caller)) { data = { requester: caller, lastRequestTime: requestTime, numRequests: 1 } - this.requestMap.set(caller, data) + requestMap.set(caller, data) return true } else { updateRequestData(caller) @@ -93,7 +95,7 @@ export abstract class Handler implements ICommandHandler { if (!isOK) { CORE_LOGGER.warn( `Request denied (rate limit exceeded) for remote caller ${caller}. Current request map: ${JSON.stringify( - this.requestMap.get(caller) + requestMap.get(caller) )}` ) } @@ -105,18 +107,19 @@ export abstract class Handler implements ICommandHandler { /** * Checks if the request is within the rate limit defined * @param remote remote endpoint (ip or peer identifier) - * @param ratePerSecond number of calls per second allowed + * @param ratePerMinute number of calls per minute allowed (per ip or peer identifier) * @returns updated request data */ checkRequestData( remote: string, currentTime: number, - ratePerSecond: number + ratePerMinute: number ): RequestDataCheck { - const requestData: RequestLimiter = this.requestMap.get(remote) - const diffSeconds = (currentTime - requestData.lastRequestTime) / 1000 - // more than 1 sec difference means no problem - if (diffSeconds >= 1) { + const requestMap = this.getOceanNode().getRequestMap() + const requestData: RequestLimiter = requestMap.get(remote) + const diffMinutes = ((currentTime - requestData.lastRequestTime) / 1000) * 60 + // more than 1 minute difference means no problem + if (diffMinutes >= 1) { // its fine requestData.lastRequestTime = currentTime requestData.numRequests = 1 @@ -128,19 +131,32 @@ export abstract class Handler implements ICommandHandler { // requests in the same interval of 1 second requestData.numRequests++ return { - valid: requestData.numRequests <= ratePerSecond, + valid: requestData.numRequests <= ratePerMinute, updatedRequestData: requestData } } } + shouldDenyTaskHandling(validationResponse: P2PCommandResponse): boolean { + return ( + validationResponse.status.httpStatus !== 200 || + validationResponse.status.error !== null + ) + } +} + +export abstract class CommandHandler + extends BaseHandler + implements IValidateCommandHandler +{ + abstract validate(command: Command): ValidateParams async verifyParamsAndRateLimits(task: Command): Promise { // first check rate limits, if any if (!(await this.checkRateLimit())) { return buildRateLimitReachedResponse() } // then validate the command arguments - const validation = this.validate(task) + const validation = await this.validate(task) if (!validation.valid) { return buildInvalidParametersResponse(validation) } @@ -152,10 +168,32 @@ export abstract class Handler implements ICommandHandler { } } - shouldDenyTaskHandling(validationResponse: P2PCommandResponse): boolean { - return ( - validationResponse.status.httpStatus !== 200 || - validationResponse.status.error !== null - ) + async validateTokenOrSignature( + authToken: string, + address: string, + nonce: string, + signature: string, + message: string + ): Promise { + const oceanNode = this.getOceanNode() + const auth = oceanNode.getAuth() + const isAuthRequestValid = await auth.validateAuthenticationOrToken({ + token: authToken, + address, + nonce, + signature, + message + }) + if (!isAuthRequestValid.valid) { + return { + stream: null, + status: { httpStatus: 401, error: isAuthRequestValid.error } + } + } + + return { + stream: null, + status: { httpStatus: 200 } + } } } diff --git a/src/components/core/handler/nonceHandler.ts b/src/components/core/handler/nonceHandler.ts index f5211a42b..18c27cc48 100644 --- a/src/components/core/handler/nonceHandler.ts +++ b/src/components/core/handler/nonceHandler.ts @@ -1,4 +1,4 @@ -import { Handler } from './handler.js' +import { CommandHandler } from './handler.js' import { P2PCommandResponse } from '../../../@types/OceanNode.js' import { NonceCommand } from '../../../@types/commands.js' import { getNonce } from '../utils/nonceHandler.js' @@ -9,7 +9,7 @@ import { } from '../../httpRoutes/validateCommands.js' import { isAddress } from 'ethers' -export class NonceHandler extends Handler { +export class NonceHandler extends CommandHandler { validate(command: NonceCommand): ValidateParams { const validation = validateCommandParameters(command, ['address']) if (validation.valid) { diff --git a/src/components/core/handler/p2p.ts b/src/components/core/handler/p2p.ts new file mode 100644 index 000000000..c0ff41625 --- /dev/null +++ b/src/components/core/handler/p2p.ts @@ -0,0 +1,154 @@ +import { CommandHandler } from './handler.js' +import { getConfiguration } from '../../../utils/config.js' +import { P2PCommandResponse } from '../../../@types/OceanNode.js' +import { + FindPeerCommand, + GetP2PPeerCommand, + GetP2PPeersCommand, + GetP2PNetworkStatsCommand +} from '../../../@types/commands.js' +import { Readable } from 'stream' +import { + ValidateParams, + validateCommandParameters +} from '../../httpRoutes/validateCommands.js' +import { CORE_LOGGER } from '../../../utils/logging/common.js' + +export class FindPeerHandler extends CommandHandler { + validate(command: FindPeerCommand): ValidateParams { + const validation = validateCommandParameters(command, ['peerId']) + return validation + } + + async handle(task: FindPeerCommand): Promise { + const checks = await this.verifyParamsAndRateLimits(task) + if (checks.status.httpStatus !== 200 || checks.status.error !== null) { + return checks + } + try { + const peer = await this.getOceanNode() + .getP2PNode() + .findPeerInDht(String(task.peerId), parseInt(String(task.timeout))) + // .getPeerDetails(String(task.peerId)) + if (!peer) { + return { + stream: null, + status: { httpStatus: 404, error: 'Peer Not Found' } + } + } + return { + stream: Readable.from(JSON.stringify(peer, null, 4)), + status: { httpStatus: 200 } + } + } catch (error) { + CORE_LOGGER.error(`Error in Handler: ${error.message}`) + return { + stream: null, + status: { httpStatus: 500, error: 'Unknown error: ' + error.message } + } + } + } +} + +export class GetP2PPeerHandler extends CommandHandler { + validate(command: GetP2PPeerCommand): ValidateParams { + const validation = validateCommandParameters(command, ['peerId']) + return validation + } + + async handle(task: GetP2PPeerCommand): Promise { + const checks = await this.verifyParamsAndRateLimits(task) + if (checks.status.httpStatus !== 200 || checks.status.error !== null) { + return checks + } + try { + const peers = await this.getOceanNode() + .getP2PNode() + .getPeerDetails(String(task.peerId)) + if (!peers) { + return { + stream: null, + status: { httpStatus: 404, error: 'Peer Not Found' } + } + } + return { + stream: Readable.from(JSON.stringify(peers, null, 4)), + status: { httpStatus: 200 } + } + } catch (error) { + CORE_LOGGER.error(`Error in Handler: ${error.message}`) + return { + stream: null, + status: { httpStatus: 500, error: 'Unknown error: ' + error.message } + } + } + } +} + +export class GetP2PPeersHandler extends CommandHandler { + validate(command: GetP2PPeersCommand): ValidateParams { + const validation = validateCommandParameters(command, []) + return validation + } + + async handle(task: GetP2PPeersCommand): Promise { + const checks = await this.verifyParamsAndRateLimits(task) + if (checks.status.httpStatus !== 200 || checks.status.error !== null) { + return checks + } + try { + const peers = await this.getOceanNode().getP2PNode().getAllPeerStore() + if (!peers) { + return { + stream: null, + status: { httpStatus: 404, error: 'Peers Not Found' } + } + } + return { + stream: Readable.from(JSON.stringify(peers, null, 4)), + status: { httpStatus: 200 } + } + } catch (error) { + CORE_LOGGER.error(`Error in Handler: ${error.message}`) + return { + stream: null, + status: { httpStatus: 500, error: 'Unknown error: ' + error.message } + } + } + } +} + +export class GetP2PNetworkStatsHandler extends CommandHandler { + validate(command: GetP2PNetworkStatsCommand): ValidateParams { + const validation = validateCommandParameters(command, []) + return validation + } + + async handle(task: GetP2PNetworkStatsCommand): Promise { + const checks = await this.verifyParamsAndRateLimits(task) + if (checks.status.httpStatus !== 200 || checks.status.error !== null) { + return checks + } + try { + const config = await getConfiguration() + if (config.p2pConfig.enableNetworkStats) { + const stats = await this.getOceanNode().getP2PNode().getNetworkingStats() + return { + stream: Readable.from(JSON.stringify(stats, null, 4)), + status: { httpStatus: 200 } + } + } else { + return { + stream: null, + status: { httpStatus: 400, error: 'Not enabled or unavailable' } + } + } + } catch (error) { + CORE_LOGGER.error(`Error in Handler: ${error.message}`) + return { + stream: null, + status: { httpStatus: 500, error: 'Unknown error: ' + error.message } + } + } + } +} diff --git a/src/components/core/handler/policyServer.ts b/src/components/core/handler/policyServer.ts index 16f37698b..dd90e83aa 100644 --- a/src/components/core/handler/policyServer.ts +++ b/src/components/core/handler/policyServer.ts @@ -1,16 +1,20 @@ import { P2PCommandResponse } from '../../../@types/index.js' -import { PolicyServerPassthroughCommand } from '../../../@types/commands.js' +import { + PolicyServerPassthroughCommand, + PolicyServerInitializeCommand +} from '../../../@types/commands.js' import { Readable } from 'stream' -import { Handler } from './handler.js' +import { CommandHandler } from './handler.js' import { ValidateParams, buildInvalidRequestMessage, validateCommandParameters } from '../../httpRoutes/validateCommands.js' +import { CORE_LOGGER } from '../../../utils/logging/common.js' import { PolicyServer } from '../../policyServer/index.js' -export class PolicyServerPassthroughHandler extends Handler { +export class PolicyServerPassthroughHandler extends CommandHandler { validate(command: PolicyServerPassthroughCommand): ValidateParams { if (!command.policyServerPassthrough) return buildInvalidRequestMessage( @@ -25,7 +29,18 @@ export class PolicyServerPassthroughHandler extends Handler { if (this.shouldDenyTaskHandling(validationResponse)) { return validationResponse } - + task.policyServerPassthrough.ddo = null + // resolve DDO first + try { + task.policyServerPassthrough.ddo = await this.getOceanNode() + .getDatabase() + .ddo.retrieve(task.policyServerPassthrough.documentId) + } catch (error) { + // just log it + CORE_LOGGER.warn( + `PolicyServerPassthroughHandler: DDO not found for documentId ${task.policyServerPassthrough.documentId}: ${error.message}` + ) + } // policyServer check const policyServer = new PolicyServer() const policyStatus = await policyServer.passThrough(task.policyServerPassthrough) @@ -41,9 +56,69 @@ export class PolicyServerPassthroughHandler extends Handler { return { stream: Readable.from(policyStatus.message), status: { - httpStatus: 200 + httpStatus: policyStatus.httpStatus + } + } + } + } +} + +export class PolicyServerInitializeHandler extends CommandHandler { + validate(command: PolicyServerInitializeCommand): ValidateParams { + if (!command.policyServer) + return buildInvalidRequestMessage('Invalid Request: missing policyServer field!') + const validation = validateCommandParameters(command, [ + 'documentId', + 'serviceId', + 'consumerAddress' + ]) // all optional? weird + return validation + } + + async handle(task: PolicyServerInitializeCommand): Promise { + const validationResponse = await this.verifyParamsAndRateLimits(task) + if (this.shouldDenyTaskHandling(validationResponse)) { + return validationResponse + } + // resolve DDO first + try { + const ddo = await this.getOceanNode().getDatabase().ddo.retrieve(task.documentId) + if (!ddo) { + return { + stream: null, + status: { httpStatus: 404, error: 'Not found' } + } + } + // policyServer check + const policyServer = new PolicyServer() + const policyStatus = await policyServer.initializePSVerification( + task.documentId, + ddo, + task.serviceId, + task.consumerAddress, + task.policyServer + ) + if (!policyStatus.success) { + return { + stream: null, + status: { + httpStatus: policyStatus.httpStatus, + error: policyStatus.message + } + } + } else { + return { + stream: Readable.from(policyStatus.message), + status: { + httpStatus: policyStatus.httpStatus + } } } + } catch (error) { + return { + stream: null, + status: { httpStatus: 500, error: 'Unknown error: ' + error.message } + } } } } diff --git a/src/components/core/handler/queryHandler.ts b/src/components/core/handler/queryHandler.ts index 15a313bcc..dea8c616c 100644 --- a/src/components/core/handler/queryHandler.ts +++ b/src/components/core/handler/queryHandler.ts @@ -1,4 +1,4 @@ -import { Handler } from './handler.js' +import { CommandHandler } from './handler.js' import { QueryCommand } from '../../../@types/commands.js' import { P2PCommandResponse } from '../../../@types/OceanNode.js' import { Readable } from 'stream' @@ -9,7 +9,7 @@ import { } from '../../httpRoutes/validateCommands.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' -export class QueryHandler extends Handler { +export class QueryHandler extends CommandHandler { validate(command: QueryCommand): ValidateParams { return validateCommandParameters(command, ['query']) } @@ -46,6 +46,17 @@ export class QueryDdoStateHandler extends QueryHandler { } try { const result = await this.getOceanNode().getDatabase().ddoState.search(task.query) + + CORE_LOGGER.debug(`DDO State search result: ${JSON.stringify(result)}`) + + if (result === null) { + CORE_LOGGER.error('Database search returned null') + return { + stream: null, + status: { httpStatus: 500, error: 'Database search failed' } + } + } + return { stream: Readable.from(JSON.stringify(result)), status: { httpStatus: 200 } diff --git a/src/components/core/handler/statusHandler.ts b/src/components/core/handler/statusHandler.ts index fe61963ec..76aeeadd6 100644 --- a/src/components/core/handler/statusHandler.ts +++ b/src/components/core/handler/statusHandler.ts @@ -1,4 +1,4 @@ -import { Handler } from './handler.js' +import { CommandHandler } from './handler.js' import { status } from '../utils/statusHandler.js' import { P2PCommandResponse } from '../../../@types/OceanNode.js' import { DetailedStatusCommand, StatusCommand } from '../../../@types/commands.js' @@ -9,21 +9,18 @@ import { } from '../../httpRoutes/validateCommands.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' -export class StatusHandler extends Handler { +export class StatusHandler extends CommandHandler { validate(command: StatusCommand): ValidateParams { return validateCommandParameters(command, []) } - async handle( - task: StatusCommand, - detailed: boolean = false - ): Promise { + async handle(task: StatusCommand): Promise { const checks = await this.verifyParamsAndRateLimits(task) if (checks.status.httpStatus !== 200 || checks.status.error !== null) { return checks } try { - const statusResult = await status(this.getOceanNode(), task.node, detailed) + const statusResult = await status(this.getOceanNode(), task.node, !!task.detailed) if (!statusResult) { return { stream: null, @@ -50,6 +47,7 @@ export class DetailedStatusHandler extends StatusHandler { } async handle(task: StatusCommand): Promise { - return await super.handle(task, true) + task.detailed = true + return await super.handle(task) } } diff --git a/src/components/core/utils/escrow.ts b/src/components/core/utils/escrow.ts new file mode 100644 index 000000000..1e450c0d9 --- /dev/null +++ b/src/components/core/utils/escrow.ts @@ -0,0 +1,251 @@ +import { Blockchain, getDatatokenDecimals } from '../../../utils/blockchain.js' +import { ethers, parseUnits, formatUnits, BigNumberish } from 'ethers' +import EscrowJson from '@oceanprotocol/contracts/artifacts/contracts/escrow/Escrow.sol/Escrow.json' assert { type: 'json' } +import { EscrowAuthorization, EscrowLock } from '../../../@types/Escrow.js' +import { getOceanArtifactsAdressesByChainId } from '../../../utils/address.js' +import { RPCS } from '../../../@types/blockchain.js' +import { create256Hash } from '../../../utils/crypt.js' +export class Escrow { + private networks: RPCS + private claimDurationTimeout: number + constructor(supportedNetworks: RPCS, claimDurationTimeout: number) { + this.networks = supportedNetworks + this.claimDurationTimeout = claimDurationTimeout + } + + // eslint-disable-next-line require-await + async getEscrowContractAddressForChain(chainId: number): Promise { + const addresses = getOceanArtifactsAdressesByChainId(chainId) + if (addresses && addresses.EnterpriseEscrow) return addresses.EnterpriseEscrow + if (addresses && addresses.Escrow) return addresses.Escrow + return null + } + + getMinLockTime(maxJobDuration: number) { + return maxJobDuration + this.claimDurationTimeout + } + + async getPaymentAmountInWei(cost: number, chain: number, token: string) { + const { rpc, network, chainId, fallbackRPCs } = this.networks[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const provider = blockchain.getProvider() + + const decimalgBigNumber = await getDatatokenDecimals(token, provider) + const decimals = parseInt(decimalgBigNumber.toString()) + + const roundedCost = Number(cost.toFixed(decimals)).toString() + + return parseUnits(roundedCost, decimals).toString() + } + + async getNumberFromWei(wei: string, chain: number, token: string) { + const { rpc, network, chainId, fallbackRPCs } = this.networks[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const provider = blockchain.getProvider() + const decimals = await getDatatokenDecimals(token, provider) + return parseFloat(formatUnits(wei, decimals)) + } + + // eslint-disable-next-line require-await + async getContract( + chainId: number, + signer: ethers.Signer + ): Promise { + const address = await this.getEscrowContractAddressForChain(chainId) + if (!address) return null + return new ethers.Contract(address, EscrowJson.abi, signer) + } + + async getUserAvailableFunds( + chain: number, + payer: string, + token: string + ): Promise { + const { rpc, network, chainId, fallbackRPCs } = this.networks[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const signer = blockchain.getSigner() + const contract = await this.getContract(chainId, signer) + try { + const funds = await contract.getUserFunds(payer, token) + return funds.available + } catch (e) { + return null + } + } + + async getLocks( + chain: number, + token: string, + payer: string, + payee: string + ): Promise { + const { rpc, network, chainId, fallbackRPCs } = this.networks[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const signer = blockchain.getSigner() + const contract = await this.getContract(chainId, signer) + try { + return await contract.getLocks(token, payer, payee) + } catch (e) { + return null + } + } + + async getAuthorizations( + chain: number, + token: string, + payer: string, + payee: string + ): Promise { + const { rpc, network, chainId, fallbackRPCs } = this.networks[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const signer = blockchain.getSigner() + const contract = await this.getContract(chainId, signer) + try { + return await contract.getAuthorizations(token, payer, payee) + } catch (e) { + return null + } + } + + async createLock( + chain: number, + job: string, + token: string, + payer: string, + amount: number, + expiry: BigNumberish + ): Promise { + const jobId = create256Hash(job) + const { rpc, network, chainId, fallbackRPCs } = this.networks[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const signer = blockchain.getSigner() + const contract = await this.getContract(chainId, signer) + if (!contract) throw new Error(`Failed to initialize escrow contract`) + const wei = await this.getPaymentAmountInWei(amount, chain, token) + + const userBalance = await this.getUserAvailableFunds(chain, payer, token) + + if (BigInt(userBalance.toString()) < BigInt(wei)) { + // not enough funds + throw new Error(`User ${payer} does not have enough funds`) + } + const auths = await this.getAuthorizations( + chain, + token, + payer, + await signer.getAddress() + ) + if (!auths || auths.length !== 1) { + throw new Error(`No escrow auths found`) + } + if ( + BigInt(auths[0].currentLockedAmount.toString()) + BigInt(wei) > + BigInt(auths[0].maxLockedAmount.toString()) + ) { + throw new Error(`No valid escrow auths found(will go over limit)`) + } + if (BigInt(auths[0].maxLockSeconds.toString()) < BigInt(expiry)) { + throw new Error(`No valid escrow auths found(maxLockSeconds too low)`) + } + if ( + BigInt(auths[0].currentLocks.toString()) + BigInt(1) > + BigInt(auths[0].maxLockCounts.toString()) + ) { + throw new Error(`No valid escrow auths found(too many active locks)`) + } + try { + const gas = await contract.createLock.estimateGas(jobId, token, payer, wei, expiry) + const gasOptions = await blockchain.getGasOptions(gas, 1.2) + const tx = await contract.createLock(jobId, token, payer, wei, expiry, gasOptions) + return tx.hash + } catch (e) { + console.log(e) + throw new Error(String(e.message)) + } + } + + async claimLock( + chain: number, + job: string, + token: string, + payer: string, + amount: number, + proof: string + ): Promise { + const { rpc, network, chainId, fallbackRPCs } = this.networks[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const signer = blockchain.getSigner() + const contract = await this.getContract(chainId, signer) + const wei = await this.getPaymentAmountInWei(amount, chain, token) + const jobId = create256Hash(job) + if (!contract) return null + try { + const locks = await this.getLocks(chain, token, payer, await signer.getAddress()) + for (const lock of locks) { + if (BigInt(lock.jobId.toString()) === BigInt(jobId)) { + const gas = await contract.claimLockAndWithdraw.estimateGas( + jobId, + token, + payer, + wei, + ethers.toUtf8Bytes(proof) + ) + const gasOptions = await blockchain.getGasOptions(gas, 1.2) + const tx = await contract.claimLockAndWithdraw( + jobId, + token, + payer, + wei, + ethers.toUtf8Bytes(proof), + gasOptions + ) + return tx.hash + } + } + return null + } catch (e) { + throw new Error(String(e.message)) + } + } + + async cancelExpiredLocks( + chain: number, + job: string, + token: string, + payer: string + ): Promise { + const { rpc, network, chainId, fallbackRPCs } = this.networks[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + const signer = blockchain.getSigner() + const jobId = create256Hash(job) + const contract = await this.getContract(chainId, signer) + + if (!contract) return null + try { + const locks = await this.getLocks(chain, token, payer, await signer.getAddress()) + for (const lock of locks) { + if (BigInt(lock.jobId.toString()) === BigInt(jobId)) { + const gas = await contract.cancelExpiredLocks.estimateGas( + jobId, + token, + payer, + await signer.getAddress() + ) + const gasOptions = await blockchain.getGasOptions(gas, 1.2) + const tx = await contract.cancelExpiredLocks( + jobId, + token, + payer, + await signer.getAddress(), + gasOptions + ) + + return tx.hash + } + } + return null + } catch (e) { + throw new Error(String(e.message)) + } + } +} diff --git a/src/components/core/utils/feesHandler.ts b/src/components/core/utils/feesHandler.ts index 39ffa4378..12ebc33f1 100644 --- a/src/components/core/utils/feesHandler.ts +++ b/src/components/core/utils/feesHandler.ts @@ -1,4 +1,4 @@ -import type { ComputeEnvironment } from '../../../@types/C2D.js' +import type { ComputeResourcesPricingInfo } from '../../../@types/C2D/C2D.js' import { JsonRpcApiProvider, ethers, @@ -13,8 +13,7 @@ import { ProviderFeeValidation, ProviderFees } from '../../../@types/Fees' -import { DDO } from '../../../@types/DDO/DDO' -import { Service } from '../../../@types/DDO/Service' +import { Service, DDOManager, Asset } from '@oceanprotocol/ddo-js' import { getDatatokenDecimals, verifyMessage, @@ -28,64 +27,60 @@ import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/template import { fetchEventFromTransaction } from '../../../utils/util.js' import { fetchTransactionReceipt } from './validateOrders.js' +export function getEnvironmentPriceSchemaForResource( + prices: ComputeResourcesPricingInfo[], + id: string +): number { + for (const pr of prices) { + if (pr.id === id) { + return pr.price + } + } + return 0 +} async function calculateProviderFeeAmount( validUntil: number, - computeEnv: ComputeEnvironment + chainId: string // asset?: DDO ): Promise { - const now = new Date().getTime() / 1000 - const seconds = validUntil - now - let providerFeeAmount: number - // we have different ways of computing providerFee - if (computeEnv) { - // it's a compute provider fee - providerFeeAmount = (seconds * parseFloat(String(computeEnv.priceMin))) / 60 - } else { - // it's a download provider fee - // we should get asset file size, and do a proper fee managment according to time - // something like estimated 3 downloads per day - providerFeeAmount = (await getConfiguration()).feeStrategy.feeAmount.amount - } + // it's a download provider fee + // we should get asset file size, and do a proper fee management according to time + // something like estimated 3 downloads per day + const config = await getConfiguration() + const providerFeeAmount = config?.feeStrategy?.feeAmount?.amount || 0 return providerFeeAmount } export async function createProviderFee( - asset: DDO, + asset: Asset, service: Service, - validUntil: number, - computeEnv: ComputeEnvironment, - computeValidUntil: number + validUntil: number ): Promise | undefined { // round for safety validUntil = Math.round(validUntil) - computeValidUntil = Math.round(computeValidUntil) + const providerData = { - environment: computeEnv ? computeEnv.id : null, - timestamp: computeValidUntil || 0, dt: service.datatokenAddress, id: service.id } - const providerWallet = await getProviderWallet(String(asset.chainId)) - + const ddoInstance = DDOManager.getDDOClass(asset) + const { chainId: assetChainId } = ddoInstance.getDDOFields() + const providerWallet = await getProviderWallet(String(assetChainId)) const providerFeeAddress: string = providerWallet.address let providerFeeAmount: number let providerFeeAmountFormatted: BigNumberish - - let providerFeeToken: string - if (computeEnv) { - providerFeeToken = computeEnv.feeToken - } else { - // it's download, take it from config - providerFeeToken = await getProviderFeeToken(asset.chainId) - } + const providerFeeToken = await getProviderFeeToken(assetChainId) if (providerFeeToken?.toLowerCase() === ZeroAddress) { providerFeeAmount = 0 } else { - providerFeeAmount = await calculateProviderFeeAmount(validUntil, computeEnv) + providerFeeAmount = await calculateProviderFeeAmount( + validUntil, + String(asset.chainId) + ) } if (providerFeeToken && providerFeeToken?.toLowerCase() !== ZeroAddress) { - const provider = await getJsonRpcProvider(asset.chainId) + const provider = await getJsonRpcProvider(assetChainId) const decimals = await getDatatokenDecimals(providerFeeToken, provider) providerFeeAmountFormatted = parseUnits(providerFeeAmount.toString(10), decimals) } else { @@ -139,15 +134,15 @@ export async function verifyProviderFees( txId: string, userAddress: string, provider: JsonRpcApiProvider, - service: Service, - computeEnv?: string, - validUntil?: number // only for computeEnv + service: Service ): Promise { + /* given a transaction, check if there is a valid provider fee event + * We could have multiple orders, for multiple assets & providers + */ if (!txId) { CORE_LOGGER.error('Invalid txId') return { isValid: false, - isComputeValid: false, message: 'Invalid txId', validUntil: 0 } @@ -156,21 +151,23 @@ export async function verifyProviderFees( const { chainId } = await provider.getNetwork() const providerWallet = await getProviderWallet(String(chainId)) const contractInterface = new Interface(ERC20Template.abi) + const now = Math.round(new Date().getTime() / 1000) const txReceiptMined = await fetchTransactionReceipt(txId, provider) + const blockMined = await txReceiptMined.getBlock() + if (!txReceiptMined) { const message = `Tx receipt cannot be processed, because tx id ${txId} was not mined.` CORE_LOGGER.error(message) - return { isValid: false, isComputeValid: false, message, validUntil: 0 } + return { isValid: false, message, validUntil: 0 } } - const now = Math.round(new Date().getTime() / 1000) const providerFeesEvents = fetchEventFromTransaction( txReceiptMined, 'ProviderFee', contractInterface ) - let allEventsValid = true + let foundValid = false let providerData for (const event of providerFeesEvents) { const providerAddress = event.args[0]?.toLowerCase() @@ -181,53 +178,36 @@ export async function verifyProviderFees( providerData = JSON.parse(utf) } catch (e) { CORE_LOGGER.error('ProviderFee event JSON parsing failed') - allEventsValid = false continue } if ( - !providerData || - providerAddress !== providerWallet.address?.toLowerCase() || - providerData.id !== service.id || - providerData.dt?.toLowerCase() !== service.datatokenAddress?.toLowerCase() || - !(now < validUntilContract || validUntilContract === 0) + providerData && + providerAddress === providerWallet.address?.toLowerCase() && + providerData.id === service.id && + providerData.dt?.toLowerCase() === service.datatokenAddress?.toLowerCase() ) { - allEventsValid = false - break // Invalid event found, no need to check further + if (validUntilContract !== 0) { + // check if it's expired + if (now - blockMined.timestamp <= validUntilContract) { + foundValid = true + break + } + } else { + foundValid = true + break + } } } - if (!allEventsValid) { - const message = 'Not all ProviderFee events are valid' + if (!foundValid) { + const message = 'No valid providerFee events' CORE_LOGGER.error(message) - return { isValid: false, isComputeValid: false, message, validUntil: 0 } - } - - // Compute environment validation - let isComputeValid = true - if (computeEnv) { - if (providerData.environment !== computeEnv) { - isComputeValid = false - } - if (validUntil > 0 && providerData.timestamp < validUntil) { - isComputeValid = false - } - } - - if (!isComputeValid) { - const message = 'Compute environment validation failed' - CORE_LOGGER.error(message) - return { - isValid: true, - isComputeValid, - message, - validUntil: providerData ? providerData.timestamp : 0 - } + return { isValid: false, message, validUntil: 0 } } return { isValid: true, - isComputeValid, message: 'Validation successful', validUntil: providerData.timestamp } @@ -239,7 +219,7 @@ export async function verifyProviderFees( // equiv to get_provider_fees // *** NOTE: provider.py => get_provider_fees *** export async function createFee( - asset: DDO, + asset: Asset, validUntil: number, computeEnv: string, service: Service @@ -489,9 +469,9 @@ export async function getProviderKey(): Promise { * @returns the token address */ export async function getProviderFeeToken(chainId: number): Promise { - const result = (await getConfiguration()).feeStrategy.feeTokens.filter( - (token: FeeTokens) => Number(token.chain) === chainId - ) + const config = await getConfiguration() + const feeTokens = config?.feeStrategy?.feeTokens || [] + const result = feeTokens.filter((token: FeeTokens) => Number(token.chain) === chainId) if (result.length === 0 && chainId === 8996) { const localOceanToken = getOceanArtifactsAdresses().development.Ocean return localOceanToken || ethers.ZeroAddress @@ -504,7 +484,8 @@ export async function getProviderFeeToken(chainId: number): Promise { * @returns amount */ export async function getProviderFeeAmount(): Promise { - return (await getConfiguration()).feeStrategy.feeAmount.amount + const config = await getConfiguration() + return config?.feeStrategy?.feeAmount?.amount || 0 } // https://github.com/oceanprotocol/contracts/blob/main/contracts/templates/ERC20Template.sol#L65-L74 // https://github.com/oceanprotocol/contracts/blob/main/contracts/templates/ERC20Template.sol#L447-L508 diff --git a/src/components/core/utils/findDdoHandler.ts b/src/components/core/utils/findDdoHandler.ts index 2485d5b73..3bc591f2f 100644 --- a/src/components/core/utils/findDdoHandler.ts +++ b/src/components/core/utils/findDdoHandler.ts @@ -2,7 +2,7 @@ import { OceanP2P, CACHE_TTL } from '../../P2P/index.js' import { FindDDOCommand } from '../../../@types/commands.js' import { LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' import { FindDDOResponse } from '../../../@types/index.js' -import { Service } from '../../../@types/DDO/Service.js' +import { Service } from '@oceanprotocol/ddo-js' import { CORE_LOGGER } from '../../../utils/logging/common.js' import { OceanNode } from '../../../OceanNode.js' import { getConfiguration, hasP2PInterface } from '../../../utils/config.js' diff --git a/src/components/core/utils/nonceHandler.ts b/src/components/core/utils/nonceHandler.ts index bc6fa494f..81cab8602 100644 --- a/src/components/core/utils/nonceHandler.ts +++ b/src/components/core/utils/nonceHandler.ts @@ -2,8 +2,15 @@ import { ReadableString } from '../../P2P/handleProtocolCommands.js' import { P2PCommandResponse } from '../../../@types/OceanNode.js' import { ethers } from 'ethers' import { GENERIC_EMOJIS, LOG_LEVELS_STR } from '../../../utils/logging/Logger.js' -import { DATABASE_LOGGER } from '../../../utils/logging/common.js' +import { CORE_LOGGER, DATABASE_LOGGER } from '../../../utils/logging/common.js' import { AbstractNonceDatabase } from '../../database/BaseDatabase.js' +import { CoreHandlersRegistry } from '../handler/coreHandlersRegistry.js' +import { OceanNode } from '../../../OceanNode.js' +import { PROTOCOL_COMMANDS } from '../../../utils/constants.js' +import { NonceCommand } from '../../../@types/commands.js' +import { streamToString } from '../../../utils/util.js' +import { Readable } from 'node:stream' +import { getConfiguration } from '../../../utils/config.js' export function getDefaultErrorResponse(errorMessage: string): P2PCommandResponse { return { @@ -32,6 +39,18 @@ export type NonceResponse = { error?: string } +// we are doing the nonce stream response transformation in a few places +// so we can use this shortcut function when we just want the final number +export async function getNonceAsNumber(address: string): Promise { + const command: NonceCommand = { command: PROTOCOL_COMMANDS.NONCE, address } + const nonceResponse = await CoreHandlersRegistry.getInstance(OceanNode.getInstance()) + .getHandlerForTask(command) + .handle(command) + if (nonceResponse.stream) { + return await Number(streamToString(nonceResponse.stream as Readable)) + } + return 0 +} // get stored nonce for an address ( 0 if not found) export async function getNonce( db: AbstractNonceDatabase, @@ -111,7 +130,7 @@ export async function checkNonce( previousNonce = existingNonce.nonce } // check if bigger than previous stored one and validate signature - const validate = validateNonceAndSignature( + const validate = await validateNonceAndSignature( nonce, previousNonce, // will return 0 if none exists consumer, @@ -121,8 +140,19 @@ export async function checkNonce( if (validate.valid) { const updateStatus = await updateNonce(db, consumer, nonce) return updateStatus + } else { + // log error level when validation failed + CORE_LOGGER.logMessageWithEmoji( + 'Failure when validating nonce and signature: ' + validate.error, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_ERROR + ) + return { + valid: false, + error: validate.error + } } - return validate // return validation status and possible error msg } catch (err) { DATABASE_LOGGER.logMessageWithEmoji( @@ -147,46 +177,91 @@ export async function checkNonce( * @param message Use this message instead of default String(nonce) * @returns true or false + error message */ -function validateNonceAndSignature( +async function validateNonceAndSignature( nonce: number, existingNonce: number, consumer: string, signature: string, message: string = null -): NonceResponse { - // check if is bigger than previous nonce +): Promise { + if (nonce <= existingNonce) { + return { + valid: false, + error: 'nonce: ' + nonce + ' is not a valid nonce' + } + } - if (nonce > existingNonce) { - // nonce good - // now validate signature - if (!message) message = String(nonce) - const consumerMessage = ethers.solidityPackedKeccak256( - ['bytes'], - [ethers.hexlify(ethers.toUtf8Bytes(message))] - ) - const messageHashBytes = ethers.toBeArray(consumerMessage) + if (!message) message = String(nonce) + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + + // Try EOA signature validation + try { const addressFromHashSignature = ethers.verifyMessage(consumerMessage, signature) const addressFromBytesSignature = ethers.verifyMessage(messageHashBytes, signature) - if ( ethers.getAddress(addressFromHashSignature)?.toLowerCase() === ethers.getAddress(consumer)?.toLowerCase() || ethers.getAddress(addressFromBytesSignature)?.toLowerCase() === ethers.getAddress(consumer)?.toLowerCase() ) { - // update nonce on DB, return OK - return { - valid: true - } + return { valid: true } } - return { - valid: false, - error: 'consumer address and nonce signature mismatch' + } catch (error) { + // Continue to smart account check + } + + // Try ERC-1271 (smart account) validation + try { + const config = await getConfiguration() + const firstChainId = Object.keys(config?.supportedNetworks || {})[0] + if (firstChainId) { + const provider = new ethers.JsonRpcProvider( + config.supportedNetworks[firstChainId].rpc + ) + + // Try custom hash format (for backward compatibility) + if (await isERC1271Valid(consumer, consumerMessage, signature, provider)) { + return { valid: true } + } + + // Try EIP-191 prefixed hash (standard for smart wallets) + const eip191Hash = ethers.hashMessage(message) + if (await isERC1271Valid(consumer, eip191Hash, signature, provider)) { + return { valid: true } + } } + } catch (error) { + // Smart account validation failed } + return { valid: false, - error: 'nonce: ' + nonce + ' is not a valid nonce' + error: 'consumer address and nonce signature mismatch' + } +} + +// Smart account validation +async function isERC1271Valid( + address: string, + hash: string | Uint8Array, + signature: string, + provider: ethers.Provider +): Promise { + try { + const contract = new ethers.Contract( + address, + ['function isValidSignature(bytes32, bytes) view returns (bytes4)'], + provider + ) + const hashToUse = typeof hash === 'string' ? hash : ethers.hexlify(hash) + const result = await contract.isValidSignature(hashToUse, signature) + return result === '0x1626ba7e' // ERC-1271 magic value + } catch { + return false } } diff --git a/src/components/core/utils/statusHandler.ts b/src/components/core/utils/statusHandler.ts index a7105442e..c07c4e046 100644 --- a/src/components/core/utils/statusHandler.ts +++ b/src/components/core/utils/statusHandler.ts @@ -7,35 +7,20 @@ import { StorageTypes, OceanNodeConfig } from '../../../@types/OceanNode.js' -import { existsEnvironmentVariable, getConfiguration } from '../../../utils/index.js' -import { ENVIRONMENT_VARIABLES } from '../../../utils/constants.js' +import { getConfiguration } from '../../../utils/index.js' import { CORE_LOGGER } from '../../../utils/logging/common.js' import { OceanNode } from '../../../OceanNode.js' -import { isAddress } from 'ethers' import { typesenseSchemas } from '../../database/TypesenseSchemas.js' import { SupportedNetwork } from '../../../@types/blockchain.js' +import { getAdminAddresses } from '../../../utils/auth.js' +import HumanHasher from 'humanhash' -function getAdminAddresses(config: OceanNodeConfig) { - const validAddresses = [] - if (config.allowedAdmins && config.allowedAdmins.length > 0) { - for (const admin of config.allowedAdmins) { - if (isAddress(admin) === true) { - validAddresses.push(admin) - } - } - if (validAddresses.length === 0) { - CORE_LOGGER.log( - LOG_LEVELS_STR.LEVEL_ERROR, - `Invalid format for ETH address from ALLOWED ADMINS.` - ) - } +function getSupportedStorageTypes(config: OceanNodeConfig): StorageTypes { + return { + url: true, + arwave: !!config.arweaveGateway, + ipfs: !!config.ipfsGateway } - return validAddresses -} -const supportedStorageTypes: StorageTypes = { - url: true, - arwave: existsEnvironmentVariable(ENVIRONMENT_VARIABLES.ARWEAVE_GATEWAY), - ipfs: existsEnvironmentVariable(ENVIRONMENT_VARIABLES.IPFS_GATEWAY) } // platform information @@ -123,20 +108,22 @@ export async function status( // no previous status? if (!nodeStatus) { + const publicKeyHex = Buffer.from(config.keys.publicKey).toString('hex') nodeStatus = { id: nodeId && nodeId !== undefined ? nodeId : config.keys.peerId.toString(), // get current node ID - publicKey: Buffer.from(config.keys.publicKey).toString('hex'), + publicKey: publicKeyHex, + friendlyName: new HumanHasher().humanize(publicKeyHex), address: config.keys.ethAddress, version: process.env.npm_package_version, http: config.hasHttp, p2p: config.hasP2P, provider: [], indexer: [], - supportedStorage: supportedStorageTypes, + supportedStorage: getSupportedStorageTypes(config), // uptime: process.uptime(), platform: platformInfo, codeHash: config.codeHash, - allowedAdmins: getAdminAddresses(config) + allowedAdmins: await getAdminAddresses() } } // need to update at least block info if available @@ -151,7 +138,16 @@ export async function status( // depends on request if (detailed) { - nodeStatus.c2dClusters = config.c2dClusters + nodeStatus.c2dClusters = [] + const engines = await oceanNode.getC2DEngines().getAllEngines() + for (const engine of engines) { + const type = await engine.getC2DType() + nodeStatus.c2dClusters.push({ + type, + hash: await engine.getC2DConfig().hash, + environments: await engine.getComputeEnvironments() + }) + } nodeStatus.supportedSchemas = typesenseSchemas.ddoSchemas } return nodeStatus diff --git a/src/components/core/utils/validateDdoHandler.ts b/src/components/core/utils/validateDdoHandler.ts index 891b73121..935070551 100644 --- a/src/components/core/utils/validateDdoHandler.ts +++ b/src/components/core/utils/validateDdoHandler.ts @@ -1,155 +1,7 @@ -import { fileURLToPath } from 'url' -import { dirname, resolve } from 'path' -// @ts-ignore -import rdf from '@zazuko/env-node' -import SHACLValidator from 'rdf-validate-shacl' -import formats from '@rdfjs/formats-common' -import { fromRdf } from 'rdf-literal' -import { createHash } from 'crypto' -import { ethers, getAddress } from 'ethers' +import { ethers } from 'ethers' import { CORE_LOGGER } from '../../../utils/logging/common.js' import { create256Hash } from '../../../utils/crypt.js' import { getProviderWallet } from './feesHandler.js' -import { Readable } from 'stream' - -const CURRENT_VERSION = '4.7.0' -const ALLOWED_VERSIONS = ['4.1.0', '4.3.0', '4.5.0', '4.7.0'] - -export function getSchema(version: string = CURRENT_VERSION): string { - if (!ALLOWED_VERSIONS.includes(version)) { - CORE_LOGGER.logMessage(`Can't find schema ${version}`, true) - return - } - const path = `../../../../schemas/${version}.ttl` - // Use fileURLToPath to convert the URL to a file path - const currentModulePath = fileURLToPath(import.meta.url) - - // Use dirname to get the directory name - const currentDirectory = dirname(currentModulePath) - const schemaFilePath = resolve(currentDirectory, path) - if (!schemaFilePath) { - CORE_LOGGER.logMessage(`Can't find schema ${version}`, true) - return - } - return schemaFilePath -} - -/* function isIsoFormat(dateString: string): boolean { - const isoDateRegex = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z)?$/ - return isoDateRegex.test(dateString) -} -*/ - -export function makeDid(nftAddress: string, chainId: string): string { - return ( - 'did:op:' + - createHash('sha256') - .update(getAddress(nftAddress) + chainId) - .digest('hex') - ) -} - -export async function validateObject( - obj: Record, - chainId: number, - nftAddress: string -): Promise<[boolean, Record]> { - const ddoCopy = JSON.parse(JSON.stringify(obj)) - ddoCopy['@type'] = 'DDO' - - const extraErrors: Record = {} - // overwrite context - ddoCopy['@context'] = { - '@vocab': 'http://schema.org/' - } - /* if (!('@context' in ddoCopy) || !Array.isArray(ddoCopy['@context'])) { - ddoCopy['@context'] = { - '@vocab': 'http://schema.org/' - } - } - if (!('@vocab' in ddoCopy['@context'])) { - ddoCopy['@context']['@vocab'] = 'http://schema.org/' - } - */ - /* if (!('metadata' in obj)) { - if (!('metadata' in extraErrors)) extraErrors.metadata = [] - extraErrors.metadata.push('Metadata is missing.') - } - if (obj.metadata && !('created' in obj.metadata)) { - if (!('created' in extraErrors)) extraErrors.created = [] - extraErrors.created.push('Created is missing or invalid.') - } - if (obj.metadata && !('updated' in obj.metadata)) { - if (!('updated' in extraErrors)) extraErrors.updated = [] - extraErrors.updated.push('Metadata is missing or invalid.') - } - ;['created', 'updated'].forEach((attr) => { - if ('metadata' in obj && attr in obj.metadata && !isIsoFormat(obj.metadata[attr])) { - if (!('metadata' in extraErrors)) extraErrors.metadata = [] - extraErrors.metadata.push(`${attr} is not in ISO format.`) - } - }) - */ - if (!chainId) { - if (!('chainId' in extraErrors)) extraErrors.chainId = [] - extraErrors.chainId.push('chainId is missing or invalid.') - } - - try { - getAddress(nftAddress) - } catch (err) { - if (!('nftAddress' in extraErrors)) extraErrors.nftAddress = [] - extraErrors.nftAddress.push('nftAddress is missing or invalid.') - CORE_LOGGER.logMessage(`Error when retrieving address ${nftAddress}: ${err}`, true) - } - - if (!(makeDid(nftAddress, chainId.toString(10)) === obj.id)) { - if (!('id' in extraErrors)) extraErrors.id = [] - extraErrors.id.push('did is not valid for chain Id and nft address') - } - const version = ddoCopy.version || CURRENT_VERSION - const schemaFilePath = getSchema(version) - CORE_LOGGER.logMessage(`Using ` + schemaFilePath, true) - - const shapes = await rdf.dataset().import(rdf.fromFile(schemaFilePath)) - const dataStream = Readable.from(JSON.stringify(ddoCopy)) - const output = formats.parsers.import('application/ld+json', dataStream) - const data = await rdf.dataset().import(output) - const validator = new SHACLValidator(shapes, { factory: rdf }) - const report = await validator.validate(data) - if (report.conforms) { - CORE_LOGGER.logMessage(`Valid object: ` + JSON.stringify(obj), true) - return [true, {}] - } - for (const result of report.results) { - // See https://www.w3.org/TR/shacl/#results-validation-result for details - // about each property - const key = result.path.value.replace('http://schema.org/', '') - if (!(key in extraErrors)) extraErrors[key] = [] - extraErrors[key].push(fromRdf(result.message[0])) - } - extraErrors.fullReport = await report.dataset.serialize({ - format: 'application/ld+json' - }) - CORE_LOGGER.logMessage(`Failed to validate DDO: ` + JSON.stringify(obj), true) - CORE_LOGGER.logMessage(JSON.stringify(extraErrors), true) - return [false, extraErrors] -} - -export function isRemoteDDO(ddo: any): boolean { - let keys - try { - keys = Object.keys(ddo) - } catch (e) { - return false - } - - if (keys.length === 1 && keys[0] === 'remote') { - return true - } - - return false -} export async function getValidationSignature(ddo: string): Promise { try { @@ -172,3 +24,18 @@ export async function getValidationSignature(ddo: string): Promise { return { hash: '', publicKey: '', r: '', s: '', v: '' } } } + +export function isRemoteDDO(ddo: any): boolean { + let keys + try { + keys = Object.keys(ddo) + } catch (e) { + return false + } + + if (keys.length === 1 && keys[0] === 'remote') { + return true + } + + return false +} diff --git a/src/components/core/utils/validateOrders.ts b/src/components/core/utils/validateOrders.ts index 146819732..8f3ac3570 100644 --- a/src/components/core/utils/validateOrders.ts +++ b/src/components/core/utils/validateOrders.ts @@ -134,6 +134,9 @@ export async function validateOrderTransaction( const currentTimestamp = Math.floor(Date.now() / 1000) const timeElapsed = currentTimestamp - eventTimestamp + CORE_LOGGER.logMessage( + `serviceTimeout ${serviceTimeout} vs. timeElapsed ${timeElapsed} when validating order.` + ) if (serviceTimeout !== 0 && timeElapsed > serviceTimeout) { return { diff --git a/src/components/database/AuthTokenDatabase.ts b/src/components/database/AuthTokenDatabase.ts new file mode 100644 index 000000000..159506124 --- /dev/null +++ b/src/components/database/AuthTokenDatabase.ts @@ -0,0 +1,57 @@ +import { DATABASE_LOGGER } from '../../utils/logging/common.js' +import { AbstractDatabase } from './BaseDatabase.js' +import { OceanNodeDBConfig } from '../../@types/OceanNode.js' +import path from 'path' +import * as fs from 'fs' +import { SQLiteAuthToken } from './sqliteAuthToken.js' + +export interface AuthToken { + token: string + address: string + created: Date + validUntil: Date | null + isValid: boolean +} + +export class AuthTokenDatabase extends AbstractDatabase { + private provider: SQLiteAuthToken + + private constructor(config: OceanNodeDBConfig, provider?: SQLiteAuthToken) { + super(config) + this.provider = provider + } + + static async create(config: OceanNodeDBConfig): Promise { + DATABASE_LOGGER.info('Creating AuthTokenDatabase with SQLite') + const dbDir = path.dirname('databases/authTokenDatabase.sqlite') + if (!fs.existsSync(dbDir)) { + fs.mkdirSync(dbDir, { recursive: true }) + } + const provider = new SQLiteAuthToken('databases/authTokenDatabase.sqlite') + await provider.createTable() + return new AuthTokenDatabase(config, provider) + } + + async createToken( + token: string, + address: string, + validUntil: number | null = null, + createdAt: number + ): Promise { + await this.provider.createToken(token, address, createdAt, validUntil) + return token + } + + async validateToken(token: string): Promise { + const tokenEntry = await this.provider.validateTokenEntry(token) + if (!tokenEntry) { + return null + } + + return tokenEntry + } + + async invalidateToken(token: string): Promise { + await this.provider.invalidateTokenEntry(token) + } +} diff --git a/src/components/database/BaseDatabase.ts b/src/components/database/BaseDatabase.ts index 637b82aec..3fddb074f 100644 --- a/src/components/database/BaseDatabase.ts +++ b/src/components/database/BaseDatabase.ts @@ -5,7 +5,7 @@ import { DATABASE_LOGGER } from '../../utils/logging/common.js' import { ElasticsearchSchema } from './ElasticSchemas.js' import { TypesenseSchema } from './TypesenseSchemas.js' -export abstract class AbstractNonceDatabase { +export abstract class AbstractDatabase { protected config: OceanNodeDBConfig protected schema: TypesenseSchema @@ -13,7 +13,8 @@ export abstract class AbstractNonceDatabase { this.config = config this.schema = schema } - +} +export abstract class AbstractNonceDatabase extends AbstractDatabase { abstract create(address: string, nonce: number): Promise abstract retrieve(address: string): Promise abstract update(address: string, nonce: number): Promise @@ -30,30 +31,14 @@ export abstract class AbstractNonceDatabase { } } -export abstract class AbstractIndexerDatabase { - protected config: OceanNodeDBConfig - protected schema: TypesenseSchema - - constructor(config: OceanNodeDBConfig, schema?: TypesenseSchema) { - this.config = config - this.schema = schema - } - +export abstract class AbstractIndexerDatabase extends AbstractDatabase { abstract create(network: number, lastIndexedBlock: number): Promise abstract retrieve(network: number): Promise abstract update(network: number, lastIndexedBlock: number): Promise abstract delete(network: number): Promise } -export abstract class AbstractLogDatabase { - protected config: OceanNodeDBConfig - protected schema: TypesenseSchema - - constructor(config: OceanNodeDBConfig, schema?: TypesenseSchema) { - this.config = config - this.schema = schema - } - +export abstract class AbstractLogDatabase extends AbstractDatabase { abstract insertLog(logEntry: Record): Promise abstract retrieveLog(id: string): Promise | null> abstract retrieveMultipleLogs( @@ -63,22 +48,14 @@ export abstract class AbstractLogDatabase { moduleName?: string, level?: string, page?: number - ): Promise[] | null> + ): Promise[]> abstract delete(logId: string): Promise abstract deleteOldLogs(): Promise abstract getLogsCount(): Promise } -export abstract class AbstractDdoStateDatabase { - protected config: OceanNodeDBConfig - protected schema: TypesenseSchema - - constructor(config: OceanNodeDBConfig, schema?: TypesenseSchema) { - this.config = config - this.schema = schema - } - +export abstract class AbstractDdoStateDatabase extends AbstractDatabase { abstract create( chainId: number, did: string, @@ -165,8 +142,6 @@ export abstract class AbstractDdoDatabase { return (schema as TypesenseSchema).name !== undefined } - abstract validateDDO(ddo: Record): Promise - abstract search( query: Record, maxResultsPerPage?: number, diff --git a/src/components/database/C2DDatabase.ts b/src/components/database/C2DDatabase.ts new file mode 100644 index 000000000..20ac3d7e5 --- /dev/null +++ b/src/components/database/C2DDatabase.ts @@ -0,0 +1,154 @@ +import path from 'path' +import fs from 'fs' +import { ComputeEnvironment, DBComputeJob } from '../../@types/C2D/C2D.js' +import { SQLiteCompute } from './sqliteCompute.js' +import { DATABASE_LOGGER } from '../../utils/logging/common.js' +import { OceanNodeDBConfig } from '../../@types/OceanNode.js' +import { TypesenseSchema } from './TypesenseSchemas.js' +import { AbstractDatabase } from './BaseDatabase.js' +import { OceanNode } from '../../OceanNode.js' +import { getDatabase } from '../../utils/database.js' +import { getConfiguration } from '../../utils/index.js' +import { generateUniqueID } from '../core/compute/utils.js' +export class C2DDatabase extends AbstractDatabase { + private provider: SQLiteCompute + + constructor(config: OceanNodeDBConfig, schema: TypesenseSchema) { + super(config, schema) + return (async (): Promise => { + // Fall back to SQLite + DATABASE_LOGGER.info('Creating C2DDatabase with SQLite') + + // Ensure the directory exists before instantiating SQLiteProvider + const dbDir = path.dirname('databases/c2dDatabase.sqlite') + if (!fs.existsSync(dbDir)) { + fs.mkdirSync(dbDir, { recursive: true }) + } + this.provider = new SQLiteCompute('databases/c2dDatabase.sqlite') + await this.provider.createTable() + + return this + })() as unknown as C2DDatabase + } + + async newJob(job: DBComputeJob): Promise { + if (!job.jobId) job.jobId = generateUniqueID(job) + const jobId = await this.provider.newJob(job) + return jobId + } + + async getJob( + jobId?: string, + agreementId?: string, + owner?: string + ): Promise { + const jobs = await this.provider.getJob(jobId, agreementId, owner) + return jobs + } + + async updateJob(job: DBComputeJob): Promise { + let updated = 0 + const previouslySaved: DBComputeJob[] = await this.getJob(job.jobId) + if (previouslySaved.length === 1) { + previouslySaved[0] = job + updated = await this.provider.updateJob(previouslySaved[0]) + if (!updated) { + DATABASE_LOGGER.error(`Unable to update job: ${job.jobId}. No rows affected!`) + } + } else { + DATABASE_LOGGER.error( + `Unable to update job: ${job.jobId}. It seems this jobID does not exist!` + ) + } + return updated + } + + async getRunningJobs(engine?: string, environment?: string): Promise { + return await this.provider.getRunningJobs(engine, environment) + } + + async deleteJob(jobId: string): Promise { + return await this.provider.deleteJob(jobId) + } + + async getFinishedJobs(environments?: string[]): Promise { + return await this.provider.getFinishedJobs(environments) + } + + async getJobs( + environments?: string[], + fromTimestamp?: string, + consumerAddrs?: string[] + ): Promise { + return await this.provider.getJobs(environments, fromTimestamp, consumerAddrs) + } + + /** + * + * @param environment compute environment to check for + * + * All compute engines have compute environments, + * and each compute environment specifies how long the output produced by + * a job is held by the node, before being deleted. + * When a job expiry is overdue, the node will delete all storage used by that job, + * and also delete the job record from the database + * @returns array of eexpired jobs + */ + async cleanStorageExpiredJobs(): Promise { + const config = await getConfiguration(true) + const allEngines = await OceanNode.getInstance( + config, + await getDatabase() + ).getC2DEngines().engines + + let cleaned = 0 + for (const engine of allEngines) { + const allEnvironments = await engine.getComputeEnvironments() + for (const computeEnvironment of allEnvironments) { + const finishedOrExpired: DBComputeJob[] = await this.provider.getFinishedJobs([ + computeEnvironment.id + ]) + for (const job of finishedOrExpired) { + if ( + computeEnvironment && + computeEnvironment.storageExpiry > Date.now() / 1000 + ) { + if (await engine.cleanupExpiredStorage(job)) { + cleaned++ + } + } + } + } + cleaned += await this.cleanOrphanJobs(allEnvironments) + } + return cleaned + } + + /** + * Clean orphan jobs. Stuff left on DB without existing environments associated + * @param existingEnvironments + * @returns number of orphans + */ + async cleanOrphanJobs(existingEnvironments: ComputeEnvironment[]) { + const c2dDatabase = await (await getDatabase()).c2d + let cleaned = 0 + + const envIds: string[] = existingEnvironments + .filter((env: any) => env && typeof env.id === 'string') + .map((env: any) => env.id) + + // Get all finished jobs from DB, not just from known environments + const allJobs: DBComputeJob[] = await c2dDatabase.getFinishedJobs() + + for (const job of allJobs) { + if (!job.environment || !envIds.includes(job.environment)) { + if (await c2dDatabase.deleteJob(job.jobId)) { + cleaned++ + } + } + } + + DATABASE_LOGGER.info('Cleaned ' + cleaned + ' orphan C2D jobs') + return cleaned + } +} diff --git a/src/components/database/DatabaseFactory.ts b/src/components/database/DatabaseFactory.ts index fc1a85b56..e83549f9d 100644 --- a/src/components/database/DatabaseFactory.ts +++ b/src/components/database/DatabaseFactory.ts @@ -29,7 +29,10 @@ import { TypesenseMetadataQuery } from './TypesenseMetadataQuery.js' import { IMetadataQuery } from '../../@types/DDO/IMetadataQuery.js' import { ElasticSearchMetadataQuery } from './ElasticSearchMetadataQuery.js' import { DB_TYPES } from '../../utils/index.js' +import { C2DDatabase } from './C2DDatabase.js' import { SQLLiteNonceDatabase } from './SQLLiteNonceDatabase.js' +import { SQLLiteConfigDatabase } from './SQLLiteConfigDatabase.js' +import { AuthTokenDatabase } from './AuthTokenDatabase.js' export class DatabaseFactory { private static databaseMap = { @@ -85,6 +88,16 @@ export class DatabaseFactory { return this.createDatabase('ddo', config) } + static async createC2DDatabase(config: OceanNodeDBConfig): Promise { + return await new C2DDatabase(config, typesenseSchemas.c2dSchemas) + } + + static async createAuthTokenDatabase( + config: OceanNodeDBConfig + ): Promise { + return await AuthTokenDatabase.create(config) + } + static createIndexerDatabase( config: OceanNodeDBConfig ): Promise { @@ -112,4 +125,8 @@ export class DatabaseFactory { static createMetadataQuery(config: OceanNodeDBConfig): Promise { return this.createDatabase('metadataQuery', config) } + + static async createConfigDatabase(): Promise { + return await new SQLLiteConfigDatabase() + } } diff --git a/src/components/database/ElasticSearchDatabase.ts b/src/components/database/ElasticSearchDatabase.ts index 87bf8d807..2d69e8602 100644 --- a/src/components/database/ElasticSearchDatabase.ts +++ b/src/components/database/ElasticSearchDatabase.ts @@ -6,12 +6,14 @@ import { AbstractLogDatabase, AbstractOrderDatabase } from './BaseDatabase.js' -import { createElasticsearchClient } from './ElasticsearchConfigHelper.js' +import { createElasticsearchClientWithRetry } from './ElasticsearchConfigHelper.js' import { OceanNodeDBConfig } from '../../@types' import { ElasticsearchSchema } from './ElasticSchemas.js' import { DATABASE_LOGGER } from '../../utils/logging/common.js' import { GENERIC_EMOJIS, LOG_LEVELS_STR } from '../../utils/logging/Logger.js' -import { validateObject } from '../core/utils/validateDdoHandler.js' + +import { DDOManager } from '@oceanprotocol/ddo-js' +import { validateDDO } from '../../utils/asset.js' export class ElasticsearchIndexerDatabase extends AbstractIndexerDatabase { private client: Client @@ -19,10 +21,13 @@ export class ElasticsearchIndexerDatabase extends AbstractIndexerDatabase { constructor(config: OceanNodeDBConfig) { super(config) - this.client = new Client({ node: config.url }) this.index = 'indexer' - this.initializeIndex() + return (async (): Promise => { + this.client = await createElasticsearchClientWithRetry(config) + await this.initializeIndex() + return this + })() as unknown as ElasticsearchIndexerDatabase } private async initializeIndex() { @@ -139,16 +144,20 @@ export class ElasticsearchIndexerDatabase extends AbstractIndexerDatabase { } } } + export class ElasticsearchDdoStateDatabase extends AbstractDdoStateDatabase { private client: Client private index: string constructor(config: OceanNodeDBConfig) { super(config) - this.client = new Client({ node: config.url }) this.index = 'ddo_state' - this.initializeIndex() + return (async (): Promise => { + this.client = await createElasticsearchClientWithRetry(config) + await this.initializeIndex() + return this + })() as unknown as ElasticsearchDdoStateDatabase } private async initializeIndex() { @@ -228,12 +237,9 @@ export class ElasticsearchDdoStateDatabase extends AbstractDdoStateDatabase { try { const result = await this.client.search({ index: this.index, - query: { - match: { - [query.query_by]: query.q - } - } + query }) + console.log('Query result: ', result) return result.hits.hits.map((hit: any) => { return normalizeDocumentId(hit._source, hit._id) }) @@ -311,12 +317,17 @@ export class ElasticsearchDdoStateDatabase extends AbstractDdoStateDatabase { } } } + export class ElasticsearchOrderDatabase extends AbstractOrderDatabase { private provider: Client constructor(config: OceanNodeDBConfig, schema: ElasticsearchSchema) { super(config, schema) - this.provider = createElasticsearchClient(config) + + return (async (): Promise => { + this.provider = await createElasticsearchClientWithRetry(config) + return this + })() as unknown as ElasticsearchOrderDatabase } getSchema(): ElasticsearchSchema { @@ -377,6 +388,7 @@ export class ElasticsearchOrderDatabase extends AbstractOrderDatabase { did, startOrderId } + await this.provider.index({ index: this.getSchema().index, id: orderId, @@ -462,7 +474,11 @@ export class ElasticsearchDdoDatabase extends AbstractDdoDatabase { constructor(config: OceanNodeDBConfig, schemas: ElasticsearchSchema[]) { super(config, schemas) - this.client = createElasticsearchClient(config) + + return (async (): Promise => { + this.client = await createElasticsearchClientWithRetry(config) + return this + })() as unknown as ElasticsearchDdoDatabase } getSchemas(): ElasticsearchSchema[] { @@ -471,10 +487,15 @@ export class ElasticsearchDdoDatabase extends AbstractDdoDatabase { getDDOSchema(ddo: Record) { let schemaName: string | undefined - if (ddo.nft?.state !== 0) { - schemaName = 'op_ddo_short' - } else if (ddo.version) { + const ddoInstance = DDOManager.getDDOClass(ddo) + const ddoData = ddoInstance.getDDOData() + if (ddoData.version) { schemaName = `op_ddo_v${ddo.version}` + } else if ( + 'indexedMetadata' in ddoData && + ddoData?.indexedMetadata?.nft?.state !== 0 + ) { + schemaName = 'op_ddo_short' } const schema = this.getSchemas().find((s) => s.index === schemaName) DATABASE_LOGGER.logMessageWithEmoji( @@ -486,32 +507,6 @@ export class ElasticsearchDdoDatabase extends AbstractDdoDatabase { return schema } - async validateDDO(ddo: Record): Promise { - if (ddo.nft?.state !== 0) { - return true - } else { - const validation = await validateObject(ddo, ddo.chainId, ddo.nftAddress) - if (validation[0] === true) { - DATABASE_LOGGER.logMessageWithEmoji( - `Validation of DDO with did: ${ddo.id} has passed`, - true, - GENERIC_EMOJIS.EMOJI_OCEAN_WAVE, - LOG_LEVELS_STR.LEVEL_INFO - ) - return true - } else { - DATABASE_LOGGER.logMessageWithEmoji( - `Validation of DDO with schema version ${ddo.version} failed with errors: ` + - JSON.stringify(validation[1]), - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return false - } - } - } - async search(query: Record): Promise { const results = [] const maxPerPage = query.size || 100 @@ -529,10 +524,18 @@ export class ElasticsearchDdoDatabase extends AbstractDdoDatabase { } }) if (response.hits?.hits.length > 0) { - const nomalizedResponse = response.hits.hits.map((hit: any) => { - return normalizeDocumentId(hit._source, hit._id) + const totalHits = + typeof response.hits.total === 'number' + ? response.hits.total + : response.hits.total?.value || 0 + + const normalizedResults = response.hits.hits.map((hit: any) => + normalizeDocumentId(hit._source, hit._id) + ) + results.push({ + results: normalizedResults, + totalResults: totalHits }) - results.push(nomalizedResponse) } } catch (error) { const schemaErrorMsg = `Error for schema ${query.index}: ${error.message}` @@ -555,10 +558,18 @@ export class ElasticsearchDdoDatabase extends AbstractDdoDatabase { } }) if (response.hits?.hits.length > 0) { - const nomalizedResponse = response.hits.hits.map((hit: any) => { - return normalizeDocumentId(hit._source, hit._id) + const totalHits = + typeof response.hits.total === 'number' + ? response.hits.total + : response.hits.total?.value || 0 + + const normalizedResults = response.hits.hits.map((hit: any) => + normalizeDocumentId(hit._source, hit._id) + ) + results.push({ + results: normalizedResults, + totalResults: totalHits }) - results.push(nomalizedResponse) } } catch (error) { const schemaErrorMsg = `Error for schema ${schema.index}: ${error.message}` @@ -582,7 +593,10 @@ export class ElasticsearchDdoDatabase extends AbstractDdoDatabase { throw new Error(`Schema for version ${ddo.version} not found`) } try { - const validation = await this.validateDDO(ddo) + // avoid issue with nft fields, due to schema + if (ddo?.indexedMetadata?.nft) delete ddo.nft + const validation = await validateDDO(ddo) + if (validation === true) { const response = await this.client.index({ index: schema.index, @@ -650,7 +664,9 @@ export class ElasticsearchDdoDatabase extends AbstractDdoDatabase { throw new Error(`Schema for version ${ddo.version} not found`) } try { - const validation = await this.validateDDO(ddo) + // avoid issue with nft fields, due to schema + if (ddo?.indexedMetadata?.nft) delete ddo.nft + const validation = await validateDDO(ddo) if (validation === true) { const response: any = await this.client.update({ index: schema.index, @@ -768,10 +784,13 @@ export class ElasticsearchLogDatabase extends AbstractLogDatabase { constructor(config: OceanNodeDBConfig) { super(config) - this.client = new Client({ node: config.url }) this.index = 'log' - this.initializeIndex() + return (async (): Promise => { + this.client = await createElasticsearchClientWithRetry(config) + await this.initializeIndex() + return this + })() as unknown as ElasticsearchLogDatabase } private async initializeIndex() { @@ -849,7 +868,7 @@ export class ElasticsearchLogDatabase extends AbstractLogDatabase { moduleName?: string, level?: string, page?: number - ): Promise[] | null> { + ): Promise[]> { try { const filterConditions: any = { bool: { @@ -888,10 +907,6 @@ export class ElasticsearchLogDatabase extends AbstractLogDatabase { from }) - console.log('logs results:', result) - console.log('logs results hits:', result.hits) - console.log('logs results hits hits:', result.hits.hits) - return result.hits.hits.map((hit: any) => { return normalizeDocumentId(hit._source, hit._id) }) @@ -903,7 +918,7 @@ export class ElasticsearchLogDatabase extends AbstractLogDatabase { GENERIC_EMOJIS.EMOJI_CROSS_MARK, LOG_LEVELS_STR.LEVEL_ERROR ) - return null + return [] } } @@ -943,13 +958,12 @@ export class ElasticsearchLogDatabase extends AbstractLogDatabase { try { const oldLogs = await this.retrieveMultipleLogs(new Date(0), deleteBeforeTime, 200) - if (oldLogs) { - for (const log of oldLogs) { - if (log.id) { - await this.delete(log.id) - } + for (const log of oldLogs) { + if (log.id) { + await this.delete(log.id) } } + return oldLogs ? oldLogs.length : 0 } catch (error) { DATABASE_LOGGER.logMessageWithEmoji( diff --git a/src/components/database/ElasticSearchDdoStateQuery.ts b/src/components/database/ElasticSearchDdoStateQuery.ts index 16751db21..324d2f85d 100644 --- a/src/components/database/ElasticSearchDdoStateQuery.ts +++ b/src/components/database/ElasticSearchDdoStateQuery.ts @@ -6,7 +6,7 @@ export class ElasticSearchDdoStateQuery implements IDdoStateQuery { if (did) { query = { - match: { + term: { did } } @@ -14,7 +14,7 @@ export class ElasticSearchDdoStateQuery implements IDdoStateQuery { if (nft) { query = { - match: { + term: { nft } } @@ -22,7 +22,7 @@ export class ElasticSearchDdoStateQuery implements IDdoStateQuery { if (txId) { query = { - match: { + term: { txId } } diff --git a/src/components/database/ElasticSearchMetadataQuery.ts b/src/components/database/ElasticSearchMetadataQuery.ts index 5cfc74f2b..1c1ca86ac 100644 --- a/src/components/database/ElasticSearchMetadataQuery.ts +++ b/src/components/database/ElasticSearchMetadataQuery.ts @@ -48,6 +48,6 @@ export class ElasticSearchMetadataQuery implements IMetadataQuery { } private isElasticSearchQuery(query: any): boolean { - return query && query.query && query.query.bool !== undefined + return query && query.query } } diff --git a/src/components/database/ElasticsearchConfigHelper.ts b/src/components/database/ElasticsearchConfigHelper.ts index 1eab4e00d..9838e4ff1 100644 --- a/src/components/database/ElasticsearchConfigHelper.ts +++ b/src/components/database/ElasticsearchConfigHelper.ts @@ -1,12 +1,371 @@ import { Client } from '@elastic/elasticsearch' import { OceanNodeDBConfig } from '../../@types' +import { DATABASE_LOGGER } from '../../utils/logging/common.js' +import { GENERIC_EMOJIS, LOG_LEVELS_STR } from '../../utils/logging/Logger.js' +import { DB_TYPES } from '../../utils/constants.js' -export function createElasticsearchClient(config: OceanNodeDBConfig): Client { - return new Client({ - node: config.url, - auth: - config.username && config.password - ? { username: config.username, password: config.password } - : undefined - }) +export interface ElasticsearchRetryConfig { + requestTimeout?: number + pingTimeout?: number + resurrectStrategy?: 'ping' | 'optimistic' | 'none' + maxRetries?: number + sniffOnStart?: boolean + sniffInterval?: number | false + sniffOnConnectionFault?: boolean + healthCheckInterval?: number +} + +export const DEFAULT_ELASTICSEARCH_CONFIG: Required = { + requestTimeout: parseInt(process.env.ELASTICSEARCH_REQUEST_TIMEOUT || '60000'), + pingTimeout: parseInt(process.env.ELASTICSEARCH_PING_TIMEOUT || '5000'), + resurrectStrategy: + (process.env.ELASTICSEARCH_RESURRECT_STRATEGY as 'ping' | 'optimistic' | 'none') || + 'ping', + maxRetries: parseInt(process.env.ELASTICSEARCH_MAX_RETRIES || '5'), + sniffOnStart: process.env.ELASTICSEARCH_SNIFF_ON_START !== 'false', + sniffInterval: + process.env.ELASTICSEARCH_SNIFF_INTERVAL === 'false' + ? false + : parseInt(process.env.ELASTICSEARCH_SNIFF_INTERVAL || '30000'), + sniffOnConnectionFault: process.env.ELASTICSEARCH_SNIFF_ON_CONNECTION_FAULT !== 'false', + healthCheckInterval: parseInt( + process.env.ELASTICSEARCH_HEALTH_CHECK_INTERVAL || '60000' + ) +} + +class ElasticsearchClientSingleton { + private static instance: any = null + private client: Client | null = null + private config: OceanNodeDBConfig | null = null + private connectionAttempts: number = 0 + private lastConnectionTime: number = 0 + private isRetrying: boolean = false + private healthCheckTimer: NodeJS.Timeout | null = null + private isMonitoring: boolean = false + + private constructor() {} + + public static getInstance(): ElasticsearchClientSingleton { + if (!ElasticsearchClientSingleton.instance) { + ElasticsearchClientSingleton.instance = new ElasticsearchClientSingleton() + } + return ElasticsearchClientSingleton.instance + } + + private isElasticsearchDatabase(config: OceanNodeDBConfig): boolean { + return config.dbType === DB_TYPES.ELASTIC_SEARCH + } + + public async getClient( + config: OceanNodeDBConfig, + customConfig: Partial = {} + ): Promise { + if (!this.isElasticsearchDatabase(config)) { + DATABASE_LOGGER.logMessageWithEmoji( + `Skipping Elasticsearch connection - database type is set to '${ + config.dbType || 'unknown' + }', not '${DB_TYPES.ELASTIC_SEARCH}'`, + true, + GENERIC_EMOJIS.EMOJI_OCEAN_WAVE, + LOG_LEVELS_STR.LEVEL_DEBUG + ) + throw new Error(`Database type '${config.dbType}' is not Elasticsearch`) + } + + if (this.client && this.config) { + const isHealthy = await this.checkConnectionHealth() + if (isHealthy) { + this.startHealthMonitoring(config, customConfig) + return this.client + } else { + DATABASE_LOGGER.logMessageWithEmoji( + `Elasticsearch connection interrupted or failed to ${this.maskUrl( + this.config.url + )} - starting retry phase`, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_WARN + ) + this.closeConnectionSync() + return this.startRetryConnection(config, customConfig) + } + } + + const client = await this.createNewConnection(config, customConfig) + this.startHealthMonitoring(config, customConfig) + return client + } + + private startHealthMonitoring( + config: OceanNodeDBConfig, + customConfig: Partial = {} + ): void { + if (this.isMonitoring || !this.client || !this.isElasticsearchDatabase(config)) return + + const finalConfig = { + ...DEFAULT_ELASTICSEARCH_CONFIG, + ...customConfig + } + + this.isMonitoring = true + DATABASE_LOGGER.logMessageWithEmoji( + `Starting Elasticsearch connection monitoring (health check every ${finalConfig.healthCheckInterval}ms)`, + true, + GENERIC_EMOJIS.EMOJI_OCEAN_WAVE, + LOG_LEVELS_STR.LEVEL_DEBUG + ) + + this.healthCheckTimer = setInterval(async () => { + if (this.client && !this.isRetrying) { + const isHealthy = await this.checkConnectionHealth() + if (!isHealthy) { + DATABASE_LOGGER.logMessageWithEmoji( + `Elasticsearch connection lost during monitoring - triggering automatic reconnection`, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_WARN + ) + this.closeConnectionSync() + try { + await this.startRetryConnection(config, customConfig) + } catch (error) { + DATABASE_LOGGER.logMessageWithEmoji( + `Automatic reconnection failed: ${error.message}`, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_ERROR + ) + } + } + } + }, finalConfig.healthCheckInterval) + } + + private stopHealthMonitoring(): void { + if (this.healthCheckTimer) { + clearInterval(this.healthCheckTimer) + this.healthCheckTimer = null + this.isMonitoring = false + DATABASE_LOGGER.logMessageWithEmoji( + `Stopped Elasticsearch connection monitoring`, + true, + GENERIC_EMOJIS.EMOJI_OCEAN_WAVE, + LOG_LEVELS_STR.LEVEL_DEBUG + ) + } + } + + private async startRetryConnection( + config: OceanNodeDBConfig, + customConfig: Partial = {} + ): Promise { + if (!this.isElasticsearchDatabase(config)) { + throw new Error(`Database type '${config.dbType}' is not Elasticsearch`) + } + + this.isRetrying = true + const finalConfig = { + ...DEFAULT_ELASTICSEARCH_CONFIG, + ...customConfig + } + + DATABASE_LOGGER.logMessageWithEmoji( + `Starting Elasticsearch retry connection phase to ${this.maskUrl( + config.url + )} (max retries: ${finalConfig.maxRetries})`, + true, + GENERIC_EMOJIS.EMOJI_OCEAN_WAVE, + LOG_LEVELS_STR.LEVEL_INFO + ) + + for (let attempt = 1; attempt <= finalConfig.maxRetries; attempt++) { + try { + DATABASE_LOGGER.logMessageWithEmoji( + `Elasticsearch reconnection attempt ${attempt}/${ + finalConfig.maxRetries + } to ${this.maskUrl(config.url)}`, + true, + GENERIC_EMOJIS.EMOJI_OCEAN_WAVE, + LOG_LEVELS_STR.LEVEL_INFO + ) + + const client = await this.createNewConnection(config, customConfig) + this.isRetrying = false + return client + } catch (error) { + if (attempt === finalConfig.maxRetries) { + this.isRetrying = false + DATABASE_LOGGER.logMessageWithEmoji( + `Elasticsearch retry connection failed after ${ + finalConfig.maxRetries + } attempts to ${this.maskUrl(config.url)}: ${error.message}`, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_ERROR + ) + throw error + } + + const delay = Math.min(1000 * Math.pow(2, attempt - 1), 30000) + DATABASE_LOGGER.logMessageWithEmoji( + `Elasticsearch retry attempt ${attempt}/${finalConfig.maxRetries} failed, waiting ${delay}ms before next attempt: ${error.message}`, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_WARN + ) + await new Promise((resolve) => setTimeout(resolve, delay)) + } + } + + throw new Error('Maximum retry attempts reached') + } + + private async checkConnectionHealth(): Promise { + if (!this.client) return false + + try { + await this.client.ping() + return true + } catch (error) { + DATABASE_LOGGER.logMessageWithEmoji( + `Elasticsearch connection health check failed: ${error.message}`, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_DEBUG + ) + return false + } + } + + private async createNewConnection( + config: OceanNodeDBConfig, + customConfig: Partial = {} + ): Promise { + if (!this.isElasticsearchDatabase(config)) { + throw new Error(`Database type '${config.dbType}' is not Elasticsearch`) + } + + this.connectionAttempts++ + this.lastConnectionTime = Date.now() + + const finalConfig = { + ...DEFAULT_ELASTICSEARCH_CONFIG, + ...customConfig + } + + try { + const client = new Client({ + node: config.url, + auth: + config.username && config.password + ? { username: config.username, password: config.password } + : undefined, + requestTimeout: finalConfig.requestTimeout, + pingTimeout: finalConfig.pingTimeout, + resurrectStrategy: finalConfig.resurrectStrategy, + maxRetries: finalConfig.maxRetries, + sniffOnStart: finalConfig.sniffOnStart, + sniffInterval: finalConfig.sniffInterval, + sniffOnConnectionFault: finalConfig.sniffOnConnectionFault + }) + + await client.ping() + + this.client = client + this.config = { ...config } + + DATABASE_LOGGER.logMessageWithEmoji( + `Elasticsearch connection established successfully to ${this.maskUrl( + config.url + )} (attempt ${this.connectionAttempts}/${ + finalConfig.maxRetries + }) last successful connection ${this.lastConnectionTime}`, + true, + GENERIC_EMOJIS.EMOJI_CHECK_MARK, + LOG_LEVELS_STR.LEVEL_INFO + ) + + return this.client + } catch (error) { + DATABASE_LOGGER.logMessageWithEmoji( + `Failed to connect to Elasticsearch at ${this.maskUrl(config.url)} (attempt ${ + this.connectionAttempts + }/${finalConfig.maxRetries}) last successful connection ${ + this.lastConnectionTime + }: ${error.message}`, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_ERROR + ) + throw error + } + } + + private maskUrl(url: string): string { + try { + const urlObj = new URL(url) + return `${urlObj.protocol}//${urlObj.hostname}:${ + urlObj.port || (urlObj.protocol === 'https:' ? '443' : '80') + }` + } catch (error) { + return url.replace(/\/\/[^@]+@/, '//***:***@') + } + } + + private closeConnectionSync(): void { + this.stopHealthMonitoring() + if (this.client) { + try { + this.client.close() + } catch (error) { + // silent close, no logging needed + } + this.client = null + this.config = null + } + } + + public getConnectionStats(): { + attempts: number + lastConnection: number + connected: boolean + isRetrying: boolean + isMonitoring: boolean + } { + return { + attempts: this.connectionAttempts, + lastConnection: this.lastConnectionTime, + connected: this.client !== null, + isRetrying: this.isRetrying, + isMonitoring: this.isMonitoring + } + } +} + +export async function createElasticsearchClientWithRetry( + config: OceanNodeDBConfig, + customConfig: Partial = {} +): Promise { + const singleton = ElasticsearchClientSingleton.getInstance() + return await singleton.getClient(config, customConfig) +} + +export function getElasticsearchConfig( + retryConfig: ElasticsearchRetryConfig = {} +): Required { + return { + ...DEFAULT_ELASTICSEARCH_CONFIG, + ...retryConfig + } +} + +export function getElasticsearchConnectionStats(): { + attempts: number + lastConnection: number + connected: boolean + isRetrying: boolean + isMonitoring: boolean +} { + const singleton = ElasticsearchClientSingleton.getInstance() + return singleton.getConnectionStats() } diff --git a/src/components/database/SQLLiteConfigDatabase.ts b/src/components/database/SQLLiteConfigDatabase.ts new file mode 100644 index 000000000..72f9f0942 --- /dev/null +++ b/src/components/database/SQLLiteConfigDatabase.ts @@ -0,0 +1,55 @@ +import fs from 'fs' +import path from 'path' +import { DATABASE_LOGGER } from '../../utils/logging/common.js' +import { GENERIC_EMOJIS, LOG_LEVELS_STR } from '../../utils/logging/Logger.js' +import { SQLiteProvider } from './sqlite.js' + +export class SQLLiteConfigDatabase { + private provider: SQLiteProvider + + constructor() { + return (async (): Promise => { + DATABASE_LOGGER.info('Config Database initiated with SQLite provider') + + // Ensure the directory exists before instantiating SQLiteProvider + const dbDir = path.dirname('databases/config.sqlite') + if (!fs.existsSync(dbDir)) { + fs.mkdirSync(dbDir, { recursive: true }) + } + this.provider = new SQLiteProvider('databases/config.sqlite') + await this.provider.createTableForConfig() + + return this + })() as unknown as SQLLiteConfigDatabase + } + + async createOrUpdateConfig(key: string = 'version', value: string) { + try { + return await this.provider.createOrUpdateConfig(key, value) + } catch (error) { + const errorMsg = `Error when creating new version entry ${value}: ` + error.message + DATABASE_LOGGER.logMessageWithEmoji( + errorMsg, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_ERROR + ) + return null + } + } + + async retrieveValue(key: string = 'version') { + try { + return await this.provider.retrieveValue(key) + } catch (error) { + const errorMsg = `Error when retrieving latest version entry: ` + error.message + DATABASE_LOGGER.logMessageWithEmoji( + errorMsg, + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_ERROR + ) + return null + } + } +} diff --git a/src/components/database/SQLLiteNonceDatabase.ts b/src/components/database/SQLLiteNonceDatabase.ts index 1eca067de..06334c6e7 100644 --- a/src/components/database/SQLLiteNonceDatabase.ts +++ b/src/components/database/SQLLiteNonceDatabase.ts @@ -21,7 +21,7 @@ export class SQLLiteNonceDatabase extends AbstractNonceDatabase { fs.mkdirSync(dbDir, { recursive: true }) } this.provider = new SQLiteProvider('databases/nonceDatabase.sqlite') - await this.provider.createTable() + await this.provider.createTableForNonce() return this })() as unknown as SQLLiteNonceDatabase @@ -29,7 +29,7 @@ export class SQLLiteNonceDatabase extends AbstractNonceDatabase { async create(address: string, nonce: number) { try { - return await this.provider.create(address, nonce) + return await this.provider.createNonce(address, nonce) } catch (error) { const errorMsg = `Error when creating new nonce entry ${nonce} for address ${address}: ` + @@ -46,7 +46,7 @@ export class SQLLiteNonceDatabase extends AbstractNonceDatabase { async retrieve(address: string) { try { - return await this.provider.retrieve(address) + return await this.provider.retrieveNonce(address) } catch (error) { const errorMsg = `Error when retrieving nonce entry for address ${address}: ` + error.message @@ -62,7 +62,7 @@ export class SQLLiteNonceDatabase extends AbstractNonceDatabase { async update(address: string, nonce: number) { try { - return await this.provider.update(address, nonce) + return await this.provider.updateNonce(address, nonce) } catch (error) { const errorMsg = `Error when updating nonce entry ${nonce} for address ${address}: ` + @@ -79,7 +79,7 @@ export class SQLLiteNonceDatabase extends AbstractNonceDatabase { async delete(address: string) { try { - return await this.provider.delete(address) + return await this.provider.deleteNonceEntry(address) } catch (error) { const errorMsg = `Error when deleting nonce entry for address ${address}: ` + error.message diff --git a/src/components/database/TypenseDatabase.ts b/src/components/database/TypenseDatabase.ts index 6a67fc281..f191f8749 100644 --- a/src/components/database/TypenseDatabase.ts +++ b/src/components/database/TypenseDatabase.ts @@ -5,7 +5,6 @@ import { TypesenseSearchParams } from '../../@types/index.js' import { LOG_LEVELS_STR, GENERIC_EMOJIS } from '../../utils/logging/Logger.js' import { DATABASE_LOGGER } from '../../utils/logging/common.js' -import { validateObject } from '../core/utils/validateDdoHandler.js' import { ENVIRONMENT_VARIABLES, TYPESENSE_HITS_CAP } from '../../utils/constants.js' import { AbstractDdoDatabase, @@ -14,6 +13,8 @@ import { AbstractLogDatabase, AbstractOrderDatabase } from './BaseDatabase.js' +import { DDOManager } from '@oceanprotocol/ddo-js' +import { validateDDO } from '../../utils/asset.js' export class TypesenseOrderDatabase extends AbstractOrderDatabase { private provider: Typesense @@ -371,7 +372,9 @@ export class TypesenseDdoDatabase extends AbstractDdoDatabase { getDDOSchema(ddo: Record): TypesenseSchema { // Find the schema based on the DDO version OR use the short DDO schema when state !== 0 let schemaName: string - if (ddo.nft?.state !== 0) { + const ddoInstance = DDOManager.getDDOClass(ddo) + const ddoData = ddoInstance.getDDOData() + if ('indexedMetadata' in ddoData && ddoData?.indexedMetadata?.nft.state !== 0) { schemaName = 'op_ddo_short' } else if (ddo.version) { schemaName = `op_ddo_v${ddo.version}` @@ -386,35 +389,6 @@ export class TypesenseDdoDatabase extends AbstractDdoDatabase { return schema } - async validateDDO(ddo: Record): Promise { - if (ddo.nft?.state !== 0) { - // Skipping validation for short DDOs as it currently doesn't work - // TODO: DDO validation needs to be updated to consider the fields required by the schema - // See github issue: https://github.com/oceanprotocol/ocean-node/issues/256 - return true - } else { - const validation = await validateObject(ddo, ddo.chainId, ddo.nftAddress) - if (validation[0] === true) { - DATABASE_LOGGER.logMessageWithEmoji( - `Validation of DDO with did: ${ddo.id} has passed`, - true, - GENERIC_EMOJIS.EMOJI_OCEAN_WAVE, - LOG_LEVELS_STR.LEVEL_INFO - ) - return true - } else { - DATABASE_LOGGER.logMessageWithEmoji( - `Validation of DDO with schema version ${ddo.version} failed with errors: ` + - JSON.stringify(validation[1]), - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return false - } - } - } - async search( query: Record, maxResultsPerPage?: number, @@ -469,7 +443,10 @@ export class TypesenseDdoDatabase extends AbstractDdoDatabase { throw new Error(`Schema for version ${ddo.version} not found`) } try { - const validation = await this.validateDDO(ddo) + // avoid failure because of schema + if (ddo?.indexedMetadata?.nft) delete ddo.nft + + const validation = await validateDDO(ddo) if (validation === true) { return await this.provider .collections(schema.name) @@ -530,7 +507,9 @@ export class TypesenseDdoDatabase extends AbstractDdoDatabase { throw new Error(`Schema for version ${ddo.version} not found`) } try { - const validation = await this.validateDDO(ddo) + // avoid issue with nft fields, due to schema + if (ddo?.indexedMetadata?.nft) delete ddo.nft + const validation = await validateDDO(ddo) if (validation === true) { return await this.provider .collections(schema.name) @@ -632,6 +611,9 @@ export class TypesenseDdoDatabase extends AbstractDdoDatabase { export class TypesenseIndexerDatabase extends AbstractIndexerDatabase { private provider: Typesense + // constant for the node version document ID + private static readonly VERSION_DOC_ID = 'node_version' + constructor(config: OceanNodeDBConfig, schema: TypesenseSchema) { super(config, schema) return (async (): Promise => { @@ -805,7 +787,7 @@ export class TypesenseLogDatabase extends AbstractLogDatabase { moduleName?: string, level?: string, page?: number - ): Promise[] | null> { + ): Promise[]> { try { let filterConditions = `timestamp:>=${startTime.getTime()} && timestamp:<${endTime.getTime()}` if (moduleName) { @@ -851,7 +833,7 @@ export class TypesenseLogDatabase extends AbstractLogDatabase { GENERIC_EMOJIS.EMOJI_CROSS_MARK, LOG_LEVELS_STR.LEVEL_ERROR ) - return null + return [] } } @@ -902,7 +884,7 @@ export class TypesenseLogDatabase extends AbstractLogDatabase { } } } - return oldLogs ? oldLogs.length : 0 + return oldLogs.length } catch (error) { DATABASE_LOGGER.logMessageWithEmoji( `Error when deleting old log entries: ${error.message}`, diff --git a/src/components/database/TypesenseSchemas.ts b/src/components/database/TypesenseSchemas.ts index 9b17ffcf6..0cdf7ea5e 100644 --- a/src/components/database/TypesenseSchemas.ts +++ b/src/components/database/TypesenseSchemas.ts @@ -48,6 +48,7 @@ export type TypesenseSchema = TypesenseCollectionCreateSchema export type TypesenseSchemas = { ddoSchemas: TypesenseSchema[] nonceSchemas: TypesenseSchema + c2dSchemas: TypesenseSchema indexerSchemas: TypesenseSchema logSchemas: TypesenseSchema orderSchema: TypesenseSchema @@ -61,6 +62,24 @@ export const typesenseSchemas: TypesenseSchemas = { enable_nested_fields: true, fields: [{ name: 'nonce', type: 'int64' }] }, + c2dSchemas: { + name: 'c2djobs', + enable_nested_fields: true, + fields: [ + // not really needed because it will be SQL Lite + { name: 'clusterHash', type: 'string', optional: false }, + { name: 'configlogURL', type: 'string', optional: false }, + { name: 'publishlogURL', type: 'string', optional: false }, + { name: 'algologURL', type: 'string', optional: false }, + { name: 'outputsURL', type: 'auto', optional: false }, + { name: 'stopRequested', type: 'bool', optional: false }, + { name: 'algorithm', type: 'auto', optional: false }, + { name: 'assets', type: 'auto', optional: false }, + { name: 'isRunning', type: 'bool', optional: false }, + { name: 'isStarted', type: 'bool', optional: false }, + { name: 'containerImage', type: 'string', optional: false } + ] + }, indexerSchemas: { name: 'indexer', enable_nested_fields: true, diff --git a/src/components/database/index.ts b/src/components/database/index.ts index cd5e9e430..6b0da5250 100644 --- a/src/components/database/index.ts +++ b/src/components/database/index.ts @@ -10,54 +10,104 @@ import { AbstractDdoStateDatabase, AbstractIndexerDatabase, AbstractLogDatabase, - AbstractNonceDatabase, AbstractOrderDatabase } from './BaseDatabase.js' +import { C2DDatabase } from './C2DDatabase.js' import { DatabaseFactory } from './DatabaseFactory.js' import { ElasticsearchSchema } from './ElasticSchemas.js' +import { SQLLiteConfigDatabase } from './SQLLiteConfigDatabase.js' +import { SQLLiteNonceDatabase } from './SQLLiteNonceDatabase.js' import { TypesenseSchema } from './TypesenseSchemas.js' +import { AuthTokenDatabase } from './AuthTokenDatabase.js' export type Schema = ElasticsearchSchema | TypesenseSchema export class Database { ddo: AbstractDdoDatabase - nonce: AbstractNonceDatabase + nonce: SQLLiteNonceDatabase indexer: AbstractIndexerDatabase logs: AbstractLogDatabase order: AbstractOrderDatabase ddoState: AbstractDdoStateDatabase + sqliteConfig: SQLLiteConfigDatabase + c2d: C2DDatabase + authToken: AuthTokenDatabase + + constructor(private config: OceanNodeDBConfig) {} + + static async init(config: OceanNodeDBConfig): Promise { + const db = new Database(config) + try { + db.nonce = await DatabaseFactory.createNonceDatabase(config) + } catch (error) { + DATABASE_LOGGER.error(`Nonce database initialization failed: ${error}`) + return null + } + try { + db.sqliteConfig = await DatabaseFactory.createConfigDatabase() + } catch (error) { + DATABASE_LOGGER.error(`Config database initialization failed: ${error}`) + return null + } + try { + db.c2d = await DatabaseFactory.createC2DDatabase(config) + } catch (error) { + DATABASE_LOGGER.error(`C2D database initialization failed: ${error}`) + return null + } + try { + db.authToken = await DatabaseFactory.createAuthTokenDatabase(config) + } catch (error) { + DATABASE_LOGGER.error(`Auth database initialization failed: ${error}`) + return null + } + + if (hasValidDBConfiguration(config)) { + if (USE_DB_TRANSPORT()) { + configureCustomDBTransport(db, DATABASE_LOGGER) + } else { + DATABASE_LOGGER.warn('LOG_DB is false. Logs will NOT be saved to DB!') + } + try { + db.ddo = await DatabaseFactory.createDdoDatabase(config) + } catch (error) { + DATABASE_LOGGER.error(`DDO database initialization failed: ${error}`) + return null + } + try { + db.indexer = await DatabaseFactory.createIndexerDatabase(config) + } catch (error) { + DATABASE_LOGGER.error(`Indexer database initialization failed: ${error}`) + return null + } - constructor(private config: OceanNodeDBConfig) { - return (async (): Promise => { try { - this.nonce = await DatabaseFactory.createNonceDatabase(this.config) - if (hasValidDBConfiguration(this.config)) { - // add this DB transport too - // once we create a DB instance, the logger will be using this transport as well - // we cannot have this the other way around because of the dependencies cycle - if (USE_DB_TRANSPORT()) { - configureCustomDBTransport(this, DATABASE_LOGGER) - } else { - DATABASE_LOGGER.warn( - 'Property "LOG_DB" is set to "false". This means logs will NOT be saved to database!' - ) - } - this.ddo = await DatabaseFactory.createDdoDatabase(this.config) - this.indexer = await DatabaseFactory.createIndexerDatabase(this.config) - this.logs = await DatabaseFactory.createLogDatabase(this.config) - this.order = await DatabaseFactory.createOrderDatabase(this.config) - this.ddoState = await DatabaseFactory.createDdoStateDatabase(this.config) - } else { - DATABASE_LOGGER.info( - 'Invalid URL. Only Nonce Database is initialized. Other databases are not available.' - ) - } - return this + db.logs = await DatabaseFactory.createLogDatabase(config) } catch (error) { - DATABASE_LOGGER.error(`Database initialization failed: ${error}`) + DATABASE_LOGGER.error(`Logs database initialization failed: ${error}`) return null } - })() as unknown as Database + + try { + db.order = await DatabaseFactory.createOrderDatabase(config) + } catch (error) { + DATABASE_LOGGER.error(`Order database initialization failed: ${error}`) + return null + } + + try { + db.ddoState = await DatabaseFactory.createDdoStateDatabase(config) + } catch (error) { + DATABASE_LOGGER.error(`DDO State database initialization failed: ${error}`) + return null + } + } else { + DATABASE_LOGGER.info( + 'Invalid DB URL. Only Nonce, C2D, Auth Token and Config Databases are initialized.' + ) + } + + return db } // useful to know which configuration was passed to DB diff --git a/src/components/database/sqlite.ts b/src/components/database/sqlite.ts index e2f77de1a..61231688e 100644 --- a/src/components/database/sqlite.ts +++ b/src/components/database/sqlite.ts @@ -2,25 +2,27 @@ import { TypesenseSchema, typesenseSchemas } from './TypesenseSchemas.js' import sqlite3 from 'sqlite3' interface DatabaseProvider { - create(address: string, nonce: number): Promise<{ id: string; nonce: number }> - retrieve(address: string): Promise<{ id: string; nonce: number | null }> - update(address: string, nonce: number): Promise<{ id: string; nonce: number }> - delete(address: string): Promise<{ id: string; nonce: number | null }> + createNonce(address: string, nonce: number): Promise<{ id: string; nonce: number }> + retrieveNonce(address: string): Promise<{ id: string; nonce: number | null }> + updateNonce(address: string, nonce: number): Promise<{ id: string; nonce: number }> + deleteNonceEntry(address: string): Promise<{ id: string; nonce: number | null }> } export class SQLiteProvider implements DatabaseProvider { private db: sqlite3.Database - private schema: TypesenseSchema + private schemaNonce: TypesenseSchema + private configSchema: string - constructor(private dbFilePath: string) { + constructor(dbFilePath: string) { this.db = new sqlite3.Database(dbFilePath) - this.schema = typesenseSchemas.nonceSchemas + this.schemaNonce = typesenseSchemas.nonceSchemas + this.configSchema = 'config' } // eslint-disable-next-line require-await - async createTable() { + async createTableForNonce() { const createTableSQL = ` - CREATE TABLE IF NOT EXISTS ${this.schema.name} ( + CREATE TABLE IF NOT EXISTS ${this.schemaNonce.name} ( id TEXT PRIMARY KEY, nonce INTEGER ); @@ -34,9 +36,25 @@ export class SQLiteProvider implements DatabaseProvider { } // eslint-disable-next-line require-await - async create(address: string, nonce: number) { + async createTableForConfig() { + const createTableSQL = ` + CREATE TABLE IF NOT EXISTS ${this.configSchema} ( + key TEXT NOT NULL PRIMARY KEY, + value TEXT + ); + ` + return new Promise((resolve, reject) => { + this.db.run(createTableSQL, (err) => { + if (err) reject(err) + else resolve() + }) + }) + } + + // eslint-disable-next-line require-await + async createNonce(address: string, nonce: number) { const insertSQL = ` - INSERT INTO ${this.schema.name} (id, nonce) + INSERT INTO ${this.schemaNonce.name} (id, nonce) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET nonce=excluded.nonce; ` @@ -49,9 +67,24 @@ export class SQLiteProvider implements DatabaseProvider { } // eslint-disable-next-line require-await - async retrieve(address: string) { + async createOrUpdateConfig(key: string, value: string) { + const insertSQL = ` + INSERT INTO ${this.configSchema} (key, value) + VALUES (?, ?) + ON CONFLICT(key) DO UPDATE SET value = excluded.value; + ` + return new Promise<{ key: string; value: string }>((resolve, reject) => { + this.db.run(insertSQL, [key, value], (err) => { + if (err) reject(err) + else resolve({ key, value }) + }) + }) + } + + // eslint-disable-next-line require-await + async retrieveNonce(address: string) { const selectSQL = ` - SELECT * FROM ${this.schema.name} WHERE id = ? + SELECT * FROM ${this.schemaNonce.name} WHERE id = ? ` return new Promise<{ id: string; nonce: number | null }>((resolve, reject) => { this.db.get(selectSQL, [address], (err, row: { nonce: number } | undefined) => { @@ -63,18 +96,31 @@ export class SQLiteProvider implements DatabaseProvider { } // eslint-disable-next-line require-await - async update(address: string, nonce: number) { - return this.create(address, nonce) + async retrieveValue(key: string) { + const selectSQL = ` + SELECT value FROM ${this.configSchema} WHERE key = ?; + ` + return new Promise<{ value: string | null }>((resolve, reject) => { + this.db.get(selectSQL, [key], (err, row: { value: string } | undefined) => { + if (err) reject(err) + else resolve(row ? { value: row.value } : { value: null }) // Returns null if no version exists + }) + }) + } + + // eslint-disable-next-line require-await + async updateNonce(address: string, nonce: number) { + return this.createNonce(address, nonce) } // eslint-disable-next-line require-await - async delete(address: string) { + async deleteNonceEntry(address: string) { const selectSQL = ` - SELECT nonce FROM ${this.schema.name} WHERE id = ? + SELECT nonce FROM ${this.schemaNonce.name} WHERE id = ? ` const deleteSQL = ` - DELETE FROM ${this.schema.name} WHERE id = ? + DELETE FROM ${this.schemaNonce.name} WHERE id = ? ` return new Promise<{ id: string; nonce: number | null }>((resolve, reject) => { diff --git a/src/components/database/sqliteAuthToken.ts b/src/components/database/sqliteAuthToken.ts new file mode 100644 index 000000000..ac526dbe3 --- /dev/null +++ b/src/components/database/sqliteAuthToken.ts @@ -0,0 +1,113 @@ +import { AuthToken } from './AuthTokenDatabase.js' +import sqlite3 from 'sqlite3' +import { DATABASE_LOGGER } from '../../utils/logging/common.js' + +interface AuthTokenDatabaseProvider { + createToken( + token: string, + address: string, + createdAt: number, + validUntil: number | null + ): Promise + validateTokenEntry(token: string): Promise + invalidateTokenEntry(token: string): Promise +} + +export class SQLiteAuthToken implements AuthTokenDatabaseProvider { + private db: sqlite3.Database + + constructor(dbFilePath: string) { + this.db = new sqlite3.Database(dbFilePath) + } + + async createTable(): Promise { + await this.db.exec(` + CREATE TABLE IF NOT EXISTS authTokens ( + token TEXT PRIMARY KEY, + address TEXT NOT NULL, + createdAt DATETIME DEFAULT CURRENT_TIMESTAMP, + validUntil DATETIME, + isValid BOOLEAN DEFAULT TRUE + ) + `) + } + + createToken( + token: string, + address: string, + createdAt: number, + validUntil: number | null = null + ): Promise { + const insertSQL = ` + INSERT INTO authTokens (token, address, createdAt, validUntil) VALUES (?, ?, ?, ?) + ` + return new Promise((resolve, reject) => { + this.db.run(insertSQL, [token, address, createdAt, validUntil], (err) => { + if (err) { + DATABASE_LOGGER.error(`Error creating auth token: ${err}`) + reject(err) + } else { + resolve() + } + }) + }) + } + + validateTokenEntry(token: string): Promise { + const selectSQL = ` + SELECT * FROM authTokens WHERE token = ? + ` + return new Promise((resolve, reject) => { + this.db.get(selectSQL, [token], async (err, row: AuthToken) => { + if (err) { + DATABASE_LOGGER.error(`Error validating auth token: ${err}`) + reject(err) + return + } + + if (!row) { + resolve(null) + return + } + + if (!row.isValid) { + resolve(null) + return + } + + if (row.validUntil === null) { + resolve(row) + return + } + + const validUntilDate = new Date(row.validUntil).getTime() + const now = Date.now() + + if (validUntilDate < now) { + resolve(null) + DATABASE_LOGGER.info(`Auth token ${token} is invalid`) + await this.invalidateTokenEntry(token) + return + } + + resolve(row) + }) + }) + } + + invalidateTokenEntry(token: string): Promise { + const deleteSQL = ` + UPDATE authTokens SET isValid = FALSE WHERE token = ? + ` + return new Promise((resolve, reject) => { + this.db.run(deleteSQL, [token], (err) => { + if (err) { + DATABASE_LOGGER.error(`Error invalidating auth token: ${err}`) + reject(err) + } else { + resolve() + } + }) + }) + } +} diff --git a/src/components/database/sqliteCompute.ts b/src/components/database/sqliteCompute.ts new file mode 100644 index 000000000..74dcbe84a --- /dev/null +++ b/src/components/database/sqliteCompute.ts @@ -0,0 +1,424 @@ +import { typesenseSchemas, TypesenseSchema } from './TypesenseSchemas.js' +import { + C2DStatusNumber, + C2DStatusText, + type DBComputeJob +} from '../../@types/C2D/C2D.js' +import sqlite3, { RunResult } from 'sqlite3' +import { DATABASE_LOGGER } from '../../utils/logging/common.js' + +interface ComputeDatabaseProvider { + newJob(job: DBComputeJob): Promise + getJob(jobId?: string, agreementId?: string, owner?: string): Promise + updateJob(job: DBComputeJob): Promise + getRunningJobs(engine?: string, environment?: string): Promise + deleteJob(jobId: string): Promise + getFinishedJobs(environments?: string[]): Promise + getJobs( + environments?: string[], + fromTimestamp?: string, + consumerAddrs?: string[] + ): Promise +} + +function getInternalStructure(job: DBComputeJob): any { + const internalBlob = { + clusterHash: job.clusterHash, + configlogURL: job.configlogURL, + publishlogURL: job.publishlogURL, + algologURL: job.algologURL, + outputsURL: job.outputsURL, + stopRequested: job.stopRequested, + algorithm: job.algorithm, + assets: job.assets, + isRunning: job.isRunning, + isStarted: job.isStarted, + containerImage: job.containerImage, + resources: job.resources, + isFree: job.isFree, + algoStartTimestamp: job.algoStartTimestamp, + algoStopTimestamp: job.algoStopTimestamp, + metadata: job.metadata, + additionalViewers: job.additionalViewers, + terminationDetails: job.terminationDetails, + payment: job.payment, + algoDuration: job.algoDuration, + queueMaxWaitTime: job.queueMaxWaitTime + } + return internalBlob +} +export function generateBlobFromJSON(job: DBComputeJob): Buffer { + return Buffer.from(JSON.stringify(getInternalStructure(job))) +} + +export function generateJSONFromBlob(blob: any): Promise { + return JSON.parse(blob.toString()) +} + +// we cannot store array of strings, so we use string separators instead +export const STRING_SEPARATOR = '__,__' + +export function convertArrayToString(array: string[]) { + let str: string = '' + for (let i = 0; i < array.length; i++) { + str = str + array[i] + // Do not append comma at the end of last element + if (i < array.length - 1) { + str = str + STRING_SEPARATOR + } + } + return str +} +export function convertStringToArray(str: string) { + const arr: string[] = str.split(STRING_SEPARATOR) + return arr +} + +export class SQLiteCompute implements ComputeDatabaseProvider { + private db: sqlite3.Database + private schema: TypesenseSchema + + constructor(dbFilePath: string) { + this.db = new sqlite3.Database(dbFilePath) + this.schema = typesenseSchemas.c2dSchemas + } + + deleteJob(jobId: string): Promise { + const deleteSQL = ` + DELETE FROM ${this.schema.name} WHERE jobId = ? + ` + return new Promise((resolve, reject) => { + this.db.run(deleteSQL, [jobId], function (this: RunResult, err) { + if (err) reject(err) + else resolve(this.changes === 1) + }) + }) + } + + createTable() { + /* although we have field called expiteTimestamp, we are actually storing maxJobDuration in it */ + const createTableSQL = ` + CREATE TABLE IF NOT EXISTS ${this.schema.name} ( + owner TEXT, + did TEXT DEFAULT NULL, + jobId TEXT PRIMARY KEY, + dateCreated TEXT, + dateFinished TEXT DEFAULT NULL, + status INTEGER, + statusText TEXT, + results BLOB, + inputDID TEXT DEFAULT NULL, + algoDID TEXT DEFAULT NULL, + agreementId TEXT DEFAULT NULL, + expireTimestamp INTEGER, + environment TEXT DEFAULT NULL, + body BLOB + ); + ` + return new Promise((resolve, reject) => { + this.db.run(createTableSQL, (err) => { + if (err) reject(err) + else resolve() + }) + }) + } + + newJob(job: DBComputeJob): Promise { + // TO DO C2D + const insertSQL = ` + INSERT INTO ${this.schema.name} + ( + owner, + did, + jobId, + dateCreated, + status, + statusText, + inputDID, + algoDID, + agreementId, + expireTimestamp, + environment, + body + ) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); + ` + + return new Promise((resolve, reject) => { + this.db.run( + insertSQL, + [ + job.owner, + job.did, + job.jobId, + job.dateCreated || String(Date.now() / 1000), // seconds from epoch, + job.status || C2DStatusNumber.JobStarted, + job.statusText || C2DStatusText.JobStarted, + job.inputDID ? convertArrayToString(job.inputDID) : job.inputDID, + job.algoDID, + job.agreementId, + job.maxJobDuration, + job.environment, + generateBlobFromJSON(job) + ], + (err) => { + if (err) { + DATABASE_LOGGER.error('Could not insert C2D job on DB: ' + err.message) + reject(err) + } else { + DATABASE_LOGGER.info('Successfully inserted job with id:' + job.jobId) + resolve(job.jobId) + } + } + ) + }) + } + + /** + * on a get status for instance, all params are optional + * but at least one is required... In case we don't have a jobId, + * we have multiple results (by owner for instance) + * So, it refines the query or we can have more than 1 result (same as current implementation) + * @param jobId the job identifier + * @param agreementId the agreement identifier (did ?) + * @param owner the consumer address / job owner + * @returns job(s) + */ + getJob(jobId?: string, agreementId?: string, owner?: string): Promise { + const params: any = [] + let selectSQL = `SELECT * FROM ${this.schema.name} WHERE 1=1` + if (jobId) { + selectSQL += ` AND jobId = ?` + params.push(jobId) + } + if (agreementId) { + if (!agreementId.startsWith('0x')) { + agreementId = '0x' + agreementId + } + selectSQL += ` AND agreementId = ?` + params.push(agreementId) + } + if (owner) { + selectSQL += ` AND owner = ?` + params.push(owner) + } + + return new Promise((resolve, reject) => { + this.db.all(selectSQL, params, (err, rows: any[] | undefined) => { + if (err) { + DATABASE_LOGGER.error(err.message) + reject(err) + } else { + // also decode the internal data into job data + if (rows && rows.length > 0) { + const all: DBComputeJob[] = rows.map((row) => { + const body = generateJSONFromBlob(row.body) + delete row.body + const maxJobDuration = row.expireTimestamp + delete row.expireTimestamp + const job: DBComputeJob = { ...row, ...body, maxJobDuration } + return job + }) + resolve(all) + } else { + DATABASE_LOGGER.error( + `Could not find any job with jobId: ${jobId}, agreementId: ${agreementId}, or owner: ${owner} in database!` + ) + resolve([]) + } + } + }) + }) + } + + updateJob(job: DBComputeJob): Promise { + // if (job.dateFinished && job.isRunning) { + // job.isRunning = false + // } + // TO DO C2D + const data: any[] = [ + job.owner, + job.status, + job.statusText, + job.maxJobDuration, + generateBlobFromJSON(job), + job.dateFinished, + job.jobId + ] + const updateSQL = ` + UPDATE ${this.schema.name} + SET + owner = ?, + status = ?, + statusText = ?, + expireTimestamp = ?, + body = ?, + dateFinished = ? + WHERE jobId = ?; + ` + + return new Promise((resolve, reject) => { + this.db.run(updateSQL, data, function (this: RunResult, err: Error | null) { + if (err) { + DATABASE_LOGGER.error(`Error while updating job: ${err.message}`) + reject(err) + } else { + // number of rows updated successfully + resolve(this.changes) + } + }) + }) + } + + getRunningJobs(engine?: string, environment?: string): Promise { + const selectSQL = ` + SELECT * FROM ${this.schema.name} WHERE dateFinished IS NULL ORDER by dateCreated + ` + return new Promise((resolve, reject) => { + this.db.all(selectSQL, (err, rows: any[] | undefined) => { + if (err) { + DATABASE_LOGGER.error(err.message) + reject(err) + } else { + // also decode the internal data into job data + // get them all running + if (rows && rows.length > 0) { + const all: DBComputeJob[] = rows.map((row) => { + const body = generateJSONFromBlob(row.body) + delete row.body + const maxJobDuration = row.expireTimestamp + delete row.expireTimestamp + const job: DBComputeJob = { ...row, ...body, maxJobDuration } + return job + }) + // filter them out + const filtered = all.filter((job) => { + let include = true + if (engine && engine !== job.clusterHash) { + include = false + } + if (environment && environment !== job.environment) { + include = false + } + if (job.dateFinished) { + include = false + } + return include + }) + resolve(filtered) + } else { + DATABASE_LOGGER.info('Could not find any running C2D jobs!') + resolve([]) + } + } + }) + }) + } + + getFinishedJobs(environments?: string[]): Promise { + let selectSQL = ` + SELECT * FROM ${this.schema.name} WHERE (dateFinished IS NOT NULL OR results IS NOT NULL) + ` + const params: string[] = [] + if (environments && environments.length > 0) { + const placeholders = environments.map(() => '?').join(',') + selectSQL += ` AND environment IN (${placeholders})` + params.push(...environments) + } + + selectSQL += ` ORDER BY dateFinished DESC` + + return new Promise((resolve, reject) => { + this.db.all(selectSQL, params, (err, rows: any[] | undefined) => { + if (err) { + DATABASE_LOGGER.error(err.message) + reject(err) + } else { + // also decode the internal data into job data + // get them all running + if (rows && rows.length > 0) { + const all: DBComputeJob[] = rows.map((row) => { + const body = generateJSONFromBlob(row.body) + delete row.body + const maxJobDuration = row.expireTimestamp + delete row.expireTimestamp + const job: DBComputeJob = { ...row, ...body, maxJobDuration } + return job + }) + resolve(all) + } else { + environments + ? DATABASE_LOGGER.info( + 'No jobs found for the specified enviroments: ' + environments.join(',') + ) + : DATABASE_LOGGER.info('No jobs found') + resolve([]) + } + } + }) + }) + } + + getJobs( + environments?: string[], + fromTimestamp?: string, + consumerAddrs?: string[] + ): Promise { + let selectSQL = `SELECT * FROM ${this.schema.name}` + + const params: string[] = [] + const conditions: string[] = [] + + if (environments && environments.length > 0) { + const placeholders = environments.map(() => '?').join(',') + conditions.push(`environment IN (${placeholders})`) + params.push(...environments) + } + + if (fromTimestamp) { + conditions.push(`dateFinished >= ?`) + params.push(fromTimestamp) + } + + if (consumerAddrs && consumerAddrs.length > 0) { + const placeholders = consumerAddrs.map(() => '?').join(',') + conditions.push(`owner NOT IN (${placeholders})`) + params.push(...consumerAddrs) + } + + if (conditions.length > 0) { + selectSQL += ` WHERE ${conditions.join(' AND ')}` + } + selectSQL += ` ORDER BY dateCreated DESC` + + return new Promise((resolve, reject) => { + this.db.all(selectSQL, params, (err, rows: any[] | undefined) => { + if (err) { + DATABASE_LOGGER.error(err.message) + reject(err) + } else { + // also decode the internal data into job data + // get them all running + if (rows && rows.length > 0) { + const all: DBComputeJob[] = rows.map((row) => { + const body = generateJSONFromBlob(row.body) + delete row.body + const maxJobDuration = row.expireTimestamp + delete row.expireTimestamp + const job: DBComputeJob = { ...row, ...body, maxJobDuration } + return job + }) + resolve(all) + } else { + environments + ? DATABASE_LOGGER.info( + 'No jobs found for the specified enviroments: ' + environments.join(',') + ) + : DATABASE_LOGGER.info('No jobs found') + resolve([]) + } + } + }) + }) + } +} diff --git a/src/components/httpRoutes/adminConfig.ts b/src/components/httpRoutes/adminConfig.ts new file mode 100644 index 000000000..ed254c267 --- /dev/null +++ b/src/components/httpRoutes/adminConfig.ts @@ -0,0 +1,56 @@ +import express from 'express' +import { HTTP_LOGGER } from '../../utils/logging/common.js' +import { FetchConfigHandler } from '../core/admin/fetchConfigHandler.js' +import { PushConfigHandler } from '../core/admin/pushConfigHandler.js' +import { PROTOCOL_COMMANDS } from '../../utils/constants.js' +import { Readable } from 'stream' +import { streamToObject } from '../../utils/util.js' + +export const adminConfigRoutes = express.Router() + +adminConfigRoutes.get('/api/admin/config', express.json(), async (req, res) => { + try { + const { expiryTimestamp, signature } = req.body + + const response = await new FetchConfigHandler(req.oceanNode).handle({ + command: PROTOCOL_COMMANDS.FETCH_CONFIG, + expiryTimestamp, + signature + }) + + if (response.status.httpStatus === 200) { + const result = await streamToObject(response.stream as Readable) + res.status(200).json(result) + } else { + HTTP_LOGGER.log('LEVEL_ERROR', `Error fetching config: ${response.status.error}`) + res.status(response.status.httpStatus).json({ error: response.status.error }) + } + } catch (error) { + HTTP_LOGGER.error(`Error fetching config: ${error.message}`) + res.status(500).send(`Internal Server Error: ${error.message}`) + } +}) + +adminConfigRoutes.post('/api/admin/config/update', express.json(), async (req, res) => { + try { + const { expiryTimestamp, signature, config } = req.body + + const response = await new PushConfigHandler(req.oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature, + config + }) + + if (response.status.httpStatus === 200) { + const result = await streamToObject(response.stream as Readable) + res.status(200).json(result) + } else { + HTTP_LOGGER.log('LEVEL_ERROR', `Error pushing config: ${response.status.error}`) + res.status(response.status.httpStatus).json({ error: response.status.error }) + } + } catch (error) { + HTTP_LOGGER.error(`Error pushing config: ${error.message}`) + res.status(500).send(`Internal Server Error: ${error.message}`) + } +}) diff --git a/src/components/httpRoutes/aquarius.ts b/src/components/httpRoutes/aquarius.ts index 102c2521e..688813ff7 100644 --- a/src/components/httpRoutes/aquarius.ts +++ b/src/components/httpRoutes/aquarius.ts @@ -6,7 +6,6 @@ import { LOG_LEVELS_STR } from '../../utils/logging/Logger.js' import { FindDdoHandler, ValidateDDOHandler } from '../core/handler/ddoHandler.js' import { QueryDdoStateHandler, QueryHandler } from '../core/handler/queryHandler.js' import { HTTP_LOGGER } from '../../utils/logging/common.js' -import { DDO } from '../../@types/DDO/DDO.js' import { QueryCommand } from '../../@types/commands.js' import { DatabaseFactory } from '../database/DatabaseFactory.js' import { SearchQuery } from '../../@types/DDO/SearchQuery.js' @@ -21,7 +20,7 @@ aquariusRoutes.get( async (req, res) => { try { const { did, force } = req.params - if (!did || !did.startsWith('did:op')) { + if (!did || !/^did:ope?/.test(did)) { res.status(400).send('Missing or invalid required parameter: "did"') return } @@ -44,7 +43,7 @@ aquariusRoutes.get( async (req, res) => { try { const { did, force } = req.params - if (!did || !did.startsWith('did:op')) { + if (!did || !/^did:ope?/.test(did)) { res.status(400).send('Missing or invalid required parameter: "did"') return } @@ -97,12 +96,13 @@ aquariusRoutes.get(`${AQUARIUS_API_BASE_PATH}/state/ddo`, async (req, res) => { try { const config = await getConfiguration() const queryStrategy = await DatabaseFactory.createDdoStateQuery(config.dbConfig) + + const did = req.query.did ? String(req.query.did) : undefined + const nft = req.query.nft ? String(req.query.nft) : undefined + const txId = req.query.txId ? String(req.query.txId) : undefined + const queryDdoState: QueryCommand = { - query: queryStrategy.buildQuery( - String(req.query.did), - String(req.query.nft), - String(req.query.txId) - ), + query: queryStrategy.buildQuery(did, nft, txId), command: PROTOCOL_COMMANDS.QUERY } @@ -119,9 +119,28 @@ aquariusRoutes.get(`${AQUARIUS_API_BASE_PATH}/state/ddo`, async (req, res) => { if (result.stream) { const queryResult = JSON.parse(await streamToString(result.stream as Readable)) - if (queryResult[0].found) { - res.json(queryResult[0].hits[0]) + + if ( + queryResult && + typeof queryResult === 'object' && + queryResult.found !== undefined + ) { + if (queryResult.found > 0 && queryResult.hits && queryResult.hits.length > 0) { + res.json(queryResult.hits[0].document || queryResult.hits[0]) + } else { + res.status(404).send('Not found') + } + } else if (Array.isArray(queryResult)) { + if (queryResult.length > 0) { + res.json(queryResult[0]) + } else { + res.status(404).send('Not found') + } } else { + HTTP_LOGGER.log( + LOG_LEVELS_STR.LEVEL_DEBUG, + `Query result structure (not found): ${JSON.stringify(queryResult)}` + ) res.status(404).send('Not found') } } else { @@ -134,23 +153,35 @@ aquariusRoutes.get(`${AQUARIUS_API_BASE_PATH}/state/ddo`, async (req, res) => { }) aquariusRoutes.post(`${AQUARIUS_API_BASE_PATH}/assets/ddo/validate`, async (req, res) => { + const node = req.oceanNode try { - if (!req.body || req.body === undefined) { + if (!req.body) { res.status(400).send('Missing DDO object') return } - const ddo = JSON.parse(req.body) as DDO + + const requestBody = JSON.parse(req.body) + const authorization = req.headers?.authorization + const { publisherAddress, nonce, signature } = requestBody + + // This is for backward compatibility with the old way of sending the DDO + const ddo = requestBody.ddo || JSON.parse(req.body) if (!ddo.version) { res.status(400).send('Missing DDO version') return } - const node = req.oceanNode const result = await new ValidateDDOHandler(node).handle({ ddo, + publisherAddress, + authorization, + nonce, + signature, + message: ddo.id + nonce, command: PROTOCOL_COMMANDS.VALIDATE_DDO }) + if (result.stream) { const validationResult = JSON.parse(await streamToString(result.stream as Readable)) res.json(validationResult) diff --git a/src/components/httpRoutes/auth.ts b/src/components/httpRoutes/auth.ts new file mode 100644 index 000000000..ac2b0ef0a --- /dev/null +++ b/src/components/httpRoutes/auth.ts @@ -0,0 +1,79 @@ +import express from 'express' +import { SERVICES_API_BASE_PATH, PROTOCOL_COMMANDS } from '../../utils/constants.js' +import { HTTP_LOGGER } from '../../utils/logging/common.js' +import { + CreateAuthTokenHandler, + InvalidateAuthTokenHandler +} from '../core/handler/authHandler.js' +import { streamToString } from '../../utils/util.js' +import { Readable } from 'stream' + +export const authRoutes = express.Router() + +authRoutes.post( + `${SERVICES_API_BASE_PATH}/auth/token`, + express.json(), + async (req, res) => { + try { + const { signature, address, nonce, validUntil } = req.body + + if (!signature || !address) { + return res.status(400).json({ error: 'Missing required parameters' }) + } + + const response = await new CreateAuthTokenHandler(req.oceanNode).handle({ + command: PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + signature, + address, + nonce, + validUntil + }) + + if (response.status.error) { + return res + .status(response.status.httpStatus) + .json({ error: response.status.error }) + } + + const result = JSON.parse(await streamToString(response.stream as Readable)) + res.json(result) + } catch (error) { + HTTP_LOGGER.error(`Error creating auth token: ${error}`) + res.status(500).json({ error: 'Internal server error' }) + } + } +) + +authRoutes.post( + `${SERVICES_API_BASE_PATH}/auth/token/invalidate`, + express.json(), + async (req, res) => { + try { + const { signature, address, nonce, token } = req.body + + if (!signature || !address || !token) { + return res.status(400).json({ error: 'Missing required parameters' }) + } + + const response = await new InvalidateAuthTokenHandler(req.oceanNode).handle({ + command: PROTOCOL_COMMANDS.INVALIDATE_AUTH_TOKEN, + signature, + address, + nonce, + token + }) + + if (response.status.error) { + return res + .status(response.status.httpStatus) + .json({ error: response.status.error }) + } + + const result = JSON.parse(await streamToString(response.stream as Readable)) + res.json(result) + } catch (error) { + HTTP_LOGGER.error(`Error invalidating auth token: ${error}`) + res.status(500).json({ error: 'Internal server error' }) + } + } +) diff --git a/src/components/httpRoutes/commands.ts b/src/components/httpRoutes/commands.ts index 5c26389fd..6256def36 100644 --- a/src/components/httpRoutes/commands.ts +++ b/src/components/httpRoutes/commands.ts @@ -99,7 +99,12 @@ directCommandRoute.post( // send to another peer (Only here we need P2P networking) response = await req.oceanNode .getP2PNode() - .sendTo(req.body.node as string, JSON.stringify(req.body), sink) + .sendTo( + req.body.node as string, + JSON.stringify(req.body), + sink, + req.body.multiAddrs + ) } else { response = { stream: null, diff --git a/src/components/httpRoutes/compute.ts b/src/components/httpRoutes/compute.ts index c127981d7..7f94a3a47 100644 --- a/src/components/httpRoutes/compute.ts +++ b/src/components/httpRoutes/compute.ts @@ -1,18 +1,28 @@ import express from 'express' import { ComputeGetEnvironmentsHandler, - ComputeStartHandler, + PaidComputeStartHandler, + FreeComputeStartHandler, ComputeStopHandler, ComputeGetStatusHandler, ComputeGetResultHandler, - ComputeInitializeHandler + ComputeInitializeHandler, + ComputeGetStreamableLogsHandler } from '../core/compute/index.js' -import type { ComputeAlgorithm, ComputeAsset, ComputeOutput } from '../../@types/C2D.js' import type { - ComputeStartCommand, + ComputeAlgorithm, + ComputeAsset, + ComputeOutput, + ComputeResourceRequest +} from '../../@types/C2D/C2D.js' +import type { + PaidComputeStartCommand, + ComputePayment, + FreeComputeStartCommand, ComputeStopCommand, ComputeGetResultCommand, - ComputeGetStatusCommand + ComputeGetStatusCommand, + ComputeGetStreamableLogsCommand } from '../../@types/commands.js' import { streamToObject, streamToString } from '../../utils/util.js' @@ -20,29 +30,9 @@ import { PROTOCOL_COMMANDS, SERVICES_API_BASE_PATH } from '../../utils/constants import { Readable } from 'stream' import { HTTP_LOGGER } from '../../utils/logging/common.js' import { LOG_LEVELS_STR } from '../../utils/logging/Logger.js' -import { getConfiguration } from '../../utils/index.js' export const computeRoutes = express.Router() -async function areEmpty(computeEnvs: any, requestChainId?: any): Promise { - if (requestChainId) { - return computeEnvs[parseInt(requestChainId)].length === 0 - } else { - const config = await getConfiguration() - let isEmpty: number = 0 - const supportedNetworks = Object.keys(config.supportedNetworks) - for (const supportedNetwork of supportedNetworks) { - if (computeEnvs[supportedNetwork].length === 0) { - isEmpty++ - } - } - if (isEmpty === supportedNetworks.length) { - return true - } - return false - } -} - computeRoutes.get(`${SERVICES_API_BASE_PATH}/computeEnvironments`, async (req, res) => { try { HTTP_LOGGER.logMessage( @@ -59,22 +49,15 @@ computeRoutes.get(`${SERVICES_API_BASE_PATH}/computeEnvironments`, async (req, r ) // get compute environments const computeEnvironments = await streamToObject(response.stream as Readable) - // check if computeEnvironments is a valid json object and not empty - if ( - computeEnvironments && - !(await areEmpty(computeEnvironments, req.query.chainId)) - ) { - res.json(computeEnvironments) - } else { - HTTP_LOGGER.logMessage(`Compute environments not found`, true) - res.status(404).send('Compute environments not found') - } + // always return the array, even if it's empty + res.json(computeEnvironments) } catch (error) { HTTP_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error: ${error}`) res.status(500).send('Internal Server Error') } }) +// start compute computeRoutes.post(`${SERVICES_API_BASE_PATH}/compute`, async (req, res) => { try { HTTP_LOGGER.logMessage( @@ -82,25 +65,77 @@ computeRoutes.post(`${SERVICES_API_BASE_PATH}/compute`, async (req, res) => { true ) - const startComputeTask: ComputeStartCommand = { + const startComputeTask: PaidComputeStartCommand = { command: PROTOCOL_COMMANDS.COMPUTE_START, node: (req.body.node as string) || null, consumerAddress: (req.body.consumerAddress as string) || null, signature: (req.body.signature as string) || null, nonce: (req.body.nonce as string) || null, environment: (req.body.environment as string) || null, + maxJobDuration: (req.body.maxJobDuration as number) || null, algorithm: (req.body.algorithm as ComputeAlgorithm) || null, - dataset: (req.body.dataset as unknown as ComputeAsset) || null + datasets: (req.body.datasets as unknown as ComputeAsset[]) || null, + payment: (req.body.payment as unknown as ComputePayment) || null, + resources: (req.body.resources as unknown as ComputeResourceRequest[]) || null, + policyServer: (req.body.policyServer as any) || null, + metadata: req.body.metadata || null, + authorization: req.headers?.authorization, + additionalViewers: (req.body.additionalViewers as unknown as string[]) || null, + queueMaxWaitTime: req.body.queueMaxWaitTime || 0 + } + if (req.body.output) { + startComputeTask.output = req.body.output as ComputeOutput + } + + const response = await new PaidComputeStartHandler(req.oceanNode).handle( + startComputeTask + ) + if (response?.status?.httpStatus === 200) { + const jobs = await streamToObject(response.stream as Readable) + res.status(200).json(jobs) + } else { + HTTP_LOGGER.log(LOG_LEVELS_STR.LEVEL_INFO, `Error: ${response?.status?.error}`) + res.status(response?.status.httpStatus).json(response?.status?.error) } - if (req.body.additionalDatasets) { - startComputeTask.additionalDatasets = req.query - .additionalDatasets as unknown as ComputeAsset[] + } catch (error) { + HTTP_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error: ${error}`) + res.status(500).send('Internal Server Error') + } +}) + +// free compute +computeRoutes.post(`${SERVICES_API_BASE_PATH}/freeCompute`, async (req, res) => { + try { + HTTP_LOGGER.logMessage( + `FreeComputeStartCommand request received as body params: ${JSON.stringify( + req.body + )}`, + true + ) + const startComputeTask: FreeComputeStartCommand = { + command: PROTOCOL_COMMANDS.FREE_COMPUTE_START, + node: (req.body.node as string) || null, + consumerAddress: (req.body.consumerAddress as string) || null, + signature: (req.body.signature as string) || null, + nonce: (req.body.nonce as string) || null, + environment: (req.body.environment as string) || null, + algorithm: (req.body.algorithm as ComputeAlgorithm) || null, + datasets: (req.body.datasets as unknown as ComputeAsset[]) || null, + resources: (req.body.resources as unknown as ComputeResourceRequest[]) || null, + maxJobDuration: req.body.maxJobDuration || null, + policyServer: (req.body.policyServer as any) || null, + metadata: req.body.metadata || null, + authorization: req.headers?.authorization, + additionalViewers: (req.body.additionalViewers as unknown as string[]) || null, + queueMaxWaitTime: req.body.queueMaxWaitTime || 0 } if (req.body.output) { startComputeTask.output = req.body.output as ComputeOutput } - const response = await new ComputeStartHandler(req.oceanNode).handle(startComputeTask) + const response = await new FreeComputeStartHandler(req.oceanNode).handle( + startComputeTask + ) if (response?.status?.httpStatus === 200) { const jobs = await streamToObject(response.stream as Readable) res.status(200).json(jobs) @@ -114,6 +149,7 @@ computeRoutes.post(`${SERVICES_API_BASE_PATH}/compute`, async (req, res) => { } }) +// stop compute computeRoutes.put(`${SERVICES_API_BASE_PATH}/compute`, async (req, res) => { try { HTTP_LOGGER.logMessage( @@ -130,7 +166,8 @@ computeRoutes.put(`${SERVICES_API_BASE_PATH}/compute`, async (req, res) => { signature: (req.query.signature as string) || null, nonce: (req.query.nonce as string) || null, jobId: (req.query.jobId as string) || null, - agreementId: (req.query.agreementId as string) || null + agreementId: (req.query.agreementId as string) || null, + authorization: req.headers?.authorization || null } const response = await new ComputeStopHandler(req.oceanNode).handle(stopComputeTask) const jobs = await streamToObject(response.stream as Readable) @@ -141,6 +178,7 @@ computeRoutes.put(`${SERVICES_API_BASE_PATH}/compute`, async (req, res) => { } }) +// get status computeRoutes.get(`${SERVICES_API_BASE_PATH}/compute`, async (req, res) => { try { HTTP_LOGGER.logMessage( @@ -165,6 +203,7 @@ computeRoutes.get(`${SERVICES_API_BASE_PATH}/compute`, async (req, res) => { } }) +// compute results computeRoutes.get(`${SERVICES_API_BASE_PATH}/computeResult`, async (req, res) => { try { HTTP_LOGGER.logMessage( @@ -178,7 +217,8 @@ computeRoutes.get(`${SERVICES_API_BASE_PATH}/computeResult`, async (req, res) => index: req.query.index ? Number(req.query.index) : null, // can't be parseInt() because that excludes index 0 jobId: (req.query.jobId as string) || null, signature: (req.query.signature as string) || null, - nonce: (req.query.nonce as string) || null + nonce: (req.query.nonce as string) || null, + authorization: req.headers?.authorization } const response = await new ComputeGetResultHandler(req.oceanNode).handle( @@ -196,6 +236,43 @@ computeRoutes.get(`${SERVICES_API_BASE_PATH}/computeResult`, async (req, res) => res.status(500).send('Internal Server Error') } }) + +// streaming logs +computeRoutes.get(`${SERVICES_API_BASE_PATH}/computeStreamableLogs`, async (req, res) => { + try { + HTTP_LOGGER.logMessage( + `ComputeGetStreamableLogsCommand request received with query: ${JSON.stringify( + req.query + )}`, + true + ) + + const resultComputeTask: ComputeGetStreamableLogsCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_STREAMABLE_LOGS, + node: (req.query.node as string) || null, + consumerAddress: (req.query.consumerAddress as string) || null, + jobId: (req.query.jobId as string) || null, + signature: (req.query.signature as string) || null, + nonce: (req.query.nonce as string) || null, + authorization: req.headers?.authorization + } + + const response = await new ComputeGetStreamableLogsHandler(req.oceanNode).handle( + resultComputeTask + ) + if (response.stream) { + res.status(response.status.httpStatus) + res.set(response.status.headers) + response.stream.pipe(res) + } else { + res.status(response.status.httpStatus).send(response.status.error) + } + } catch (error) { + HTTP_LOGGER.log(LOG_LEVELS_STR.LEVEL_ERROR, `Error: ${error}`) + res.status(500).send('Internal Server Error') + } +}) + computeRoutes.post(`${SERVICES_API_BASE_PATH}/initializeCompute`, async (req, res) => { try { HTTP_LOGGER.logMessage( @@ -217,10 +294,6 @@ computeRoutes.post(`${SERVICES_API_BASE_PATH}/initializeCompute`, async (req, re return } } - if (!body.algorithm.documentId) { - res.status(400).send('Missing algorithm did') - return - } body.command = PROTOCOL_COMMANDS.COMPUTE_INITIALIZE const result = await new ComputeInitializeHandler(req.oceanNode).handle(body) if (result.stream) { diff --git a/src/components/httpRoutes/dids.ts b/src/components/httpRoutes/dids.ts index ed9c4f1bd..28b60f402 100644 --- a/src/components/httpRoutes/dids.ts +++ b/src/components/httpRoutes/dids.ts @@ -2,41 +2,56 @@ import express, { Request, Response } from 'express' import { sendMissingP2PResponse } from './index.js' import { hasP2PInterface } from '../../utils/config.js' -export const advertiseDidRoute = express.Router() - -advertiseDidRoute.post( - '/advertiseDid', +export const getProvidersForStringRoute = express.Router() +getProvidersForStringRoute.get( + '/getProvidersForString', express.urlencoded({ extended: true, type: '*/*' }), async (req: Request, res: Response): Promise => { - if (!req.query.did) { + if (!req.query.input) { res.sendStatus(400) return } if (hasP2PInterface) { - await req.oceanNode.getP2PNode().advertiseDid(req.query.did as string) - res.sendStatus(200) + const providers = await req.oceanNode + .getP2PNode() + .getProvidersForString(req.query.input as string) + res.json(providers) } else { sendMissingP2PResponse(res) } } ) -export const getProvidersForDidRoute = express.Router() -getProvidersForDidRoute.get( - '/getProvidersForDid', - express.urlencoded({ extended: true, type: '*/*' }), - async (req: Request, res: Response): Promise => { - if (!req.query.did) { - res.sendStatus(400) - return - } - if (hasP2PInterface) { - const providers = await req.oceanNode - .getP2PNode() - .getProvidersForDid(req.query.did as string) - res.json(providers) - } else { - sendMissingP2PResponse(res) +export const getProvidersForStringsRoute = express.Router() +getProvidersForStringsRoute.post( + '/getProvidersForStrings', + express.json(), + async (req, res) => { + try { + if (!req.body) { + res.status(400).send('Missing array of strings in request body.') + return + } + // const body = JSON.parse(req.body) + if ( + Array.isArray(req.body) && + req.body.every((item: unknown) => typeof item === 'string') + ) { + const timeout = + typeof req.query?.timeout === 'string' + ? parseInt(req.query.timeout, 10) + : undefined + const providers = await req.oceanNode + .getP2PNode() + .getProvidersForStrings(req.body, timeout) + + res.json(providers) + } else { + res.status(400).send('Expected an array of strings.') + } + } catch (error) { + console.error('Error processing request:', error) + res.status(400).send(error) } } ) diff --git a/src/components/httpRoutes/getOceanPeers.ts b/src/components/httpRoutes/getOceanPeers.ts index 4c619d72b..cc81a7391 100644 --- a/src/components/httpRoutes/getOceanPeers.ts +++ b/src/components/httpRoutes/getOceanPeers.ts @@ -1,51 +1,70 @@ import express, { Request, Response } from 'express' -import { getDefaultLevel } from '../../utils/logging/Logger.js' -import { P2P_LOGGER } from '../../utils/logging/common.js' -import { sendMissingP2PResponse } from './index.js' -import { getBoolEnvValue, hasP2PInterface } from '../../utils/config.js' -export const getOceanPeersRoute = express.Router() +import { + GetP2PPeerHandler, + GetP2PPeersHandler, + GetP2PNetworkStatsHandler, + FindPeerHandler +} from '../core/handler/p2p.js' +import { PROTOCOL_COMMANDS } from '../../utils/constants.js' +import { streamToString } from '../../utils/util.js' +import { Readable } from 'stream' +export const p2pRoutes = express.Router() -getOceanPeersRoute.get( +p2pRoutes.get( '/getP2pNetworkStats', async (req: Request, res: Response): Promise => { - // only return values if env P2P_ENABLE_NETWORK_STATS is explicitly allowed - if (hasP2PInterface && getBoolEnvValue('P2P_ENABLE_NETWORK_STATS', false)) { - const stats = await req.oceanNode.getP2PNode().getNetworkingStats() - P2P_LOGGER.log(getDefaultLevel(), `getP2pNetworkStats: ${stats}`, true) - res.json(stats) + const node = req.oceanNode + const result = await new GetP2PNetworkStatsHandler(node).handle({ + command: PROTOCOL_COMMANDS.GET_P2P_NETWORK_STATS + }) + if (result.stream) { + const validationResult = JSON.parse(await streamToString(result.stream as Readable)) + res.json(validationResult) } else { - res.status(400).send('Not enabled or unavailable') + res.status(result.status.httpStatus).send(result.status.error) } } ) -getOceanPeersRoute.get( - '/getOceanPeers', + +p2pRoutes.get( + '/findPeer', + express.urlencoded({ extended: true }), async (req: Request, res: Response): Promise => { - if (hasP2PInterface) { - const peers = await req.oceanNode.getP2PNode().getAllOceanPeers() - P2P_LOGGER.log(getDefaultLevel(), `getOceanPeers: ${peers}`, true) - res.json(peers) + if (!req.query.peerId) { + res.sendStatus(400) + return + } + const node = req.oceanNode + const result = await new FindPeerHandler(node).handle({ + command: PROTOCOL_COMMANDS.FIND_PEER, + peerId: req.query.peerId as string, + timeout: req.query.timeout as string + }) + if (result.stream) { + const validationResult = JSON.parse(await streamToString(result.stream as Readable)) + res.json(validationResult) } else { - sendMissingP2PResponse(res) + res.status(result.status.httpStatus).send(result.status.error) } } ) export const getP2PPeersRoute = express.Router() -getP2PPeersRoute.get( - '/getP2PPeers', - async (req: Request, res: Response): Promise => { - if (hasP2PInterface) { - const peers = await req.oceanNode.getP2PNode().getAllPeerStore() - res.json(peers) - } else { - sendMissingP2PResponse(res) - } +p2pRoutes.get('/getP2PPeers', async (req: Request, res: Response): Promise => { + const node = req.oceanNode + const result = await new GetP2PPeersHandler(node).handle({ + command: PROTOCOL_COMMANDS.GET_P2P_PEERS + }) + if (result.stream) { + const validationResult = JSON.parse(await streamToString(result.stream as Readable)) + res.json(validationResult) + } else { + res.status(result.status.httpStatus).send(result.status.error) } -) +}) export const getP2PPeerRoute = express.Router() -getP2PPeersRoute.get( +p2pRoutes.get( '/getP2PPeer', express.urlencoded({ extended: true }), async (req: Request, res: Response): Promise => { @@ -53,13 +72,16 @@ getP2PPeersRoute.get( res.sendStatus(400) return } - if (hasP2PInterface) { - const peers = await req.oceanNode - .getP2PNode() - .getPeerDetails(String(req.query.peerId)) - res.json(peers) + const node = req.oceanNode + const result = await new GetP2PPeerHandler(node).handle({ + command: PROTOCOL_COMMANDS.GET_P2P_PEER, + peerId: req.query.peerId as string + }) + if (result.stream) { + const validationResult = JSON.parse(await streamToString(result.stream as Readable)) + res.json(validationResult) } else { - sendMissingP2PResponse(res) + res.status(result.status.httpStatus).send(result.status.error) } } ) diff --git a/src/components/httpRoutes/index.ts b/src/components/httpRoutes/index.ts index ee974a52d..cf5530c5f 100644 --- a/src/components/httpRoutes/index.ts +++ b/src/components/httpRoutes/index.ts @@ -1,6 +1,6 @@ import express, { Response } from 'express' -import { getOceanPeersRoute, getP2PPeersRoute, getP2PPeerRoute } from './getOceanPeers.js' -import { advertiseDidRoute, getProvidersForDidRoute } from './dids.js' +import { p2pRoutes } from './getOceanPeers.js' +import { getProvidersForStringRoute, getProvidersForStringsRoute } from './dids.js' import { directCommandRoute } from './commands.js' import { logRoutes } from './logs.js' import { providerRoutes } from './provider.js' @@ -12,8 +12,12 @@ import { queueRoutes } from './queue.js' // import { getConfiguration } from '../../utils/config.js' import { jobsRoutes } from './jobs.js' import { addMapping, allRoutesMapping, findPathName } from './routeUtils.js' +import { PolicyServerPassthroughRoute } from './policyServer.js' +import { authRoutes } from './auth.js' +import { adminConfigRoutes } from './adminConfig.js' export * from './getOceanPeers.js' +export * from './auth.js' export const httpRoutes = express.Router() @@ -21,16 +25,11 @@ export function sendMissingP2PResponse(res: Response) { res.status(400).send('Invalid or Non Existing P2P configuration') } -// /getOceanPeers -httpRoutes.use(getOceanPeersRoute) -// /getP2PPeers -httpRoutes.use(getP2PPeersRoute) -// /getP2PPeer -httpRoutes.use(getP2PPeerRoute) -// /advertiseDid -httpRoutes.use(advertiseDidRoute) +// /p2pRoutes +httpRoutes.use(p2pRoutes) // /getProvidersForDid -httpRoutes.use(getProvidersForDidRoute) +httpRoutes.use(getProvidersForStringRoute) +httpRoutes.use(getProvidersForStringsRoute) // /directCommand httpRoutes.use(directCommandRoute) // /logs @@ -57,6 +56,12 @@ httpRoutes.use(computeRoutes) httpRoutes.use(queueRoutes) // running jobs httpRoutes.use(jobsRoutes) +// policy server passthrough +httpRoutes.use(PolicyServerPassthroughRoute) +// auth routes +httpRoutes.use(authRoutes) +// admin config routes +httpRoutes.use(adminConfigRoutes) export function getAllServiceEndpoints() { httpRoutes.stack.forEach(addMapping.bind(null, [])) diff --git a/src/components/httpRoutes/logs.ts b/src/components/httpRoutes/logs.ts index ba0631b03..23e076de9 100644 --- a/src/components/httpRoutes/logs.ts +++ b/src/components/httpRoutes/logs.ts @@ -1,11 +1,12 @@ import express from 'express' import { validateAdminSignature } from '../../utils/auth.js' import { HTTP_LOGGER } from '../../utils/logging/common.js' +import { CommonValidation } from '../../utils/validators.js' export const logRoutes = express.Router() // Middleware to validate signature and expiry timestamp -const validateRequest = ( +const validateRequest = async ( req: express.Request, res: express.Response, next: express.NextFunction @@ -26,7 +27,10 @@ const validateRequest = ( return res.status(400).send('Invalid expiryTimestamp') } - const isValid = validateAdminSignature(expiryTimestamp, signature) + const isValid: CommonValidation = await validateAdminSignature( + expiryTimestamp, + signature + ) if (!isValid.valid) { return res.status(403).send(`Invalid signature: ${isValid.error}`) } @@ -56,7 +60,7 @@ logRoutes.post('/logs', express.json(), validateRequest, async (req, res) => { .getDatabase() .logs.retrieveMultipleLogs(startTime, endTime, maxLogs, moduleName, level, page) - if (logs) { + if (logs.length > 0) { res.json(logs) } else { res.status(404).send('No logs found') diff --git a/src/components/httpRoutes/policyServer.ts b/src/components/httpRoutes/policyServer.ts index 8d89c162e..df77a813e 100644 --- a/src/components/httpRoutes/policyServer.ts +++ b/src/components/httpRoutes/policyServer.ts @@ -1,5 +1,8 @@ import express, { Request, Response } from 'express' -import { PolicyServerPassthroughHandler } from '../core/handler/policyServer.js' +import { + PolicyServerPassthroughHandler, + PolicyServerInitializeHandler +} from '../core/handler/policyServer.js' import { HTTP_LOGGER } from '../../utils/logging/common.js' import { PROTOCOL_COMMANDS, SERVICES_API_BASE_PATH } from '../../utils/constants.js' @@ -34,3 +37,35 @@ PolicyServerPassthroughRoute.post( // res.sendStatus(200) } ) + +PolicyServerPassthroughRoute.post( + `${SERVICES_API_BASE_PATH}/initializePSVerification`, + express.urlencoded({ extended: true, type: '*/*' }), + async (req: Request, res: Response): Promise => { + HTTP_LOGGER.logMessage( + `initializePSVerificationRoute request received: ${JSON.stringify(req.body)}`, + true + ) + try { + const response = await new PolicyServerInitializeHandler(req.oceanNode).handle({ + command: PROTOCOL_COMMANDS.POLICY_SERVER_PASSTHROUGH, + documentId: req.body.documentId, + serviceId: req.body.serviceId, + consumerAddress: req.body.consumerAddress, + policyServer: req.body.policyServer + }) + if (response.stream) { + res.status(response.status.httpStatus) + res.set(response.status.headers) + response.stream.pipe(res) + } else { + HTTP_LOGGER.error(response.status.error) + res.status(response.status.httpStatus).send(response.status.error) + } + } catch (error) { + HTTP_LOGGER.error(error.message) + res.status(500).send(error) + } + // res.sendStatus(200) + } +) diff --git a/src/components/httpRoutes/provider.ts b/src/components/httpRoutes/provider.ts index 4194a2689..7cc09f687 100644 --- a/src/components/httpRoutes/provider.ts +++ b/src/components/httpRoutes/provider.ts @@ -153,7 +153,7 @@ providerRoutes.get(`${SERVICES_API_BASE_PATH}/initialize`, async (req, res) => { serviceId: (req.query.serviceId as string) || null, consumerAddress: (req.query.consumerAddress as string) || null, validUntil: parseInt(req.query.validUntil as string) || null, - policyServer: req.query.policyServer || null + policyServer: (req.query.policyServer as any) || null }) if (result.stream) { const initializeREsponse = await streamToObject(result.stream as Readable) @@ -200,6 +200,7 @@ providerRoutes.get( `Download request received: ${JSON.stringify(req.query)}`, true ) + const authorization = req.headers?.authorization try { const { fileIndex, @@ -208,9 +209,20 @@ providerRoutes.get( transferTxId, nonce, consumerAddress, - signature + signature, + userdata } = req.query + let parsedUserData: any = null + if (userdata) { + try { + parsedUserData = JSON.parse(userdata as string) + } catch (e) { + HTTP_LOGGER.logMessage(`Invalid userdata JSON: ${userdata}`, true) + parsedUserData = null + } + } + const downloadTask: DownloadCommand = { fileIndex: Number(fileIndex), documentId: documentId as string, @@ -220,14 +232,22 @@ providerRoutes.get( consumerAddress: consumerAddress as string, signature: signature as string, command: PROTOCOL_COMMANDS.DOWNLOAD, - policyServer: req.query.policyServer || null + policyServer: (req.query.policyServer as any) || null, + authorization: authorization as string, + userData: parsedUserData } const response = await new DownloadHandler(req.oceanNode).handle(downloadTask) if (response.stream) { res.status(response.status.httpStatus) - res.set(response.status.headers) + + const safeHeaders = { ...response.status.headers } + if (safeHeaders['content-length'] && safeHeaders['Transfer-Encoding']) { + delete safeHeaders['content-length'] + } + + res.set(safeHeaders) response.stream.pipe(res) } else { res.status(response.status.httpStatus).send(response.status.error) diff --git a/src/components/httpRoutes/requestValidator.ts b/src/components/httpRoutes/requestValidator.ts index 6fb6e553b..dd505fca4 100644 --- a/src/components/httpRoutes/requestValidator.ts +++ b/src/components/httpRoutes/requestValidator.ts @@ -1,36 +1,55 @@ import { Request, Response } from 'express' -import { getConfiguration } from '../../utils/index.js' +import { getConfiguration } from '../../utils/config.js' import { HTTP_LOGGER } from '../../utils/logging/common.js' +import { OceanNodeConfig } from '../../@types/OceanNode.js' +import { + checkGlobalConnectionsRateLimit, + checkRequestsRateLimit, + CommonValidation +} from '../../utils/validators.js' -// TODO we should group common stuff, -// we have multiple similar validation interfaces -export interface CommonValidation { - valid: boolean - error?: string -} - -// midleware to valid client addresses against a denylist +// Middleware to validate IP and apply rate limiting export const requestValidator = async function (req: Request, res: Response, next: any) { - // Perform the validations. - const requestIP = req.headers['x-forwarded-for'] || req.socket.remoteAddress - const validation = await checkIP(requestIP) - // Validation failed, or an error occurred during the external request. - if (!validation.valid) { - res.status(403).send(validation.error) + const now = Date.now() + const requestIP = (req.headers['x-forwarded-for'] || + req.socket.remoteAddress || + '') as string + + const configuration = await getConfiguration() + + const ipValidation = await checkIP(requestIP, configuration) + if (!ipValidation.valid) { + HTTP_LOGGER.logMessage(`IP denied: ${ipValidation.error}`) + return res.status(403).send(ipValidation.error) + } + + const rateLimitCheck = checkRequestsRateLimit(requestIP, configuration, now) + if (!rateLimitCheck.valid) { + HTTP_LOGGER.logMessage( + `Exceeded limit of requests per minute ${configuration.rateLimit}: ${rateLimitCheck.error}` + ) + return res.status(429).send(rateLimitCheck.error) + } + + const connectionsRateValidation = checkGlobalConnectionsRateLimit(configuration, now) + if (!connectionsRateValidation.valid) { + res.status(403).send(connectionsRateValidation.error) return } - // Validation passed. + next() } -async function checkIP(requestIP: string | string[]): Promise { +function checkIP( + requestIP: string | string[], + configuration: OceanNodeConfig +): CommonValidation { let onDenyList = false - const configuration = await getConfiguration() if (!Array.isArray(requestIP)) { - onDenyList = configuration.denyList?.ips.includes(requestIP) + onDenyList = configuration.denyList?.ips?.includes(requestIP) } else { for (const ip of requestIP) { - if (configuration.denyList?.ips.includes(ip)) { + if (configuration.denyList?.ips?.includes(ip)) { onDenyList = true break } diff --git a/src/components/httpRoutes/rootEndpoint.ts b/src/components/httpRoutes/rootEndpoint.ts index 6aa57c83d..8322b9b21 100644 --- a/src/components/httpRoutes/rootEndpoint.ts +++ b/src/components/httpRoutes/rootEndpoint.ts @@ -10,6 +10,7 @@ rootEndpointRoutes.get('/', async (req, res) => { HTTP_LOGGER.warn(`Supported networks not defined`) } res.json({ + nodeId: config.keys.peerId, chainIds: config.supportedNetworks ? Object.keys(config.supportedNetworks) : [], providerAddress: config.keys.ethAddress, serviceEndpoints: getAllServiceEndpoints(), diff --git a/src/components/httpRoutes/routeUtils.ts b/src/components/httpRoutes/routeUtils.ts index 4843f5d0e..0445fd027 100644 --- a/src/components/httpRoutes/routeUtils.ts +++ b/src/components/httpRoutes/routeUtils.ts @@ -46,6 +46,16 @@ routesNames.set('computeStart', { method: 'post' }) +routesNames.set('freeCompute', { + path: `${SERVICES_API_BASE_PATH}/freeCompute`, + method: 'post' +}) + +routesNames.set('computeStreamableLogs', { + path: `${SERVICES_API_BASE_PATH}/computeStreamableLogs`, + method: 'GET' +}) + routesNames.set('computeStatus', { path: `${SERVICES_API_BASE_PATH}/compute`, method: 'get' @@ -174,6 +184,26 @@ routesNames.set('indexQueue', { method: 'get' }) +routesNames.set('PolicyServerPassthrough', { + path: `${SERVICES_API_BASE_PATH}/PolicyServerPassthrough`, + method: 'post' +}) + +routesNames.set('initializePSVerification', { + path: `${SERVICES_API_BASE_PATH}/initializePSVerification`, + method: 'post' +}) + +routesNames.set('generateAuthToken', { + path: `${SERVICES_API_BASE_PATH}/auth/token`, + method: 'post' +}) + +routesNames.set('invalidateAuthToken', { + path: `${SERVICES_API_BASE_PATH}/auth/token/invalidate`, + method: 'post' +}) + export function addMapping(path: any, layer: any) { if (layer.route) { layer.route.stack.forEach(addMapping.bind(null, path.concat(split(layer.route.path)))) diff --git a/src/components/policyServer/index.ts b/src/components/policyServer/index.ts index eeb0523c1..6a0f2036f 100644 --- a/src/components/policyServer/index.ts +++ b/src/components/policyServer/index.ts @@ -1,6 +1,6 @@ -// import { CORE_LOGGER } from '../../utils/logging/common.js' +import { DDO } from '@oceanprotocol/ddo-js' import { PolicyServerResult } from '../../@types/policyServer.js' -import { DDO } from '../../@types/DDO/DDO.js' +import { isDefined } from '../../utils/util.js' export class PolicyServer { serverUrl: string @@ -10,7 +10,7 @@ export class PolicyServer { } private async askServer(command: any): Promise { - if (!this.serverUrl) return { success: true, message: '', httpStatus: 0 } + if (!this.serverUrl) return { success: true, message: '', httpStatus: 404 } let response try { response = await fetch(this.serverUrl, { @@ -21,10 +21,18 @@ export class PolicyServer { body: JSON.stringify(command) }) } catch (e) { - return { success: true, message: '', httpStatus: 0 } + return { + success: true, + message: '', + httpStatus: 400 + } } if (response.status === 200) { - return { success: true, message: '', httpStatus: response.status } + return { + success: true, + message: await response.text(), + httpStatus: response.status + } } return { success: false, message: await response.text(), httpStatus: response.status } } @@ -61,7 +69,7 @@ export class PolicyServer { return await this.askServer(command) } - async checkInitialize( + async checkDownload( documentId: string, ddo: DDO, serviceId: string, @@ -69,7 +77,7 @@ export class PolicyServer { policyServer: any ): Promise { const command = { - action: 'initialize', + action: 'download', documentId, ddo, serviceId, @@ -79,22 +87,36 @@ export class PolicyServer { return await this.askServer(command) } - async checkDownload( + async checkStartCompute( documentId: string, - ddo: DDO, + ddo: DDO | Record, serviceId: string, - fileIndex: number, - transferTxId: string, consumerAddress: string, policyServer: any ): Promise { const command = { - action: 'download', + action: 'startCompute', documentId, ddo, serviceId, - fileIndex, - transferTxId, + consumerAddress, + policyServer + } + return await this.askServer(command) + } + + async initializePSVerification( + documentId: string, + ddo: DDO, + serviceId: string, + consumerAddress: string, + policyServer: any + ): Promise { + const command = { + action: 'initiate', + documentId, + serviceId, + ddo, consumerAddress, policyServer } @@ -104,4 +126,8 @@ export class PolicyServer { async passThrough(request: any): Promise { return await this.askServer(request) } + + public isConfigured(): boolean { + return isDefined(this.serverUrl) + } } diff --git a/src/components/storage/index.ts b/src/components/storage/index.ts index 509766e1d..09991da7a 100644 --- a/src/components/storage/index.ts +++ b/src/components/storage/index.ts @@ -49,11 +49,14 @@ export abstract class Storage { // similar to all subclasses async getReadableStream(): Promise { const input = this.getDownloadUrl() + CORE_LOGGER.info(`Fetching the file from ${input}`) const response = await axios({ method: 'get', url: input, - responseType: 'stream' + responseType: 'stream', + timeout: 30000 }) + CORE_LOGGER.info(`Successfully fetched the file from ${input}`) return { httpStatus: response.status, @@ -65,22 +68,33 @@ export abstract class Storage { static getStorageClass( file: any, config: OceanNodeConfig - ): UrlStorage | IpfsStorage | ArweaveStorage | S3Storage { - const { type } = file - switch ( - type?.toLowerCase() // case insensitive - ) { - case FileObjectType.URL: - return new UrlStorage(file, config) - case FileObjectType.IPFS: - return new IpfsStorage(file, config) - case FileObjectType.ARWEAVE: - return new ArweaveStorage(file, config) - case FileObjectType.S3: - return new S3Storage(file, config) - default: - throw new Error(`Invalid storage type: ${type}`) + ): UrlStorage | IpfsStorage | ArweaveStorage { + if (!file) { + throw new Error('Empty file object') } + try { + const { type } = file + switch ( + type?.toLowerCase() // case insensitive + ) { + case FileObjectType.URL: + return new UrlStorage(file, config) + case FileObjectType.IPFS: + return new IpfsStorage(file, config) + case FileObjectType.ARWEAVE: + return new ArweaveStorage(file, config) + default: + throw new Error(`Invalid storage type: ${type}`) + } + } catch (err) { + console.error('Error in getStorageClass: ', err) + throw err + } + } + + getStorageType(file: any): FileObjectType { + const { type } = file + return type } async getFileInfo( @@ -190,7 +204,7 @@ export class UrlStorage extends Storage { super(file, config) const [isValid, message] = this.validate() if (isValid === false) { - throw new Error(`Error validationg the URL file: ${message}`) + throw new Error(`Error validating the URL file: ${message}`) } } @@ -265,7 +279,8 @@ export class UrlStorage extends Storage { const response = await axios({ url: file.url, method: file.method || 'get', - headers: file.headers + headers: file.headers, + timeout: 30000 }) return await encryptData(response.data, encryptionType) } @@ -277,13 +292,13 @@ export class ArweaveStorage extends Storage { const [isValid, message] = this.validate() if (isValid === false) { - throw new Error(`Error validationg the Arweave file: ${message}`) + throw new Error(`Error validating the Arweave file: ${message}`) } } validate(): [boolean, string] { - if (!process.env.ARWEAVE_GATEWAY) { - return [false, 'Arweave gateway is not provided!'] + if (!this.config.arweaveGateway) { + return [false, 'Arweave gateway is not configured!'] } const file: ArweaveFileObject = this.getFile() as ArweaveFileObject if (!file.transactionId) { @@ -312,14 +327,14 @@ export class ArweaveStorage extends Storage { } getDownloadUrl(): string { - return urlJoin(process.env.ARWEAVE_GATEWAY, this.getFile().transactionId) + return urlJoin(this.config.arweaveGateway, this.getFile().transactionId) } async fetchSpecificFileMetadata( fileObject: ArweaveFileObject, forceChecksum: boolean ): Promise { - const url = urlJoin(process.env.ARWEAVE_GATEWAY, fileObject.transactionId) + const url = urlJoin(this.config.arweaveGateway, fileObject.transactionId) const { contentLength, contentType, contentChecksum } = await fetchFileMetadata( url, 'get', @@ -342,7 +357,7 @@ export class ArweaveStorage extends Storage { ): Promise { const file = this.getFile() const response = await axios({ - url: urlJoin(process.env.ARWEAVE_GATEWAY, file.transactionId), + url: urlJoin(this.config.arweaveGateway, file.transactionId), method: 'get' }) return await encryptData(response.data, encryptionType) @@ -355,13 +370,13 @@ export class IpfsStorage extends Storage { const [isValid, message] = this.validate() if (isValid === false) { - throw new Error(`Error validationg the IPFS file: ${message}`) + throw new Error(`Error validating the IPFS file: ${message}`) } } validate(): [boolean, string] { - if (!process.env.IPFS_GATEWAY) { - return [false, 'IPFS gateway is not provided!'] + if (!this.config.ipfsGateway) { + return [false, 'IPFS gateway is not configured!'] } const file: IpfsFileObject = this.getFile() as IpfsFileObject if (!file.hash) { @@ -384,14 +399,14 @@ export class IpfsStorage extends Storage { } getDownloadUrl(): string { - return urlJoin(process.env.IPFS_GATEWAY, urlJoin('/ipfs', this.getFile().hash)) + return urlJoin(this.config.ipfsGateway, urlJoin('/ipfs', this.getFile().hash)) } async fetchSpecificFileMetadata( fileObject: IpfsFileObject, forceChecksum: boolean ): Promise { - const url = urlJoin(process.env.IPFS_GATEWAY, urlJoin('/ipfs', fileObject.hash)) + const url = urlJoin(this.config.ipfsGateway, urlJoin('/ipfs', fileObject.hash)) const { contentLength, contentType, contentChecksum } = await fetchFileMetadata( url, 'get', diff --git a/src/helpers/scripts/setupNodeEnv.sh b/src/helpers/scripts/setupNodeEnv.sh index e3727f7b8..4ecf02edd 100755 --- a/src/helpers/scripts/setupNodeEnv.sh +++ b/src/helpers/scripts/setupNodeEnv.sh @@ -239,6 +239,34 @@ if [ "$run_indexer" == 'y' ]; then configure_rpc fi +# Check if user wants to enable compute functionality +read -p "Do you want to enable compute functionality on your node? [ y/n ]: " enable_compute +enable_compute=${enable_compute:-y} +if [ "$enable_compute" == 'y' ]; then + echo "" + echo "✅ Setting default Docker compute environment configuration" + echo " This enables compute-to-data functionality with standard resource limits:" + echo " • Docker socket path: /var/run/docker.sock" + echo " • Storage expiry: 7 days (604800 seconds)" + echo " • Max job duration: 10 hours (36000 seconds)" + echo " • Free compute resources: 1 CPU, 1GB RAM, 1GB disk" + echo " • Maximum free jobs: 3 concurrent jobs" + echo "" + echo " You can customize this in your .env file for production use." + echo "" + + DOCKER_COMPUTE_ENV="[{\"socketPath\":\"/var/run/docker.sock\",\"resources\":[{\"id\":\"disk\",\"total\":10}],\"storageExpiry\":604800,\"maxJobDuration\":36000,\"fees\":{\"1\":[{\"feeToken\":\"0x123\",\"prices\":[{\"id\":\"cpu\",\"price\":1}]}]},\"free\":{\"maxJobDuration\":360000,\"maxJobs\":3,\"resources\":[{\"id\":\"cpu\",\"max\":1},{\"id\":\"ram\",\"max\":1},{\"id\":\"disk\",\"max\":1}]}}]" + + REPLACE_STR="DOCKER_COMPUTE_ENVIRONMENTS='$DOCKER_COMPUTE_ENV'" + if [ "$(uname)" == "Darwin" ]; then + sed -i '' -e "s;DOCKER_COMPUTE_ENVIRONMENTS=;$REPLACE_STR;" "$env_file_path" + else + sed -i -e "s;DOCKER_COMPUTE_ENVIRONMENTS=;$REPLACE_STR;" "$env_file_path" + fi + echo "Compute environment successfully configured!" +fi +echo "------------------------------------------------------------------------------" + if [ $created_pk_file -eq 1 ]; then read -p "Do you want me to delete the generated $pk_file file? (your key is already saved): [ y/n ]" delete_pk_file delete_pk_file=${delete_pk_file:-n} diff --git a/src/index.ts b/src/index.ts index 1796a87b9..5eeb52366 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,7 @@ import { OCEAN_NODE_LOGGER } from './utils/logging/common.js' import path from 'path' import { fileURLToPath } from 'url' import cors from 'cors' -import { scheduleCronJobs } from './utils/logging/logDeleteCron.js' +import { scheduleCronJobs } from './utils/cronjobs/scheduleCronJobs.js' import { requestValidator } from './components/httpRoutes/requestValidator.js' import { hasValidDBConfiguration } from './utils/database.js' @@ -86,7 +86,10 @@ let node: OceanP2P = null let indexer = null let provider = null // If there is no DB URL only the nonce database will be available -const dbconn: Database = await new Database(config.dbConfig) +const dbconn: Database = await Database.init(config.dbConfig) +if (!dbconn) { + OCEAN_NODE_LOGGER.error('Database failed to initialize') +} if (!hasValidDBConfiguration(config.dbConfig)) { // once we create a database instance, we check the environment and possibly add the DB transport @@ -126,8 +129,8 @@ if (dbconn) { } // Singleton instance across application -const oceanNode = OceanNode.getInstance(dbconn, node, provider, indexer) -oceanNode.addC2DEngines(config) +const oceanNode = OceanNode.getInstance(config, dbconn, node, provider, indexer) +oceanNode.addC2DEngines() function removeExtraSlashes(req: any, res: any, next: any) { req.url = req.url.replace(/\/{2,}/g, '/') @@ -139,14 +142,13 @@ if (config.hasHttp) { app.use(express.raw({ limit: '25mb' })) app.use(cors()) - if (config.hasDashboard) { + if (config.hasControlPanel) { // Serve static files expected at the root, under the '/_next' path - app.use('/_next', express.static(path.join(__dirname, '/dashboard/_next'))) + app.use('/_next', express.static(path.join(__dirname, '/controlpanel/_next'))) - // Serve static files for Next.js under both '/dashboard' and '/controlpanel' - const dashboardPath = path.join(__dirname, '/dashboard') - app.use('/dashboard', express.static(dashboardPath)) - app.use('/controlpanel', express.static(dashboardPath)) + // Serve static files for Next.js under '/controlpanel' + const controlPanelPath = path.join(__dirname, '/controlpanel') + app.use('/controlpanel', express.static(controlPanelPath)) // Custom middleware for SPA routing: Serve index.html for non-static asset requests const serveIndexHtml = ( @@ -158,10 +160,9 @@ if (config.hasHttp) { return next() // Skip this middleware if the request is for a static asset } // For any other requests, serve index.html - res.sendFile(path.join(dashboardPath, 'index.html')) + res.sendFile(path.join(controlPanelPath, 'index.html')) } - app.use('/dashboard', serveIndexHtml) app.use('/controlpanel', serveIndexHtml) } @@ -180,5 +181,5 @@ if (config.hasHttp) { }) // Call the function to schedule the cron job to delete old logs - scheduleCronJobs(dbconn) + scheduleCronJobs(oceanNode) } diff --git a/src/test/.env.test2 b/src/test/.env.test2 new file mode 100644 index 000000000..8f16fafb8 --- /dev/null +++ b/src/test/.env.test2 @@ -0,0 +1,2 @@ +PRIVATE_KEY='0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58' +CONFIG_PATH="$HOME/config.json" diff --git a/src/test/config.json b/src/test/config.json new file mode 100644 index 000000000..e053f06db --- /dev/null +++ b/src/test/config.json @@ -0,0 +1,170 @@ +{ + "authorizedDecrypters": [], + "authorizedDecryptersList": [], + "allowedValidators": [], + "allowedValidatorsList": [], + "authorizedPublishers": [], + "authorizedPublishersList": [], + "keys": {}, + "hasIndexer": true, + "hasHttp": true, + "hasP2P": true, + "p2pConfig": { + "bootstrapNodes": [], + "bootstrapTimeout": 20000, + "bootstrapTagName": "bootstrap", + "bootstrapTagValue": 50, + "bootstrapTTL": 0, + "enableIPV4": true, + "enableIPV6": true, + "ipV4BindAddress": "0.0.0.0", + "ipV4BindTcpPort": 8000, + "ipV4BindWsPort": 0, + "ipV6BindAddress": "::1", + "ipV6BindTcpPort": 0, + "ipV6BindWsPort": 0, + "announceAddresses": [], + "pubsubPeerDiscoveryInterval": 10000, + "dhtMaxInboundStreams": 500, + "dhtMaxOutboundStreams": 500, + "dhtFilter": null, + "mDNSInterval": 20000, + "connectionsMaxParallelDials": 15, + "connectionsDialTimeout": 30000, + "upnp": true, + "autoNat": true, + "enableCircuitRelayServer": false, + "enableCircuitRelayClient": false, + "circuitRelays": 0, + "announcePrivateIp": false, + "filterAnnouncedAddresses": [ + "127.0.0.0/8", + "10.0.0.0/8", + "172.16.0.0/12", + "192.168.0.0/16", + "100.64.0.0/10", + "169.254.0.0/16", + "192.0.0.0/24", + "192.0.2.0/24", + "198.51.100.0/24", + "203.0.113.0/24", + "224.0.0.0/4", + "240.0.0.0/4" + ], + "minConnections": 1, + "maxConnections": 300, + "autoDialPeerRetryThreshold": 7200000, + "autoDialConcurrency": 5, + "maxPeerAddrsToDial": 5, + "autoDialInterval": 5000, + "enableNetworkStats": false + }, + "hasControlPanel": true, + "httpPort": 8001, + "dbConfig": { + "url": "http://localhost:9200", + "username": "", + "password": "", + "dbType": "elasticsearch" + }, + "supportedNetworks": { + "8996": { + "rpc": "http://127.0.0.1:8545", + "chainId": 8996, + "network": "development", + "chunkSize": 100 + } + }, + "indexingNetworks": [8996], + "feeStrategy": {}, + "c2dClusters": [], + "c2dNodeUri": "", + "accountPurgatoryUrl": "", + "assetPurgatoryUrl": "", + "allowedAdmins": [], + "allowedAdminsList": [], + "rateLimit": 30, + "maxConnections": 30, + "denyList": { + "peers": [], + "ips": [] + }, + "unsafeURLs": [], + "isBootstrap": false, + "claimDurationTimeout": 600, + "validateUnsignedDDO": true, + "jwtSecret": "ocean-node-secret", + "dockerComputeEnvironments": [ + { + "socketPath": "/var/run/docker.sock", + "resources": [ + { + "id": "disk", + "total": 1000000000 + } + ], + "storageExpiry": 604800, + "maxJobDuration": 3600, + "fees": { + "11155111": [ + { + "feeToken": "0x1B083D8584dd3e6Ff37d04a6e7e82b5F622f3985", + "prices": [ + { + "id": "cpu", + "price": 1 + } + ] + }, + { + "feeToken": "0xfff9976782d46cc05630d1f6ebab18b2324d6b14", + "prices": [ + { + "id": "cpu", + "price": 1 + } + ] + } + ], + "11155420": [ + { + "feeToken": "0xf26c6C93f9f1d725e149d95f8E7B2334a406aD10", + "prices": [ + { + "id": "cpu", + "price": 1 + } + ] + }, + { + "feeToken": "0x4200000000000000000000000000000000000006", + "prices": [ + { + "id": "cpu", + "price": 1 + } + ] + } + ] + }, + "free": { + "maxJobDuration": 3600, + "maxJobs": 3, + "resources": [ + { + "id": "cpu", + "max": 1 + }, + { + "id": "ram", + "max": 1000000000 + }, + { + "id": "disk", + "max": 1000000000 + } + ] + } + } + ] +} diff --git a/src/test/data/assets.ts b/src/test/data/assets.ts index 476b78850..3758f079f 100644 --- a/src/test/data/assets.ts +++ b/src/test/data/assets.ts @@ -1,4 +1,4 @@ -import { Credentials } from '../../@types/DDO/Credentials' +import { Credentials, CREDENTIALS_TYPES } from '@oceanprotocol/ddo-js' export const downloadAsset = { '@context': ['https://w3id.org/did/v1'], @@ -22,7 +22,7 @@ export const downloadAsset = { services: [ { id: 'ccb398c50d6abd5b456e8d7242bd856a1767a890b537c2f8c10ba8b8a10e6025', - type: 'download', + type: 'access', files: { files: [ { @@ -47,42 +47,42 @@ export const downloadAsset = { owner: '', created: '' }, - purgatory: { - state: false - }, - datatokens: [] as any, stats: { - allocated: 0, orders: 0, price: { value: '0' } - } + }, + purgatory: { + state: false + }, + datatokens: [] as any } const nftLevelCredentials: Credentials = { allow: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: ['0xBE5449a6A97aD46c8558A3356267Ee5D2731ab5e'] }, { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: ['0xA78deb2Fa79463945C247991075E2a0e98Ba7A09'] } ], deny: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: ['0x02354A1F160A3fd7ac8b02ee91F04104440B28E7'] } ] } const serviceLevelCredentials: Credentials = { + allow: [], deny: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: ['0xA78deb2Fa79463945C247991075E2a0e98Ba7A09'] } ] @@ -93,7 +93,7 @@ export const downloadAssetWithCredentials = { id: '', nftAddress: '', version: '4.1.0', - chainId: 80001, + chainId: 8996, metadata: { created: '2021-12-20T14:35:20Z', updated: '2021-12-20T14:35:20Z', @@ -111,7 +111,7 @@ export const downloadAssetWithCredentials = { services: [ { id: 'ccb398c50d6abd5b456e8d7242bd856a1767a890b537c2f8c10ba8b8a10e6025', - type: 'download', + type: 'access', files: { files: [ { @@ -150,12 +150,12 @@ export const downloadAssetWithCredentials = { } } -export const computeAsset = { +export const computeAssetWithCredentials = { '@context': ['https://w3id.org/did/v1'], id: '', nftAddress: '', version: '4.1.0', - chainId: 80001, + chainId: 8996, metadata: { created: '2021-12-20T14:35:20Z', updated: '2021-12-20T14:35:20Z', @@ -169,9 +169,10 @@ export const computeAsset = { termsAndConditions: true } }, + credentials: nftLevelCredentials, services: [ { - id: '1155995dda741e93afe4b1c6ced2d01734a6ec69865cc0997daf1f4db7259a36', + id: 'ccb398c50d6abd5b456e8d7242bd856a1767a890b537c2f8c10ba8b8a10e6025', type: 'compute', files: { files: [ @@ -182,14 +183,21 @@ export const computeAsset = { } ] }, + credentials: serviceLevelCredentials, datatokenAddress: '', serviceEndpoint: 'https://v4.provider.oceanprotocol.com', timeout: 86400, compute: { allowRawAlgorithm: false, allowNetworkAccess: true, - publisherTrustedAlgorithmPublishers: [] as any, - publisherTrustedAlgorithms: [] as any + publisherTrustedAlgorithmPublishers: ['*'] as any, + publisherTrustedAlgorithms: [ + { + did: '*', + filesChecksum: '*', + containerSectionChecksum: '*' + } + ] as any } } ], @@ -216,12 +224,12 @@ export const computeAsset = { } } -export const algoAsset = { +export const algoAssetWithCredentials = { '@context': ['https://w3id.org/did/v1'], id: '', nftAddress: '', version: '4.1.0', - chainId: 137, + chainId: 8996, metadata: { created: '2023-08-01T17:09:39Z', updated: '2023-08-01T17:09:39Z', @@ -245,6 +253,7 @@ export const algoAsset = { } } }, + credentials: nftLevelCredentials, services: [ { id: 'db164c1b981e4d2974e90e61bda121512e6909c1035c908d68933ae4cfaba6b0', @@ -252,14 +261,144 @@ export const algoAsset = { files: { files: [ { + type: 'url', + method: 'GET', url: 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', contentType: 'text/js', encoding: 'UTF-8' } ] }, + credentials: serviceLevelCredentials, + timeout: 86400, + serviceEndpoint: 'https://v4.provider.oceanprotocol.com' + } + ], + stats: { + allocated: 0, + orders: 0, + price: { + value: '0' + } + }, + nft: { + address: '', + name: 'Ocean Data NFT', + symbol: 'OCEAN-NFT', + state: 5, + tokenURI: '', + owner: '', + created: '' + } +} + +export const computeAsset = { + '@context': ['https://w3id.org/did/v1'], + id: '', + nftAddress: '', + version: '4.1.0', + chainId: 8996, + metadata: { + created: '2021-12-20T14:35:20Z', + updated: '2021-12-20T14:35:20Z', + type: 'dataset', + name: 'cli fixed asset', + description: 'asset published using ocean.js cli tool', + tags: ['test'], + author: 'oceanprotocol', + license: 'https://market.oceanprotocol.com/terms', + additionalInformation: { + termsAndConditions: true + } + }, + services: [ + { + id: '1155995dda741e93afe4b1c6ced2d01734a6ec69865cc0997daf1f4db7259a36', + type: 'compute', + files: { + files: [ + { + type: 'url', + url: 'https://raw.githubusercontent.com/oceanprotocol/testdatasets/main/shs_dataset_test.txt', + method: 'GET' + } + ] + }, + datatokenAddress: '', + serviceEndpoint: 'https://v4.provider.oceanprotocol.com', timeout: 86400, + compute: { + allowRawAlgorithm: false, + allowNetworkAccess: true, + publisherTrustedAlgorithmPublishers: ['*'] as any, + publisherTrustedAlgorithms: [ + { + did: '*', + filesChecksum: '*', + containerSectionChecksum: '*' + } + ] as any + } + } + ], + event: {}, + nft: { + address: '', + name: 'Ocean Data NFT', + symbol: 'OCEAN-NFT', + state: 5, + tokenURI: '', + owner: '', + created: '' + }, + purgatory: { + state: false + }, + datatokens: [] as any, + stats: { + allocated: 0, + orders: 0, + price: { + value: '0' + } + } +} + +export const computeAssetWithNoAccess = { + '@context': ['https://w3id.org/did/v1'], + id: '', + nftAddress: '', + version: '4.1.0', + chainId: 8996, + metadata: { + created: '2021-12-20T14:35:20Z', + updated: '2021-12-20T14:35:20Z', + type: 'dataset', + name: 'cli fixed asset', + description: 'asset published using ocean.js cli tool', + tags: ['test'], + author: 'oceanprotocol', + license: 'https://market.oceanprotocol.com/terms', + additionalInformation: { + termsAndConditions: true + } + }, + services: [ + { + id: '1155995dda741e93afe4b1c6ced2d01734a6ec69865cc0997daf1f4db7259a36', + type: 'compute', + files: { + files: [ + { + type: 'url', + url: 'https://raw.githubusercontent.com/oceanprotocol/testdatasets/main/shs_dataset_test.txt', + method: 'GET' + } + ] + }, + datatokenAddress: '', serviceEndpoint: 'https://v4.provider.oceanprotocol.com', + timeout: 86400, compute: { allowRawAlgorithm: false, allowNetworkAccess: true, @@ -268,6 +407,77 @@ export const algoAsset = { } } ], + event: {}, + nft: { + address: '', + name: 'Ocean Data NFT', + symbol: 'OCEAN-NFT', + state: 5, + tokenURI: '', + owner: '', + created: '' + }, + purgatory: { + state: false + }, + datatokens: [] as any, + stats: { + allocated: 0, + orders: 0, + price: { + value: '0' + } + } +} + +export const algoAsset = { + '@context': ['https://w3id.org/did/v1'], + id: '', + nftAddress: '', + version: '4.1.0', + chainId: 8996, + metadata: { + created: '2023-08-01T17:09:39Z', + updated: '2023-08-01T17:09:39Z', + type: 'algorithm', + name: 'CLi Algo', + description: 'Cli algo', + author: 'OPF', + license: 'https://market.oceanprotocol.com/terms', + additionalInformation: { + termsAndConditions: true + }, + algorithm: { + language: '', + version: '0.1', + container: { + entrypoint: 'node $ALGO', + image: 'node', + tag: 'latest', + checksum: + 'sha256:1155995dda741e93afe4b1c6ced2d01734a6ec69865cc0997daf1f4db7259a36' + } + } + }, + services: [ + { + id: 'db164c1b981e4d2974e90e61bda121512e6909c1035c908d68933ae4cfaba6b0', + type: 'access', + files: { + files: [ + { + type: 'url', + method: 'GET', + url: 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', + contentType: 'text/js', + encoding: 'UTF-8' + } + ] + }, + timeout: 86400, + serviceEndpoint: 'https://v4.provider.oceanprotocol.com' + } + ], stats: { allocated: 0, orders: 0, @@ -285,3 +495,99 @@ export const algoAsset = { created: '' } } + +export const completeDBComputeJob = { + owner: '0x6c957a45C801035d3297d43d0Ce83a237Ec5E0d1', + did: '', + jobId: '34aa4e7e-ce41-4547-b3e1-57aa1a7f97e6', + dateCreated: '1732720690.68', + dateFinished: '', + status: 70, + statusText: 'Job finished', + results: '', + inputDID: '', + algoDID: '', + agreementId: '0x56e2a0a9a6abcadac403dddc59858a5caf51ac286b401c811655b0235cd45da6', + expireTimestamp: 1732721290.68, + environment: '0x46f61c90309fcffa02e887e1a8a1ebdfeabe4f1ff279e306de2803df36bd46f7-free', + clusterHash: '0x3e072d2ac72e9ad87fed5a913caea960c89dfad85d447cbbc92c32457f0413e1', + configlogURL: '', + publishlogURL: '', + algologURL: '', + outputsURL: '', + stopRequested: false, + algorithm: { + documentId: 'did:op:39d9c2a7536865f9516b9f84432a624e25c8bb3e482de113ac9919af7d7a4866', + serviceId: 'db164c1b981e4d2974e90e61bda121512e6909c1035c908d68933ae4cfaba6b0', + meta: { language: '', version: '0.1', container: [Object] }, + transferTxId: '0x5c946d52cdd1623061330f455d4cb6d5898770987baa6539bda851d6c537cf6e' + }, + assets: [ + { + documentId: + 'did:op:ae13ce05f05457c041b013f41bf51400863eb5f387ba34e1b076f1f832a68071', + serviceId: 'ccb398c50d6abd5b456e8d7242bd856a1767a890b537c2f8c10ba8b8a10e6025', + transferTxId: '0xf14e89d0f0a80bf55392430e7479cac5eca6ed453e7b3ead99ab3c9820c9a411' + } + ], + isRunning: false, + isStarted: false, + containerImage: + 'node@sha256:1155995dda741e93afe4b1c6ced2d01734a6ec69865cc0997daf1f4db7259a36' +} + +export const dockerImageManifest = { + schemaVersion: 2, + mediaType: 'application/vnd.docker.distribution.manifest.v2+json', + config: { + mediaType: 'application/vnd.docker.container.image.v1+json', + size: 7286, + digest: 'sha256:386e0be86bde5eff9f85ea9eda02727dd4641664d746688b4049f79ef0cdb1c9' + }, + platform: { + architecture: 'amd64', + os: 'linux' + }, + layers: [ + { + mediaType: 'application/vnd.docker.image.rootfs.diff.tar.gzip', + size: 49557601, + digest: 'sha256:167b8a53ca4504bc6aa3182e336fa96f4ef76875d158c1933d3e2fa19c57e0c3' + }, + { + mediaType: 'application/vnd.docker.image.rootfs.diff.tar.gzip', + size: 24030522, + digest: 'sha256:b47a222d28fa95680198398973d0a29b82a968f03e7ef361cc8ded562e4d84a3' + }, + { + mediaType: 'application/vnd.docker.image.rootfs.diff.tar.gzip', + size: 64112257, + digest: 'sha256:debce5f9f3a9709885f7f2ad3cf41f036a3b57b406b27ba3a883928315787042' + }, + { + mediaType: 'application/vnd.docker.image.rootfs.diff.tar.gzip', + size: 211039785, + digest: 'sha256:1d7ca7cd2e066ae77ac6284a9d027f72a31a02a18bfc2a249ef2e7b01074338b' + }, + { + mediaType: 'application/vnd.docker.image.rootfs.diff.tar.gzip', + size: 3371, + digest: 'sha256:94c7791033e87c3ab82bf56f778253138bbd5caf172ead6fc0ce39d459560607' + }, + { + mediaType: 'application/vnd.docker.image.rootfs.diff.tar.gzip', + size: 47856943, + digest: 'sha256:72ab0dfaf5cb14ab09fd3478f8a01e3c3e21b7ad06e7b04ccac2f304d455ff45' + }, + { + mediaType: 'application/vnd.docker.image.rootfs.diff.tar.gzip', + size: 2280920, + digest: 'sha256:3316ed2852d408595e2dfc601d96f39f4a39747bd1eb2eb1b63b1f3d49c42919' + }, + { + mediaType: 'application/vnd.docker.image.rootfs.diff.tar.gzip', + size: 451, + digest: 'sha256:ef5505406bea98d0f6adb559b937c0dad0aef6d98500b1120c6e27c50fdf172b' + } + ] +} diff --git a/src/test/data/commands.ts b/src/test/data/commands.ts new file mode 100644 index 000000000..af0ab7a38 --- /dev/null +++ b/src/test/data/commands.ts @@ -0,0 +1,31 @@ +export const freeComputeStartPayload = { + command: 'freeStartCompute', + consumerAddress: '0xeB5ae11175008E8f178d57d0152678a863FbB887', + environment: '', + nonce: '1', + signature: '0x123', + datasets: [ + { + fileObject: { + type: 'url', + url: 'https://raw.githubusercontent.com/oceanprotocol/ocean-cli/refs/heads/main/metadata/simpleComputeDataset.json', + method: 'GET' + } + } + ], + algorithm: { + fileObject: { + type: 'url', + url: 'https://raw.githubusercontent.com/oceanprotocol/ocean-cli/refs/heads/main/metadata/pythonAlgo.json', + method: 'GET' + }, + meta: { + container: { + image: 'my-compute-test', + tag: 'latest', + entrypoint: 'python $ALGO', + checksum: 'my-compute-checksum' + } + } + } +} diff --git a/src/test/data/ddo.ts b/src/test/data/ddo.ts index cc624b7f4..ff8cf1a3c 100644 --- a/src/test/data/ddo.ts +++ b/src/test/data/ddo.ts @@ -1,24 +1,35 @@ export const ddo = { hashType: 'sha256', '@context': ['https://w3id.org/did/v1'], - id: 'did:op:fa0e8fa9550e8eb13392d6eeb9ba9f8111801b332c8d2345b350b3bc66b379d7', - nftAddress: '0xBB1081DbF3227bbB233Db68f7117114baBb43656', + id: 'did:op:b5ef03b7f0d148cde2942c8a330625d4fc71dd32b67a0093da24fcb9a4439887', + nftAddress: '0xca63894B1c911515F1C034BE3509AfC008B42d83', version: '4.1.0', chainId: 137, metadata: { created: '2022-12-30T08:40:06Z', updated: '2022-12-30T08:40:06Z', type: 'dataset', - name: 'DEX volume in details', + name: 'ETH/USDT orderbook', description: - 'Volume traded and locked of Decentralized Exchanges (Uniswap, Sushiswap, Curve, Balancer, ...), daily in details', - tags: ['index', 'defi', 'tvl'], - author: 'DEX', + 'Real time ETH/USDT orderbook\n\nTo take the bid orders, access data.bids array\nTo take the ask orders, access data.asks array\n\nResponse schema:\n\n```json\n{\n "code":"200000",\n "data":\n {\n "time":1665865828392,\n "sequence":"357821345",\n "bids":\n [\n ["1280","0.00078381"],\n ["1279.9","0.02901545"],\n ....\n ],\n "asks":\n [\n ["1280.2","0.0288382"],\n ["1280.3","0.00167897"],\n ...\n ]\n }\n}\n```\n\nAccess is permited for 1 day after buying.', + tags: ['defi', 'orderbook'], + author: '0x4Ab0C24005c410111e21aE16Df5e19180fAD0f6a', license: 'https://market.oceanprotocol.com/terms', additionalInformation: { termsAndConditions: true } - } + }, + services: [ + { + id: '24654b91482a3351050510ff72694d88edae803cf31a5da993da963ba0087648', + type: 'access', + files: + '0x04beba2f90639ff7559618160df5a81729904022578e6bd5f60c3bebfe5cb2aca59d7e062228a98ed88c4582c290045f47cdf3824d1c8bb25b46b8e10eb9dc0763ce82af826fd347517011855ce1396ac94af8cc6f29b78012b679cb78a594d9064b6f6f4a8229889f0bb53262b6ab62b56fa5c608ea126ba228dd0f87290c0628fe07023416280c067beb01a42d0a4df95fdb5a857f1f59b3e6a13b0ae4619080369ba5bede6c7beff6afc7fc31c71ed8100e7817d965d1f8f1abfaace3c01f0bd5d0127df308175941088a1f120a4d9a0290be590d65a7b4de01ae1efe24286d7a06fadeeafba83b5eab25b90961abf1f24796991f06de6c8e1c2357fbfb31f484a94e87e7dba80a489e12fffa1adde89f113b4c8c4c8877914911a008dbed0a86bdd9d14598c35894395fb4a8ea764ed2f9459f6acadac66e695b3715536338f6cdee616b721b0130f726c78ca60ec02fc86c', + datatokenAddress: '0xfF4AE9869Cafb5Ff725f962F3Bbc22Fb303A8aD8', + serviceEndpoint: 'https://v4.provider.polygon.oceanprotocol.com', + timeout: 0 + } + ] } export const genericAlgorithm = { '@context': ['https://w3id.org/did/v1'], @@ -352,6 +363,122 @@ export const ddov7 = { ] } +export const ddoEOPV5 = { + '@context': ['https://www.w3.org/ns/credentials/v2'], + version: '5.0.0', + id: 'did:ope:fa0e8fa9550e8eb13392d6eeb9ba9f8111801b332c8d2345b350b3bc66b379d5', + credentialSubject: { + id: 'did:ope:fa0e8fa9550e8eb13392d6eeb9ba9f8111801b332c8d2345b350b3bc66b379d5', + metadata: { + created: '2024-10-03T14:35:20Z', + updated: '2024-10-03T14:35:20Z', + type: 'dataset', + name: 'DDO 5.0.0 Asset', + description: { + '@value': 'New asset published using ocean CLI tool with version 5.0.0', + '@language': 'en', + '@direction': 'ltr' + }, + copyrightHolder: 'Your Copyright Holder', + providedBy: 'Your Organization', + author: 'oceanprotocol', + license: { + name: 'https://market.oceanprotocol.com/terms' + }, + tags: ['version-5', 'new-schema'], + categories: ['data', 'ocean-protocol'], + additionalInformation: { + termsAndConditions: true + } + }, + services: [ + { + id: 'ccb398c50d6abd5b456e8d7242bd856a1767a890b537c2f8c10ba8b8a10e6025', + type: 'access', + name: 'Access Service', + description: { + '@value': 'Service for accessing the dataset', + '@language': 'en', + '@direction': 'ltr' + }, + datatokenAddress: '0xff4ae9869cafb5ff725f962f3bbc22fb303a8ad8', + nftAddress: '0xBB1081DbF3227bbB233Db68f7117114baBb43656', + serviceEndpoint: 'https://v4.provider.oceanprotocol.com', + files: + 'https://dumps.wikimedia.org/enwiki/latest/enwiki-latest-abstract10.xml.gz-rss.xml', + timeout: 86400, + compute: { + allowRawAlgorithm: false, + allowNetworkAccess: true + }, + state: 0, + credentials: [{}] + } + ], + credentials: { + allow: { + request_credentials: [ + { + type: 'VerifiableId', + format: 'jwt_vc_json' + }, + { + type: 'ProofOfResidence', + format: 'jwt_vc_json' + }, + { + type: 'OpenBadgeCredential', + format: 'jwt_vc_json', + policies: ['signature'] + } + ] + } + }, + event: { + txid: '0xceb617f13a8db82ba9ef24efcee72e90d162915fd702f07ac6012427c31ac952', + block: 39326976, + from: '0x0DB823218e337a6817e6D7740eb17635DEAdafAF', + contract: '0xBB1081DbF3227bbB233Db68f7117114baBb43656', + datetime: '2023-02-15T16:42:22' + }, + nft: { + address: '0xBB1081DbF3227bbB233Db68f7117114baBb43656', + name: 'Ocean Data NFT', + symbol: 'OCEAN-NFT', + state: 0, + tokenURI: + 'data:application/json;base64,eyJuYW1lIjoiT2NlYW4gRGF0YSBORlQiLCJzeW1ib2wiOiJPQ0VBTi1ORlQiLCJkZXNjcmlwdGlvbiI6IlRoaXMgTkZUIHJlcHJlc2VudHMgYW4gYXNzZXQgaW4gdGhlIE9jZWFuIFByb3RvY29sIHY0IGVjb3N5c3RlbS5cblxuVmlldyBvbiBPY2VhbiBNYXJrZXQ6IGh0dHBzOi8vbWFya2V0Lm9jZWFucHJvdG9jb2wuY29tL2Fzc2V0L2RpZDpvcDpmYTBlOGZhOTU1MGU4ZWIxMzM5MmQ2ZWViOWJhOWY4MTExODAxYjMzMmM4ZDIzNDViMzUwYjNiYzY2YjM3OWQ1IiwiZXh0ZXJuYWxfdXJsIjoiaHR0cHM6Ly9tYXJrZXQub2NlYW5wcm90b2NvbC5jb20vYXNzZXQvZGlkOm9wOmZhMGU4ZmE5NTUwZThlYjEzMzkyZDZlZWI5YmE5ZjgxMTE4MDFiMzMyYzhkMjM0NWIzNTBiM2JjNjZiMzc5ZDUiLCJiYWNrZ3JvdW5kX2NvbG9yIjoiMTQxNDE0IiwiaW1hZ2VfZGF0YSI6ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgdmlld0JveD0nMCAwIDk5IDk5JyBmaWxsPSd1bmRlZmluZWQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGw9JyUyM2ZmNDA5Mjc3JyBkPSdNMCw5OUwwLDIzQzEzLDIwIDI3LDE4IDM3LDE4QzQ2LDE3IDUyLDE4IDYyLDIwQzcxLDIxIDg1LDI0IDk5LDI3TDk5LDk5WicvJTNFJTNDcGF0aCBmaWxsPSclMjNmZjQwOTJiYicgZD0nTTAsOTlMMCw1MkMxMSw0OCAyMyw0NCAzMyw0NEM0Miw0MyA1MCw0NSA2MSw0OEM3MSw1MCA4NSw1MiA5OSw1NUw5OSw5OVonJTNFJTNDL3BhdGglM0UlM0NwYXRoIGZpbGw9JyUyM2ZmNDA5MmZmJyBkPSdNMCw5OUwwLDcyQzgsNzMgMTcsNzUgMjksNzZDNDAsNzYgNTMsNzYgNjYsNzdDNzgsNzcgODgsNzcgOTksNzhMOTksOTlaJyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSJ9', + owner: '0x0DB823218e337a6817e6D7740eb17635DEAdafAF', + created: '2022-12-30T08:40:43' + }, + purgatory: { + state: false + }, + datatokens: [ + { + address: '0xfF4AE9869Cafb5Ff725f962F3Bbc22Fb303A8aD8', + name: 'Boorish Fish Token', + symbol: 'BOOFIS-23', + serviceId: '24654b91482a3351050510ff72694d88edae803cf31a5da993da963ba0087648' + } + ], + stats: { + allocated: 5211144, + orders: 36, + price: { + value: 1000, + tokenAddress: '0x282d8efCe846A88B159800bd4130ad77443Fa1A1', + tokenSymbol: 'mOCEAN' + } + }, + chainId: 137, + nftAddress: '0xBB1081DbF3227bbB233Db68f7117114baBb43656' + }, + issuer: 'did:op:issuer-did', + type: ['VerifiableCredential'], + additionalDdos: [{ type: '', data: '' }] +} + export const publishAlgoDDO = { '@context': ['https://w3id.org/did/v1'], id: '', diff --git a/src/test/integration/accessLists.test.ts b/src/test/integration/accessLists.test.ts new file mode 100644 index 000000000..3445f7bdb --- /dev/null +++ b/src/test/integration/accessLists.test.ts @@ -0,0 +1,201 @@ +import { + buildEnvOverrideConfig, + getMockSupportedNetworks, + OverrideEnvConfig, + setupEnvironment, + tearDownEnvironment, + TEST_ENV_CONFIG_FILE +} from '../utils/utils.js' +import { JsonRpcProvider, Signer } from 'ethers' +import { Blockchain } from '../../utils/blockchain.js' +import { RPCS, SupportedNetwork } from '../../@types/blockchain.js' +import { DEVELOPMENT_CHAIN_ID } from '../../utils/address.js' +import { ENVIRONMENT_VARIABLES } from '../../utils/constants.js' +import { deployAndGetAccessListConfig, EXISTING_ACCESSLISTS } from '../utils/contracts.js' +import { AccessListContract, OceanNodeConfig } from '../../@types/OceanNode.js' +import { homedir } from 'os' +import { getConfiguration } from '../../utils/config.js' +import { assert, expect } from 'chai' +import { findAccessListCredentials } from '../../utils/credentials.js' + +describe('Should deploy some accessLists before all other tests.', () => { + let config: OceanNodeConfig + let provider: JsonRpcProvider + const mockSupportedNetworks: RPCS = getMockSupportedNetworks() + + let previousConfiguration: OverrideEnvConfig[] + + let blockchain: Blockchain + // let contractAcessList: Contract + let owner: Signer + + let wallets: Signer[] = [] + + let allAccessListsDefinitions: AccessListContract[] = [] + + before(async () => { + provider = new JsonRpcProvider('http://127.0.0.1:8545') + config = await getConfiguration() // Force reload the configuration + + wallets = [ + (await provider.getSigner(0)) as Signer, + (await provider.getSigner(1)) as Signer, + (await provider.getSigner(2)) as Signer, + (await provider.getSigner(3)) as Signer + ] + + const rpcs: RPCS = config.supportedNetworks + const chain: SupportedNetwork = rpcs[String(DEVELOPMENT_CHAIN_ID)] + blockchain = new Blockchain( + chain.rpc, + chain.network, + chain.chainId, + chain.fallbackRPCs + ) + + owner = blockchain.getSigner() + + // ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS_LIST + const accessListPublishers = await deployAndGetAccessListConfig( + owner, + provider, + wallets + ) + EXISTING_ACCESSLISTS.set( + ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS_LIST.name, + accessListPublishers + ) + const accessListValidators = await deployAndGetAccessListConfig( + owner, + provider, + wallets + ) + // ENVIRONMENT_VARIABLES.ALLOWED_VALIDATORS_LIST + EXISTING_ACCESSLISTS.set( + ENVIRONMENT_VARIABLES.ALLOWED_VALIDATORS_LIST.name, + accessListValidators + ) + + const accessListDecrypters = await deployAndGetAccessListConfig( + owner, + provider, + wallets + ) + // ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS_LIST + EXISTING_ACCESSLISTS.set( + ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS_LIST.name, + accessListDecrypters + ) + + // put them all here + allAccessListsDefinitions = [ + accessListPublishers, + accessListValidators, + accessListDecrypters + ] + + // override and save configuration (always before calling getConfig()) + previousConfiguration = await setupEnvironment( + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.RPCS, + ENVIRONMENT_VARIABLES.INDEXER_NETWORKS, + ENVIRONMENT_VARIABLES.PRIVATE_KEY, + ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS, + ENVIRONMENT_VARIABLES.ALLOWED_ADMINS, + ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS, + ENVIRONMENT_VARIABLES.ADDRESS_FILE, + // ACCESS_LISTS + ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS_LIST, + ENVIRONMENT_VARIABLES.ALLOWED_VALIDATORS_LIST, + ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS_LIST + ], + [ + JSON.stringify(mockSupportedNetworks), + JSON.stringify([8996]), + '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', + JSON.stringify(['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']), + JSON.stringify(['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']), + JSON.stringify([ + await owner.getAddress() // the node + ]), + `${homedir}/.ocean/ocean-contracts/artifacts/address.json`, + JSON.stringify( + EXISTING_ACCESSLISTS.get( + ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS_LIST.name + ) + ), + JSON.stringify( + EXISTING_ACCESSLISTS.get(ENVIRONMENT_VARIABLES.ALLOWED_VALIDATORS_LIST.name) + ), + JSON.stringify( + EXISTING_ACCESSLISTS.get( + ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS_LIST.name + ) + ) + ] + ) + ) + + config = await getConfiguration() + }) + + it('should have some access lists', () => { + expect(EXISTING_ACCESSLISTS.size > 0, 'Should have at least 1 accessList') + }) + + it(`should have ${ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS_LIST.name} access lists`, () => { + assert( + config.authorizedPublishersList !== null, + `${ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS_LIST.name} accessList is not defined` + ) + console.log(config.authorizedPublishersList) + }) + + it(`should have ${ENVIRONMENT_VARIABLES.ALLOWED_VALIDATORS_LIST.name} access lists`, () => { + assert( + config.allowedValidatorsList !== null, + `${ENVIRONMENT_VARIABLES.ALLOWED_VALIDATORS_LIST.name} accessList is not defined` + ) + console.log(config.allowedValidatorsList) + }) + + it(`should have ${ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS_LIST.name} access lists`, () => { + assert( + config.authorizedPublishersList !== null, + `${ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS_LIST.name} accessList is not defined` + ) + console.log(config.authorizedPublishersList) + }) + + it('should check if wallets are on accessList (with Access)', async function () { + for (let z = 0; z < allAccessListsDefinitions.length; z++) { + const accessListAddress = allAccessListsDefinitions[z][DEVELOPMENT_CHAIN_ID][0] // we have only 1 accesslist per config + for (let i = 0; i < wallets.length; i++) { + const account = await wallets[i].getAddress() + expect( + (await findAccessListCredentials(owner, account, accessListAddress)) === true, + `Address ${account} has no balance on Access List ${accessListAddress}, so its not Authorized` + ) + } + } + }) + + it('should check that wallets are NOT on accessList (without Access)', async function () { + for (let z = 0; z < allAccessListsDefinitions.length; z++) { + const accessListAddress = allAccessListsDefinitions[z][DEVELOPMENT_CHAIN_ID][0] // we have only 1 accesslist per config + for (let i = wallets.length; i < 4; i++) { + const account = await (await provider.getSigner(i)).getAddress() + expect( + (await findAccessListCredentials(owner, account, accessListAddress)) === false, + `Address ${account} should not be part Access List ${accessListAddress}, therefore its not Authorized` + ) + } + } + }) + + after(async () => { + await tearDownEnvironment(previousConfiguration) + }) +}) diff --git a/src/test/integration/algorithmsAccess.test.ts b/src/test/integration/algorithmsAccess.test.ts new file mode 100644 index 000000000..c1eda13d4 --- /dev/null +++ b/src/test/integration/algorithmsAccess.test.ts @@ -0,0 +1,495 @@ +import { expect, assert } from 'chai' +import { + ComputeGetEnvironmentsHandler, + ComputeInitializeHandler, + PaidComputeStartHandler +} from '../../components/core/compute/index.js' +import type { + PaidComputeStartCommand, + ComputeInitializeCommand +} from '../../@types/commands.js' +import type { + ComputeAsset, + ComputeAlgorithm, + ComputeEnvironment +} from '../../@types/C2D/C2D.js' +import { + ENVIRONMENT_VARIABLES, + EVENTS, + PROTOCOL_COMMANDS, + getConfiguration +} from '../../utils/index.js' +import { Database } from '../../components/database/index.js' +import { OceanNode } from '../../OceanNode.js' +import { OceanNodeConfig } from '../../@types/OceanNode.js' +import { OceanIndexer } from '../../components/Indexer/index.js' +import { Readable } from 'stream' +import { waitToIndex } from './testUtils.js' +import { streamToObject } from '../../utils/util.js' +import { ethers, hexlify, JsonRpcProvider, Signer } from 'ethers' +import { publishAsset, orderAsset } from '../utils/assets.js' +import { algoAsset, computeAssetWithNoAccess } from '../data/assets.js' +import { RPCS } from '../../@types/blockchain.js' +import { + DEFAULT_TEST_TIMEOUT, + OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig, + getMockSupportedNetworks, + setupEnvironment, + tearDownEnvironment +} from '../utils/utils.js' + +import { ProviderComputeInitializeResults } from '../../@types/Fees.js' +import { homedir } from 'os' +import { DEVELOPMENT_CHAIN_ID, getOceanArtifactsAdresses } from '../../utils/address.js' +import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } +import OceanToken from '@oceanprotocol/contracts/artifacts/contracts/utils/OceanToken.sol/OceanToken.json' assert { type: 'json' } +import EscrowJson from '@oceanprotocol/contracts/artifacts/contracts/escrow/Escrow.sol/Escrow.json' assert { type: 'json' } +import { createHash } from 'crypto' +import { getAlgoChecksums } from '../../components/core/compute/utils.js' + +describe('Trusted algorithms Flow', () => { + let previousConfiguration: OverrideEnvConfig[] + let config: OceanNodeConfig + let dbconn: Database + let oceanNode: OceanNode + let provider: any + let publisherAccount: any + let consumerAccount: any + let computeEnvironments: any + let publishedComputeDataset: any + let publishedAlgoDataset: any + let jobId: string + let datasetOrderTxId: any + let algoOrderTxId: any + let paymentToken: any + let paymentTokenContract: any + let escrowContract: any + let indexer: OceanIndexer + // const now = new Date().getTime() / 1000 + const computeJobDuration = 60 * 15 // 15 minutes from now should be enough + let firstEnv: ComputeEnvironment + + const wallet = new ethers.Wallet( + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45209' + ) + // const chainId = DEVELOPMENT_CHAIN_ID + const mockSupportedNetworks: RPCS = getMockSupportedNetworks() + let artifactsAddresses: any + let initializeResponse: ProviderComputeInitializeResults + + before(async () => { + artifactsAddresses = getOceanArtifactsAdresses() + paymentToken = artifactsAddresses.development.Ocean + previousConfiguration = await setupEnvironment( + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.RPCS, + ENVIRONMENT_VARIABLES.INDEXER_NETWORKS, + ENVIRONMENT_VARIABLES.PRIVATE_KEY, + ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS, + ENVIRONMENT_VARIABLES.ADDRESS_FILE, + ENVIRONMENT_VARIABLES.DOCKER_COMPUTE_ENVIRONMENTS + ], + [ + JSON.stringify(mockSupportedNetworks), + JSON.stringify([DEVELOPMENT_CHAIN_ID]), + '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', + JSON.stringify(['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']), + `${homedir}/.ocean/ocean-contracts/artifacts/address.json`, + '[{"socketPath":"/var/run/docker.sock","resources":[{"id":"disk","total":10}],"storageExpiry":604800,"maxJobDuration":3600,"fees":{"' + + DEVELOPMENT_CHAIN_ID + + '":[{"feeToken":"' + + paymentToken + + '","prices":[{"id":"cpu","price":1}]}]},"free":{"maxJobDuration":60,"maxJobs":3,"resources":[{"id":"cpu","max":1},{"id":"ram","max":1},{"id":"disk","max":1}]}}]' + ] + ) + ) + config = await getConfiguration(true) + dbconn = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, dbconn, null, null, null) + indexer = new OceanIndexer(dbconn, config.indexingNetworks) + oceanNode.addIndexer(indexer) + oceanNode.addC2DEngines() + + provider = new JsonRpcProvider('http://127.0.0.1:8545') + publisherAccount = (await provider.getSigner(0)) as Signer + consumerAccount = (await provider.getSigner(1)) as Signer + paymentTokenContract = new ethers.Contract( + paymentToken, + OceanToken.abi, + publisherAccount + ) + escrowContract = new ethers.Contract( + artifactsAddresses.development.Escrow, + EscrowJson.abi, + publisherAccount + ) + }) + + it('Sets up compute envs', () => { + assert(oceanNode, 'Failed to instantiate OceanNode') + assert(config.c2dClusters, 'Failed to get c2dClusters') + }) + + // let's publish assets & algos + it('should publish compute datasets & algos', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 2) + publishedComputeDataset = await publishAsset( + computeAssetWithNoAccess, + publisherAccount + ) + publishedAlgoDataset = await publishAsset(algoAsset, publisherAccount) + const computeDatasetResult = await waitToIndex( + publishedComputeDataset.ddo.id, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT + ) + // Fail the test if compute dataset DDO was not indexed - subsequent tests depend on it + assert( + computeDatasetResult.ddo, + `Compute dataset DDO was not indexed${ + computeDatasetResult.wasTimeout ? ' (timeout)' : '' + }` + ) + const algoDatasetResult = await waitToIndex( + publishedAlgoDataset.ddo.id, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT + ) + // Fail the test if algorithm DDO was not indexed - subsequent tests depend on it + assert( + algoDatasetResult.ddo, + `Algorithm DDO was not indexed${algoDatasetResult.wasTimeout ? ' (timeout)' : ''}` + ) + }) + + it('Get compute environments', async () => { + const getEnvironmentsTask = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS + } + const response = await new ComputeGetEnvironmentsHandler(oceanNode).handle( + getEnvironmentsTask + ) + assert(response, 'Failed to get response') + assert(response.status.httpStatus === 200, 'Failed to get 200 response') + assert(response.stream, 'Failed to get stream') + expect(response.stream).to.be.instanceOf(Readable) + + computeEnvironments = await streamToObject(response.stream as Readable) + console.log('existing envs: ', computeEnvironments) + // expect 1 OR + envs (1 if only docker free env is available) + assert(computeEnvironments.length >= 1, 'Not enough compute envs') + for (const computeEnvironment of computeEnvironments) { + assert(computeEnvironment.id, 'id missing in computeEnvironments') + assert(computeEnvironment.fees, 'fees missing in computeEnvironments') + assert( + computeEnvironment.consumerAddress, + 'consumerAddress missing in computeEnvironments' + ) + + assert(computeEnvironment.id.startsWith('0x'), 'id should start with 0x') + assert(computeEnvironment.resources.length > 2, 'Missing resources') + assert( + computeEnvironment.maxJobDuration > 0, + 'maxJobDuration missing in computeEnvironments' + ) + } + firstEnv = computeEnvironments[0] + }) + + it('should not initialize compute without orders transaction IDs because algorithm is not trusted by dataset', async () => { + const dataset: ComputeAsset = { + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id + } + const algorithm: ComputeAlgorithm = { + documentId: publishedAlgoDataset.ddo.id, + serviceId: publishedAlgoDataset.ddo.services[0].id + } + const getEnvironmentsTask = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS + } + const response = await new ComputeGetEnvironmentsHandler(oceanNode).handle( + getEnvironmentsTask + ) + computeEnvironments = await streamToObject(response.stream as Readable) + firstEnv = computeEnvironments[0] + + const initializeComputeTask: ComputeInitializeCommand = { + datasets: [dataset], + algorithm, + environment: firstEnv.id, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + maxJobDuration: computeJobDuration, + consumerAddress: firstEnv.consumerAddress, + command: PROTOCOL_COMMANDS.COMPUTE_INITIALIZE + } + const resp = await new ComputeInitializeHandler(oceanNode).handle( + initializeComputeTask + ) + console.log(resp) + assert(resp, 'Failed to get response') + assert(resp.status.httpStatus === 400, 'Failed to get 400 response') + assert( + resp.status.error === + `Algorithm ${publishedAlgoDataset.ddo.id} not allowed to run on the dataset: ${publishedComputeDataset.ddo.id}`, + 'Inconsistent error message' + ) + assert(resp.stream === null, 'Failed to get stream') + }) + + it('should add the algorithm to the dataset trusted algorithm list', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 5) + const config = await getConfiguration() + const algoChecksums = await getAlgoChecksums( + publishedAlgoDataset.ddo.id, + publishedAlgoDataset.ddo.services[0].id, + oceanNode, + config + ) + publishedComputeDataset.ddo.services[0].compute = { + allowRawAlgorithm: false, + allowNetworkAccess: true, + publisherTrustedAlgorithmPublishers: [], + publisherTrustedAlgorithms: [ + { + did: publishedAlgoDataset.ddo.id, + filesChecksum: algoChecksums.files, + containerSectionChecksum: algoChecksums.container + } + ] + } + const metadata = hexlify(Buffer.from(JSON.stringify(publishedComputeDataset.ddo))) + const hash = createHash('sha256').update(metadata).digest('hex') + const nftContract = new ethers.Contract( + publishedComputeDataset.ddo.nftAddress, + ERC721Template.abi, + publisherAccount + ) + const setMetaDataTx = await nftContract.setMetaData( + 0, + 'http://v4.provider.oceanprotocol.com', + '0x123', + '0x00', + metadata, + '0x' + hash, + [] + ) + const txReceipt = await setMetaDataTx.wait() + assert(txReceipt, 'set metadata failed') + publishedComputeDataset = await waitToIndex( + publishedComputeDataset.ddo.id, + EVENTS.METADATA_UPDATED, + DEFAULT_TEST_TIMEOUT * 2, + true + ) + assert( + publishedComputeDataset?.ddo?.services[0]?.compute?.publisherTrustedAlgorithms + .length > 0, + 'Trusted algorithms not updated' + ) + assert( + publishedComputeDataset?.ddo?.services[0]?.compute?.publisherTrustedAlgorithms[0] + .did === publishedAlgoDataset.ddo.id, + 'Algorithm DID mismatch in trusted algorithms' + ) + }) + + it('Initialize compute without orders transaction IDs', async () => { + const dataset: ComputeAsset = { + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id + } + const algorithm: ComputeAlgorithm = { + documentId: publishedAlgoDataset.ddo.id, + serviceId: publishedAlgoDataset.ddo.services[0].id + } + const getEnvironmentsTask = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS + } + const response = await new ComputeGetEnvironmentsHandler(oceanNode).handle( + getEnvironmentsTask + ) + computeEnvironments = await streamToObject(response.stream as Readable) + firstEnv = computeEnvironments[0] + + const initializeComputeTask: ComputeInitializeCommand = { + datasets: [dataset], + algorithm, + environment: firstEnv.id, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + maxJobDuration: computeJobDuration, + consumerAddress: firstEnv.consumerAddress, + command: PROTOCOL_COMMANDS.COMPUTE_INITIALIZE + } + const resp = await new ComputeInitializeHandler(oceanNode).handle( + initializeComputeTask + ) + console.log(resp) + assert(resp, 'Failed to get response') + assert(resp.status.httpStatus === 200, 'Failed to get 200 response') + assert(resp.stream, 'Failed to get stream') + expect(resp.stream).to.be.instanceOf(Readable) + initializeResponse = (await streamToObject( + resp.stream as Readable + )) as ProviderComputeInitializeResults + }) + + it('should start an order on dataset', async function () { + const orderTxReceipt = await orderAsset( + publishedComputeDataset.ddo, + 0, + consumerAccount, + firstEnv.consumerAddress, // for compute, consumer is always address of compute env + publisherAccount, + oceanNode, + initializeResponse.datasets[0].providerFee + ) + assert(orderTxReceipt, 'order transaction failed') + datasetOrderTxId = orderTxReceipt.hash + assert(datasetOrderTxId, 'transaction id not found') + }) + it('should start an order on algorithm', async function () { + const orderTxReceipt = await orderAsset( + publishedAlgoDataset.ddo, + 0, + consumerAccount, + firstEnv.consumerAddress, // for compute, consumer is always address of compute env + publisherAccount, + oceanNode, + initializeResponse.algorithm.providerFee + ) + assert(orderTxReceipt, 'order transaction failed') + algoOrderTxId = orderTxReceipt.hash + assert(algoOrderTxId, 'transaction id not found') + }) + + it('should start a compute job', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 10) + // let's put funds in escrow & create an auth + let balance = await paymentTokenContract.balanceOf(await consumerAccount.getAddress()) + if (BigInt(balance.toString()) === BigInt(0)) { + const mintAmount = ethers.parseUnits('1000', 18) + const mintTx = await paymentTokenContract.mint( + await consumerAccount.getAddress(), + mintAmount + ) + await mintTx.wait() + balance = await paymentTokenContract.balanceOf(await consumerAccount.getAddress()) + } + assert(BigInt(balance.toString()) > BigInt(0), 'Consumer has no Ocean tokens') + const approveTx = await paymentTokenContract + .connect(consumerAccount) + .approve(initializeResponse.payment.escrowAddress, balance) + await approveTx.wait() + const depositTx = await escrowContract + .connect(consumerAccount) + .deposit(initializeResponse.payment.token, balance) + await depositTx.wait() + const authorizeTx = await escrowContract + .connect(consumerAccount) + .authorize( + initializeResponse.payment.token, + firstEnv.consumerAddress, + balance, + initializeResponse.payment.minLockSeconds, + 10 + ) + await authorizeTx.wait() + const locks = await oceanNode.escrow.getLocks( + DEVELOPMENT_CHAIN_ID, + paymentToken, + await consumerAccount.getAddress(), + firstEnv.consumerAddress + ) + + if (locks.length > 0) { + // cancel all locks + for (const lock of locks) { + try { + await escrowContract + .connect(consumerAccount) + .cancelExpiredLocks(lock.jobId, lock.token, lock.payer, lock.payee) + } catch (e) {} + } + } + const nonce = Date.now().toString() + const message = String( + (await consumerAccount.getAddress()) + publishedComputeDataset.ddo.id + nonce + ) + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + const signature = await wallet.signMessage(messageHashBytes) + const startComputeTask: PaidComputeStartCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_START, + consumerAddress: await consumerAccount.getAddress(), + signature, + nonce, + environment: firstEnv.id, + datasets: [ + { + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id, + transferTxId: datasetOrderTxId + } + ], + algorithm: { + documentId: publishedAlgoDataset.ddo.id, + serviceId: publishedAlgoDataset.ddo.services[0].id, + transferTxId: algoOrderTxId, + meta: publishedAlgoDataset.ddo.metadata.algorithm + }, + output: {}, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + maxJobDuration: computeJobDuration + // additionalDatasets?: ComputeAsset[] + // output?: ComputeOutput + } + const auth = await oceanNode.escrow.getAuthorizations( + DEVELOPMENT_CHAIN_ID, + paymentToken, + await consumerAccount.getAddress(), + firstEnv.consumerAddress + ) + assert(auth.length > 0, 'Should have authorization') + assert( + BigInt(auth[0].maxLockedAmount.toString()) > BigInt(0), + ' Should have maxLockedAmount in auth' + ) + assert( + BigInt(auth[0].maxLockCounts.toString()) > BigInt(0), + ' Should have maxLockCounts in auth' + ) + const response = await new PaidComputeStartHandler(oceanNode).handle(startComputeTask) + console.log(`response: ${response.status.httpStatus}`) + console.log(`response: ${JSON.stringify(response)}`) + assert(response, 'Failed to get response') + assert(response.status.httpStatus === 200, 'Failed to get 200 response') + assert(response.stream, 'Failed to get stream') + expect(response.stream).to.be.instanceOf(Readable) + + const jobs = await streamToObject(response.stream as Readable) + // eslint-disable-next-line prefer-destructuring + jobId = jobs[0].jobId + assert(jobId) + }) + after(async () => { + await tearDownEnvironment(previousConfiguration) + indexer.stopAllThreads() + }) +}) diff --git a/src/test/integration/auth.test.ts b/src/test/integration/auth.test.ts new file mode 100644 index 000000000..72eb72cdf --- /dev/null +++ b/src/test/integration/auth.test.ts @@ -0,0 +1,242 @@ +import { JsonRpcProvider, Signer, Wallet } from 'ethers' +import { Database } from '../../components/database/index.js' +import { getConfiguration, getMessageHash } from '../../utils/index.js' +import { + DEFAULT_TEST_TIMEOUT, + OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig, + setupEnvironment, + tearDownEnvironment, + getMockSupportedNetworks +} from '../utils/utils.js' +import { ENVIRONMENT_VARIABLES, PROTOCOL_COMMANDS } from '../../utils/constants.js' +import { OceanNodeConfig } from '../../@types/OceanNode.js' +import { RPCS } from '../../@types/blockchain.js' +import { OceanNode } from '../../OceanNode.js' +import { + CreateAuthTokenHandler, + InvalidateAuthTokenHandler +} from '../../components/core/handler/authHandler.js' +import { streamToObject } from '../../utils/util.js' +import { Readable } from 'stream' +import { expect } from 'chai' +import { ValidateDDOHandler } from '../../components/core/handler/ddoHandler.js' + +describe('Auth Token Integration Tests', () => { + let config: OceanNodeConfig + let database: Database + let provider: JsonRpcProvider + let consumerAccount: Signer + let previousConfiguration: OverrideEnvConfig[] + let oceanNode: OceanNode + + const mockSupportedNetworks: RPCS = getMockSupportedNetworks() + + before(async () => { + previousConfiguration = await setupEnvironment( + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.RPCS, + ENVIRONMENT_VARIABLES.INDEXER_NETWORKS, + ENVIRONMENT_VARIABLES.VALIDATE_UNSIGNED_DDO + ], + [JSON.stringify(mockSupportedNetworks), JSON.stringify([8996]), 'false'] + ) + ) + + config = await getConfiguration(true) + database = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, database) + + provider = new JsonRpcProvider(mockSupportedNetworks['8996'].rpc) + + const consumerPrivateKey = + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45209' + consumerAccount = new Wallet(consumerPrivateKey, provider) + }) + + after(async () => { + await tearDownEnvironment(previousConfiguration) + }) + + const getRandomNonce = () => { + return Date.now().toString() + } + + const ddoValiationRequest = async (token: string) => { + try { + const validateHandler = new ValidateDDOHandler(oceanNode) + const validateResponse = await validateHandler.handle({ + command: PROTOCOL_COMMANDS.VALIDATE_DDO, + authorization: token, + ddo: { + id: 'did:op:f00896cc6f5f9f2c17be06dd28bd6be085e1406bb55274cbd2b65b7271e7b104', + '@context': [], + version: '4.1.0', + nftAddress: '0x3357cCd4e75536422b61F6aeda3ad38545b9b01F', + chainId: 11155111, + metadata: { + created: new Date().toISOString(), + updated: new Date().toISOString(), + type: 'dataset', + name: 'Test DDO', + description: 'Test DDO', + tags: [], + author: 'Test Author', + license: 'https://market.oceanprotocol.com/terms', + additionalInformation: { + termsAndConditions: true + } + }, + services: [ + { + id: 'ccb398c50d6abd5b456e8d7242bd856a1767a890b537c2f8c10ba8b8a10e6025', + type: 'compute', + files: '0x0', + datatokenAddress: '0x0Cf4BE72EAD0583deD382589aFcbF34F3E860Bdc', + serviceEndpoint: '', + timeout: 86400 + } + ] + } + }) + + return validateResponse + } catch (error) { + console.log(`Error validating DDO: ${error}`) + return { status: error.response.status, data: error.response.data } + } + } + + describe('Token Management Tests', () => { + it('should create and validate token', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const consumerAddress = await consumerAccount.getAddress() + const nonce = getRandomNonce() + const message = String(consumerAddress + nonce) + const messageHash = getMessageHash(message) + const signature = await consumerAccount.signMessage(messageHash) + + const handlerResponse = await new CreateAuthTokenHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + address: consumerAddress, + signature, + nonce + }) + + const token = await streamToObject(handlerResponse.stream as Readable) + const testEndpointResponse = await ddoValiationRequest(token.token) + expect(testEndpointResponse.status.httpStatus).to.equal(200) + }) + + it('should handle token expiry', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const consumerAddress = await consumerAccount.getAddress() + const nonce = getRandomNonce() + const message = String(consumerAddress + nonce) + const messageHash = getMessageHash(message) + const signature = await consumerAccount.signMessage(messageHash) + + const validUntil = Date.now() + 1000 + const handlerResponse = await new CreateAuthTokenHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + address: consumerAddress, + signature, + nonce, + validUntil + }) + + const token = await streamToObject(handlerResponse.stream as Readable) + + await new Promise((resolve) => setTimeout(resolve, 2000)) + + const testEndpointResponse = await ddoValiationRequest(token.token) + expect(testEndpointResponse.status.httpStatus).to.equal(401) + }) + + it('should invalidate token', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const consumerAddress = await consumerAccount.getAddress() + const nonce = getRandomNonce() + const message = String(consumerAddress + nonce) + const messageHash = getMessageHash(message) + const signature = await consumerAccount.signMessage(messageHash) + + const handlerResponse = await new CreateAuthTokenHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + address: consumerAddress, + signature, + nonce + }) + + const token = await streamToObject(handlerResponse.stream as Readable) + const newNonce = getRandomNonce() + + await new InvalidateAuthTokenHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.INVALIDATE_AUTH_TOKEN, + address: consumerAddress, + signature, + nonce: newNonce, + token: token.token + }) + + const testEndpointResponse = await ddoValiationRequest(token.token) + expect(testEndpointResponse.status.httpStatus).to.equal(401) + }) + + describe('Error Cases', () => { + it('should handle invalid signatures', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const consumerAddress = await consumerAccount.getAddress() + + const response = await new CreateAuthTokenHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + address: consumerAddress, + signature: '0xinvalid', + nonce: getRandomNonce() + }) + expect(response.status.httpStatus).to.equal(401) + }) + + it('should handle invalid tokens', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const testEndpointResponse = await ddoValiationRequest('invalid-token') + expect(testEndpointResponse.status.httpStatus).to.equal(401) + }) + + it('should handle missing parameters', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + // Missing signature + const response = await new CreateAuthTokenHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + address: await consumerAccount.getAddress(), + signature: undefined, + nonce: getRandomNonce() + }) + expect(response.status.httpStatus).to.equal(400) + + // Missing address + const nonce = getRandomNonce() + const message = String((await consumerAccount.getAddress()) + nonce) + const messageHash = getMessageHash(message) + const signature = await consumerAccount.signMessage(messageHash) + + const response2 = await new CreateAuthTokenHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + address: undefined, + signature, + nonce: getRandomNonce() + }) + expect(response2.status.httpStatus).to.equal(400) + }) + }) + }) +}) diff --git a/src/test/integration/compute.test.ts b/src/test/integration/compute.test.ts index 395fd9900..c58b83524 100644 --- a/src/test/integration/compute.test.ts +++ b/src/test/integration/compute.test.ts @@ -1,22 +1,27 @@ import { expect, assert } from 'chai' import { ComputeGetEnvironmentsHandler, - ComputeStartHandler, + // ComputeStartHandler, ComputeStopHandler, ComputeGetStatusHandler, - ComputeInitializeHandler + ComputeInitializeHandler, + FreeComputeStartHandler, + PaidComputeStartHandler, + ComputeGetResultHandler } from '../../components/core/compute/index.js' import type { - ComputeStartCommand, + PaidComputeStartCommand, + FreeComputeStartCommand, ComputeStopCommand, ComputeGetStatusCommand, - ComputeInitializeCommand + ComputeInitializeCommand, + ComputeGetResultCommand } from '../../@types/commands.js' -import type { - ComputeAsset, - ComputeAlgorithm, - ComputeEnvironment -} from '../../@types/C2D.js' +import { + type ComputeAsset, + type ComputeAlgorithm, + type ComputeEnvironment +} from '../../@types/C2D/C2D.js' import { // DB_TYPES, ENVIRONMENT_VARIABLES, @@ -53,21 +58,27 @@ import { tearDownEnvironment } from '../utils/utils.js' -import { ProviderFees } from '../../@types/Fees.js' +import { ProviderFees, ProviderComputeInitializeResults } from '../../@types/Fees.js' import { homedir } from 'os' import { publishAlgoDDO, publishDatasetDDO } from '../data/ddo.js' import { DEVELOPMENT_CHAIN_ID, getOceanArtifactsAdresses } from '../../utils/address.js' import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json' assert { type: 'json' } import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } +import OceanToken from '@oceanprotocol/contracts/artifacts/contracts/utils/OceanToken.sol/OceanToken.json' assert { type: 'json' } +import EscrowJson from '@oceanprotocol/contracts/artifacts/contracts/escrow/Escrow.sol/Escrow.json' assert { type: 'json' } import { createHash } from 'crypto' import { encrypt } from '../../utils/crypt.js' import { EncryptMethod } from '../../@types/fileObject.js' -import { checkC2DEnvExists } from '../../components/c2d/index.js' import { getAlgoChecksums, validateAlgoForDataset } from '../../components/core/compute/utils.js' +import { freeComputeStartPayload } from '../data/commands.js' +import { DDOManager } from '@oceanprotocol/ddo-js' + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) + describe('Compute', () => { let previousConfiguration: OverrideEnvConfig[] let config: OceanNodeConfig @@ -80,21 +91,32 @@ describe('Compute', () => { let publishedComputeDataset: any let publishedAlgoDataset: any let jobId: string + let freeJobId: string let datasetOrderTxId: any let algoOrderTxId: any + let paymentToken: any + let paymentTokenContract: any + let escrowContract: any let providerFeesComputeDataset: ProviderFees let providerFeesComputeAlgo: ProviderFees let indexer: OceanIndexer - const now = new Date().getTime() / 1000 - const computeJobValidUntil = now + 60 * 15 // 15 minutes from now should be enough + // const now = new Date().getTime() / 1000 + const computeJobDuration = 60 * 15 // 15 minutes from now should be enough let firstEnv: ComputeEnvironment const wallet = new ethers.Wallet( '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45209' ) + const wallet2 = new ethers.Wallet( + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45210' + ) + const wallet3 = new ethers.Wallet( + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d4521A' + ) + // const chainId = DEVELOPMENT_CHAIN_ID const mockSupportedNetworks: RPCS = getMockSupportedNetworks() - const chainId = 8996 + const chainId = DEVELOPMENT_CHAIN_ID // randomly use a set of trusted algos or empty arrays // should validate if set and match, invalidate otherwise const setTrustedAlgosEmpty: boolean = Math.random() <= 0.5 @@ -103,8 +125,12 @@ describe('Compute', () => { let factoryContract: Contract let algoDDO: any let datasetDDO: any + let artifactsAddresses: any + let initializeResponse: ProviderComputeInitializeResults before(async () => { + artifactsAddresses = getOceanArtifactsAdresses() + paymentToken = artifactsAddresses.development.Ocean previousConfiguration = await setupEnvironment( TEST_ENV_CONFIG_FILE, buildEnvOverrideConfig( @@ -114,34 +140,33 @@ describe('Compute', () => { ENVIRONMENT_VARIABLES.PRIVATE_KEY, ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS, ENVIRONMENT_VARIABLES.ADDRESS_FILE, - ENVIRONMENT_VARIABLES.OPERATOR_SERVICE_URL - // ENVIRONMENT_VARIABLES.DB_URL, - // ENVIRONMENT_VARIABLES.DB_TYPE + ENVIRONMENT_VARIABLES.DOCKER_COMPUTE_ENVIRONMENTS ], [ JSON.stringify(mockSupportedNetworks), - JSON.stringify([8996]), + JSON.stringify([DEVELOPMENT_CHAIN_ID]), '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', JSON.stringify(['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']), `${homedir}/.ocean/ocean-contracts/artifacts/address.json`, - JSON.stringify(['http://localhost:31000']) - // 'http://localhost:9200', - // DB_TYPES.ELASTIC_SEARCH + '[{"socketPath":"/var/run/docker.sock","resources":[{"id":"disk","total":10}],"storageExpiry":604800,"maxJobDuration":3600,"fees":{"' + + DEVELOPMENT_CHAIN_ID + + '":[{"feeToken":"' + + paymentToken + + '","prices":[{"id":"cpu","price":1}]}]},"free":{"maxJobDuration":60,"maxJobs":3,"resources":[{"id":"cpu","max":1},{"id":"ram","max":1},{"id":"disk","max":1}]}}]' ] ) ) config = await getConfiguration(true) - dbconn = await new Database(config.dbConfig) - oceanNode = await OceanNode.getInstance(dbconn) + dbconn = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, dbconn, null, null, null, true) indexer = new OceanIndexer(dbconn, config.indexingNetworks) oceanNode.addIndexer(indexer) - oceanNode.addC2DEngines(config) + oceanNode.addC2DEngines() provider = new JsonRpcProvider('http://127.0.0.1:8545') publisherAccount = (await provider.getSigner(0)) as Signer consumerAccount = (await provider.getSigner(1)) as Signer - const artifactsAddresses = getOceanArtifactsAdresses() publisherAddress = await publisherAccount.getAddress() algoDDO = { ...publishAlgoDDO } datasetDDO = { ...publishDatasetDDO } @@ -150,6 +175,16 @@ describe('Compute', () => { ERC721Factory.abi, publisherAccount ) + paymentTokenContract = new ethers.Contract( + paymentToken, + OceanToken.abi, + publisherAccount + ) + escrowContract = new ethers.Contract( + artifactsAddresses.development.Escrow, + EscrowJson.abi, + publisherAccount + ) }) it('Sets up compute envs', () => { @@ -187,10 +222,12 @@ describe('Compute', () => { it('should add the algorithm to the dataset trusted algorithm list', async function () { this.timeout(DEFAULT_TEST_TIMEOUT * 5) + const config = await getConfiguration() const algoChecksums = await getAlgoChecksums( publishedAlgoDataset.ddo.id, publishedAlgoDataset.ddo.services[0].id, - oceanNode + oceanNode, + config ) publishedComputeDataset.ddo.services[0].compute = { allowRawAlgorithm: false, @@ -224,20 +261,26 @@ describe('Compute', () => { assert(txReceipt, 'set metadata failed') publishedComputeDataset = await waitToIndex( publishedComputeDataset.ddo.id, - EVENTS.METADATA_CREATED, - DEFAULT_TEST_TIMEOUT * 2, + EVENTS.METADATA_UPDATED, + DEFAULT_TEST_TIMEOUT * 3, true ) - assert( - publishedComputeDataset?.ddo?.services[0]?.compute?.publisherTrustedAlgorithms - .length > 0, - 'Trusted algorithms not updated' - ) - assert( - publishedComputeDataset?.ddo?.services[0]?.compute?.publisherTrustedAlgorithms[0] - .did === publishedAlgoDataset.ddo.id, - 'Algorithm DID mismatch in trusted algorithms' - ) + if (!publishedComputeDataset.ddo) { + expect(expectedTimeoutFailure(this.test.title)).to.be.equal( + publishedComputeDataset.wasTimeout + ) + } else { + assert( + publishedComputeDataset?.ddo?.services[0]?.compute?.publisherTrustedAlgorithms + .length > 0, + 'Trusted algorithms not updated' + ) + assert( + publishedComputeDataset?.ddo?.services[0]?.compute?.publisherTrustedAlgorithms[0] + .did === publishedAlgoDataset.ddo.id, + 'Algorithm DID mismatch in trusted algorithms' + ) + } }) it('Get compute environments', async () => { @@ -253,29 +296,28 @@ describe('Compute', () => { expect(response.stream).to.be.instanceOf(Readable) computeEnvironments = await streamToObject(response.stream as Readable) - // expect 2 envs - expect(computeEnvironments[DEVELOPMENT_CHAIN_ID].length === 2, 'incorrect length') - for (const computeEnvironment of computeEnvironments[DEVELOPMENT_CHAIN_ID]) { + console.log('existing envs: ', computeEnvironments) + // expect 1 OR + envs (1 if only docker free env is available) + assert(computeEnvironments.length >= 1, 'Not enough compute envs') + for (const computeEnvironment of computeEnvironments) { assert(computeEnvironment.id, 'id missing in computeEnvironments') + assert(computeEnvironment.fees, 'fees missing in computeEnvironments') assert( computeEnvironment.consumerAddress, 'consumerAddress missing in computeEnvironments' ) - assert(computeEnvironment.lastSeen, 'lastSeen missing in computeEnvironments') + assert(computeEnvironment.id.startsWith('0x'), 'id should start with 0x') - assert(computeEnvironment.cpuNumber > 0, 'cpuNumber missing in computeEnvironments') - assert(computeEnvironment.ramGB > 0, 'ramGB missing in computeEnvironments') - assert(computeEnvironment.diskGB > 0, 'diskGB missing in computeEnvironments') - assert(computeEnvironment.maxJobs > 0, 'maxJobs missing in computeEnvironments') + assert(computeEnvironment.resources.length > 2, 'Missing resources') assert( computeEnvironment.maxJobDuration > 0, 'maxJobDuration missing in computeEnvironments' ) } - firstEnv = computeEnvironments[DEVELOPMENT_CHAIN_ID][0] + firstEnv = computeEnvironments[0] }) - it('Initialize compute without transaction IDs', async () => { + it('Initialize compute without orders transaction IDs', async () => { const dataset: ComputeAsset = { documentId: publishedComputeDataset.ddo.id, serviceId: publishedComputeDataset.ddo.services[0].id @@ -290,28 +332,32 @@ describe('Compute', () => { const response = await new ComputeGetEnvironmentsHandler(oceanNode).handle( getEnvironmentsTask ) + console.log('firstEnv', firstEnv) computeEnvironments = await streamToObject(response.stream as Readable) - firstEnv = computeEnvironments[DEVELOPMENT_CHAIN_ID][0] - + firstEnv = computeEnvironments[0] const initializeComputeTask: ComputeInitializeCommand = { datasets: [dataset], algorithm, - compute: { - env: firstEnv.id, - validUntil: computeJobValidUntil + environment: firstEnv.id, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken }, + maxJobDuration: computeJobDuration, consumerAddress: firstEnv.consumerAddress, command: PROTOCOL_COMMANDS.COMPUTE_INITIALIZE } const resp = await new ComputeInitializeHandler(oceanNode).handle( initializeComputeTask ) + console.log(resp) assert(resp, 'Failed to get response') assert(resp.status.httpStatus === 200, 'Failed to get 200 response') assert(resp.stream, 'Failed to get stream') expect(resp.stream).to.be.instanceOf(Readable) const result: any = await streamToObject(resp.stream as Readable) + console.log(result) assert(result.algorithm, 'algorithm does not exist') expect(result.algorithm.datatoken?.toLowerCase()).to.be.equal( publishedAlgoDataset.datatokenAddress?.toLowerCase() @@ -365,9 +411,17 @@ describe('Compute', () => { assert(resultParsed.providerFee.validUntil, 'algorithm validUntil does not exist') assert(result.datasets[0].validOrder === false, 'incorrect validOrder') // expect false because tx id was not provided and no start order was called before + assert(result.payment, ' Payment structure does not exists') + assert( + result.payment.escrowAddress === artifactsAddresses.development.Escrow, + 'Incorrect escrow address' + ) + assert(result.payment.payee === firstEnv.consumerAddress, 'Incorrect payee address') + assert(result.payment.token === paymentToken, 'Incorrect payment token address') + // TO DO: check result.payment.amount }) - it('should start an order', async function () { + it('should start an order on dataset', async function () { const orderTxReceipt = await orderAsset( publishedComputeDataset.ddo, 0, @@ -383,11 +437,11 @@ describe('Compute', () => { }) it('Initialize compute with dataset tx and without algoritm tx', async () => { - // now, we have a valid order for dataset, with valid compute provider fees + // now, we have a valid order for dataset, with valid provider fees // expected results: // - dataset should have valid order - // - dataset should have valid providerFee - // - algo should not have any valid order or providerFee + // - dataset should not have providerFee, cause it's already paid & valid + // - algo should not have any valid order and it should have providerFee const dataset: ComputeAsset = { documentId: publishedComputeDataset.ddo.id, @@ -401,10 +455,12 @@ describe('Compute', () => { const initializeComputeTask: ComputeInitializeCommand = { datasets: [dataset], algorithm, - compute: { - env: firstEnv.id, - validUntil: computeJobValidUntil + environment: firstEnv.id, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken }, + maxJobDuration: computeJobDuration, consumerAddress: firstEnv.consumerAddress, command: PROTOCOL_COMMANDS.COMPUTE_INITIALIZE } @@ -417,6 +473,10 @@ describe('Compute', () => { expect(resp.stream).to.be.instanceOf(Readable) const result: any = await streamToObject(resp.stream as Readable) + console.log('446') + console.log(result) + console.log('Algo') + console.log(result.algorithm) assert(result.algorithm, 'algorithm does not exist') expect(result.algorithm.datatoken?.toLowerCase()).to.be.equal( publishedAlgoDataset.datatokenAddress?.toLowerCase() @@ -445,7 +505,7 @@ describe('Compute', () => { assert(result.datasets.length > 0, 'datasets key does not exist') const resultParsed = JSON.parse(JSON.stringify(result.datasets[0])) - + if ('providerFee' in resultParsed) console.log(resultParsed.providerFee) expect(resultParsed.datatoken?.toLowerCase()).to.be.equal( publishedComputeDataset.ddo.datatokens[0].address?.toLowerCase() ) @@ -491,10 +551,12 @@ describe('Compute', () => { const initializeComputeTask: ComputeInitializeCommand = { datasets: [dataset], algorithm, - compute: { - env: firstEnv.id, - validUntil: computeJobValidUntil + environment: firstEnv.id, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken }, + maxJobDuration: computeJobDuration, consumerAddress: firstEnv.consumerAddress, command: PROTOCOL_COMMANDS.COMPUTE_INITIALIZE } @@ -508,6 +570,7 @@ describe('Compute', () => { expect(resp.stream).to.be.instanceOf(Readable) const result: any = await streamToObject(resp.stream as Readable) + initializeResponse = JSON.parse(JSON.stringify(result)) assert(result.algorithm, 'algorithm does not exist') expect(result.algorithm.datatoken?.toLowerCase()).to.be.equal( publishedAlgoDataset.datatokenAddress?.toLowerCase() @@ -533,44 +596,107 @@ describe('Compute', () => { it('should fail to start a compute job', async () => { const nonce = Date.now().toString() - const message = String(nonce) + const message = String( + (await consumerAccount.getAddress()) + publishedComputeDataset.ddo.id + nonce + ) // sign message/nonce const consumerMessage = ethers.solidityPackedKeccak256( ['bytes'], [ethers.hexlify(ethers.toUtf8Bytes(message))] ) const messageHashBytes = ethers.toBeArray(consumerMessage) + + // since ganache does not supports personal_sign, we use wallet account const signature = await wallet.signMessage(messageHashBytes) - const startComputeTask: ComputeStartCommand = { + const startComputeTask: PaidComputeStartCommand = { command: PROTOCOL_COMMANDS.COMPUTE_START, - consumerAddress: await wallet.getAddress(), + consumerAddress: await consumerAccount.getAddress(), + environment: firstEnv.id, signature, nonce, - environment: firstEnv.id, - dataset: { - documentId: publishedComputeDataset.ddo.id, - serviceId: publishedComputeDataset.ddo.services[0].id, - transferTxId: '0x123' - }, + datasets: [ + { + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id, + transferTxId: '0x123' + } + ], algorithm: { documentId: publishedAlgoDataset.ddo.id, serviceId: publishedAlgoDataset.ddo.services[0].id, transferTxId: '0x123', meta: publishedAlgoDataset.ddo.metadata.algorithm - } + }, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + maxJobDuration: computeJobDuration // additionalDatasets?: ComputeAsset[] // output?: ComputeOutput } - const response = await new ComputeStartHandler(oceanNode).handle(startComputeTask) + const response = await new PaidComputeStartHandler(oceanNode).handle(startComputeTask) assert(response, 'Failed to get response') // should fail, because txId '0x123' is not a valid order assert(response.status.httpStatus === 500, 'Failed to get 500 response') assert(!response.stream, 'We should not have a stream') }) - it('should start a compute job', async () => { + it('should start a compute job with maxed resources', async () => { + // first check escrow auth + + let balance = await paymentTokenContract.balanceOf(await consumerAccount.getAddress()) + let funds = await oceanNode.escrow.getUserAvailableFunds( + DEVELOPMENT_CHAIN_ID, + await consumerAccount.getAddress(), + paymentToken + ) + // make sure we have 0 funds + if (BigInt(funds.toString()) > BigInt(0)) { + await escrowContract + .connect(consumerAccount) + .withdraw([initializeResponse.payment.token], [funds]) + } + let auth = await oceanNode.escrow.getAuthorizations( + DEVELOPMENT_CHAIN_ID, + paymentToken, + await consumerAccount.getAddress(), + firstEnv.consumerAddress + ) + if (auth.length > 0) { + // remove any auths + await escrowContract + .connect(consumerAccount) + .authorize(initializeResponse.payment.token, firstEnv.consumerAddress, 0, 0, 0) + } + let locks = await oceanNode.escrow.getLocks( + DEVELOPMENT_CHAIN_ID, + paymentToken, + await consumerAccount.getAddress(), + firstEnv.consumerAddress + ) + + if (locks.length > 0) { + // cancel all locks + for (const lock of locks) { + try { + await escrowContract + .connect(consumerAccount) + .cancelExpiredLocks(lock.jobId, lock.token, lock.payer, lock.payee) + } catch (e) {} + } + locks = await oceanNode.escrow.getLocks( + DEVELOPMENT_CHAIN_ID, + paymentToken, + await consumerAccount.getAddress(), + firstEnv.consumerAddress + ) + } + const locksBefore = locks.length const nonce = Date.now().toString() - const message = String(nonce) + const message = String( + (await consumerAccount.getAddress()) + publishedComputeDataset.ddo.id + nonce + ) // sign message/nonce const consumerMessage = ethers.solidityPackedKeccak256( ['bytes'], @@ -578,28 +704,103 @@ describe('Compute', () => { ) const messageHashBytes = ethers.toBeArray(consumerMessage) const signature = await wallet.signMessage(messageHashBytes) - const startComputeTask: ComputeStartCommand = { + const re = [] + for (const res of firstEnv.resources) { + re.push({ id: res.id, amount: res.total }) + } + const startComputeTask: PaidComputeStartCommand = { command: PROTOCOL_COMMANDS.COMPUTE_START, - consumerAddress: await wallet.getAddress(), + consumerAddress: await consumerAccount.getAddress(), signature, nonce, environment: firstEnv.id, - dataset: { - documentId: publishedComputeDataset.ddo.id, - serviceId: publishedComputeDataset.ddo.services[0].id, - transferTxId: datasetOrderTxId - }, + datasets: [ + { + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id, + transferTxId: datasetOrderTxId + } + ], algorithm: { documentId: publishedAlgoDataset.ddo.id, serviceId: publishedAlgoDataset.ddo.services[0].id, transferTxId: algoOrderTxId, meta: publishedAlgoDataset.ddo.metadata.algorithm }, - output: {} + output: {}, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + metadata: { + key: 'value' + }, + additionalViewers: [await wallet2.getAddress()], + maxJobDuration: computeJobDuration, + resources: re // additionalDatasets?: ComputeAsset[] // output?: ComputeOutput } - const response = await new ComputeStartHandler(oceanNode).handle(startComputeTask) + // it should fail, because we don't have funds & auths in escrow + let response = await new PaidComputeStartHandler(oceanNode).handle(startComputeTask) + assert(response.status.httpStatus === 400, 'Failed to get 400 response') + assert(!response.stream, 'We should not have a stream') + // let's put funds in escrow & create an auth + balance = await paymentTokenContract.balanceOf(await consumerAccount.getAddress()) + await paymentTokenContract + .connect(consumerAccount) + .approve(initializeResponse.payment.escrowAddress, balance) + await escrowContract + .connect(consumerAccount) + .deposit(initializeResponse.payment.token, balance) + await escrowContract + .connect(consumerAccount) + .authorize( + initializeResponse.payment.token, + firstEnv.consumerAddress, + balance, + initializeResponse.payment.minLockSeconds, + 10 + ) + auth = await oceanNode.escrow.getAuthorizations( + DEVELOPMENT_CHAIN_ID, + paymentToken, + await consumerAccount.getAddress(), + firstEnv.consumerAddress + ) + const authBefore = auth[0] + funds = await oceanNode.escrow.getUserAvailableFunds( + DEVELOPMENT_CHAIN_ID, + await consumerAccount.getAddress(), + paymentToken + ) + const fundsBefore = funds + assert(BigInt(funds.toString()) > BigInt(0), 'Should have funds in escrow') + assert(auth.length > 0, 'Should have authorization') + assert( + BigInt(auth[0].maxLockedAmount.toString()) > BigInt(0), + ' Should have maxLockedAmount in auth' + ) + assert( + BigInt(auth[0].maxLockCounts.toString()) > BigInt(0), + ' Should have maxLockCounts in auth' + ) + const nonce2 = Date.now().toString() + const message2 = String( + (await consumerAccount.getAddress()) + publishedComputeDataset.ddo.id + nonce2 + ) + const consumerMessage2 = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message2))] + ) + const messageHashBytes2 = ethers.toBeArray(consumerMessage2) + const signature2 = await wallet.signMessage(messageHashBytes2) + response = await new PaidComputeStartHandler(oceanNode).handle({ + ...startComputeTask, + nonce: nonce2, + signature: signature2 + }) + console.log(response) assert(response, 'Failed to get response') assert(response.status.httpStatus === 200, 'Failed to get 200 response') assert(response.stream, 'Failed to get stream') @@ -608,9 +809,95 @@ describe('Compute', () => { const jobs = await streamToObject(response.stream as Readable) // eslint-disable-next-line prefer-destructuring jobId = jobs[0].jobId + console.log('**** Started compute job with id: ', jobId) + // check escrow + funds = await oceanNode.escrow.getUserAvailableFunds( + DEVELOPMENT_CHAIN_ID, + await consumerAccount.getAddress(), + paymentToken + ) + assert(fundsBefore > funds, 'We should have less funds') + locks = await oceanNode.escrow.getLocks( + DEVELOPMENT_CHAIN_ID, + paymentToken, + await consumerAccount.getAddress(), + firstEnv.consumerAddress + ) + assert(locks.length > locksBefore, 'We should have locks') + auth = await oceanNode.escrow.getAuthorizations( + DEVELOPMENT_CHAIN_ID, + paymentToken, + await consumerAccount.getAddress(), + firstEnv.consumerAddress + ) + assert(auth[0].currentLocks > authBefore.currentLocks, 'We should have running jobs') + assert( + auth[0].currentLockedAmount > authBefore.currentLockedAmount, + 'We should have higher currentLockedAmount' + ) }) - it('should stop a compute job', async () => { + it('should try start another compute job with maxed resources, but fail', async () => { + const getEnvironmentsTask = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS + } + const eresponse = await new ComputeGetEnvironmentsHandler(oceanNode).handle( + getEnvironmentsTask + ) + computeEnvironments = await streamToObject(eresponse.stream as Readable) + console.log(computeEnvironments[0]) + const nonce = Date.now().toString() + const message = String( + (await consumerAccount.getAddress()) + publishedComputeDataset.ddo.id + nonce + ) + // sign message/nonce + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + const signature = await wallet.signMessage(messageHashBytes) + const re = [] + for (const res of firstEnv.resources) { + re.push({ id: res.id, amount: res.total }) + } + const startComputeTask: PaidComputeStartCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_START, + consumerAddress: await consumerAccount.getAddress(), + signature, + nonce, + environment: firstEnv.id, + datasets: [ + { + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id, + transferTxId: datasetOrderTxId + } + ], + algorithm: { + documentId: publishedAlgoDataset.ddo.id, + serviceId: publishedAlgoDataset.ddo.services[0].id, + transferTxId: algoOrderTxId, + meta: publishedAlgoDataset.ddo.metadata.algorithm + }, + output: {}, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + maxJobDuration: computeJobDuration, + resources: re + // additionalDatasets?: ComputeAsset[] + // output?: ComputeOutput + } + // it should fail, because we don't have enough free resources + const response = await new PaidComputeStartHandler(oceanNode).handle(startComputeTask) + console.log(response) + assert(response.status.httpStatus === 400, 'Failed to get 400 response') + assert(!response.stream, 'We should not have a stream') + }) + + it('should start a queued free docker compute job', async () => { const nonce = Date.now().toString() const message = String(nonce) // sign message/nonce @@ -620,18 +907,45 @@ describe('Compute', () => { ) const messageHashBytes = ethers.toBeArray(consumerMessage) const signature = await wallet.signMessage(messageHashBytes) - const stopComputeTask: ComputeStopCommand = { - command: PROTOCOL_COMMANDS.COMPUTE_STOP, + const startComputeTask: FreeComputeStartCommand = { + command: PROTOCOL_COMMANDS.FREE_COMPUTE_START, consumerAddress: await wallet.getAddress(), signature, nonce, - jobId + environment: firstEnv.id, + datasets: [ + { + fileObject: computeAsset.services[0].files.files[0], + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id, + transferTxId: datasetOrderTxId + } + ], + algorithm: { + fileObject: algoAsset.services[0].files.files[0], + documentId: publishedAlgoDataset.ddo.id, + serviceId: publishedAlgoDataset.ddo.services[0].id, + transferTxId: algoOrderTxId, + meta: publishedAlgoDataset.ddo.metadata.algorithm + }, + output: {}, + queueMaxWaitTime: 300 // 5 minutes + // additionalDatasets?: ComputeAsset[] + // output?: ComputeOutput } - const response = await new ComputeStopHandler(oceanNode).handle(stopComputeTask) + const response = await new FreeComputeStartHandler(oceanNode).handle(startComputeTask) + console.log(response) assert(response, 'Failed to get response') assert(response.status.httpStatus === 200, 'Failed to get 200 response') assert(response.stream, 'Failed to get stream') expect(response.stream).to.be.instanceOf(Readable) + + const jobs = await streamToObject(response.stream as Readable) + assert(jobs[0].jobId, 'failed to got job id') + console.log('**** Started FREE compute job with id: ', jobs[0].jobId) + console.log(jobs[0]) + // eslint-disable-next-line prefer-destructuring + freeJobId = jobs[0].jobId }) it('should get job status by jobId', async () => { @@ -649,13 +963,14 @@ describe('Compute', () => { assert(response.stream, 'Failed to get stream') expect(response.stream).to.be.instanceOf(Readable) const jobs = await streamToObject(response.stream as Readable) + expect(jobs[0].metadata).to.deep.equal({ key: 'value' }) console.log(jobs) }) it('should get job status by consumer', async () => { const statusComputeTask: ComputeGetStatusCommand = { command: PROTOCOL_COMMANDS.COMPUTE_GET_STATUS, - consumerAddress: wallet.address, + consumerAddress: consumerAccount.address, agreementId: null, jobId: null } @@ -669,13 +984,174 @@ describe('Compute', () => { const jobs = await streamToObject(response.stream as Readable) console.log(jobs) }) - - it('should checkC2DEnvExists', async () => { - const envId = '0x123' - const result = await checkC2DEnvExists(envId, oceanNode) - expect(result).to.equal(false) + it('should get job result by consumer', async () => { + const nonce = Date.now().toString() + const message = String((await wallet.getAddress()) + jobId + '0' + nonce) + // sign message/nonce + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + const signature = await wallet.signMessage(messageHashBytes) + const resultComputeTask: ComputeGetResultCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_RESULT, + consumerAddress: await wallet.getAddress(), + jobId, + signature, + nonce, + index: 0 + } + const response = await new ComputeGetResultHandler(oceanNode).handle( + resultComputeTask + ) + assert(response, 'Failed to get response') + assert(response.status.httpStatus === 200, 'Failed to get 200 response') + }) + it('should get job result by additional viewer', async () => { + const nonce = Date.now().toString() + const message = String((await wallet2.getAddress()) + jobId + '0' + nonce) + // sign message/nonce + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + const signature = await wallet2.signMessage(messageHashBytes) + const resultComputeTask: ComputeGetResultCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_RESULT, + consumerAddress: await wallet2.getAddress(), + jobId, + signature, + nonce, + index: 0 + } + const response = await new ComputeGetResultHandler(oceanNode).handle( + resultComputeTask + ) + assert(response, 'Failed to get response') + assert(response.status.httpStatus === 200, 'Failed to get 200 response') + }) + it('should fail to get job result by non allowed address', async () => { + const nonce = Date.now().toString() + const message = String((await wallet3.getAddress()) + jobId + '0' + nonce) + // sign message/nonce + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + const signature = await wallet3.signMessage(messageHashBytes) + const resultComputeTask: ComputeGetResultCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_RESULT, + consumerAddress: await wallet3.getAddress(), + jobId, + signature, + nonce, + index: 0 + } + const response = await new ComputeGetResultHandler(oceanNode).handle( + resultComputeTask + ) + console.log(response) + assert(response, 'Failed to get response') + assert(response.status.httpStatus === 500, 'Failed to get 500 response') + console.log(response.status.error) }) + it('should stop a compute job', async () => { + const nonce = Date.now().toString() + const message = String((await consumerAccount.getAddress()) + (jobId || '')) + // sign message/nonce + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + const signature = await wallet.signMessage(messageHashBytes) + const stopComputeTask: ComputeStopCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_STOP, + consumerAddress: await consumerAccount.getAddress(), + signature, + nonce, + jobId + } + const response = await new ComputeStopHandler(oceanNode).handle(stopComputeTask) + assert(response, 'Failed to get response') + assert(response.status.httpStatus === 200, 'Failed to get 200 response') + assert(response.stream, 'Failed to get stream') + expect(response.stream).to.be.instanceOf(Readable) + let tries = 0 + do { + const statusComputeTask: ComputeGetStatusCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_STATUS, + consumerAddress: null, + agreementId: null, + jobId + } + const response = await new ComputeGetStatusHandler(oceanNode).handle( + statusComputeTask + ) + assert(response, 'Failed to get response') + assert(response.status.httpStatus === 200, 'Failed to get 200 response') + assert(response.stream, 'Failed to get stream') + expect(response.stream).to.be.instanceOf(Readable) + const jobs = await streamToObject(response.stream as Readable) + console.log('Checking job status after stop...') + console.log(jobs[0]) + if (jobs[0].dateFinished) break + if (tries > 10) assert.fail('Job not stopped after multiple tries') + await sleep(2000) + tries++ + } while (true) + }) + it('should deny the Free job due to signature (directCommand payload)', async function () { + freeComputeStartPayload.environment = firstEnv.id + const command: FreeComputeStartCommand = freeComputeStartPayload + const handler = new FreeComputeStartHandler(oceanNode) + const response = await handler.handle(command) + assert(response.status.httpStatus === 401, 'Failed to get 401 response') + assert(response.stream === null, 'Should not get stream') + }) + it('should deny the Free job due to bad container image (directCommand payload)', async function () { + const nonce = Date.now().toString() + const message = String(nonce) + // sign message/nonce + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + const signature = await wallet.signMessage(messageHashBytes) + freeComputeStartPayload.signature = signature + freeComputeStartPayload.nonce = nonce + freeComputeStartPayload.environment = firstEnv.id + freeComputeStartPayload.consumerAddress = await wallet.getAddress() + const command: FreeComputeStartCommand = freeComputeStartPayload + const handler = new FreeComputeStartHandler(oceanNode) + const response = await handler.handle(command) + assert(response.status.httpStatus === 500, 'Failed to get 500 response') + assert(response.stream === null, 'Should not get stream') + }) + // let's check our queued job + it('should get job status by jobId', async () => { + const statusComputeTask: ComputeGetStatusCommand = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_STATUS, + consumerAddress: null, + agreementId: null, + jobId: freeJobId + } + const response = await new ComputeGetStatusHandler(oceanNode).handle( + statusComputeTask + ) + assert(response, 'Failed to get response') + assert(response.status.httpStatus === 200, 'Failed to get 200 response') + assert(response.stream, 'Failed to get stream') + expect(response.stream).to.be.instanceOf(Readable) + const jobs = await streamToObject(response.stream as Readable) + console.log('Checking FREE job status...') + console.log(jobs[0]) + }) // algo and checksums related describe('C2D algo and checksums related', () => { it('should publish AlgoDDO', async () => { @@ -846,10 +1322,12 @@ describe('Compute', () => { ) const algoDDOTest = ddo if (algoDDOTest) { + const config = await getConfiguration() const algoChecksums = await getAlgoChecksums( algoDDOTest.id, algoDDOTest.services[0].id, - oceanNode + oceanNode, + config ) expect(algoChecksums.files).to.equal( 'f6a7b95e4a2e3028957f69fdd2dac27bd5103986b2171bc8bfee68b52f874dcd' @@ -857,11 +1335,12 @@ describe('Compute', () => { expect(algoChecksums.container).to.equal( 'ba8885fcc7d366f058d6c3bb0b7bfe191c5f85cb6a4ee3858895342436c23504' ) + expect(algoChecksums.serviceId).to.equal(algoDDOTest.services[0].id) } else expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) }) it('should validateAlgoForDataset', async function () { - this.timeout(DEFAULT_TEST_TIMEOUT * 3) + this.timeout(DEFAULT_TEST_TIMEOUT * 10) const { ddo, wasTimeout } = await waitToIndex( algoDDO.id, EVENTS.METADATA_CREATED, @@ -871,10 +1350,12 @@ describe('Compute', () => { const algoDDOTest = ddo if (algoDDOTest) { + const config = await getConfiguration() const algoChecksums = await getAlgoChecksums( algoDDOTest.id, algoDDOTest.services[0].id, - oceanNode + oceanNode, + config ) const { ddo, wasTimeout } = await waitToIndex( datasetDDO.id, @@ -884,15 +1365,21 @@ describe('Compute', () => { ) const datasetDDOTest = ddo + const datasetInstance = DDOManager.getDDOClass(datasetDDO) + console.log('datasetDDOTest', datasetDDOTest) if (datasetDDOTest) { const result = await validateAlgoForDataset( algoDDOTest.id, algoChecksums, - datasetDDOTest, + datasetInstance, datasetDDOTest.services[0].id, oceanNode ) - expect(result).to.equal(!setTrustedAlgosEmpty) + // datasetDDOTest does not have set + // publisherTrustedAlgorithms, nor + // publisherTrustedAlgorithmPublishers + // expect the result to be true + expect(result).to.equal(true) } else expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) } else expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) }) @@ -903,3 +1390,361 @@ describe('Compute', () => { indexer.stopAllThreads() }) }) + +describe('Compute Access Restrictions', () => { + let previousConfiguration: OverrideEnvConfig[] + let config: OceanNodeConfig + let dbconn: Database + let oceanNode: OceanNode + let provider: any + let publisherAccount: any + let computeEnvironments: any + let publishedComputeDataset: any + let publishedAlgoDataset: any + let paymentToken: any + let firstEnv: ComputeEnvironment + let accessListAddress: string + + const wallet = new ethers.Wallet( + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45209' + ) + const wallet2 = new ethers.Wallet( + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45210' + ) + const wallet3 = new ethers.Wallet( + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d4521A' + ) + const mockSupportedNetworks: RPCS = getMockSupportedNetworks() + const computeJobDuration = 60 * 15 + + async function createPaidComputeCommand( + consumerAddr: string, + signerWallet: ethers.Wallet, + envId: string + ): Promise { + const nonce = Date.now().toString() + const message = String(consumerAddr + publishedComputeDataset.ddo.id + nonce) + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const signature = await signerWallet.signMessage(ethers.toBeArray(consumerMessage)) + + return { + command: PROTOCOL_COMMANDS.COMPUTE_START, + consumerAddress: consumerAddr, + environment: envId, + signature, + nonce, + datasets: [ + { + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id, + transferTxId: '0x123' + } + ], + algorithm: { + documentId: publishedAlgoDataset.ddo.id, + serviceId: publishedAlgoDataset.ddo.services[0].id, + transferTxId: '0x123', + meta: publishedAlgoDataset.ddo.metadata.algorithm + }, + payment: { chainId: DEVELOPMENT_CHAIN_ID, token: paymentToken }, + maxJobDuration: computeJobDuration + } + } + + async function createFreeComputeCommand( + consumerAddr: string, + signerWallet: ethers.Wallet, + envId: string + ): Promise { + const nonce = Date.now().toString() + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(nonce))] + ) + const signature = await signerWallet.signMessage(ethers.toBeArray(consumerMessage)) + + return { + command: PROTOCOL_COMMANDS.FREE_COMPUTE_START, + consumerAddress: consumerAddr, + signature, + nonce, + environment: envId, + datasets: [ + { + fileObject: computeAsset.services[0].files.files[0], + documentId: publishedComputeDataset.ddo.id, + serviceId: publishedComputeDataset.ddo.services[0].id + } + ], + algorithm: { + fileObject: algoAsset.services[0].files.files[0], + documentId: publishedAlgoDataset.ddo.id, + serviceId: publishedAlgoDataset.ddo.services[0].id, + meta: publishedAlgoDataset.ddo.metadata.algorithm + }, + output: {} + } + } + + describe('Address-based restrictions', () => { + before(async () => { + const artifactsAddresses = getOceanArtifactsAdresses() + paymentToken = artifactsAddresses.development.Ocean + const allowedAddress = await wallet.getAddress() + previousConfiguration = await setupEnvironment( + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.RPCS, + ENVIRONMENT_VARIABLES.INDEXER_NETWORKS, + ENVIRONMENT_VARIABLES.PRIVATE_KEY, + ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS, + ENVIRONMENT_VARIABLES.ADDRESS_FILE, + ENVIRONMENT_VARIABLES.DOCKER_COMPUTE_ENVIRONMENTS + ], + [ + JSON.stringify(mockSupportedNetworks), + JSON.stringify([DEVELOPMENT_CHAIN_ID]), + '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', + JSON.stringify(['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']), + `${homedir}/.ocean/ocean-contracts/artifacts/address.json`, + '[{"socketPath":"/var/run/docker.sock","resources":[{"id":"disk","total":10}],"storageExpiry":604800,"maxJobDuration":3600,"access":{"addresses":["' + + allowedAddress + + '"],"accessLists":[]},"fees":{"' + + DEVELOPMENT_CHAIN_ID + + '":[{"feeToken":"' + + paymentToken + + '","prices":[{"id":"cpu","price":1}]}]},"free":{"maxJobDuration":60,"maxJobs":3,"access":{"addresses":["' + + allowedAddress + + '"],"accessLists":[]},"resources":[{"id":"cpu","max":1},{"id":"ram","max":1},{"id":"disk","max":1}]}}]' + ] + ) + ) + config = await getConfiguration(true) + dbconn = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, dbconn, null, null, null, true) + const indexer = new OceanIndexer(dbconn, config.indexingNetworks) + oceanNode.addIndexer(indexer) + oceanNode.addC2DEngines() + + provider = new JsonRpcProvider('http://127.0.0.1:8545') + publisherAccount = await provider.getSigner(0) + + publishedComputeDataset = await publishAsset(computeAsset, publisherAccount) + publishedAlgoDataset = await publishAsset(algoAsset, publisherAccount) + + await waitToIndex( + publishedComputeDataset.ddo.id, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT + ) + await waitToIndex( + publishedAlgoDataset.ddo.id, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT + ) + }) + + it('Get compute environments with address restrictions', async () => { + const getEnvironmentsTask = { command: PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS } + const response = await new ComputeGetEnvironmentsHandler(oceanNode).handle( + getEnvironmentsTask + ) + computeEnvironments = await streamToObject(response.stream as Readable) + firstEnv = computeEnvironments[0] + assert(firstEnv.access, 'Access control should exist') + assert( + firstEnv.access.addresses.includes(await wallet.getAddress()), + 'Should have wallet address in allowed list' + ) + }) + + it('should deny access for paid compute when address not in allowed list', async () => { + const command = await createPaidComputeCommand( + await wallet3.getAddress(), + wallet3, + firstEnv.id + ) + const response = await new PaidComputeStartHandler(oceanNode).handle(command) + assert(response.status.httpStatus === 403, 'Should get 403 access denied') + }) + + it('should deny access for free compute when address not in allowed list', async () => { + const command = await createFreeComputeCommand( + await wallet3.getAddress(), + wallet3, + firstEnv.id + ) + const response = await new FreeComputeStartHandler(oceanNode).handle(command) + assert(response.status.httpStatus === 403, 'Should get 403 access denied') + }) + + after(async () => { + await tearDownEnvironment(previousConfiguration) + }) + }) + + describe('Access List restrictions', () => { + before(async () => { + const artifactsAddresses = getOceanArtifactsAdresses() + paymentToken = artifactsAddresses.development.Ocean + + provider = new JsonRpcProvider('http://127.0.0.1:8545') + publisherAccount = await provider.getSigner(0) + + const AccessListFactory = await import( + '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessListFactory.sol/AccessListFactory.json', + { assert: { type: 'json' } } + ) + + const factoryContract = new ethers.Contract( + artifactsAddresses.development.AccessListFactory, + AccessListFactory.default.abi, + publisherAccount + ) + + const tx = await factoryContract.deployAccessListContract( + 'ComputeAccessList', + 'CAL', + false, + await publisherAccount.getAddress(), + [await wallet.getAddress(), await wallet2.getAddress()], + ['https://oceanprotocol.com/nft/', 'https://oceanprotocol.com/nft/'] + ) + const txReceipt = await tx.wait() + const events = txReceipt?.logs?.filter((log: any) => { + return log.fragment?.name === 'NewAccessList' + }) + accessListAddress = events[0].args[0] + + const AccessListAbi = await import( + '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessList.sol/AccessList.json', + { assert: { type: 'json' } } + ) + const accessListContract = new ethers.Contract( + accessListAddress, + AccessListAbi.default.abi, + publisherAccount + ) + const wallet1Balance = await accessListContract.balanceOf(await wallet.getAddress()) + const wallet2Balance = await accessListContract.balanceOf( + await wallet2.getAddress() + ) + const wallet3Balance = await accessListContract.balanceOf( + await wallet3.getAddress() + ) + + if (Number(wallet1Balance) === 0 || Number(wallet2Balance) === 0) { + throw new Error('Access list tokens were not minted correctly') + } + + if (Number(wallet3Balance) > 0) { + throw new Error('Wallet3 should not have access list token') + } + + previousConfiguration = await setupEnvironment( + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.RPCS, + ENVIRONMENT_VARIABLES.INDEXER_NETWORKS, + ENVIRONMENT_VARIABLES.PRIVATE_KEY, + ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS, + ENVIRONMENT_VARIABLES.ADDRESS_FILE, + ENVIRONMENT_VARIABLES.DOCKER_COMPUTE_ENVIRONMENTS + ], + [ + JSON.stringify(mockSupportedNetworks), + JSON.stringify([DEVELOPMENT_CHAIN_ID]), + '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', + JSON.stringify(['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']), + `${homedir}/.ocean/ocean-contracts/artifacts/address.json`, + '[{"socketPath":"/var/run/docker.sock","resources":[{"id":"disk","total":10}],"storageExpiry":604800,"maxJobDuration":3600,"access":{"addresses":[],"accessLists":["' + + accessListAddress + + '"]},"fees":{"' + + DEVELOPMENT_CHAIN_ID + + '":[{"feeToken":"' + + paymentToken + + '","prices":[{"id":"cpu","price":1}]}]},"free":{"maxJobDuration":60,"maxJobs":3,"access":{"addresses":[],"accessLists":["' + + accessListAddress + + '"]},"resources":[{"id":"cpu","max":1},{"id":"ram","max":1},{"id":"disk","max":1}]}}]' + ] + ) + ) + config = await getConfiguration(true) + dbconn = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, dbconn, null, null, null, true) + const indexer = new OceanIndexer(dbconn, config.indexingNetworks) + oceanNode.addIndexer(indexer) + oceanNode.addC2DEngines() + + publishedComputeDataset = await publishAsset(computeAsset, publisherAccount) + publishedAlgoDataset = await publishAsset(algoAsset, publisherAccount) + + await waitToIndex( + publishedComputeDataset.ddo.id, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT + ) + await waitToIndex( + publishedAlgoDataset.ddo.id, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT + ) + }) + + it('Get compute environments with access list restrictions', async () => { + const getEnvironmentsTask = { command: PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS } + const response = await new ComputeGetEnvironmentsHandler(oceanNode).handle( + getEnvironmentsTask + ) + computeEnvironments = await streamToObject(response.stream as Readable) + firstEnv = computeEnvironments[0] + assert(firstEnv.access, 'Access control should exist') + assert( + firstEnv.access.accessLists.includes(accessListAddress), + 'Should have access list address' + ) + }) + + it('should allow access for paid compute when address is in access list', async () => { + const command = await createPaidComputeCommand( + await wallet.getAddress(), + wallet, + firstEnv.id + ) + const response = await new PaidComputeStartHandler(oceanNode).handle(command) + expect(response.status.httpStatus).to.not.equal(403) + }) + + it('should deny access for paid compute when address not in access list', async () => { + const command = await createPaidComputeCommand( + await wallet3.getAddress(), + wallet3, + firstEnv.id + ) + const response = await new PaidComputeStartHandler(oceanNode).handle(command) + assert( + response.status.httpStatus === 403, + `Expected 403 but got ${response.status.httpStatus}: ${response.status.error}` + ) + }) + + it('should allow access for free compute when address is in access list', async () => { + const command = await createFreeComputeCommand( + await wallet2.getAddress(), + wallet2, + firstEnv.id + ) + const response = await new FreeComputeStartHandler(oceanNode).handle(command) + expect(response.status.httpStatus).to.not.equal(403) + }) + + after(async () => { + await tearDownEnvironment(previousConfiguration) + }) + }) +}) diff --git a/src/test/integration/configAdmin.test.ts b/src/test/integration/configAdmin.test.ts new file mode 100644 index 000000000..6b2700d6e --- /dev/null +++ b/src/test/integration/configAdmin.test.ts @@ -0,0 +1,371 @@ +import { Wallet } from 'ethers' +import { Database } from '../../components/database/index.js' +import { getConfiguration, loadConfigFromFile } from '../../utils/index.js' +import { + DEFAULT_TEST_TIMEOUT, + OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig, + setupEnvironment, + tearDownEnvironment, + getMockSupportedNetworks +} from '../utils/utils.js' +import { ENVIRONMENT_VARIABLES, PROTOCOL_COMMANDS } from '../../utils/constants.js' +import { OceanNodeConfig } from '../../@types/OceanNode.js' +import { RPCS } from '../../@types/blockchain.js' +import { OceanNode } from '../../OceanNode.js' +import { FetchConfigHandler } from '../../components/core/admin/fetchConfigHandler.js' +import { PushConfigHandler } from '../../components/core/admin/pushConfigHandler.js' +import { streamToObject } from '../../utils/util.js' +import { Readable } from 'stream' +import { expect } from 'chai' + +describe('Config Admin Endpoints Integration Tests', () => { + let config: OceanNodeConfig + let database: Database + let adminAccount: Wallet + let previousConfiguration: OverrideEnvConfig[] + let oceanNode: OceanNode + + const mockSupportedNetworks: RPCS = getMockSupportedNetworks() + + before(async () => { + const adminPrivateKey = + '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58' + adminAccount = new Wallet(adminPrivateKey) + const adminAddress = await adminAccount.getAddress() + + previousConfiguration = await setupEnvironment( + TEST_ENV_CONFIG_FILE, + buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.RPCS, + ENVIRONMENT_VARIABLES.INDEXER_NETWORKS, + ENVIRONMENT_VARIABLES.ALLOWED_ADMINS + ], + [ + JSON.stringify(mockSupportedNetworks), + JSON.stringify([8996]), + JSON.stringify([adminAddress]) + ] + ) + ) + + config = await getConfiguration(true) + database = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, database) + }) + + after(async () => { + await tearDownEnvironment(previousConfiguration) + }) + + const getAdminSignature = async (expiryTimestamp: number): Promise => { + const message = expiryTimestamp.toString() + return await adminAccount.signMessage(message) + } + + describe('Fetch Config Tests', () => { + it('should fetch current config', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const handlerResponse = await new FetchConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.FETCH_CONFIG, + expiryTimestamp, + signature + }) + + expect(handlerResponse.status.httpStatus).to.equal(200) + + const response = await streamToObject(handlerResponse.stream as Readable) + expect(response).to.be.an('object') + expect(response).to.have.property('hasHttp') + expect(response).to.have.property('hasP2P') + }) + + it('should hide private key in fetched config', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const handlerResponse = await new FetchConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.FETCH_CONFIG, + expiryTimestamp, + signature + }) + + expect(handlerResponse.status.httpStatus).to.equal(200) + + const response = await streamToObject(handlerResponse.stream as Readable) + expect(response).to.have.property('keys') + expect(response.keys).to.have.property('privateKey') + expect(response.keys.privateKey).to.equal('[*** HIDDEN CONTENT ***]') + }) + + it('should reject fetch config with signature from non-admin', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const nonAdminPrivateKey = + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45209' + const nonAdminAccount = new Wallet(nonAdminPrivateKey) + + const expiryTimestamp = Date.now() + 60000 + const message = expiryTimestamp.toString() + const invalidSignature = await nonAdminAccount.signMessage(message) + + const handlerResponse = await new FetchConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.FETCH_CONFIG, + expiryTimestamp, + signature: invalidSignature + }) + + expect(handlerResponse.status.httpStatus).to.not.equal(200) + }) + + it('should reject fetch config with expired timestamp', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() - 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const handlerResponse = await new FetchConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.FETCH_CONFIG, + expiryTimestamp, + signature + }) + + expect(handlerResponse.status.httpStatus).to.not.equal(200) + }) + }) + + describe('Push Config Tests', () => { + it('should push config changes and reload node', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const newConfig = { + rateLimit: 100, + maxConnections: 200 + } + + const handlerResponse = await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature, + config: newConfig + }) + + expect(handlerResponse.status.httpStatus).to.equal(200) + + const response = await streamToObject(handlerResponse.stream as Readable) + expect(response).to.be.an('object') + expect(response.rateLimit).to.equal(100) + expect(response.maxConnections).to.equal(200) + + const savedConfig = loadConfigFromFile() + expect(savedConfig.rateLimit).to.equal(100) + expect(savedConfig.maxConnections).to.equal(200) + + const restoreConfig = { + rateLimit: 30, + maxConnections: 30 + } + + await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp: Date.now() + 60000, + signature: await getAdminSignature(Date.now() + 60000), + config: restoreConfig + }) + }) + + it('should merge new config with existing config', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const fetchResponse = await new FetchConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.FETCH_CONFIG, + expiryTimestamp, + signature + }) + + const currentConfig = await streamToObject(fetchResponse.stream as Readable) + + const partialConfig = { + rateLimit: 75 + } + + const pushResponse = await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp: Date.now() + 60000, + signature: await getAdminSignature(Date.now() + 60000), + config: partialConfig + }) + + const updatedConfig = await streamToObject(pushResponse.stream as Readable) + + expect(updatedConfig.rateLimit).to.equal(75) + expect(updatedConfig.maxConnections).to.equal(currentConfig.maxConnections) + + await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp: Date.now() + 60000, + signature: await getAdminSignature(Date.now() + 60000), + config: { rateLimit: currentConfig.rateLimit } + }) + }) + + it('should hide private key in push config response', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const response = await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature, + config: { rateLimit: 50 } + }) + + expect(response.status.httpStatus).to.equal(200) + + const updatedConfig = await streamToObject(response.stream as Readable) + expect(updatedConfig).to.have.property('keys') + expect(updatedConfig.keys).to.have.property('privateKey') + expect(updatedConfig.keys.privateKey).to.equal('[*** HIDDEN CONTENT ***]') + + await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp: Date.now() + 60000, + signature: await getAdminSignature(Date.now() + 60000), + config: { rateLimit: 30 } + }) + }) + + it('should reject push config with signature from non-admin', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const nonAdminPrivateKey = + '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45209' + const nonAdminAccount = new Wallet(nonAdminPrivateKey) + + const expiryTimestamp = Date.now() + 60000 + const message = expiryTimestamp.toString() + const invalidSignature = await nonAdminAccount.signMessage(message) + + const handlerResponse = await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature: invalidSignature, + config: { rateLimit: 100 } + }) + + expect(handlerResponse.status.httpStatus).to.not.equal(200) + }) + + it('should reject push config with expired timestamp', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() - 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const handlerResponse = await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature, + config: { rateLimit: 100 } + }) + + expect(handlerResponse.status.httpStatus).to.not.equal(200) + }) + + it('should reject push config with missing config parameter', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const handlerResponse = await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature, + config: undefined + }) + + expect(handlerResponse.status.httpStatus).to.equal(400) + }) + + it('should reject push config with invalid config type', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const handlerResponse = await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature, + config: 'invalid' as any + }) + + expect(handlerResponse.status.httpStatus).to.equal(400) + }) + + it('should reject push config with invalid field values (Zod validation)', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const handlerResponse = await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature, + config: { rateLimit: 'not-a-number' as any } + }) + + expect(handlerResponse.status.httpStatus).to.equal(400) + expect(handlerResponse.status.error).to.not.equal(undefined) + expect(handlerResponse.stream).to.equal(null) + }) + }) + + describe('Config Reload Tests', () => { + it('should reload node configuration after push', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const expiryTimestamp = Date.now() + 60000 + const signature = await getAdminSignature(expiryTimestamp) + + const configBefore = await getConfiguration() + + await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp, + signature, + config: { rateLimit: 999 } + }) + + const configAfter = await getConfiguration() + + expect(configAfter.rateLimit).to.equal(999) + expect(configAfter.rateLimit).to.not.equal(configBefore.rateLimit) + + await new PushConfigHandler(oceanNode).handle({ + command: PROTOCOL_COMMANDS.PUSH_CONFIG, + expiryTimestamp: Date.now() + 60000, + signature: await getAdminSignature(Date.now() + 60000), + config: { rateLimit: configBefore.rateLimit } + }) + }) + }) +}) diff --git a/src/test/integration/configDatabase.test.ts b/src/test/integration/configDatabase.test.ts new file mode 100644 index 000000000..96bd11ebc --- /dev/null +++ b/src/test/integration/configDatabase.test.ts @@ -0,0 +1,94 @@ +import { Database } from '../../components/database/index.js' +import { expect, assert } from 'chai' +import { OceanIndexer } from '../../components/Indexer/index.js' +import { getMockSupportedNetworks } from '../utils/utils.js' +import { SQLLiteConfigDatabase } from '../../components/database/SQLLiteConfigDatabase.js' +import { DB_TYPES } from '../../utils/constants.js' +import { OceanNodeDBConfig } from '../../@types/OceanNode.js' + +const versionConfig: OceanNodeDBConfig = { + url: 'http://localhost:8108/test-version?apiKey=xyz', + dbType: DB_TYPES.TYPESENSE +} + +const emptyDBConfig: OceanNodeDBConfig = { + url: '', + dbType: null +} + +describe('Config Database', () => { + let database: Database + let oceanIndexer: OceanIndexer + let initialVersionNull: any + + before(async () => { + database = await Database.init(versionConfig) + + it('should have null version initially', async () => { + initialVersionNull = await oceanIndexer.getDatabase().sqliteConfig.retrieveValue() + assert(initialVersionNull.value === null, 'Initial version should be null') + }) + + oceanIndexer = new OceanIndexer(database, getMockSupportedNetworks()) + }) + + it('check version DB instance of SQL Lite', () => { + expect(database.sqliteConfig).to.be.instanceOf(SQLLiteConfigDatabase) + }) + + it('should set and retrieve version', async () => { + // Set a specific test version + const testVersion = '0.9.9' + await oceanIndexer + .getDatabase() + .sqliteConfig.createOrUpdateConfig('version', testVersion) + + // Verify we can retrieve it + const version = await oceanIndexer.getDatabase().sqliteConfig.retrieveValue() + assert(version.value === testVersion, `Version should be ${testVersion}`) + }) + + it('should update version and retrieve latest', async () => { + const initialVersion = '0.2.2' + const updatedVersion = '0.2.3' + + // Set initial version + await oceanIndexer + .getDatabase() + .sqliteConfig.createOrUpdateConfig('version', initialVersion) + let version = await oceanIndexer.getDatabase().sqliteConfig.retrieveValue() + assert(version.value === initialVersion, `Version should be ${initialVersion}`) + + // Update to new version + await oceanIndexer + .getDatabase() + .sqliteConfig.createOrUpdateConfig('version', updatedVersion) + version = await oceanIndexer.getDatabase().sqliteConfig.retrieveValue() + assert(version.value === updatedVersion, `Version should be ${updatedVersion}`) + }) + after(() => { + oceanIndexer.stopAllThreads() + }) +}) + +describe('VersionDatabase CRUD (without Elastic or Typesense config)', () => { + let database: Database + + before(async () => { + database = await Database.init(emptyDBConfig) + }) + + it('check version DB instance of SQL Lite', () => { + expect(database.sqliteConfig).to.be.instanceOf(SQLLiteConfigDatabase) + }) + + it('create version', async () => { + const result = await database.sqliteConfig.createOrUpdateConfig('version', '0.1.0') + expect(result?.value).to.equal('0.1.0') + }) + + it('retrieve latest version', async () => { + const result = await database.sqliteConfig.retrieveValue('version') + expect(result?.value).to.equal('0.1.0') + }) +}) diff --git a/src/test/integration/credentials.test.ts b/src/test/integration/credentials.test.ts index c7fef309f..1ee0728f8 100644 --- a/src/test/integration/credentials.test.ts +++ b/src/test/integration/credentials.test.ts @@ -14,19 +14,21 @@ * 5. Try to Download the asset by all consumers. */ import { expect, assert } from 'chai' -import { JsonRpcProvider, Signer, ethers } from 'ethers' +import { JsonRpcProvider, Signer, ethers, Contract, EventLog } from 'ethers' import { Database } from '../../components/database/index.js' import { OceanIndexer } from '../../components/Indexer/index.js' import { OceanNode } from '../../OceanNode.js' -import { RPCS } from '../../@types/blockchain.js' +import { RPCS, SupportedNetwork } from '../../@types/blockchain.js' import { streamToObject } from '../../utils/util.js' import { expectedTimeoutFailure, waitToIndex } from './testUtils.js' import { + Blockchain, ENVIRONMENT_VARIABLES, EVENTS, PROTOCOL_COMMANDS, - getConfiguration + getConfiguration, + printCurrentConfig } from '../../utils/index.js' import { DownloadHandler } from '../../components/core/handler/downloadHandler.js' import { GetDdoHandler } from '../../components/core/handler/ddoHandler.js' @@ -49,28 +51,56 @@ import { getOceanArtifactsAdressesByChainId } from '../../utils/address.js' import { publishAsset, orderAsset } from '../utils/assets.js' -import { downloadAssetWithCredentials } from '../data/assets.js' +import { + algoAsset, + computeAssetWithCredentials, + downloadAssetWithCredentials +} from '../data/assets.js' import { ganachePrivateKeys } from '../utils/addresses.js' import { homedir } from 'os' - -describe('Should run a complete node flow.', () => { +import AccessListFactory from '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessListFactory.sol/AccessListFactory.json' assert { type: 'json' } +import AccessList from '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessList.sol/AccessList.json' assert { type: 'json' } +import { deployAccessListContract, getContract } from '../utils/contracts.js' +import { ComputeInitializeHandler } from '../../components/core/compute/initialize.js' +import { ComputeAlgorithm, ComputeAsset } from '../../@types/index.js' +import { ComputeGetEnvironmentsHandler } from '../../components/core/compute/environments.js' +import { ComputeInitializeCommand } from '../../@types/commands.js' + +describe('[Credentials Flow] - Should run a complete node flow.', () => { let config: OceanNodeConfig let oceanNode: OceanNode let provider: JsonRpcProvider + let computeEnvironments: any + let firstEnv: any let publisherAccount: Signer let consumerAccounts: Signer[] let consumerAddresses: string[] let ddo: any + let computeDdo: any + let algoDdo: any let did: string + let computeDid: string + let algoDid: string const orderTxIds: string[] = [] const mockSupportedNetworks: RPCS = getMockSupportedNetworks() let previousConfiguration: OverrideEnvConfig[] + let artifactsAddresses: any + let paymentToken: string + + let blockchain: Blockchain + let contractAcessList: Contract + let signer: Signer before(async () => { + provider = new JsonRpcProvider('http://127.0.0.1:8545') + publisherAccount = (await provider.getSigner(0)) as Signer + artifactsAddresses = getOceanArtifactsAdresses() + paymentToken = artifactsAddresses.development.Ocean + // override and save configuration (always before calling getConfig()) previousConfiguration = await setupEnvironment( TEST_ENV_CONFIG_FILE, @@ -81,7 +111,9 @@ describe('Should run a complete node flow.', () => { ENVIRONMENT_VARIABLES.PRIVATE_KEY, ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS, ENVIRONMENT_VARIABLES.ALLOWED_ADMINS, - ENVIRONMENT_VARIABLES.ADDRESS_FILE + ENVIRONMENT_VARIABLES.AUTHORIZED_PUBLISHERS, + ENVIRONMENT_VARIABLES.ADDRESS_FILE, + ENVIRONMENT_VARIABLES.DOCKER_COMPUTE_ENVIRONMENTS ], [ JSON.stringify(mockSupportedNetworks), @@ -89,25 +121,35 @@ describe('Should run a complete node flow.', () => { '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', JSON.stringify(['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']), JSON.stringify(['0xe2DD09d719Da89e5a3D0F2549c7E24566e947260']), - `${homedir}/.ocean/ocean-contracts/artifacts/address.json` + JSON.stringify([ + await publisherAccount.getAddress() // signer 0 + ]), + `${homedir}/.ocean/ocean-contracts/artifacts/address.json`, + '[{"socketPath":"/var/run/docker.sock","resources":[{"id":"disk","total":10}],"storageExpiry":604800,"maxJobDuration":3600,"fees":{"' + + DEVELOPMENT_CHAIN_ID + + '":[{"feeToken":"' + + paymentToken + + '","prices":[{"id":"cpu","price":1}]}]},"free":{"maxJobDuration":60,"maxJobs":3,"resources":[{"id":"cpu","max":1},{"id":"ram","max":1},{"id":"disk","max":1}]}}]' ] ) ) config = await getConfiguration(true) // Force reload the configuration - const database = await new Database(config.dbConfig) - oceanNode = await OceanNode.getInstance(database) + const database = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, database) const indexer = new OceanIndexer(database, config.indexingNetworks) oceanNode.addIndexer(indexer) + await oceanNode.addC2DEngines() + + const rpcs: RPCS = config.supportedNetworks + const chain: SupportedNetwork = rpcs[String(DEVELOPMENT_CHAIN_ID)] + blockchain = new Blockchain( + chain.rpc, + chain.network, + chain.chainId, + chain.fallbackRPCs + ) - let network = getOceanArtifactsAdressesByChainId(DEVELOPMENT_CHAIN_ID) - if (!network) { - network = getOceanArtifactsAdresses().development - } - - provider = new JsonRpcProvider('http://127.0.0.1:8545') - - publisherAccount = (await provider.getSigner(0)) as Signer consumerAccounts = [ (await provider.getSigner(1)) as Signer, (await provider.getSigner(2)) as Signer, @@ -116,14 +158,65 @@ describe('Should run a complete node flow.', () => { consumerAddresses = await Promise.all(consumerAccounts.map((a) => a.getAddress())) }) + it('should deploy accessList contract', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 2) + let networkArtifacts = getOceanArtifactsAdressesByChainId(DEVELOPMENT_CHAIN_ID) + if (!networkArtifacts) { + networkArtifacts = getOceanArtifactsAdresses().development + } + + signer = blockchain.getSigner() + const txAddress = await deployAccessListContract( + signer, + networkArtifacts.AccessListFactory, + AccessListFactory.abi, + 'AllowList', + 'ALLOW', + false, + await signer.getAddress(), + [await signer.getAddress()], + ['https://oceanprotocol.com/nft/'] + ) + + contractAcessList = getContract(txAddress, AccessList.abi, signer) + // check if we emited the event and the address is part of the list now + const account = await signer.getAddress() + const eventLogs: Array = (await contractAcessList.queryFilter( + 'AddressAdded', + networkArtifacts.startBlock, + 'latest' + )) as Array + // at least 1 event + expect(eventLogs.length).to.be.at.least(1) + for (const log of eventLogs) { + // check the account address + if (log.args.length === 2 && Number(log.args[1] >= 1)) { + const address: string = log.args[0] + expect(address.toLowerCase()).to.be.equal(account.toLowerCase()) + } + } + }) + + it('should have balance from accessList contract', async function () { + const balance = await contractAcessList.balanceOf(await signer.getAddress()) + expect(Number(balance)).to.equal(1) + }) + it('should publish download datasets', async function () { - this.timeout(DEFAULT_TEST_TIMEOUT * 3) + this.timeout(DEFAULT_TEST_TIMEOUT * 5) const publishedDataset = await publishAsset( downloadAssetWithCredentials, publisherAccount ) + const publishedComputeDataset = await publishAsset( + computeAssetWithCredentials, + publisherAccount + ) + + const publishedAlgo = await publishAsset(algoAsset, publisherAccount) + did = publishedDataset.ddo.id const { ddo, wasTimeout } = await waitToIndex( did, @@ -133,6 +226,30 @@ describe('Should run a complete node flow.', () => { if (!ddo) { assert(wasTimeout === true, 'published failed due to timeout!') } + + computeDid = publishedComputeDataset.ddo.id + const resolvedComputeDdo = await waitToIndex( + computeDid, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT * 3 + ) + const ddoCompute = resolvedComputeDdo.ddo + const timeoutCompute = resolvedComputeDdo.wasTimeout + if (!ddoCompute) { + assert(timeoutCompute === true, 'published failed due to timeout!') + } + + algoDid = publishedAlgo.ddo.id + const resolvedAlgo = await waitToIndex( + algoDid, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT * 3 + ) + const algo = resolvedAlgo.ddo + const timeoutAlgo = resolvedAlgo.wasTimeout + if (!algo) { + assert(timeoutAlgo === true, 'published failed due to timeout!') + } }) it('should fetch the published ddo', async () => { @@ -140,9 +257,25 @@ describe('Should run a complete node flow.', () => { command: PROTOCOL_COMMANDS.GET_DDO, id: did } - const response = await new GetDdoHandler(oceanNode).handle(getDDOTask) + let response = await new GetDdoHandler(oceanNode).handle(getDDOTask) ddo = await streamToObject(response.stream as Readable) assert(ddo.id === did, 'DDO id not matching') + + const getComputeDDOTask = { + command: PROTOCOL_COMMANDS.GET_DDO, + id: computeDid + } + response = await new GetDdoHandler(oceanNode).handle(getComputeDDOTask) + computeDdo = await streamToObject(response.stream as Readable) + assert(computeDdo.id === computeDid, 'computeDdo id not matching') + + const getAlgoDDOTask = { + command: PROTOCOL_COMMANDS.GET_DDO, + id: algoDid + } + response = await new GetDdoHandler(oceanNode).handle(getAlgoDDOTask) + algoDdo = await streamToObject(response.stream as Readable) + assert(algoDdo.id === algoDid, 'computeDdo id not matching') }) it('should start an order for all consumers', async function () { @@ -173,7 +306,7 @@ describe('Should run a complete node flow.', () => { const transferTxId = orderTxIds[0] const wallet = new ethers.Wallet(consumerPrivateKey) - const nonce = Math.floor(Date.now() / 1000).toString() + const nonce = Date.now().toString() const message = String(ddo.id + nonce) const consumerMessage = ethers.solidityPackedKeccak256( ['bytes'], @@ -206,6 +339,115 @@ describe('Should run a complete node flow.', () => { await doCheck() }) + it('should initializeCompute work for first consumer', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 3) + + const consumerAddress = consumerAddresses[0] + + const dataset: ComputeAsset = { + documentId: computeDid, + serviceId: computeDdo.services[0].id + } + const algorithm: ComputeAlgorithm = { + documentId: algoDid, + serviceId: algoDdo.services[0].id + } + const getEnvironmentsTask = { + command: PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS + } + const resp = await new ComputeGetEnvironmentsHandler(oceanNode).handle( + getEnvironmentsTask + ) + computeEnvironments = await streamToObject(resp.stream as Readable) + firstEnv = computeEnvironments[0] + + const initializeComputeTask: ComputeInitializeCommand = { + datasets: [dataset], + algorithm, + environment: firstEnv.id, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + maxJobDuration: 2 * 60, + consumerAddress, + command: PROTOCOL_COMMANDS.COMPUTE_INITIALIZE + } + const response = await new ComputeInitializeHandler(oceanNode).handle( + initializeComputeTask + ) + assert(response) + assert(response.stream, 'stream not present') + assert(response.status.httpStatus === 200, 'http status not 200') + expect(response.stream).to.be.instanceOf(Readable) + }) + + it('should NOT initializeCompute for second consumer - service level credentials', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 3) + + const consumerAddress = consumerAddresses[1] + + const dataset: ComputeAsset = { + documentId: computeDid, + serviceId: computeDdo.services[0].id + } + const algorithm: ComputeAlgorithm = { + documentId: algoDid, + serviceId: algoDdo.services[0].id + } + const initializeComputeTask: ComputeInitializeCommand = { + datasets: [dataset], + algorithm, + environment: firstEnv.id, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + maxJobDuration: 2 * 60, + consumerAddress, + command: PROTOCOL_COMMANDS.COMPUTE_INITIALIZE + } + const response = await new ComputeInitializeHandler(oceanNode).handle( + initializeComputeTask + ) + assert(response) + assert(response.stream === null, 'stream is present') + assert(response.status.httpStatus === 403, 'http status not 403') + }) + + it('should NOT initializeCompute for third consumer - asset level credentials', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 3) + + const consumerAddress = consumerAddresses[2] + + const dataset: ComputeAsset = { + documentId: computeDid, + serviceId: computeDdo.services[0].id + } + const algorithm: ComputeAlgorithm = { + documentId: algoDid, + serviceId: algoDdo.services[0].id + } + const initializeComputeTask: ComputeInitializeCommand = { + datasets: [dataset], + algorithm, + environment: firstEnv.id, + payment: { + chainId: DEVELOPMENT_CHAIN_ID, + token: paymentToken + }, + maxJobDuration: 2 * 60, + consumerAddress, + command: PROTOCOL_COMMANDS.COMPUTE_INITIALIZE + } + const response = await new ComputeInitializeHandler(oceanNode).handle( + initializeComputeTask + ) + assert(response) + assert(response.stream === null, 'stream is present') + assert(response.status.httpStatus === 403, 'http status not 403') + }) + it('should not allow to download the asset for second consumer - service level credentials', async function () { this.timeout(DEFAULT_TEST_TIMEOUT * 3) @@ -215,7 +457,7 @@ describe('Should run a complete node flow.', () => { const transferTxId = orderTxIds[1] const wallet = new ethers.Wallet(consumerPrivateKey) - const nonce = Math.floor(Date.now() / 1000).toString() + const nonce = Date.now().toString() const message = String(ddo.id + nonce) const consumerMessage = ethers.solidityPackedKeccak256( ['bytes'], @@ -237,7 +479,7 @@ describe('Should run a complete node flow.', () => { const response = await new DownloadHandler(oceanNode).handle(downloadTask) assert(response) assert(response.stream === null, 'stream is present') - assert(response.status.httpStatus === 500, 'http status not 500') + assert(response.status.httpStatus === 403, 'http status not 403') } setTimeout(() => { @@ -256,7 +498,7 @@ describe('Should run a complete node flow.', () => { const transferTxId = orderTxIds[1] const wallet = new ethers.Wallet(consumerPrivateKey) - const nonce = Math.floor(Date.now() / 1000).toString() + const nonce = Date.now().toString() const message = String(ddo.id + nonce) const consumerMessage = ethers.solidityPackedKeccak256( ['bytes'], @@ -288,6 +530,33 @@ describe('Should run a complete node flow.', () => { await doCheck() }) + it('should NOT allow to index the asset because address is not on AUTHORIZED_PUBLISHERS', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 2) + // this is not authorized + const nonAuthorizedAccount = (await provider.getSigner(4)) as Signer + const authorizedAccount = await publisherAccount.getAddress() + + printCurrentConfig() + expect( + config.authorizedPublishers.length === 1 && + config.authorizedPublishers[0] === authorizedAccount, + 'Unable to set AUTHORIZED_PUBLISHERS' + ) + + const publishedDataset = await publishAsset( + downloadAssetWithCredentials, + nonAuthorizedAccount + ) + + // will timeout + const { ddo, wasTimeout } = await waitToIndex( + publishedDataset?.ddo.id, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT + ) + assert(ddo === null && wasTimeout === true, 'DDO should NOT have been indexed') + }) + after(async () => { await tearDownEnvironment(previousConfiguration) oceanNode.getIndexer().stopAllThreads() diff --git a/src/test/integration/database.test.ts b/src/test/integration/database.test.ts index 82cdc879c..40814ec02 100644 --- a/src/test/integration/database.test.ts +++ b/src/test/integration/database.test.ts @@ -27,7 +27,7 @@ describe('Database', () => { let database: Database before(async () => { - database = await new Database(typesenseConfig) + database = await Database.init(typesenseConfig) }) it('instance Database', () => { @@ -62,7 +62,7 @@ describe('DdoDatabase CRUD', () => { } before(async () => { - database = await new Database(typesenseConfig) + database = await Database.init(typesenseConfig) }) it('creates ddo schema as an array', () => { @@ -89,7 +89,7 @@ describe('NonceDatabase CRUD - SQL lite (With typesense DB config)', () => { let database: Database before(async () => { - database = await new Database(typesenseConfig) + database = await Database.init(typesenseConfig) }) it('check nonce DB instance of SQL Lite', () => { @@ -125,7 +125,7 @@ describe('NonceDatabase CRUD (without Elastic or Typesense config)', () => { let database: Database before(async () => { - database = await new Database(emptyDBConfig) + database = await Database.init(emptyDBConfig) }) it('check nonce DB instance of SQL Lite', () => { @@ -162,7 +162,7 @@ describe('IndexerDatabase CRUD', () => { let existsPrevious: any = {} before(async () => { - database = await new Database(typesenseConfig) + database = await Database.init(typesenseConfig) }) it('create indexer', async () => { @@ -205,7 +205,7 @@ describe('OrderDatabase CRUD', () => { let database: Database before(async () => { - database = await new Database(typesenseConfig) + database = await Database.init(typesenseConfig) }) it('create order', async () => { @@ -386,7 +386,7 @@ describe('DdoStateQuery', () => { const query = (await DatabaseFactory.createDdoStateQuery(elasticConfig)).buildQuery( 'did:op:abc123' ) - expect(query.match.did).to.equal('did:op:abc123') + expect(query.term.did).to.equal('did:op:abc123') }) it('should build Elasticsearch query for nft', async () => { @@ -394,7 +394,7 @@ describe('DdoStateQuery', () => { undefined, 'nft:op:abc123' ) - expect(query.match.nft).to.equal('nft:op:abc123') + expect(query.term.nft).to.equal('nft:op:abc123') }) it('should build Elasticsearch query for txId', async () => { @@ -403,7 +403,7 @@ describe('DdoStateQuery', () => { undefined, 'txId123' ) - expect(query.match.txId).to.equal('txId123') + expect(query.term.txId).to.equal('txId123') }) }) diff --git a/src/test/integration/download.test.ts b/src/test/integration/download.test.ts index cc4a3b4cb..f1243ed3c 100644 --- a/src/test/integration/download.test.ts +++ b/src/test/integration/download.test.ts @@ -39,12 +39,12 @@ import { getOceanArtifactsAdresses, getOceanArtifactsAdressesByChainId } from '../../utils/address.js' -import { publishAsset, orderAsset, updateAssetMetadata } from '../utils/assets.js' +import { publishAsset, orderAsset } from '../utils/assets.js' import { downloadAsset } from '../data/assets.js' import { genericDDO } from '../data/ddo.js' import { homedir } from 'os' -describe('Should run a complete node flow.', () => { +describe('[Download Flow] - Should run a complete node flow.', () => { let config: OceanNodeConfig let database: Database let oceanNode: OceanNode @@ -56,6 +56,7 @@ describe('Should run a complete node flow.', () => { let publishedDataset: any let actualDDO: any let indexer: OceanIndexer + let anotherConsumer: ethers.Wallet const mockSupportedNetworks: RPCS = getMockSupportedNetworks() const serviceId = '0' @@ -87,8 +88,8 @@ describe('Should run a complete node flow.', () => { ) config = await getConfiguration(true) // Force reload the configuration - database = await new Database(config.dbConfig) - oceanNode = await OceanNode.getInstance(database) + database = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, database) indexer = new OceanIndexer(database, config.indexingNetworks) oceanNode.addIndexer(indexer) @@ -98,6 +99,10 @@ describe('Should run a complete node flow.', () => { } provider = new JsonRpcProvider('http://127.0.0.1:8545') + anotherConsumer = new ethers.Wallet( + ENVIRONMENT_VARIABLES.NODE2_PRIVATE_KEY.value, + provider + ) publisherAccount = (await provider.getSigner(0)) as Signer consumerAccount = (await provider.getSigner(1)) as Signer @@ -240,7 +245,7 @@ describe('Should run a complete node flow.', () => { const wallet = new ethers.Wallet( '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45209' ) - const nonce = Math.floor(Date.now() / 1000).toString() + const nonce = Date.now().toString() const message = String(publishedDataset.ddo.id + nonce) const consumerMessage = ethers.solidityPackedKeccak256( ['bytes'], @@ -287,15 +292,24 @@ describe('Should run a complete node flow.', () => { }) it('should not allow to download the asset with different consumer address', async function () { const assetDID = publishedDataset.ddo.id + const nonce = Date.now().toString() + const message = String(assetDID + nonce) + const consumerMessage = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(consumerMessage) + const signature = await anotherConsumer.signMessage(messageHashBytes) + const doCheck = async () => { const downloadTask = { fileIndex: 0, documentId: assetDID, serviceId, transferTxId: orderTxId, - nonce: Date.now().toString(), - consumerAddress: '0xBE5449a6A97aD46c8558A3356267Ee5D2731ab57', - signature: '0xBE5449a6', + nonce, + consumerAddress: await anotherConsumer.getAddress(), + signature, command: PROTOCOL_COMMANDS.DOWNLOAD } const response = await new DownloadHandler(oceanNode).handle(downloadTask) @@ -310,84 +324,6 @@ describe('Should run a complete node flow.', () => { await doCheck() }) - - it('should update state of the service to 1 - end of life', async () => { - const updatedDDO = { - ...actualDDO, - services: [ - { - ...actualDDO.services[0], - state: 1 - } - ] - } - await updateAssetMetadata(actualDDO.nftAddress, updatedDDO, publisherAccount) - await waitToIndex(updatedDDO.id, EVENTS.METADATA_UPDATED, DEFAULT_TEST_TIMEOUT, true) - }) - it('should fetch the updated ddo', async () => { - const getDDOTask = { - command: PROTOCOL_COMMANDS.GET_DDO, - id: actualDDO.id - } - const response = await new GetDdoHandler(oceanNode).handle(getDDOTask) - actualDDO = await streamToObject(response.stream as Readable) - - assert(actualDDO.services[0], 'Service not present') - assert(actualDDO.services[0].state === 1, 'Service state not updated to 1') - }) - it('should start an order', async function () { - const orderTxReceipt = await orderAsset( - actualDDO, - 0, - consumerAccount, - await consumerAccount.getAddress(), - publisherAccount, - oceanNode - ) - assert(orderTxReceipt, 'order transaction failed') - orderTxId = orderTxReceipt.hash - assert(orderTxId, 'transaction id not found') - }) - it('should not allow to download end of life service', async function () { - this.timeout(DEFAULT_TEST_TIMEOUT * 3) - - const doCheck = async () => { - const wallet = new ethers.Wallet( - '0xef4b441145c1d0f3b4bc6d61d29f5c6e502359481152f869247c7a4244d45209' - ) - const nonce = Date.now().toString() - const message = String(actualDDO.id + nonce) - const consumerMessage = ethers.solidityPackedKeccak256( - ['bytes'], - [ethers.hexlify(ethers.toUtf8Bytes(message))] - ) - const messageHashBytes = ethers.toBeArray(consumerMessage) - const signature = await wallet.signMessage(messageHashBytes) - - const downloadTask = { - fileIndex: 0, - documentId: actualDDO.id, - serviceId: actualDDO.services[0].id, - transferTxId: orderTxId, - nonce, - consumerAddress, - signature, - command: PROTOCOL_COMMANDS.DOWNLOAD - } - const response = await new DownloadHandler(oceanNode).handle(downloadTask) - - assert(response) - assert(response.stream === null, 'stream is present') - assert(response.status.httpStatus === 500, 'http status not 500') - } - - setTimeout(() => { - expect(expectedTimeoutFailure(this.test.title)).to.be.equal(true) - }, DEFAULT_TEST_TIMEOUT * 3) - - await doCheck() - }) - after(async () => { await tearDownEnvironment(previousConfiguration) indexer.stopAllThreads() diff --git a/src/test/integration/elasticsearch.test.ts b/src/test/integration/elasticsearch.test.ts index 86507cb37..baba2308c 100644 --- a/src/test/integration/elasticsearch.test.ts +++ b/src/test/integration/elasticsearch.test.ts @@ -15,7 +15,7 @@ const dbConfig = { url: 'http://localhost:9200', dbType: DB_TYPES.ELASTIC_SEARCH } -const elasticsearch: Database = await new Database(dbConfig) +const elasticsearch: Database = await Database.init(dbConfig) describe('Elastic Search', () => { it('Get instances of Elastic Search', () => { diff --git a/src/test/integration/encryptDecryptDDO.test.ts b/src/test/integration/encryptDecryptDDO.test.ts index 174469394..8ee484558 100644 --- a/src/test/integration/encryptDecryptDDO.test.ts +++ b/src/test/integration/encryptDecryptDDO.test.ts @@ -56,7 +56,7 @@ describe('Should encrypt and decrypt DDO', () => { let encryptedMetaData: any let documentHash: any let indexer: OceanIndexer - const nonce = Math.floor(Date.now() / 1000).toString() + const nonce = Date.now().toString() const chainId = 8996 const mockSupportedNetworks: RPCS = { @@ -103,9 +103,9 @@ describe('Should encrypt and decrypt DDO', () => { ERC721Factory.abi, publisherAccount ) - - database = await new Database(await (await getConfiguration()).dbConfig) - oceanNode = OceanNode.getInstance(database) + const config = await getConfiguration() + database = await Database.init(config.dbConfig) + oceanNode = OceanNode.getInstance(config, database) // will be used later indexer = new OceanIndexer(database, mockSupportedNetworks) oceanNode.addIndexer(indexer) @@ -311,7 +311,6 @@ describe('Should encrypt and decrypt DDO', () => { } const response = await new DecryptDdoHandler(oceanNode).handle(decryptDDOTask) expect(response.status.httpStatus).to.equal(400) - expect(response.status.error).to.equal('Decrypt DDO: checksum does not match') }) it('should return signature does not match', async () => { @@ -335,13 +334,7 @@ describe('Should encrypt and decrypt DDO', () => { it('should decrypt ddo with transactionId and return it', async () => { const nonce = Date.now().toString() const wallet = new ethers.Wallet(process.env.PRIVATE_KEY) - const message = String( - txReceiptEncryptDDO.hash + - dataNftAddress + - publisherAddress + - chainId.toString() + - nonce - ) + const message = String(txReceiptEncryptDDO.hash + publisherAddress + chainId + nonce) const messageHash = ethers.solidityPackedKeccak256( ['bytes'], [ethers.hexlify(ethers.toUtf8Bytes(message))] @@ -367,7 +360,7 @@ describe('Should encrypt and decrypt DDO', () => { it('should decrypt ddo with encryptedDocument, flags, documentHash and return it', async () => { const nonce = Date.now().toString() const wallet = new ethers.Wallet(process.env.PRIVATE_KEY) - const message = String(dataNftAddress + publisherAddress + chainId.toString() + nonce) + const message = String(dataNftAddress + publisherAddress + chainId + nonce) const messageHash = ethers.solidityPackedKeccak256( ['bytes'], [ethers.hexlify(ethers.toUtf8Bytes(message))] diff --git a/src/test/integration/encryptFile.test.ts b/src/test/integration/encryptFile.test.ts index acbef3475..1f8134338 100644 --- a/src/test/integration/encryptFile.test.ts +++ b/src/test/integration/encryptFile.test.ts @@ -31,8 +31,8 @@ describe('Encrypt File', () => { ) ) config = await getConfiguration(true) // Force reload the configuration - const dbconn = await new Database(config.dbConfig) - oceanNode = await OceanNode.getInstance(dbconn) + const dbconn = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, dbconn) }) it('should encrypt files', async () => { diff --git a/src/test/integration/getJobs.test.ts b/src/test/integration/getJobs.test.ts new file mode 100644 index 000000000..0f405a66b --- /dev/null +++ b/src/test/integration/getJobs.test.ts @@ -0,0 +1,150 @@ +import { expect } from 'chai' +import { Readable } from 'stream' +import { Database } from '../../components/database/index.js' +import { OceanNode } from '../../OceanNode.js' +import { GetJobsHandler } from '../../components/core/handler/getJobs.js' +import { + C2DStatusNumber, + C2DStatusText, + type DBComputeJob +} from '../../@types/C2D/C2D.js' +import { PROTOCOL_COMMANDS, getConfiguration } from '../../utils/index.js' +import { + DEFAULT_TEST_TIMEOUT, + OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, + setupEnvironment, + tearDownEnvironment +} from '../utils/utils.js' +import { streamToObject } from '../../utils/util.js' + +// Helper to create a minimal valid DBComputeJob +function buildJob(overrides: Partial = {}): DBComputeJob { + const nowSec = Math.floor(Date.now() / 1000).toString() + return { + owner: overrides.owner || '0xowner_test', + did: overrides.did, + jobId: overrides.jobId || `job-${Date.now()}-${Math.random().toString(36).slice(2)}`, + dateCreated: overrides.dateCreated || nowSec, + dateFinished: overrides.dateFinished || (null as unknown as string), + status: overrides.status ?? C2DStatusNumber.JobStarted, + statusText: overrides.statusText || C2DStatusText.JobStarted, + results: overrides.results || [], + inputDID: overrides.inputDID, + algoDID: overrides.algoDID, + maxJobDuration: overrides.maxJobDuration, + agreementId: overrides.agreementId, + environment: overrides.environment || 'env-default', + metadata: overrides.metadata, + terminationDetails: overrides.terminationDetails, + + clusterHash: overrides.clusterHash || '', + configlogURL: overrides.configlogURL || '', + publishlogURL: overrides.publishlogURL || '', + algologURL: overrides.algologURL || '', + outputsURL: overrides.outputsURL || '', + stopRequested: overrides.stopRequested ?? false, + algorithm: overrides.algorithm as any, + assets: overrides.assets || [], + isRunning: overrides.isRunning ?? false, + isStarted: overrides.isStarted ?? true, + containerImage: overrides.containerImage || '', + isFree: overrides.isFree ?? true, + algoStartTimestamp: overrides.algoStartTimestamp || nowSec, + algoStopTimestamp: overrides.algoStopTimestamp || nowSec, + resources: overrides.resources || [], + payment: overrides.payment, + additionalViewers: overrides.additionalViewers || [], + algoDuration: overrides.algoDuration || 0, + queueMaxWaitTime: overrides.queueMaxWaitTime || 0 + } +} + +describe('GetJobsHandler integration', () => { + let previousConfiguration: OverrideEnvConfig[] + let oceanNode: OceanNode + let db: Database + let handler: GetJobsHandler + + const uniqueEnv = `env-it-${Date.now()}` + const ownerA = '0xAa0000000000000000000000000000000000000' + const ownerB = '0xBb0000000000000000000000000000000000000' + + before(async () => { + previousConfiguration = await setupEnvironment(TEST_ENV_CONFIG_FILE) + const config = await getConfiguration(true) + db = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, db) + + handler = new GetJobsHandler(oceanNode) + + const jobA = buildJob({ owner: ownerA, environment: uniqueEnv }) + const jobB = buildJob({ owner: ownerB, environment: uniqueEnv }) + + await db.c2d.newJob(jobA) + await db.c2d.newJob(jobB) + + const finishedAt = Math.floor(Date.now() / 1000).toString() + + jobA.status = C2DStatusNumber.JobFinished + jobA.statusText = C2DStatusText.JobFinished + jobA.dateFinished = finishedAt + jobA.isRunning = false + + jobB.status = C2DStatusNumber.JobFinished + jobB.statusText = C2DStatusText.JobFinished + jobB.dateFinished = finishedAt + jobB.isRunning = false + + await db.c2d.updateJob(jobA) + await db.c2d.updateJob(jobB) + }) + + after(async () => { + await tearDownEnvironment(previousConfiguration) + }) + + it('validate should fail when fromTimestamp is not a string', async () => { + const validation = await handler.validate({ + command: PROTOCOL_COMMANDS.JOBS, + fromTimestamp: 12345 + } as any) + expect(validation.valid).to.be.equal(false) + expect(validation.reason).to.contain('fromTimestamp') + }) + + it('should return finished jobs for a specific environment since timestamp', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const fromTs = Math.floor(Date.now() / 1000 - 10).toString() + const resp = await handler.handle({ + command: PROTOCOL_COMMANDS.JOBS, + environments: [uniqueEnv], + fromTimestamp: fromTs + }) + + expect(resp.status.httpStatus).to.equal(200) + const jobs = (await streamToObject(resp.stream as Readable)) as any[] + + const filtered = jobs.filter((j) => j.environment === uniqueEnv) + expect(filtered.length).to.be.greaterThanOrEqual(2) + expect(filtered.every((j) => Number(j.dateFinished) >= Number(fromTs))).to.equal(true) + }) + + it('should exclude jobs owned by specified consumer addresses', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT) + + const resp = await handler.handle({ + command: PROTOCOL_COMMANDS.JOBS, + environments: [uniqueEnv], + consumerAddrs: [ownerA] + }) + + expect(resp.status.httpStatus).to.equal(200) + const jobs = (await streamToObject(resp.stream as Readable)) as any[] + + const owners = jobs.filter((j) => j.environment === uniqueEnv).map((j) => j.owner) + expect(owners.includes(ownerA)).to.equal(false) + expect(owners.includes(ownerB)).to.equal(true) + }) +}) diff --git a/src/test/integration/indexer.test.ts b/src/test/integration/indexer.test.ts index 5c8b53c21..0f1f19a2b 100644 --- a/src/test/integration/indexer.test.ts +++ b/src/test/integration/indexer.test.ts @@ -15,6 +15,7 @@ import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Fa import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' assert { type: 'json' } import { Database } from '../../components/database/index.js' +import { DatabaseFactory } from '../../components/database/DatabaseFactory.js' import { INDEXER_CRAWLING_EVENT_EMITTER, OceanIndexer @@ -29,7 +30,7 @@ import { getOceanArtifactsAdressesByChainId } from '../../utils/address.js' import { createFee } from '../../components/core/utils/feesHandler.js' -import { DDO } from '../../@types/DDO/DDO.js' +import { Asset, DDO } from '@oceanprotocol/ddo-js' import { DEFAULT_TEST_TIMEOUT, OverrideEnvConfig, @@ -58,6 +59,7 @@ import { getConfiguration } from '../../utils/config.js' import { OceanNodeConfig } from '../../@types/OceanNode.js' import { encrypt } from '../../utils/crypt.js' import { EncryptMethod } from '../../@types/fileObject.js' +import { deleteIndexedMetadataIfExists } from '../../utils/asset.js' describe('Indexer stores a new metadata events and orders.', () => { let database: Database @@ -71,7 +73,7 @@ describe('Indexer stores a new metadata events and orders.', () => { let datatokenAddress: string const chainId = 8996 let assetDID: string - let resolvedDDO: Record = {} + let resolvedDDO: Asset let genericAsset: any let setMetaDataTxReceipt: any let orderTxId: string @@ -109,8 +111,8 @@ describe('Indexer stores a new metadata events and orders.', () => { ) const config = await getConfiguration(true) - database = await new Database(config.dbConfig) - oceanNode = await OceanNode.getInstance() + database = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, database) indexer = new OceanIndexer(database, mockSupportedNetworks) oceanNode.addIndexer(indexer) let artifactsAddresses = getOceanArtifactsAdressesByChainId(DEVELOPMENT_CHAIN_ID) @@ -176,6 +178,7 @@ describe('Indexer stores a new metadata events and orders.', () => { genericAsset.nftAddress = nftAddress assetDID = genericAsset.id // create proper service.files string + genericAsset.services[0].datatokenAddress = datatokenAddress genericAsset.services[0].files.datatokenAddress = datatokenAddress genericAsset.services[0].files.nftAddress = nftAddress // let's call node to encrypt @@ -208,11 +211,6 @@ describe('Indexer stores a new metadata events and orders.', () => { genericAsset.event.from = setMetaDataTxReceipt.from genericAsset.event.contract = setMetaDataTxReceipt.contractAddress genericAsset.event.datetime = '2023-02-15T16:42:22' - - genericAsset.nft.address = nftAddress - genericAsset.nft.owner = setMetaDataTxReceipt.from - genericAsset.nft.state = 0 - genericAsset.nft.created = '2022-12-30T08:40:43' }) it('should store the ddo in the database and return it ', async function () { @@ -229,28 +227,40 @@ describe('Indexer stores a new metadata events and orders.', () => { }) it('should have nft field stored in ddo', async function () { - assert(resolvedDDO.nft, 'NFT field is not present') + assert(resolvedDDO.indexedMetadata.nft, 'NFT field is not present') assert( - resolvedDDO.nft.address?.toLowerCase() === nftAddress?.toLowerCase(), + resolvedDDO.indexedMetadata.nft.address?.toLowerCase() === + nftAddress?.toLowerCase(), 'NFT address mismatch' ) - assert(resolvedDDO.nft.state === 0, 'NFT state mismatch') // ACTIVE - assert(resolvedDDO.nft.name === (await nftContract.name()), 'NFT name mismatch') - assert(resolvedDDO.nft.symbol === (await nftContract.symbol()), 'NFT symbol mismatch') + assert(resolvedDDO.indexedMetadata.nft.state === 0, 'NFT state mismatch') // ACTIVE + assert( + resolvedDDO.indexedMetadata.nft.name === (await nftContract.name()), + 'NFT name mismatch' + ) assert( - resolvedDDO.nft.tokenURI === + resolvedDDO.indexedMetadata.nft.symbol === (await nftContract.symbol()), + 'NFT symbol mismatch' + ) + assert( + resolvedDDO.indexedMetadata.nft.tokenURI === (await nftContract.tokenURI(await nftContract.getId())), 'NFT tokeURI mismatch' ) assert( - resolvedDDO.nft.owner?.toLowerCase() === setMetaDataTxReceipt.from?.toLowerCase(), + resolvedDDO.indexedMetadata.nft.owner?.toLowerCase() === + setMetaDataTxReceipt.from?.toLowerCase(), 'NFT owner mismatch' ) - assert(resolvedDDO.nft.created, 'NFT created timestamp does not exist') + assert( + resolvedDDO.indexedMetadata.nft.created, + 'NFT created timestamp does not exist' + ) }) it('should store the ddo state in the db with no errors and retrieve it using did', async function () { const ddoState = await database.ddoState.retrieve(resolvedDDO.id) + console.log('ddoState: ', ddoState) assert(ddoState, 'ddoState not found') expect(resolvedDDO.id).to.equal(ddoState.did) expect(ddoState.valid).to.equal(true) @@ -260,12 +270,10 @@ describe('Indexer stores a new metadata events and orders.', () => { it('should find the state of the ddo using query ddo state handler', async function () { const queryDdoStateHandler = new QueryDdoStateHandler(oceanNode) - // query using the did + const config = await getConfiguration(true) + const queryStrategy = await DatabaseFactory.createDdoStateQuery(config.dbConfig) const queryDdoState: QueryCommand = { - query: { - q: resolvedDDO.id, - query_by: 'did' - }, + query: queryStrategy.buildQuery(resolvedDDO.id), command: PROTOCOL_COMMANDS.QUERY } const response = await queryDdoStateHandler.handle(queryDdoState) @@ -273,14 +281,24 @@ describe('Indexer stores a new metadata events and orders.', () => { assert(response.status.httpStatus === 200, 'Failed to get 200 response') assert(response.stream, 'Failed to get stream') const result = await streamToObject(response.stream as Readable) - if (result) { - // Elastic Search returns Array type - const ddoState = Array.isArray(result) ? result[0] : result.hits[0].document - expect(resolvedDDO.id).to.equal(ddoState.did) - expect(ddoState.valid).to.equal(true) - expect(ddoState.error).to.equal(' ') + assert(result, 'Failed to get result from stream') + + let ddoState + if (Array.isArray(result)) { + assert(result.length > 0, 'No ddo state found in results array') + ddoState = result[0] + } else if (result.hits && Array.isArray(result.hits)) { + assert(result.hits.length > 0, 'No ddo state found in results hits') + ddoState = result.hits[0].document + } else { + assert.fail('Unexpected result format from database') } + assert(ddoState, 'ddoState is undefined') + expect(resolvedDDO.id).to.equal(ddoState.did) + expect(ddoState.valid).to.equal(true) + expect(ddoState.error).to.equal(' ') + // add txId check once we have that as change merged and the event will be indexed }) @@ -288,6 +306,7 @@ describe('Indexer stores a new metadata events and orders.', () => { resolvedDDO.metadata.name = 'dataset-name-updated' resolvedDDO.metadata.description = 'Updated description for the Ocean protocol test dataset' + resolvedDDO = deleteIndexedMetadataIfExists(resolvedDDO) const stringDDO = JSON.stringify(resolvedDDO) const bytes = Buffer.from(stringDDO) const metadata = hexlify(bytes) @@ -338,10 +357,12 @@ describe('Indexer stores a new metadata events and orders.', () => { ) const retrievedDDO: any = ddo if (retrievedDDO) { - expect(retrievedDDO.nft).to.not.equal(undefined) - expect(retrievedDDO).to.have.nested.property('nft.state') + expect(retrievedDDO.indexedMetadata.nft).to.not.equal(undefined) + expect(retrievedDDO).to.have.nested.property('indexedMetadata.nft.state') // Expect the result from contract - expect(retrievedDDO.nft.state).to.equal(parseInt(result[2].toString())) + expect(retrievedDDO.indexedMetadata.nft.state).to.equal( + parseInt(result[2].toString()) + ) } else expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) }) @@ -362,7 +383,7 @@ describe('Indexer stores a new metadata events and orders.', () => { if (retrievedDDO != null) { // Expect the result from contract expect(retrievedDDO.id).to.equal(assetDID) - expect(retrievedDDO.nft.state).to.equal(0) + expect(retrievedDDO.indexedMetadata.nft.state).to.equal(0) } else expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) }) @@ -449,9 +470,15 @@ describe('Indexer stores a new metadata events and orders.', () => { true ) if (ddo) { - const retrievedDDO: any = ddo - expect(retrievedDDO.stats.orders).to.equal(1) - initialOrderCount = retrievedDDO.stats.orders + const retrievedDDO = ddo + console.log('indexer retrieved ddo: ', JSON.stringify(retrievedDDO)) + for (const stat of retrievedDDO.indexedMetadata.stats) { + if (stat.datatokenAddress === datatokenAddress) { + expect(stat.orders).to.equal(1) + initialOrderCount = stat.orders + break + } + } const resultOrder = await database.order.retrieve(orderTxId) if (resultOrder) { if (resultOrder.id) { @@ -536,10 +563,15 @@ describe('Indexer stores a new metadata events and orders.', () => { true ) - const retrievedDDO: any = ddo + const retrievedDDO = ddo if (retrievedDDO) { - expect(retrievedDDO.stats.orders).to.be.greaterThan(initialOrderCount) + for (const stat of retrievedDDO.indexedMetadata.stats) { + if (stat.datatokenAddress === datatokenAddress) { + expect(stat.orders).to.be.greaterThan(initialOrderCount) + break + } + } const resultOrder = await database.order.retrieve(reuseOrderTxId) if (resultOrder) { if (resultOrder.id) { @@ -576,16 +608,18 @@ describe('Indexer stores a new metadata events and orders.', () => { const { ddo, wasTimeout } = await waitToIndex( assetDID, - EVENTS.METADATA_UPDATED, + EVENTS.METADATA_STATE, DEFAULT_TEST_TIMEOUT, true ) const resolvedDDO: any = ddo if (resolvedDDO) { // Expect a short version of the DDO - expect(Object.keys(resolvedDDO).length).to.equal(4) + expect(Object.keys(resolvedDDO).length).to.equal(5) expect( - 'id' in resolvedDDO && 'nftAddress' in resolvedDDO && 'nft' in resolvedDDO + 'id' in resolvedDDO && + 'nftAddress' in resolvedDDO && + 'nft' in resolvedDDO.indexedMetadata ).to.equal(true) } else { expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) @@ -668,8 +702,7 @@ describe('OceanIndexer - crawler threads', () => { ) envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) config = await getConfiguration(true) - db = await new Database(config.dbConfig) - // oceanNode = OceanNode.getInstance(db) + db = await Database.init(config.dbConfig) }) it('should start a worker thread and handle RPCS "startBlock"', async () => { diff --git a/src/test/integration/indexerRemote.test.ts b/src/test/integration/indexerRemote.test.ts deleted file mode 100644 index 0c41ae4f6..000000000 --- a/src/test/integration/indexerRemote.test.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { expect, assert } from 'chai' -import { - JsonRpcProvider, - Signer, - Contract, - ethers, - hexlify, - ZeroAddress, - getAddress, - toUtf8Bytes -} from 'ethers' -import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json' assert { type: 'json' } -import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } -import { Database } from '../../components/database/index.js' -import { OceanIndexer } from '../../components/Indexer/index.js' -import { RPCS } from '../../@types/blockchain.js' -import { getEventFromTx } from '../../utils/util.js' -import { expectedTimeoutFailure, waitToIndex } from './testUtils.js' -import { genericDDO } from '../data/ddo.js' -import { makeDid } from '../../components/core/utils/validateDdoHandler.js' -import { create256Hash } from '../../utils/crypt.js' -import { - DEVELOPMENT_CHAIN_ID, - getOceanArtifactsAdresses, - getOceanArtifactsAdressesByChainId -} from '../../utils/address.js' -import { - getMockSupportedNetworks, - setupEnvironment, - tearDownEnvironment, - OverrideEnvConfig, - buildEnvOverrideConfig, - DEFAULT_TEST_TIMEOUT -} from '../utils/utils.js' -import { ENVIRONMENT_VARIABLES, EVENTS } from '../../utils/constants.js' -import { homedir } from 'os' -import { OceanNode } from '../../OceanNode.js' -import axios from 'axios' -import { getConfiguration } from '../../utils/index.js' - -function uploadToIpfs(data: any): Promise { - return new Promise((resolve, reject) => { - axios - .post( - 'http://172.15.0.16:5001/api/v0/add', - '--------------------------a28d68b1c872c96f\r\nContent-Disposition: form-data; name="file"; filename="ddo.json"\r\nContent-Type: application/octet-stream\r\n\r\n' + - data + - '\r\n--------------------------a28d68b1c872c96f--\r\n', - { - headers: { - 'Content-Type': - 'multipart/form-data; boundary=------------------------a28d68b1c872c96f' - } - } - ) - .then(function (response: any) { - resolve(response.data.Hash) - }) - .catch(function (error: any) { - reject(error) - }) - }) -} - -describe('RemoteDDO: Indexer stores a new metadata events and orders.', () => { - let database: Database - // eslint-disable-next-line no-unused-vars - let indexer: OceanIndexer - let provider: JsonRpcProvider - let factoryContract: Contract - let nftContract: Contract - let publisherAccount: Signer - // eslint-disable-next-line no-unused-vars - let consumerAccount: Signer - let nftAddress: string - let datatokenAddress: string - let resolvedDDO: Record - // eslint-disable-next-line no-unused-vars - let genericAsset: any - let setMetaDataTxReceipt: any - // eslint-disable-next-line no-unused-vars - let oceanNode: OceanNode - const chainId = 8996 - let previousConfiguration: OverrideEnvConfig[] - const mockSupportedNetworks: RPCS = getMockSupportedNetworks() - - before(async () => { - const config = await getConfiguration(true) - - previousConfiguration = await setupEnvironment( - null, - buildEnvOverrideConfig( - [ - ENVIRONMENT_VARIABLES.RPCS, - ENVIRONMENT_VARIABLES.PRIVATE_KEY, - ENVIRONMENT_VARIABLES.DB_URL, - ENVIRONMENT_VARIABLES.ADDRESS_FILE - ], - [ - JSON.stringify(mockSupportedNetworks), - '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', - config.dbConfig.url, - `${homedir}/.ocean/ocean-contracts/artifacts/address.json` - ] - ) - ) - - database = await new Database(config.dbConfig) - indexer = new OceanIndexer(database, mockSupportedNetworks) - oceanNode = await OceanNode.getInstance(database) - let artifactsAddresses = getOceanArtifactsAdressesByChainId(DEVELOPMENT_CHAIN_ID) - if (!artifactsAddresses) { - artifactsAddresses = getOceanArtifactsAdresses().development - } - - provider = new JsonRpcProvider('http://127.0.0.1:8545') - publisherAccount = (await provider.getSigner(0)) as Signer - consumerAccount = (await provider.getSigner(1)) as Signer - genericAsset = genericDDO - factoryContract = new ethers.Contract( - artifactsAddresses.ERC721Factory, - ERC721Factory.abi, - publisherAccount - ) - }) - - it('should publish a dataset', async () => { - const tx = await factoryContract.createNftWithErc20( - { - name: '72120Bundle', - symbol: '72Bundle', - templateIndex: 1, - tokenURI: 'https://oceanprotocol.com/nft/', - transferable: true, - owner: await publisherAccount.getAddress() - }, - { - strings: ['ERC20B1', 'ERC20DT1Symbol'], - templateIndex: 1, - addresses: [ - await publisherAccount.getAddress(), - ZeroAddress, - ZeroAddress, - '0x0000000000000000000000000000000000000000' - ], - uints: [1000, 0], - bytess: [] - } - ) - const txReceipt = await tx.wait() - assert(txReceipt, 'transaction failed') - const event = getEventFromTx(txReceipt, 'NFTCreated') - nftAddress = event.args[0] - assert(nftAddress, 'find nft created failed') - const datatokenEvent = getEventFromTx(txReceipt, 'TokenCreated') - datatokenAddress = datatokenEvent.args[0] - assert(datatokenAddress, 'find datatoken created failed') - }) - - it('should set metadata and save (the remote DDO is encrypted) ', async () => { - nftContract = new ethers.Contract(nftAddress, ERC721Template.abi, publisherAccount) - const ddoToPublish = genericDDO - ddoToPublish.id = makeDid(getAddress(nftAddress), chainId.toString(10)) - const ipfsCID = await uploadToIpfs(JSON.stringify(ddoToPublish)) - const remoteDDO = { - remote: { - type: 'ipfs', - hash: ipfsCID - } - } - const stringDDO = JSON.stringify(remoteDDO) - const bytes = Buffer.from(stringDDO) - const metadata = hexlify(bytes) - // create metadata hash using the original DDO - const utf8Bytes = toUtf8Bytes(JSON.stringify(ddoToPublish)) - const hash = create256Hash(hexlify(utf8Bytes).toString()) - // publish metadata - const setMetaDataTx = await nftContract.setMetaData( - 0, - 'http://v4.provider.oceanprotocol.com', - '0x123', - '0x01', - metadata, - hash, - [] - ) - setMetaDataTxReceipt = await setMetaDataTx.wait() - assert(setMetaDataTxReceipt, 'set metada failed') - }) - - it('should store the ddo in the database and return it ', async function () { - this.timeout(DEFAULT_TEST_TIMEOUT * 2) - const did = makeDid(getAddress(nftAddress), chainId.toString(10)) - const { ddo, wasTimeout } = await waitToIndex( - did, - EVENTS.METADATA_CREATED, - DEFAULT_TEST_TIMEOUT * 2 - ) - if (ddo) { - resolvedDDO = ddo - expect(resolvedDDO.id).to.equal(genericAsset.id) - } else expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) - }) - after(() => { - tearDownEnvironment(previousConfiguration) - }) -}) diff --git a/src/test/integration/logs.test.ts b/src/test/integration/logs.test.ts index f216d8a0c..4d528ef73 100644 --- a/src/test/integration/logs.test.ts +++ b/src/test/integration/logs.test.ts @@ -37,7 +37,7 @@ describe('LogDatabase CRUD', () => { buildEnvOverrideConfig([ENVIRONMENT_VARIABLES.LOG_DB], ['true']) ) const { dbConfig } = await getConfiguration(true) - database = await new Database(dbConfig) + database = await Database.init(dbConfig) // Initialize logger with the custom transport that writes to the LogDatabase logger = getCustomLoggerForModule( LOGGER_MODULE_NAMES.HTTP, @@ -87,11 +87,11 @@ describe('LogDatabase CRUD', () => { if (logs.length > 0) { logs = logs.filter((log) => log.message === newLogEntry.message) - expect(logs?.length).to.equal(1) - expect(Number(logs?.[0].id)).to.greaterThan(Number(logId)) - expect(logs?.[0].level).to.equal(newLogEntry.level) - expect(logs?.[0].message).to.equal(newLogEntry.message) - expect(logs?.[0].moduleName).to.equal('HTTP') + expect(logs.length).to.equal(1) + expect(Number(logs[0].id)).to.greaterThan(Number(logId)) + expect(logs[0].level).to.equal(newLogEntry.level) + expect(logs[0].message).to.equal(newLogEntry.message) + expect(logs[0].moduleName).to.equal('HTTP') } }) @@ -118,11 +118,11 @@ describe('LogDatabase CRUD', () => { logs = logs.filter((log) => log.message === newLogEntry.message) if (logs.length > 0) { - expect(logs?.length).to.equal(1) - expect(Number(logs?.[0].id)).to.greaterThan(Number(logId)) - expect(logs?.[0].level).to.equal(newLogEntry.level) - expect(logs?.[0].message).to.equal(newLogEntry.message) - expect(logs?.[0].moduleName).to.equal('HTTP') + expect(logs.length).to.equal(1) + expect(Number(logs[0].id)).to.greaterThan(Number(logId)) + expect(logs[0].level).to.equal(newLogEntry.level) + expect(logs[0].message).to.equal(newLogEntry.message) + expect(logs[0].moduleName).to.equal('HTTP') } }) @@ -153,11 +153,11 @@ describe('LogDatabase CRUD', () => { logs = logs.filter((log) => log.message.includes(newLogEntry.message)) if (logs.length > 0) { - expect(logs?.length).to.equal(1) - expect(Number(logs?.[0].id)).to.greaterThan(Number(logId)) - expect(logs?.[0].level).to.equal(newLogEntry.level) - assert(logs?.[0].message) - expect(logs?.[0].moduleName).to.equal('HTTP') + expect(logs.length).to.equal(1) + expect(Number(logs[0].id)).to.greaterThan(Number(logId)) + expect(logs[0].level).to.equal(newLogEntry.level) + assert(logs[0].message) + expect(logs[0].moduleName).to.equal('HTTP') } }) @@ -179,7 +179,7 @@ describe('LogDatabase retrieveMultipleLogs with specific parameters', () => { ) const { dbConfig } = await getConfiguration(true) - database = await new Database(dbConfig) + database = await Database.init(dbConfig) }) it('should retrieve logs with a specific moduleName', async () => { @@ -245,7 +245,7 @@ describe('LogDatabase retrieveMultipleLogs with specific parameters', () => { before(async () => { const { dbConfig } = await getConfiguration(true) - database = await new Database(dbConfig) + database = await Database.init(dbConfig) }) it('should insert a log for deletion', async () => { @@ -293,13 +293,13 @@ describe('LogDatabase retrieveMultipleLogs with specific parameters', () => { it('should return an empty array for negative maxLogs', async () => { const logs = await database.logs.retrieveMultipleLogs(startTime, endTime, -1) - assert.isNull(logs, 'Expected logs to be null') + assert.isEmpty(logs, 'Expected logs to be empty') }) it('should retrieve a maximum of one log when maxLogs is set to 1', async () => { const logs = await database.logs.retrieveMultipleLogs(startTime, endTime, 1) // check if the length of logs is 1 or less - expect(logs?.length).to.be.at.most(1) + expect(logs.length).to.be.at.most(1) }) it('should retrieve no logs when maxLogs is set to 0', async () => { @@ -348,7 +348,7 @@ describe('LogDatabase deleteOldLogs', () => { buildEnvOverrideConfig([ENVIRONMENT_VARIABLES.LOG_DB], ['true']) ) const { dbConfig } = await getConfiguration(true) - database = await new Database(dbConfig) + database = await Database.init(dbConfig) }) it('should insert an old log and a recent log', async () => { @@ -383,14 +383,14 @@ describe('LogDatabase deleteOldLogs', () => { let logs = await database.logs.retrieveMultipleLogs(startTime, endTime, 100) // Check that the old log is not present, but the recent one is - const oldLogPresent = logs?.some((log) => log.message === oldLogEntry.message) + const oldLogPresent = logs.some((log) => log.message === oldLogEntry.message) assert(oldLogPresent === false, 'Old logs are still present') // since we have many logs going to DB by default, we need to re-frame the timestamp to grab it startTime = new Date(recentLogEntry.timestamp - 1000) endTime = new Date(recentLogEntry.timestamp + 1000) logs = await database.logs.retrieveMultipleLogs(startTime, endTime, 100) - const recentLogPresent = logs?.some((log) => log.message === recentLogEntry.message) + const recentLogPresent = logs.some((log) => log.message === recentLogEntry.message) assert(recentLogPresent === true, 'Recent logs are not present') } else assert( @@ -413,7 +413,7 @@ describe('LogDatabase retrieveMultipleLogs with pagination', () => { buildEnvOverrideConfig([ENVIRONMENT_VARIABLES.LOG_DB], ['true']) ) const { dbConfig } = await getConfiguration(true) - database = await new Database(dbConfig) + database = await Database.init(dbConfig) // Insert multiple log entries to ensure there are enough logs for pagination for (let i = 0; i < logCount; i++) { diff --git a/src/test/integration/operationsDashboard.test.ts b/src/test/integration/operationsDashboard.test.ts index 074644318..ea698b771 100644 --- a/src/test/integration/operationsDashboard.test.ts +++ b/src/test/integration/operationsDashboard.test.ts @@ -105,8 +105,8 @@ describe('Should test admin operations', () => { ) config = await getConfiguration(true) // Force reload the configuration - dbconn = await new Database(config.dbConfig) - oceanNode = await OceanNode.getInstance(dbconn) + dbconn = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, dbconn) indexer = new OceanIndexer(dbconn, config.indexingNetworks) oceanNode.addIndexer(indexer) }) @@ -124,7 +124,9 @@ describe('Should test admin operations', () => { expiryTimestamp, signature } - const validationResponse = new StopNodeHandler(oceanNode).validate(stopNodeCommand) + const validationResponse = await new StopNodeHandler(oceanNode).validate( + stopNodeCommand + ) assert(validationResponse, 'invalid stop node validation response') assert(validationResponse.valid === true, 'validation for stop node command failed') }) @@ -135,7 +137,7 @@ describe('Should test admin operations', () => { // CollectFeesHandler const collectFeesHandler: CollectFeesHandler = CoreHandlersRegistry.getInstance( oceanNode - ).getHandler(PROTOCOL_COMMANDS.COLLECT_FEES) + ).getHandler(PROTOCOL_COMMANDS.COLLECT_FEES) as CollectFeesHandler const signature = await getSignature(expiryTimestamp.toString()) const collectFeesCommand: AdminCollectFeesCommand = { @@ -147,7 +149,7 @@ describe('Should test admin operations', () => { expiryTimestamp, signature } - const validationResponse = collectFeesHandler.validate(collectFeesCommand) + const validationResponse = await collectFeesHandler.validate(collectFeesCommand) assert(validationResponse, 'invalid collect fees validation response') assert( validationResponse.valid === true, @@ -160,7 +162,9 @@ describe('Should test admin operations', () => { providerWallet ) const balanceBefore = await token.balanceOf(await destinationWallet.getAddress()) - expect(collectFeesHandler.validate(collectFeesCommand).valid).to.be.equal(true) // OK + expect((await collectFeesHandler.validate(collectFeesCommand)).valid).to.be.equal( + true + ) // OK const result = await collectFeesHandler.handle(collectFeesCommand) expect(result.status.httpStatus).to.be.equal(200) // OK @@ -228,7 +232,7 @@ describe('Should test admin operations', () => { signature } const reindexTxHandler = new ReindexTxHandler(oceanNode) - const validationResponse = reindexTxHandler.validate(reindexTxCommand) + const validationResponse = await reindexTxHandler.validate(reindexTxCommand) assert(validationResponse, 'invalid reindex tx validation response') assert(validationResponse.valid === true, 'validation for reindex tx command failed') @@ -297,7 +301,7 @@ describe('Should test admin operations', () => { signature } const reindexChainHandler = new ReindexChainHandler(oceanNode) - const validationResponse = reindexChainHandler.validate(reindexChainCommand) + const validationResponse = await reindexChainHandler.validate(reindexChainCommand) assert(validationResponse, 'invalid reindex chain validation response') assert( validationResponse.valid === true, @@ -348,8 +352,9 @@ describe('Should test admin operations', () => { // ----------------------------------------- // IndexingThreadHandler const indexingHandler: IndexingThreadHandler = CoreHandlersRegistry.getInstance( - oceanNode - ).getHandler(PROTOCOL_COMMANDS.HANDLE_INDEXING_THREAD) + oceanNode, + true + ).getHandler(PROTOCOL_COMMANDS.HANDLE_INDEXING_THREAD) as IndexingThreadHandler const signature = await getSignature(expiryTimestamp.toString()) const indexingStartCommand: StartStopIndexingCommand = { @@ -358,7 +363,7 @@ describe('Should test admin operations', () => { expiryTimestamp, signature } - expect(indexingHandler.validate(indexingStartCommand).valid).to.be.equal(true) // OK + expect((await indexingHandler.validate(indexingStartCommand)).valid).to.be.equal(true) // OK const indexingStopCommand: StartStopIndexingCommand = { command: PROTOCOL_COMMANDS.HANDLE_INDEXING_THREAD, @@ -366,15 +371,16 @@ describe('Should test admin operations', () => { expiryTimestamp: 10, signature } - expect(indexingHandler.validate(indexingStopCommand).valid).to.be.equal(false) // NOK + expect((await indexingHandler.validate(indexingStopCommand)).valid).to.be.equal(false) // NOK // OK now indexingStopCommand.expiryTimestamp = expiryTimestamp indexingStopCommand.chainId = 8996 - expect(indexingHandler.validate(indexingStopCommand).valid).to.be.equal(true) // OK + expect((await indexingHandler.validate(indexingStopCommand)).valid).to.be.equal(true) // OK // should exist a running thread for this network atm const response = await indexingHandler.handle(indexingStopCommand) + console.log({ responseStoppingThread: response }) assert(response.stream, 'Failed to get stream when stoping thread') expect(response.status.httpStatus).to.be.equal(200) diff --git a/src/test/integration/pricing.test.ts b/src/test/integration/pricing.test.ts new file mode 100644 index 000000000..48300c02a --- /dev/null +++ b/src/test/integration/pricing.test.ts @@ -0,0 +1,374 @@ +import { expect, assert } from 'chai' +import { createHash } from 'crypto' +import { + JsonRpcProvider, + Signer, + Contract, + ethers, + getAddress, + hexlify, + ZeroAddress, + parseUnits +} from 'ethers' +import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json' assert { type: 'json' } +import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json' assert { type: 'json' } +import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' assert { type: 'json' } +import Dispenser from '@oceanprotocol/contracts/artifacts/contracts/pools/dispenser/Dispenser.sol/Dispenser.json' assert { type: 'json' } +import { Database } from '../../components/database/index.js' +import { OceanIndexer } from '../../components/Indexer/index.js' +import { RPCS } from '../../@types/blockchain.js' +import { getEventFromTx } from '../../utils/util.js' +import { waitToIndex, expectedTimeoutFailure } from './testUtils.js' +import { genericDDO } from '../data/ddo.js' +import { + DEVELOPMENT_CHAIN_ID, + getOceanArtifactsAdresses, + getOceanArtifactsAdressesByChainId +} from '../../utils/address.js' +import { + DEFAULT_TEST_TIMEOUT, + OverrideEnvConfig, + buildEnvOverrideConfig, + getMockSupportedNetworks, + setupEnvironment, + tearDownEnvironment +} from '../utils/utils.js' +import { ENVIRONMENT_VARIABLES, EVENTS } from '../../utils/constants.js' +import { homedir } from 'os' +import { OceanNode } from '../../OceanNode.js' +import { getConfiguration } from '../../utils/config.js' +import { encrypt } from '../../utils/crypt.js' +import { EncryptMethod } from '../../@types/fileObject.js' +import { Asset } from '@oceanprotocol/ddo-js' + +describe('Publish pricing scehmas and assert ddo stats - FRE & Dispenser', () => { + let database: Database + let oceanNode: OceanNode + let provider: JsonRpcProvider + let factoryContract: Contract + let nftContract: Contract + let datatokenContract: Contract + let publisherAccount: Signer + let nftAddress: string + let datatokenAddress: string + let exchangeId: string + let dispenserContract: ethers.Contract + const chainId = 8996 + let assetDID: string + let resolvedDDO: Asset + let genericAsset: any + let setMetaDataTxReceipt: any + let indexer: OceanIndexer + let artifactsAddresses: any + const mockSupportedNetworks: RPCS = getMockSupportedNetworks() + let previousConfiguration: OverrideEnvConfig[] + let genericAssetCloned: any + + before(async () => { + previousConfiguration = await setupEnvironment( + null, + buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.RPCS, + ENVIRONMENT_VARIABLES.INDEXER_NETWORKS, + ENVIRONMENT_VARIABLES.PRIVATE_KEY, + ENVIRONMENT_VARIABLES.ADDRESS_FILE + ], + [ + JSON.stringify(mockSupportedNetworks), + JSON.stringify([8996]), + '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', + `${homedir}/.ocean/ocean-contracts/artifacts/address.json` + ] + ) + ) + + const config = await getConfiguration(true) + database = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance() + indexer = new OceanIndexer(database, mockSupportedNetworks) + oceanNode.addIndexer(indexer) + artifactsAddresses = getOceanArtifactsAdressesByChainId(DEVELOPMENT_CHAIN_ID) + if (!artifactsAddresses) { + artifactsAddresses = getOceanArtifactsAdresses().development + } + console.log(artifactsAddresses.FixedPrice) + + provider = new JsonRpcProvider('http://127.0.0.1:8545') + publisherAccount = (await provider.getSigner(0)) as Signer + genericAsset = JSON.parse(JSON.stringify(genericDDO)) + factoryContract = new ethers.Contract( + artifactsAddresses.ERC721Factory, + ERC721Factory.abi, + publisherAccount + ) + genericAssetCloned = structuredClone(genericAsset) + delete genericAssetCloned.event + delete genericAssetCloned.nft + }) + + it('instance Database', () => { + expect(database).to.be.instanceOf(Database) + }) + + it('should publish a dataset w fre', async () => { + const tx = await factoryContract.createNftWithErc20WithFixedRate( + { + name: '72120Bundle', + symbol: '72Bundle', + templateIndex: 1, + tokenURI: 'https://oceanprotocol.com/nft/', + transferable: true, + owner: await publisherAccount.getAddress() + }, + { + strings: ['ERC20B1', 'ERC20DT1Symbol'], + templateIndex: 1, + addresses: [ + await publisherAccount.getAddress(), + ZeroAddress, + ZeroAddress, + ZeroAddress + ], + uints: [1000, 0], + bytess: [] + }, + { + fixedPriceAddress: artifactsAddresses.FixedPrice, + addresses: [ + artifactsAddresses.Ocean, + await publisherAccount.getAddress(), + await publisherAccount.getAddress(), + ZeroAddress + ], + uints: [18, 18, parseUnits('1', 18).toString(), parseUnits('0', 18).toString(), 1] + } + ) + const txReceipt = await tx.wait() + assert(txReceipt, 'transaction failed') + const event = getEventFromTx(txReceipt, 'NFTCreated') + nftAddress = event.args[0] + assert(nftAddress, 'find nft created failed') + const datatokenEvent = getEventFromTx(txReceipt, 'TokenCreated') + datatokenAddress = datatokenEvent.args[0] + assert(datatokenAddress, 'find datatoken created failed') + datatokenContract = new ethers.Contract( + datatokenAddress, + ERC20Template.abi, + publisherAccount + ) + assert(datatokenContract) + const freEvent = getEventFromTx(txReceipt, 'NewFixedRate') + exchangeId = freEvent.args[0] + assert(exchangeId, 'exchangeId not found.') + }) + + it('should set metadata and save ', async () => { + nftContract = new ethers.Contract(nftAddress, ERC721Template.abi, publisherAccount) + genericAssetCloned.id = + 'did:op:' + + createHash('sha256') + .update(getAddress(nftAddress) + chainId.toString(10)) + .digest('hex') + genericAssetCloned.nftAddress = nftAddress + assetDID = genericAssetCloned.id + // create proper service.files string + genericAssetCloned.services[0].datatokenAddress = datatokenAddress + genericAssetCloned.nftAddress = nftAddress + // let's call node to encrypt + + const data = Uint8Array.from( + Buffer.from(JSON.stringify(genericAssetCloned.services[0].files)) + ) + const encryptedData = await encrypt(data, EncryptMethod.ECIES) + const encryptedDataString = encryptedData.toString('hex') + genericAssetCloned.services[0].files = encryptedDataString + const stringDDO = JSON.stringify(genericAssetCloned) + const bytes = Buffer.from(stringDDO) + const metadata = hexlify(bytes) + const hash = createHash('sha256').update(metadata).digest('hex') + + const setMetaDataTx = await nftContract.setMetaData( + 0, + 'http://v4.provider.oceanprotocol.com', + '0x123', + '0x01', + metadata, + '0x' + hash, + [] + ) + setMetaDataTxReceipt = await setMetaDataTx.wait() + assert(setMetaDataTxReceipt, 'set metada failed') + }) + + it('should store the ddo in the database and return it ', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 3) + const { ddo, wasTimeout } = await waitToIndex( + assetDID, + EVENTS.METADATA_CREATED, + DEFAULT_TEST_TIMEOUT * 2 + ) + if (ddo) { + resolvedDDO = ddo + console.log(`resolved ddo: ${JSON.stringify(resolvedDDO)}`) + expect(resolvedDDO.id).to.equal(genericAssetCloned.id) + } else expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) + }) + + it('should get stats for fre', async function () { + assert(resolvedDDO.indexedMetadata, 'No stats available') + assert(resolvedDDO.indexedMetadata.stats.length === 1) + assert( + resolvedDDO.indexedMetadata.stats[0].datatokenAddress === datatokenAddress, + 'DT is missing.' + ) + assert( + resolvedDDO.indexedMetadata.stats[0].name === (await datatokenContract.name()), + 'Name is missing.' + ) + assert( + resolvedDDO.indexedMetadata.stats[0].orders === 0, + 'Number of orders are missing.' + ) + assert( + resolvedDDO.indexedMetadata.stats[0].serviceId === '0', + 'Service ID is missing.' + ) + assert( + resolvedDDO.indexedMetadata.stats[0].prices.length === 1, + 'Incorrect length of prices' + ) + assert( + resolvedDDO.indexedMetadata.stats[0].prices[0].type === 'fixedrate', + 'Type from prices is not present.' + ) + assert( + resolvedDDO.indexedMetadata.stats[0].prices[0].token === artifactsAddresses.Ocean, + 'Datatoken from prices is not present.' + ) + assert( + resolvedDDO.indexedMetadata.stats[0].prices[0].price === '1.0', + 'Price is not present.' + ) + assert( + resolvedDDO.indexedMetadata.stats[0].prices[0].exchangeId === exchangeId, + 'Exchange ID is not present.' + ) + }) + + it('should attach a dispenser', async () => { + const dtTx = await nftContract.createERC20( + 1, + ['newERC20', 'newERC20s'], + [ + await publisherAccount.getAddress(), + await publisherAccount.getAddress(), + await publisherAccount.getAddress(), + datatokenAddress + ], + [parseUnits('10000', 18), parseUnits('1', 18)], + [] + ) + assert(dtTx, 'Cannot create datatoken') + const dtTxReceipt = await dtTx.wait() + const dtEvent = getEventFromTx(dtTxReceipt, 'TokenCreated') + const newdatatokenAddress = dtEvent.args[0] + const newDtContract = new ethers.Contract( + newdatatokenAddress, + ERC20Template.abi, + publisherAccount + ) + const tx = await newDtContract.createDispenser( + artifactsAddresses.Dispenser, + parseUnits('1', 18), + parseUnits('1', 18), + true, + await publisherAccount.getAddress() + ) + assert(tx, 'Cannot create dispenser') + const txReceipt = await tx.wait() + const dispenserEvent = getEventFromTx(txReceipt, 'NewDispenser') + const dispenserAddress = dispenserEvent.topics[0] + assert(dispenserAddress, 'Dispenser contract not retrieved') + + dispenserContract = new ethers.Contract( + dispenserAddress, + Dispenser.abi, + publisherAccount + ) + assert(dispenserContract) + genericAssetCloned.services.push({ + id: '1', + type: 'access', + description: 'Download service', + datatokenAddress: newdatatokenAddress, + files: [ + { + url: 'https://raw.githubusercontent.com/oceanprotocol/test-algorithm/master/javascript/algo.js', + contentType: 'text/js', + encoding: 'UTF-8' + } + ], + serviceEndpoint: 'http://172.15.0.4:8030', + timeout: 0 + }) + assert(genericAssetCloned.services.length === 2, 'the 2 services are not present') + const data = Uint8Array.from( + Buffer.from(JSON.stringify(genericAssetCloned.services[1].files)) + ) + const encryptedData = await encrypt(data, EncryptMethod.ECIES) + const encryptedDataString = encryptedData.toString('hex') + genericAssetCloned.services[1].files = encryptedDataString + const stringDDO = JSON.stringify(genericAssetCloned) + const bytes = Buffer.from(stringDDO) + const metadata = hexlify(bytes) + const hash = createHash('sha256').update(metadata).digest('hex') + + const setMetaDataTx = await nftContract.setMetaData( + 0, + 'http://v4.provider.oceanprotocol.com', + '0x123', + '0x01', + metadata, + '0x' + hash, + [] + ) + setMetaDataTxReceipt = await setMetaDataTx.wait() + assert(setMetaDataTxReceipt, 'set metada failed') + }) + it('should store the updated ddo in the database and return it ', async function () { + this.timeout(DEFAULT_TEST_TIMEOUT * 3) + const { ddo, wasTimeout } = await waitToIndex( + genericAssetCloned.id, + EVENTS.METADATA_UPDATED, + DEFAULT_TEST_TIMEOUT * 2, + true + ) + console.log(`updated ddo: ${JSON.stringify(ddo.indexedMetadata.stats)}`) + if (ddo) { + assert( + ddo.indexedMetadata.stats.length === 2, + 'the 2 pricing schemas were not captured in the stats' + ) + assert( + ddo.indexedMetadata.stats[1].prices[0].type === 'dispenser', + 'type is not dispenser' + ) + assert( + ddo.indexedMetadata.stats[1].datatokenAddress === + genericAssetCloned.services[1].datatokenAddress, + 'mismatch datatoken address' + ) + assert(ddo.indexedMetadata.stats[1].prices[0].price === '0', 'price is not 0') + assert( + ddo.indexedMetadata.stats[1].prices[0].token === + genericAssetCloned.services[1].datatokenAddress, + 'mismatch datatoken address' + ) + } else expect(expectedTimeoutFailure(this.test.title)).to.be.equal(wasTimeout) + }) + after(async () => { + await tearDownEnvironment(previousConfiguration) + indexer.stopAllThreads() + }) +}) diff --git a/src/test/integration/testUtils.ts b/src/test/integration/testUtils.ts index 066e04cf9..b1d7b1053 100644 --- a/src/test/integration/testUtils.ts +++ b/src/test/integration/testUtils.ts @@ -5,20 +5,18 @@ import { INDEXER_LOGGER } from '../../utils/logging/common.js' import { JsonRpcSigner, JsonRpcProvider, getBytes } from 'ethers' import { DEFAULT_TEST_TIMEOUT } from '../utils/utils.js' import { getDatabase } from '../../utils/database.js' -import { DDO } from '../../@types/DDO/DDO.js' -import { sleep } from '../../utils/util.js' +import { Asset } from '@oceanprotocol/ddo-js' // listen for indexer events export function addIndexerEventListener(eventName: string, ddoId: string, callback: any) { - // add listener - INDEXER_DDO_EVENT_EMITTER.addListener(eventName, (did: string) => { - INDEXER_LOGGER.info(`Test suite - Listened event: "${eventName}" for DDO: ${did}`) - if (ddoId === did && typeof callback === 'function') { - // remove it - INDEXER_DDO_EVENT_EMITTER.removeListener(eventName, () => {}) + const listener = (did: string) => { + if (ddoId === did) { callback(did) } - }) + } + + INDEXER_DDO_EVENT_EMITTER.addListener(eventName, listener) + return listener } export const delay = (interval: number) => { @@ -47,78 +45,42 @@ async function getIndexedDDOFromDB(did: string): Promise { } export type WaitIndexResult = { - ddo: DDO | null + ddo: Asset | null wasTimeout: boolean } -// WIP + export const waitToIndex = async ( did: string, eventName: string, testTimeout: number = DEFAULT_TEST_TIMEOUT, forceWaitForEvent?: boolean ): Promise => { - const result: WaitIndexResult = { ddo: null, wasTimeout: false } - let listening = false - let wait = true + if (!forceWaitForEvent) { + const ddo = await getIndexedDDOFromDB(did) + if (ddo) return { ddo, wasTimeout: false } + } - const timeout = setTimeout(async () => { - const res = await getIndexedDDOFromDB(did) - result.ddo = res - result.wasTimeout = true - wait = false - return result - }, testTimeout - 5000) // little less (5 secs) than the initial timeout + return new Promise((resolve) => { + const listener = addIndexerEventListener(eventName, did, async () => { + clearTimeout(timeoutId) + const ddo = await getIndexedDDOFromDB(did) + INDEXER_DDO_EVENT_EMITTER.removeListener(eventName, listener) + resolve({ ddo, wasTimeout: false }) + }) - while (wait) { - // we might want to wait for the event, on certain ocasions (ex: when we update something that already exists) - // otherwise we might get the still "unmodified" version - // ideally, the tests would call the waitToIndex() method before the action that triggers it - if (!forceWaitForEvent) { - // first try - const res = await getIndexedDDOFromDB(did) - if (res !== null) { - clearTimeout(timeout) - result.ddo = res - result.wasTimeout = false - wait = false - return result + const timeoutId = setTimeout(async () => { + try { + const ddo = await getIndexedDDOFromDB(did) + INDEXER_DDO_EVENT_EMITTER.removeListener(eventName, listener) + resolve({ ddo, wasTimeout: true }) + } catch (error) { + console.error('Error fetching DDO:', error) + INDEXER_DDO_EVENT_EMITTER.removeListener(eventName, listener) + resolve({ ddo: null, wasTimeout: true }) } - } else if (!listening) { - // 2nd approach, whatever happens first (timeout or event emition) - listening = true - addIndexerEventListener(eventName, did, async (id: string) => { - clearTimeout(timeout) - const res = await getIndexedDDOFromDB(id) - result.ddo = res - result.wasTimeout = false - wait = false - return result - }) - } - // hold your breath for a while - await sleep(1000) - } - return result + }, testTimeout - 5000) + }) } -/** -export const waitToIndex = async (did: string, database: Database): Promise => { - const timeout = setTimeout(() => {}, 1500) - let tries = 0 - do { - try { - const ddo = await database.ddo.retrieve(did) - if (ddo) { - return ddo - } - } catch (e) { - INDEXER_LOGGER.logMessage(`Error could not retrieve the DDO ${did}: ${e}`) - } - await sleep(1500) - - tries++ - } while (tries < 100) - return null -} */ export const deleteAsset = async (did: string, database: Database): Promise => { try { diff --git a/src/test/integration/transactionValidation.test.ts b/src/test/integration/transactionValidation.test.ts index 104c677f8..007633327 100644 --- a/src/test/integration/transactionValidation.test.ts +++ b/src/test/integration/transactionValidation.test.ts @@ -67,8 +67,8 @@ describe('validateOrderTransaction Function with Orders', () => { ) config = await getConfiguration(true) // Force reload the configuration - const dbconn = await new Database(config.dbConfig) - oceanNode = await OceanNode.getInstance(dbconn) + const dbconn = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance(config, dbconn) indexer = new OceanIndexer(dbconn, config.indexingNetworks) oceanNode.addIndexer(indexer) @@ -89,7 +89,7 @@ describe('validateOrderTransaction Function with Orders', () => { } const { dbConfig } = await getConfiguration(true) - database = await new Database(dbConfig) + database = await Database.init(dbConfig) }) it('Start instance of Database', () => { diff --git a/src/test/integration/typesense.test.ts b/src/test/integration/typesense.test.ts index 1bf59a24e..8742284ca 100644 --- a/src/test/integration/typesense.test.ts +++ b/src/test/integration/typesense.test.ts @@ -6,6 +6,7 @@ import { import { ddoSchema } from '../data/ddoSchema.js' import { ddo } from '../data/ddo.js' import { expect } from 'chai' +import { TypesenseSearchParams } from '../../@types/index.js' describe('Typesense', () => { let typesense: Typesense @@ -161,14 +162,17 @@ describe('Typesense documents', () => { expect(result.metadata).to.not.be.an('undefined') expect(result.metadata.name).to.be.equal(ddo.metadata.name) }) - it('search document in ddo collection', async () => { - const result = await typesense.collections(ddoSchema.name).documents().search({ - q: 'DEX', - query_by: 'metadata.author', - filter_by: 'chainId:<138', + const queryParams: TypesenseSearchParams = { + q: 'new metadata name', + query_by: 'metadata.name', + filter_by: 'chainId:=137', sort_by: 'version:desc' - }) + } + const result = await typesense + .collections(ddoSchema.name) + .documents() + .search(queryParams) expect(result.found).to.equal(1) expect(result.hits[0]).to.not.be.an('undefined') diff --git a/src/test/unit/auth/token.test.ts b/src/test/unit/auth/token.test.ts new file mode 100644 index 000000000..f185de0ba --- /dev/null +++ b/src/test/unit/auth/token.test.ts @@ -0,0 +1,68 @@ +import { OceanNodeConfig } from '../../../@types/OceanNode.js' +import { getConfiguration } from '../../../utils/index.js' +import { expect } from 'chai' +import { Wallet } from 'ethers' +import { Auth } from '../../../components/Auth/index.js' +import { AuthTokenDatabase } from '../../../components/database/AuthTokenDatabase.js' + +describe('Auth Token Tests', () => { + let wallet: Wallet + let authTokenDatabase: AuthTokenDatabase + let config: OceanNodeConfig + let auth: Auth + + before(async () => { + config = await getConfiguration(true) + authTokenDatabase = await AuthTokenDatabase.create(config.dbConfig) + wallet = new Wallet(process.env.PRIVATE_KEY) + auth = new Auth(authTokenDatabase) + }) + + const getRandomNonce = () => { + return Math.floor(Math.random() * 1000000).toString() + } + + it('should create and validate a token', async () => { + const jwtToken = await auth.getJWTToken(wallet.address, getRandomNonce(), Date.now()) + await auth.insertToken(wallet.address, jwtToken, Date.now() + 1000, Date.now()) + + const result = await auth.validateAuthenticationOrToken({ token: jwtToken }) + expect(result.valid).to.be.equal(true) + }) + + it('should fail validation with invalid token', async () => { + const result = await auth.validateAuthenticationOrToken({ token: 'invalid-token' }) + expect(result.valid).to.be.equal(false) + }) + + it('should fail validation with invalid signature', async () => { + const invalidSignature = '0x' + '0'.repeat(130) + + const result = await auth.validateAuthenticationOrToken({ + signature: invalidSignature, + nonce: getRandomNonce(), + address: wallet.address + }) + expect(result.valid).to.be.equal(false) + }) + + it('should respect token expiry', async () => { + const jwtToken = await auth.getJWTToken(wallet.address, getRandomNonce(), Date.now()) + await auth.insertToken(wallet.address, jwtToken, Date.now() + 1000, Date.now()) + + await new Promise((resolve) => setTimeout(resolve, 1500)) + + const validationResult = await auth.validateToken(jwtToken) + expect(validationResult).to.be.equal(null) + }) + + it('should invalidate a token', async () => { + const jwtToken = await auth.getJWTToken(wallet.address, getRandomNonce(), Date.now()) + await auth.insertToken(wallet.address, jwtToken, Date.now() + 1000, Date.now()) + + await auth.invalidateToken(jwtToken) + + const validationResult = await auth.validateToken(jwtToken) + expect(validationResult).to.be.equal(null) + }) +}) diff --git a/src/test/unit/blockchain.test.ts b/src/test/unit/blockchain.test.ts index 978c1fe1b..47a3bc77e 100644 --- a/src/test/unit/blockchain.test.ts +++ b/src/test/unit/blockchain.test.ts @@ -7,6 +7,7 @@ import { ENVIRONMENT_VARIABLES } from '../../utils/constants.js' import { DEFAULT_TEST_TIMEOUT, OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, buildEnvOverrideConfig, setupEnvironment, tearDownEnvironment @@ -25,10 +26,10 @@ describe('Should validate blockchain network connections', () => { envOverrides = buildEnvOverrideConfig( [ENVIRONMENT_VARIABLES.RPCS], [ - '{ "8996":{ "rpc":"http://172.0.0.1:8545", "fallbackRPCs": ["http://172.0.0.3:8545","http://127.0.0.1:8545"], "chainId": 8996, "network": "development", "chunkSize": 100 }}' + '{ "8996":{ "rpc":"http://127.0.0.1:8545", "fallbackRPCs": ["http://127.0.0.3:8545","http://127.0.0.1:8545"], "chainId": 8996, "network": "development", "chunkSize": 100 }}' ] ) - envOverrides = await setupEnvironment(null, envOverrides) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) config = await getConfiguration(true) rpcs = config.supportedNetworks @@ -76,7 +77,7 @@ describe('Should validate blockchain network connections', () => { for (const chain of KNOWN_CONFIDENTIAL_EVMS) { expect(isConfidentialEVM(chain)).to.be.equal(true) } - expect(isConfidentialEVM(DEVELOPMENT_CHAIN_ID)).to.be.equal(false) + expect(isConfidentialEVM(BigInt(DEVELOPMENT_CHAIN_ID))).to.be.equal(false) }) after(async () => { diff --git a/src/test/unit/commands.test.ts b/src/test/unit/commands.test.ts index e00874075..63bd57852 100644 --- a/src/test/unit/commands.test.ts +++ b/src/test/unit/commands.test.ts @@ -1,18 +1,17 @@ import { expect } from 'chai' import { PROTOCOL_COMMANDS, SUPPORTED_PROTOCOL_COMMANDS } from '../../utils/index.js' import { CoreHandlersRegistry } from '../../components/core/handler/coreHandlersRegistry.js' -import { Handler } from '../../components/core/handler/handler.js' +import { BaseHandler } from '../../components/core/handler/handler.js' import { OceanNode } from '../../OceanNode.js' import { ComputeGetEnvironmentsCommand, ComputeGetResultCommand, ComputeGetStatusCommand, ComputeInitializeCommand, - ComputeStartCommand, + PaidComputeStartCommand, ComputeStopCommand, DecryptDDOCommand, DownloadCommand, - EchoCommand, EncryptCommand, EncryptFileCommand, FileInfoCommand, @@ -22,7 +21,8 @@ import { NonceCommand, QueryCommand, StatusCommand, - ValidateDDOCommand + ValidateDDOCommand, + GetJobsCommand } from '../../@types/commands.js' import { NonceHandler } from '../../components/core/handler/nonceHandler.js' import { DownloadHandler } from '../../components/core/handler/downloadHandler.js' @@ -38,10 +38,9 @@ import { import { QueryHandler } from '../../components/core/handler/queryHandler.js' import { StatusHandler } from '../../components/core/handler/statusHandler.js' import { FeesHandler } from '../../components/core/handler/feesHandler.js' -import { EchoHandler } from '../../components/core/handler/echoHandler.js' import { FileInfoHandler } from '../../components/core/handler/fileInfoHandler.js' import { ComputeGetEnvironmentsHandler } from '../../components/core/compute/environments.js' -import { ComputeStartHandler } from '../../components/core/compute/startCompute.js' +import { PaidComputeStartHandler } from '../../components/core/compute/startCompute.js' import { ComputeStopHandler } from '../../components/core/compute/stopCompute.js' import { ComputeGetStatusHandler } from '../../components/core/compute/getStatus.js' import { ComputeGetResultHandler } from '../../components/core/compute/getResults.js' @@ -50,6 +49,7 @@ import { StopNodeHandler } from '../../components/core/admin/stopNodeHandler.js' import { ReindexTxHandler } from '../../components/core/admin/reindexTxHandler.js' import { ReindexChainHandler } from '../../components/core/admin/reindexChainHandler.js' import { CollectFeesHandler } from '../../components/core/admin/collectFeesHandler.js' +import { GetJobsHandler } from '../../components/core/handler/getJobs.js' describe('Commands and handlers', () => { it('Check that all supported commands have registered handlers', () => { @@ -57,7 +57,7 @@ describe('Commands and handlers', () => { const node: OceanNode = OceanNode.getInstance() for (const command of SUPPORTED_PROTOCOL_COMMANDS) { expect(CoreHandlersRegistry.getInstance(node).getHandler(command)).to.be.instanceof( - Handler + BaseHandler ) } }) @@ -88,7 +88,7 @@ describe('Commands and handlers', () => { command: PROTOCOL_COMMANDS.DOWNLOAD } expect(downloadHandler.validate(downloadCommand).valid).to.be.equal(true) - downloadCommand.nonce = null + downloadCommand.documentId = undefined expect(downloadHandler.validate(downloadCommand).valid).to.be.equal(false) // ----------------------------------------- // DecryptDDOHandler @@ -202,37 +202,28 @@ describe('Commands and handlers', () => { feesCommand.consumerAddress = 'INVALID_1234567' expect(feesHandler.validate(feesCommand).valid).to.be.equal(false) // ----------------------------------------- - // EchoHandler - const echoHandler: EchoHandler = CoreHandlersRegistry.getInstance(node).getHandler( - PROTOCOL_COMMANDS.ECHO - ) - const echoCommand: EchoCommand = { - command: PROTOCOL_COMMANDS.ECHO - } - expect(echoHandler.validate(echoCommand).valid).to.be.equal(true) - // ----------------------------------------- // Stop Node Handler for Admin const stopNodeHandler: StopNodeHandler = CoreHandlersRegistry.getInstance( node - ).getHandler(PROTOCOL_COMMANDS.ECHO) + ).getHandler(PROTOCOL_COMMANDS.STOP_NODE) as StopNodeHandler expect(stopNodeHandler).to.be.not.equal(null) // ----------------------------------------- // Reindex Tx Handler const reindexTxHandler: ReindexTxHandler = CoreHandlersRegistry.getInstance( node - ).getHandler(PROTOCOL_COMMANDS.REINDEX_TX) + ).getHandler(PROTOCOL_COMMANDS.REINDEX_TX) as ReindexTxHandler expect(reindexTxHandler).to.be.not.equal(null) // ----------------------------------------- // Reindex Chain Handler const reindexChainHandler: ReindexChainHandler = CoreHandlersRegistry.getInstance( node - ).getHandler(PROTOCOL_COMMANDS.REINDEX_CHAIN) + ).getHandler(PROTOCOL_COMMANDS.REINDEX_CHAIN) as ReindexChainHandler expect(reindexChainHandler).to.be.not.equal(null) // ----------------------------------------- // CollectFeesHandler const collectFeesHandler: CollectFeesHandler = CoreHandlersRegistry.getInstance( node - ).getHandler(PROTOCOL_COMMANDS.COLLECT_FEES) + ).getHandler(PROTOCOL_COMMANDS.COLLECT_FEES) as CollectFeesHandler expect(collectFeesHandler).to.be.not.equal(null) // ----------------------------------------- // FileInfoHandler @@ -279,17 +270,18 @@ describe('Commands and handlers', () => { expect(getEnvHandler.validate(getEnvCommand).valid).to.be.equal(true) // ----------------------------------------- // ComputeStartHandler - const startEnvHandler: ComputeStartHandler = CoreHandlersRegistry.getInstance( + const startEnvHandler: PaidComputeStartHandler = CoreHandlersRegistry.getInstance( node ).getHandler(PROTOCOL_COMMANDS.COMPUTE_START) - const startEnvCommand: ComputeStartCommand = { + const startEnvCommand: PaidComputeStartCommand = { command: PROTOCOL_COMMANDS.COMPUTE_START, consumerAddress: '', signature: '', nonce: '', environment: '', algorithm: undefined, - dataset: undefined + datasets: undefined, + payment: undefined } expect(startEnvHandler.validate(startEnvCommand).valid).to.be.equal(false) // ----------------------------------------- @@ -341,8 +333,20 @@ describe('Commands and handlers', () => { consumerAddress: 'abcdef', datasets: null, algorithm: undefined, - compute: undefined + payment: undefined, + environment: undefined, + maxJobDuration: 60 } expect(initComputeHandler.validate(computeInitCommand).valid).to.be.equal(false) + // ----------------------------------------- + // JobsHandler + const jobsHandler: GetJobsHandler = CoreHandlersRegistry.getInstance(node).getHandler( + PROTOCOL_COMMANDS.JOBS + ) + const getJobsCommand: GetJobsCommand = { + command: PROTOCOL_COMMANDS.JOBS + } + expect(jobsHandler.validate(getJobsCommand).valid).to.be.equal(true) + // ----------------------------------------- }) }) diff --git a/src/test/unit/compute.test.ts b/src/test/unit/compute.test.ts new file mode 100644 index 000000000..6af149c6a --- /dev/null +++ b/src/test/unit/compute.test.ts @@ -0,0 +1,261 @@ +import { C2DDatabase } from '../../components/database/C2DDatabase.js' +// import { existsEnvironmentVariable, getConfiguration } from '../../utils/config.js' +import { getConfiguration } from '../../utils/config.js' +import { typesenseSchemas } from '../../components/database/TypesenseSchemas.js' +import { + C2DStatusNumber, + C2DStatusText, + ComputeAlgorithm, + ComputeAsset, + // ComputeEnvironment, + // ComputeJob, + DBComputeJob, + RunningPlatform +} from '../../@types/C2D/C2D.js' +// import { computeAsset } from '../data/assets' +import { assert, expect } from 'chai' +import { + convertArrayToString, + convertStringToArray, + STRING_SEPARATOR +} from '../../components/database/sqliteCompute.js' +import os from 'os' +import { + buildEnvOverrideConfig, + OverrideEnvConfig, + setupEnvironment, + tearDownEnvironment, + TEST_ENV_CONFIG_FILE +} from '../utils/utils.js' +import { OceanNodeConfig } from '../../@types/OceanNode.js' +import { ENVIRONMENT_VARIABLES } from '../../utils/constants.js' +import { dockerImageManifest } from '../data/assets.js' +// import { omitDBComputeFieldsFromComputeJob } from '../../components/c2d/index.js' +import { checkManifestPlatform } from '../../components/c2d/compute_engine_docker.js' + +describe('Compute Jobs Database', () => { + let envOverrides: OverrideEnvConfig[] + let config: OceanNodeConfig + let db: C2DDatabase = null + let jobId: string = null + const jobDuration = 60 + const algorithm: ComputeAlgorithm = { + documentId: 'did:op:12345', + serviceId: '0x1828228' + } + const dataset: ComputeAsset = { + documentId: 'did:op:12345', + serviceId: '0x12345abc' + } + + before(async () => { + envOverrides = buildEnvOverrideConfig( + [ENVIRONMENT_VARIABLES.DOCKER_COMPUTE_ENVIRONMENTS], + [ + '[{"socketPath":"/var/run/docker.sock","resources":[{"id":"disk","total":10}],"storageExpiry":604800,"maxJobDuration":3600,"fees":{"1":[{"feeToken":"0x123","prices":[{"id":"cpu","price":1}]}]},"free":{"maxJobDuration":60,"maxJobs":3,"resources":[{"id":"cpu","max":1},{"id":"ram","max":1},{"id":"disk","max":1}]}}]' + ] + ) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) + config = await getConfiguration(true) + db = await new C2DDatabase(config.dbConfig, typesenseSchemas.c2dSchemas) + }) + + it('should create a new C2D Job', async () => { + const job: DBComputeJob = { + owner: '0xe2DD09d719Da89e5a3D0F2549c7E24566e947260', + jobId: null, + dateCreated: null, + dateFinished: null, + status: C2DStatusNumber.JobStarted, + statusText: C2DStatusText.JobStarted, + results: null, + inputDID: ['did:op:1', 'did:op:2', 'did:op:3'], + maxJobDuration: jobDuration, + + // internal structure + clusterHash: 'clusterHash', + configlogURL: 'http://localhost:8001', + publishlogURL: 'http://localhost:8001', + algologURL: 'http://localhost:8001', + outputsURL: 'http://localhost:8001', + stopRequested: false, + algorithm, + assets: [dataset], + isRunning: false, + isStarted: false, + containerImage: 'some container image', + resources: [], + environment: 'some environment', + agreementId: '0xe2DD09d719Da89e5a3D0F2549c7E24566e947260fdc', + payment: { + token: '0x123', + lockTx: '0xe2DD09d719Da89e5a3D0F2549c7E24566e947260fdc', + claimTx: '0xe2DD09d719Da89e5a3D0F2549c7E24566e947260fdc', + chainId: 8996, + cost: 0 + }, + isFree: false, + algoStartTimestamp: '0', + algoStopTimestamp: '0', + algoDuration: 0, + queueMaxWaitTime: 0 + } + + jobId = await db.newJob(job) + assert(jobId, 'Missing jobId identifier') + }) + + it('should get job by jobId', async () => { + const jobs = await db.getJob(jobId) + assert(jobs.length === 1, 'Could not get any job') + assert(jobs[0], 'Job should not be null') + assert(jobs[0].jobId === jobId, 'JobId mismatches') + assert(jobs[0].maxJobDuration === jobDuration, 'Job duration mismatches') + }) + it('should update job', async () => { + const jobs = await db.getJob(jobId) + const job = jobs[0] + // will update some fields + job.status = C2DStatusNumber.PullImage + job.isRunning = true + job.statusText = C2DStatusText.PullImage + + // update on DB + const updates = await db.updateJob(job) + expect(updates).to.be.equal(1) // updated 1 row + const updatedJobs = await db.getJob(jobId) + const updatedJob = updatedJobs[0] + assert(updatedJob, 'Job should not be null') + expect(updatedJob.status).to.be.equal(C2DStatusNumber.PullImage) + expect(updatedJob.isRunning).to.be.equal(true) + expect(updatedJob.statusText).to.be.equal(C2DStatusText.PullImage) + }) + + it('should get running jobs', async () => { + const job: DBComputeJob = { + owner: '0xe2DD09d719Da89e5a3D0F2549c7E24566e947261', + jobId: null, + dateCreated: null, + dateFinished: null, + status: C2DStatusNumber.JobStarted, + statusText: C2DStatusText.JobStarted, + results: null, + inputDID: ['did:op:1', 'did:op:2'], + maxJobDuration: 1, + + // internal structure + clusterHash: 'clusterHash', + configlogURL: 'http://localhost:8000', + publishlogURL: 'http://localhost:8000', + algologURL: 'http://localhost:8000', + outputsURL: 'http://localhost:8000', + stopRequested: false, + algorithm, + assets: [dataset], + environment: 'some environment', + isRunning: false, + isStarted: false, + containerImage: 'another container image', + resources: [], + agreementId: '0xe2DD09d719Da89e5a3D0F2549c7E24566e947260fdc', + payment: { + token: '0x123', + lockTx: '0xe2DD09d719Da89e5a3D0F2549c7E24566e947260fdc', + claimTx: '0xe2DD09d719Da89e5a3D0F2549c7E24566e947260fdc', + chainId: 8996, + cost: 0 + }, + isFree: false, + algoStartTimestamp: '0', + algoStopTimestamp: '0', + algoDuration: 0, + queueMaxWaitTime: 0 + } + + const jobId = await db.newJob(job) + assert(jobId, 'Missing jobId identifier') + const existing = await db.getRunningJobs() + expect(existing.length === 2, 'No running jobs were found!') + + // Create a filter + const withEnv = await db.getRunningJobs(null, 'some environment') + expect(withEnv.length === 0, 'No running jobs were found for this environment') + // delete it + const deleted = await db.deleteJob(jobId) + expect(deleted === true, `Job ${jobId} was not deleted!`) + }) + + it('should delete the job by jobId', async () => { + const deleted = await db.deleteJob(jobId) + expect(deleted === true, `Job ${jobId} was not deleted!`) + }) + + it('should convert array of strings to a string', () => { + const inputDID = ['did:op:1', 'did:op:2', 'did:op:3'] + const expectedStr = + 'did:op:1' + STRING_SEPARATOR + 'did:op:2' + STRING_SEPARATOR + 'did:op:3' + expect(convertArrayToString(inputDID)).to.equal(expectedStr) + }) + + it('should convert concatenated string to a string array', () => { + const expectedArray = ['did:op:1', 'did:op:2', 'did:op:3'] + const str = 'did:op:1' + STRING_SEPARATOR + 'did:op:2' + STRING_SEPARATOR + 'did:op:3' + expect(convertStringToArray(str)).to.deep.equal(expectedArray) + }) + + // it('should convert DBComputeJob to ComputeJob and omit internal DB data', () => { + // const source: any = completeDBComputeJob + // const output: ComputeJob = omitDBComputeFieldsFromComputeJob(source as DBComputeJob) + // console.log('output: ', JSON.stringify(output, null, 2)) + // expect(Object.prototype.hasOwnProperty.call(output, 'clusterHash')).to.be.equal(false) + // expect(Object.prototype.hasOwnProperty.call(output, 'configlogURL')).to.be.equal( + // false + // ) + // expect(Object.prototype.hasOwnProperty.call(output, 'publishlogURL')).to.be.equal( + // false + // ) + // expect(Object.prototype.hasOwnProperty.call(output, 'algologURL')).to.be.equal(false) + // expect(Object.prototype.hasOwnProperty.call(output, 'outputsURL')).to.be.equal(false) + // expect(Object.prototype.hasOwnProperty.call(output, 'algorithm')).to.be.equal(false) + // expect(Object.prototype.hasOwnProperty.call(output, 'assets')).to.be.equal(false) + // expect(Object.prototype.hasOwnProperty.call(output, 'isRunning')).to.be.equal(false) + // expect(Object.prototype.hasOwnProperty.call(output, 'isStarted')).to.be.equal(false) + // expect(Object.prototype.hasOwnProperty.call(output, 'containerImage')).to.be.equal( + // false + // ) + // }) + + it('should check manifest platform against local platform env', () => { + const arch = os.machine() // ex: arm + const platform = os.platform() // ex: linux + const env: RunningPlatform = { + architecture: arch, + os: platform + } + const result: boolean = checkManifestPlatform(dockerImageManifest.platform, env) + // if all defined and a match its OK + if ( + dockerImageManifest.platform.os === env.os && + dockerImageManifest.platform.architecture === env.architecture + ) { + expect(result).to.be.equal(true) + } else { + // oterwise its NOT + expect(result).to.be.equal(false) + } + + // all good anyway, nothing on the manifest + expect(checkManifestPlatform(null, env)).to.be.equal(true) + }) + + it('testing checkAndFillMissingResources', async function () { + // TO DO + }) + it('testing checkIfResourcesAreAvailable', async function () { + // TO DO + }) + + after(async () => { + await tearDownEnvironment(envOverrides) + }) +}) diff --git a/src/test/unit/config.test.ts b/src/test/unit/config.test.ts new file mode 100644 index 000000000..8a2b028ad --- /dev/null +++ b/src/test/unit/config.test.ts @@ -0,0 +1,119 @@ +import { expect } from 'chai' +import { OceanNodeConfig } from '../../@types/OceanNode.js' +import { getConfiguration, loadConfigFromFile } from '../../utils/config.js' +import { + OverrideEnvConfig, + TEST_ENV_CONFIG_PATH, + buildEnvOverrideConfig, + setupEnvironment +} from '../utils/utils.js' +import { ENVIRONMENT_VARIABLES } from '../../utils/constants.js' + +let config: OceanNodeConfig +describe('Should validate configuration from JSON', () => { + let envOverrides: OverrideEnvConfig[] + before(async () => { + envOverrides = buildEnvOverrideConfig( + [ENVIRONMENT_VARIABLES.DB_TYPE, ENVIRONMENT_VARIABLES.DB_URL], + ['typesense', 'http://localhost:8108/?apiKey=xyz'] + ) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_PATH, envOverrides) + config = await getConfiguration(true) + }) + + it('should get indexer networks from config', () => { + expect(Object.keys(config.indexingNetworks).length).to.be.equal(1) + expect(config.indexingNetworks['8996']).to.not.equal(undefined) + expect(config.indexingNetworks['8996'].chainId).to.be.equal(8996) + expect(config.indexingNetworks['8996'].rpc).to.be.equal('http://127.0.0.1:8545') + expect(config.indexingNetworks['8996'].network).to.be.equal('development') + expect(config.indexingNetworks['8996'].chunkSize).to.be.equal(100) + }) + + it('should have indexer', () => { + expect(config.hasIndexer).to.be.equal(true) + expect(config.dbConfig).to.not.be.equal(null) + // it is exported in the env vars, so it should overwrite the config.json + expect(config.dbConfig.dbType).to.be.equal('typesense') + const configFile = loadConfigFromFile(process.env.CONFIG_PATH) + expect(config.dbConfig.dbType).to.not.be.equal(configFile.dbConfig.dbType) + expect(config.dbConfig.url).to.be.equal('http://localhost:8108/?apiKey=xyz') + }) + + it('should have HTTP', () => { + expect(config.hasHttp).to.be.equal(true) + expect(config.httpPort).to.be.equal(8001) + }) + + it('should have P2P', () => { + expect(config.hasP2P).to.be.equal(true) + expect(config.p2pConfig).to.not.be.equal(null) + expect(config.p2pConfig.bootstrapNodes).to.not.be.equal(null) + expect(config.p2pConfig.bootstrapNodes.length).to.be.equal(0) + }) + it('should have defaults set', () => { + expect(config.isBootstrap).to.be.equal(false) + expect(config.validateUnsignedDDO).to.be.equal(true) + }) + after(() => { + delete process.env.CONFIG_PATH + delete process.env.PRIVATE_KEY + }) +}) + +describe('Should validate P2P config from environment variables', () => { + let config: OceanNodeConfig + let envOverrides: OverrideEnvConfig[] + + before(async () => { + envOverrides = buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.DB_TYPE, + ENVIRONMENT_VARIABLES.DB_URL, + ENVIRONMENT_VARIABLES.P2P_ipV4BindAddress, + ENVIRONMENT_VARIABLES.P2P_ipV4BindTcpPort, + ENVIRONMENT_VARIABLES.P2P_ipV6BindAddress, + ENVIRONMENT_VARIABLES.P2P_MIN_CONNECTIONS, + ENVIRONMENT_VARIABLES.P2P_MAX_CONNECTIONS + ], + [ + 'typesense', + 'http://localhost:8108/?apiKey=xyz', + '127.0.0.1', + '9999', + '::2', + '5', + '500' + ] + ) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_PATH, envOverrides) + config = await getConfiguration(true) + }) + + it('should override P2P config values from environment variables', () => { + expect(config.p2pConfig).to.not.be.equal(null) + expect(config.p2pConfig.ipV4BindAddress).to.be.equal('127.0.0.1') + expect(config.p2pConfig.ipV4BindTcpPort).to.be.equal(9999) + expect(config.p2pConfig.ipV6BindAddress).to.be.equal('::2') + expect(config.p2pConfig.minConnections).to.be.equal(5) + expect(config.p2pConfig.maxConnections).to.be.equal(500) + }) + + it('should maintain non-overridden P2P config values from config.json', () => { + expect(config.p2pConfig.enableIPV4).to.be.equal(true) + expect(config.p2pConfig.enableIPV6).to.be.equal(true) + expect(config.p2pConfig.upnp).to.be.equal(true) + expect(config.p2pConfig.autoNat).to.be.equal(true) + expect(config.p2pConfig.bootstrapNodes).to.not.be.equal(null) + }) + + after(() => { + delete process.env.CONFIG_PATH + delete process.env.PRIVATE_KEY + delete process.env[ENVIRONMENT_VARIABLES.P2P_ipV4BindAddress.name] + delete process.env[ENVIRONMENT_VARIABLES.P2P_ipV4BindTcpPort.name] + delete process.env[ENVIRONMENT_VARIABLES.P2P_ipV6BindAddress.name] + delete process.env[ENVIRONMENT_VARIABLES.P2P_MIN_CONNECTIONS.name] + delete process.env[ENVIRONMENT_VARIABLES.P2P_MAX_CONNECTIONS.name] + }) +}) diff --git a/src/test/unit/credentials.test.ts b/src/test/unit/credentials.test.ts index 1a41890cc..1becfa0fa 100644 --- a/src/test/unit/credentials.test.ts +++ b/src/test/unit/credentials.test.ts @@ -1,8 +1,34 @@ import { expect } from 'chai' -import { checkCredentials } from '../../utils/credentials.js' -import { Credentials } from '../../@types/DDO/Credentials.js' +import { + areKnownCredentialTypes, + checkCredentials, + hasAddressMatchAllRule +} from '../../utils/credentials.js' +import { + buildEnvOverrideConfig, + OverrideEnvConfig, + setupEnvironment, + tearDownEnvironment, + TEST_ENV_CONFIG_FILE +} from '../utils/utils.js' +import { ENVIRONMENT_VARIABLES } from '../../utils/constants.js' +import { homedir } from 'os' +import { Credentials, CREDENTIALS_TYPES } from '@oceanprotocol/ddo-js' + +let envOverrides: OverrideEnvConfig[] describe('credentials', () => { + before(async () => { + envOverrides = buildEnvOverrideConfig( + [ENVIRONMENT_VARIABLES.RPCS, ENVIRONMENT_VARIABLES.ADDRESS_FILE], + [ + '{ "8996":{ "rpc":"http://172.0.0.1:8545", "chainId": 8996, "network": "development", "chunkSize": 100 }}', + `${homedir}/.ocean/ocean-contracts/artifacts/address.json` + ] + ) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) + }) + it('should allow access with undefined or empty credentials', () => { const credentialsUndefined: Credentials = undefined const consumerAddress = '0x123' @@ -23,9 +49,10 @@ describe('credentials', () => { }) it('should allow access with empty values in deny lists', () => { const credentials: Credentials = { + allow: [], deny: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: [] } ] @@ -34,11 +61,29 @@ describe('credentials', () => { const accessGranted = checkCredentials(credentials, consumerAddress) expect(accessGranted).to.equal(true) }) + + it('should allow access with "accessList" credentials type', () => { + const consumerAddress = '0x123' + const credentials: Credentials = { + allow: [], + deny: [ + { + type: CREDENTIALS_TYPES.ACCESS_LIST, + values: [consumerAddress] + } + ] + } + + const accessGranted = checkCredentials(credentials, consumerAddress) + expect(accessGranted).to.equal(true) + }) + it('should deny access with empty values in allow lists', () => { const credentials: Credentials = { + deny: [], allow: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: [] } ] @@ -49,9 +94,10 @@ describe('credentials', () => { }) it('should allow access with address in allow list', () => { const credentials: Credentials = { + deny: [], allow: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: ['0x123'] } ] @@ -62,9 +108,10 @@ describe('credentials', () => { }) it('should allow access with address not in deny list', () => { const credentials: Credentials = { + allow: [], deny: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: ['0x456'] } ] @@ -74,16 +121,16 @@ describe('credentials', () => { expect(accessGranted).to.equal(true) }) it('should deny access with address in deny list', () => { - const credentials: Credentials = { + const credentials: any = { allow: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: [] } ], deny: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: ['0x123'] } ] @@ -93,16 +140,16 @@ describe('credentials', () => { expect(accessGranted).to.equal(false) }) it('should deny access with address not in allow list', () => { - const credentials: Credentials = { + const credentials: any = { allow: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: ['0x456'] } ], deny: [ { - type: 'address', + type: CREDENTIALS_TYPES.ADDRESS, values: [] } ] @@ -111,4 +158,83 @@ describe('credentials', () => { const accessGranted = checkCredentials(credentials, consumerAddress) expect(accessGranted).to.equal(false) }) + + it('should check correctly known credentials types', () => { + const credentials: any = { + allow: [], + deny: [ + { + type: 'unknow_type', + values: ['0x456'] + } + ] + } + const isKnownType1 = areKnownCredentialTypes(credentials) + expect(isKnownType1).to.equal(false) + + const credentialsOk: Credentials = { + deny: [ + { + type: CREDENTIALS_TYPES.ADDRESS, + values: ['0x456'] + } + ], + allow: [ + { + type: CREDENTIALS_TYPES.ACCESS_LIST, + values: ['0x456'] + }, + { + type: CREDENTIALS_TYPES.ADDRESS, + values: ['0x678'] + } + ] + } + const isKnownType2 = areKnownCredentialTypes(credentialsOk) + expect(isKnownType2).to.equal(true) + + const credentialsNOk: any = { + deny: [ + { + type: CREDENTIALS_TYPES.ADDRESS, + values: ['0x456'] + } + ], + allow: [ + { + type: 'not_valid_type', + values: ['0x456'] + } + ] + } + const isKnownType3 = areKnownCredentialTypes(credentialsNOk) + expect(isKnownType3).to.equal(false) + }) + + it('should check match all (*) rules', () => { + const creds = { + credentials: { + allow: [ + { + type: CREDENTIALS_TYPES.ADDRESS, + values: ['*'] + } + ], + deny: [ + { + type: CREDENTIALS_TYPES.ADDRESS, + values: ['0x2222', '0x333'] + } + ] + } + } + expect(hasAddressMatchAllRule(creds.credentials.allow)).to.be.equal(true) + const creds2 = structuredClone(creds) + creds2.credentials.allow[0].values = ['0x2222', '0x333'] + expect(hasAddressMatchAllRule(creds2.credentials.allow)).to.be.equal(false) + }) + + after(async () => { + await tearDownEnvironment(envOverrides) + }) }) diff --git a/src/test/unit/crypt.test.ts b/src/test/unit/crypt.test.ts index d6f1f10ad..5624ee001 100644 --- a/src/test/unit/crypt.test.ts +++ b/src/test/unit/crypt.test.ts @@ -1,8 +1,28 @@ import { expect } from 'chai' import { decrypt, encrypt } from '../../utils/crypt.js' import { EncryptMethod } from '../../@types/fileObject.js' +import { + buildEnvOverrideConfig, + OverrideEnvConfig, + setupEnvironment, + tearDownEnvironment, + TEST_ENV_CONFIG_FILE +} from '../utils/utils.js' +import { ENVIRONMENT_VARIABLES } from '../../utils/constants.js' +import { homedir } from 'os' describe('crypt', () => { + let envOverrides: OverrideEnvConfig[] + before(async () => { + envOverrides = buildEnvOverrideConfig( + [ENVIRONMENT_VARIABLES.RPCS, ENVIRONMENT_VARIABLES.ADDRESS_FILE], + [ + '{ "8996":{ "rpc":"http://172.0.0.1:8545", "chainId": 8996, "network": "development", "chunkSize": 100 }}', + `${homedir}/.ocean/ocean-contracts/artifacts/address.json` + ] + ) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) + }) it('should encrypt/decrypt AES', async () => { const data = Uint8Array.from(Buffer.from('ocean')) const encryptedData = await encrypt(data, EncryptMethod.AES) @@ -15,4 +35,7 @@ describe('crypt', () => { const decryptedData = await decrypt(encryptedData, EncryptMethod.ECIES) expect(Uint8Array.from(decryptedData)).to.deep.equal(data) }) + after(async () => { + await tearDownEnvironment(envOverrides) + }) }) diff --git a/src/test/unit/download.test.ts b/src/test/unit/download.test.ts index 49cfd178f..5a57d4a3f 100644 --- a/src/test/unit/download.test.ts +++ b/src/test/unit/download.test.ts @@ -10,6 +10,7 @@ import { Readable } from 'stream' import { streamToString } from '../../utils/util.js' import { OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, buildEnvOverrideConfig, setupEnvironment, tearDownEnvironment @@ -17,9 +18,8 @@ import { import { decrypt } from '../../utils/crypt.js' import { validateFilesStructure } from '../../components/core/handler/downloadHandler.js' import { AssetUtils, isConfidentialChainDDO } from '../../utils/asset.js' -import { DDO } from '../../@types/DDO/DDO.js' -import { Service } from '../../@types/DDO/Service.js' import { DEVELOPMENT_CHAIN_ID, KNOWN_CONFIDENTIAL_EVMS } from '../../utils/address.js' +import { DDO } from '@oceanprotocol/ddo-js' let envOverrides: OverrideEnvConfig[] let config: OceanNodeConfig @@ -32,10 +32,10 @@ describe('Should validate files structure for download', () => { [ENVIRONMENT_VARIABLES.PRIVATE_KEY], ['0x3634cc4a3d2694a1186a7ce545f149e022eea103cc254d18d08675104bb4b5ac'] ) - envOverrides = await setupEnvironment(null, envOverrides) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) config = await getConfiguration(true) - db = await new Database(config.dbConfig) - oceanNode = OceanNode.getInstance(db) + db = await Database.init(config.dbConfig) + oceanNode = OceanNode.getInstance(config, db) }) const ddoObj: DDO = { @@ -65,8 +65,7 @@ describe('Should validate files structure for download', () => { serviceEndpoint: 'http://127.0.0.1:8001', timeout: 86400 } - ], - event: {} + ] } const assetURL = { @@ -110,7 +109,7 @@ describe('Should validate files structure for download', () => { const decriptedFileObject: any = decryptedFileArray.files expect(decriptedFileObject[0]).to.be.deep.equal(assetURL.files[0]) // validate the structure of the files object - const service: Service = AssetUtils.getServiceByIndex(ddoObj, 0) + const service = AssetUtils.getServiceByIndex(ddoObj, 0) expect(validateFilesStructure(ddoObj, service, decryptedFileArray)).to.be.equal(true) }) @@ -118,12 +117,12 @@ describe('Should validate files structure for download', () => { const otherNFTAddress = '0x3b7aE751aBA144e9A0ffc5A5C1D00bB4055A7bDc' const otherDatatokenAddress = '0x32b24528675172841d89BBA7504A930B049aBd30' const decryptedFileArray = await getDecryptedData() - const otherDDOSameFiles: DDO = ddoObj + const otherDDOSameFiles = structuredClone(ddoObj) // just change nft address otherDDOSameFiles.nftAddress = otherNFTAddress otherDDOSameFiles.services[0].datatokenAddress = otherDatatokenAddress - const service: Service = AssetUtils.getServiceByIndex(otherDDOSameFiles, 0) + const service = AssetUtils.getServiceByIndex(otherDDOSameFiles, 0) // its the same service files structure (same encrypted data), // but its not the same ddo so there is no matching expect( @@ -154,7 +153,7 @@ describe('Should validate files structure for download', () => { }) it('should check if DDO service files is missing or empty (exected for confidential EVM, dt4)', () => { - const otherDDOConfidential: DDO = structuredClone(ddoObj) + const otherDDOConfidential = structuredClone(ddoObj) expect( isConfidentialChainDDO(KNOWN_CONFIDENTIAL_EVMS[0], otherDDOConfidential.services[0]) ).to.be.equal(false) @@ -168,7 +167,10 @@ describe('Should validate files structure for download', () => { // not confidential evm anymore expect( - isConfidentialChainDDO(DEVELOPMENT_CHAIN_ID, otherDDOConfidential.services[0]) + isConfidentialChainDDO( + BigInt(DEVELOPMENT_CHAIN_ID), + otherDDOConfidential.services[0] + ) ).to.be.equal(false) }) diff --git a/src/test/unit/indexer/indexer.test.ts b/src/test/unit/indexer/indexer.test.ts index 3a172a506..daddd3061 100644 --- a/src/test/unit/indexer/indexer.test.ts +++ b/src/test/unit/indexer/indexer.test.ts @@ -1,24 +1,56 @@ import { assert, expect } from 'chai' import { describe, it } from 'mocha' import { OceanIndexer } from '../../../components/Indexer/index.js' -import { getConfiguration } from '../../../utils/index.js' +import { ENVIRONMENT_VARIABLES, getConfiguration } from '../../../utils/index.js' import { Database } from '../../../components/database/index.js' import { OceanNodeConfig } from '../../../@types/OceanNode.js' import { hasValidDBConfiguration, isReachableConnection } from '../../../utils/database.js' +import { + buildEnvOverrideConfig, + OverrideEnvConfig, + setupEnvironment, + tearDownEnvironment, + TEST_ENV_CONFIG_FILE +} from '../../utils/utils.js' +import sinon, { SinonSandbox } from 'sinon' describe('OceanIndexer', () => { + let envOverrides: OverrideEnvConfig[] let oceanIndexer: OceanIndexer let mockDatabase: Database let config: OceanNodeConfig + let sandbox: SinonSandbox before(async () => { + envOverrides = buildEnvOverrideConfig( + [ENVIRONMENT_VARIABLES.RPCS], + [ + '{ "8996":{ "rpc":"http://127.0.0.1:8545", "fallbackRPCs": ["http://127.0.0.3:8545","http://127.0.0.1:8545"], "chainId": 8996, "network": "development", "chunkSize": 100 }}' + ] + ) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) config = await getConfiguration(true) - mockDatabase = await new Database(config.dbConfig) + sandbox = sinon.createSandbox() + sandbox.stub(Database, 'init').resolves({ + nonce: {}, + c2d: {}, + authToken: {}, + sqliteConfig: {}, + ddo: {}, + indexer: {}, + logs: {}, + order: {}, + ddoState: {}, + getConfig: () => config.dbConfig + } as any) }) it('should start threads and handle worker events', async () => { + mockDatabase = await Database.init(config.dbConfig) + console.log('mockDatabase: ', mockDatabase) + console.log('config.dbConfig: ', JSON.stringify(config.dbConfig)) oceanIndexer = new OceanIndexer(mockDatabase, config.supportedNetworks) assert(oceanIndexer, 'indexer should not be null') expect(oceanIndexer.getDatabase().getConfig()).to.be.equal(mockDatabase.getConfig()) @@ -37,6 +69,42 @@ describe('OceanIndexer', () => { } // there are no worker threads available - expect(oceanIndexer.stopAllThreads()).to.be.equal(false) + // expect(oceanIndexer.stopAllThreads()).to.be.equal(false) + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() + }) + after(async () => { + await tearDownEnvironment(envOverrides) + sandbox.restore() }) }) diff --git a/src/test/unit/indexer/validation.test.ts b/src/test/unit/indexer/validation.test.ts index dda552f0b..9bcc1cbc3 100644 --- a/src/test/unit/indexer/validation.test.ts +++ b/src/test/unit/indexer/validation.test.ts @@ -1,35 +1,75 @@ import { DDOExample, ddov5, ddov7, ddoValidationSignature } from '../../data/ddo.js' -import { - getValidationSignature, - validateObject -} from '../../../components/core/utils/validateDdoHandler.js' -import { ENVIRONMENT_VARIABLES } from '../../../utils/index.js' - +import { getValidationSignature } from '../../../components/core/utils/validateDdoHandler.js' +import { ENVIRONMENT_VARIABLES, getConfiguration } from '../../../utils/index.js' import { expect } from 'chai' import { setupEnvironment, tearDownEnvironment, buildEnvOverrideConfig, - OverrideEnvConfig + OverrideEnvConfig, + getMockSupportedNetworks, + TEST_ENV_CONFIG_FILE } from '../../utils/utils.js' +import { DDOManager, DDO } from '@oceanprotocol/ddo-js' +import { ValidateDDOHandler } from '../../../components/core/handler/ddoHandler.js' +import { OceanNode } from '../../../OceanNode.js' +import { PROTOCOL_COMMANDS } from '../../../utils/constants.js' +import { RPCS } from '../../../@types/blockchain.js' +import { Database } from '../../../components/database/index.js' +import { OceanNodeConfig } from '../../../@types/OceanNode.js' +import sinon, { SinonSandbox } from 'sinon' + +describe('Schema validation tests', () => { + const mockSupportedNetworks: RPCS = getMockSupportedNetworks() -describe('Schema validation tests', async () => { let envOverrides: OverrideEnvConfig[] - envOverrides = buildEnvOverrideConfig( - [ - ENVIRONMENT_VARIABLES.PRIVATE_KEY, - ENVIRONMENT_VARIABLES.IPFS_GATEWAY, - ENVIRONMENT_VARIABLES.ARWEAVE_GATEWAY, - ENVIRONMENT_VARIABLES.RPCS - ], - [ - '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', - 'https://ipfs.io/', - 'https://arweave.net/', - '{ "1": "https://rpc.eth.gateway.fm", "137": "https://polygon.meowrpc.com" }' - ] - ) - envOverrides = await setupEnvironment(null, envOverrides) + let mockDatabase: Database + let config: OceanNodeConfig + let oceanNode: OceanNode + let sandbox: SinonSandbox + + // For token validation, please check integration test cases + before(async () => { + envOverrides = buildEnvOverrideConfig( + [ + ENVIRONMENT_VARIABLES.VALIDATE_UNSIGNED_DDO, + ENVIRONMENT_VARIABLES.PRIVATE_KEY, + ENVIRONMENT_VARIABLES.IPFS_GATEWAY, + ENVIRONMENT_VARIABLES.ARWEAVE_GATEWAY, + ENVIRONMENT_VARIABLES.RPCS + ], + [ + 'false', + '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', + 'https://ipfs.io/', + 'https://arweave.net/', + JSON.stringify(mockSupportedNetworks) + ] + ) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) + config = await getConfiguration(true) + sandbox = sinon.createSandbox() + sandbox.stub(Database, 'init').resolves({ + nonce: {}, + c2d: {}, + authToken: {}, + sqliteConfig: {}, + ddo: {}, + indexer: {}, + logs: {}, + order: {}, + ddoState: {} + } as any) + mockDatabase = await Database.init(config.dbConfig) + oceanNode = await OceanNode.getInstance( + config, + mockDatabase, + undefined, + undefined, + undefined, + true + ) + }) after(() => { // Restore original local setup / env variables after test @@ -37,29 +77,32 @@ describe('Schema validation tests', async () => { }) it('should pass the validation on version 4.1.0', async () => { - const validationResult = await validateObject(DDOExample, 137, DDOExample.nftAddress) + const ddoInstance = DDOManager.getDDOClass(DDOExample) + const validationResult = await ddoInstance.validate() expect(validationResult[0]).to.eql(true) expect(validationResult[1]).to.eql({}) }) + it('should not pass due to invalid metadata.created on version 4.1.0', async () => { const copy = JSON.parse(JSON.stringify(DDOExample)) copy['@context'] = ['https://w3id.org/did/v1'] delete copy.metadata.created - const validationResult = await validateObject(copy, 137, copy.nftAddress) + const ddoInstance = DDOManager.getDDOClass(copy) + const validationResult = await ddoInstance.validate() expect(validationResult[0]).to.eql(false) }) // TO DO after fixing regex for created & updated: it('should not pass due to invalid ISO timestamp on version 4.1.0', async () => { + it('4.5.0 should pass the validation without service', async () => { - const validationResult = await validateObject(ddov5, 137, ddov5.nftAddress) + const ddoInstance = DDOManager.getDDOClass(ddov5) + const validationResult = await ddoInstance.validate() expect(validationResult[0]).to.eql(true) expect(validationResult[1]).to.eql({}) }) + it('should pass the validation and return signature', async () => { - const validationResult = await validateObject( - ddoValidationSignature, - 137, - ddov5.nftAddress - ) + const ddoInstance = DDOManager.getDDOClass(ddoValidationSignature) + const validationResult = await ddoInstance.validate() expect(validationResult[0]).to.eql(true) expect(validationResult[1]).to.eql({}) const signatureResult = await getValidationSignature( @@ -75,7 +118,8 @@ describe('Schema validation tests', async () => { }) it('should pass the validation on version 4.7.0', async () => { - const validationResult = await validateObject(ddov7, 137, ddov7.nftAddress) + const ddoInstance = DDOManager.getDDOClass(ddov7) + const validationResult = await ddoInstance.validate() console.log('Validation 4.7.0 result: ', validationResult) expect(validationResult[0]).to.eql(true) expect(validationResult[1]).to.eql({}) @@ -84,8 +128,42 @@ describe('Schema validation tests', async () => { it('should pass the validation on version 4.7.0 without credentials', async () => { const newDDO = structuredClone(ddov7) delete newDDO.services[0].credentials - const validationResult = await validateObject(newDDO, 137, newDDO.nftAddress) + const ddoInstance = DDOManager.getDDOClass(newDDO) + const validationResult = await ddoInstance.validate() expect(validationResult[0]).to.eql(true) expect(validationResult[1]).to.eql({}) }) + + it('should fail validation when signature is missing', async () => { + const handler = new ValidateDDOHandler(oceanNode) + const ddoInstance = DDOManager.getDDOClass(DDOExample) + const task = { + ddo: ddoInstance.getDDOData() as DDO, + publisherAddress: '0x8F292046bb73595A978F4e7A131b4EBd03A15e8a', + nonce: '123456', + command: PROTOCOL_COMMANDS.VALIDATE_DDO + } + + const result = await handler.handle(task) + expect(result.status.httpStatus).to.equal(401) + }) + + it('should fail validation when signature is invalid', async () => { + const handler = new ValidateDDOHandler(oceanNode) + const ddoInstance = DDOManager.getDDOClass(DDOExample) + const ddo: DDO = { + ...(ddoInstance.getDDOData() as DDO) + } + const task = { + ddo, + publisherAddress: '0x8F292046bb73595A978F4e7A131b4EBd03A15e8a', + nonce: '123456', + signature: '0xInvalidSignature', + command: PROTOCOL_COMMANDS.VALIDATE_DDO + } + + const result = await handler.handle(task) + + expect(result.status.httpStatus).to.equal(401) + }) }) diff --git a/src/test/unit/indexer/version.test.ts b/src/test/unit/indexer/version.test.ts new file mode 100644 index 000000000..a2055ccf4 --- /dev/null +++ b/src/test/unit/indexer/version.test.ts @@ -0,0 +1,60 @@ +import { assert, expect } from 'chai' +import { describe, it } from 'mocha' +import { + compareVersions, + isReindexingNeeded +} from '../../../components/Indexer/version.js' + +describe('Version utilities', () => { + describe('compareVersions', () => { + it('should return 0 for equal versions', () => { + expect(compareVersions('1.0.0', '1.0.0')).to.equal(0) + expect(compareVersions('2.3.1', '2.3.1')).to.equal(0) + }) + + it('should return -1 when first version is less than second', () => { + expect(compareVersions('1.0.0', '1.0.1')).to.equal(-1) + expect(compareVersions('1.9.9', '2.0.0')).to.equal(-1) + expect(compareVersions('2.3.0', '2.3.1')).to.equal(-1) + expect(compareVersions('0.2.1', '0.2.2')).to.equal(-1) + }) + + it('should return 1 when first version is greater than second', () => { + expect(compareVersions('1.0.1', '1.0.0')).to.equal(1) + expect(compareVersions('2.0.0', '1.9.9')).to.equal(1) + expect(compareVersions('2.3.1', '2.3.0')).to.equal(1) + }) + + it('should handle versions with different number of segments', () => { + expect(compareVersions('1.0', '1.0.0')).to.equal(0) + expect(compareVersions('1.0.0.0', '1.0.0')).to.equal(0) + expect(compareVersions('1.0', '1.0.1')).to.equal(-1) + expect(compareVersions('1.1', '1.0.9')).to.equal(1) + }) + }) + + describe('isReindexingNeeded', () => { + it('should return true if dbVersion is null', () => { + assert(isReindexingNeeded('1.0.0', null, '0.9.0') === true) + }) + + it('should return true if dbVersion is less than minVersion', () => { + assert(isReindexingNeeded('1.0.0', '0.1.0', '0.2.0') === true) + assert(isReindexingNeeded('0.3.0', '0.2.1', '0.2.2') === true) + }) + + it('should return false if dbVersion is equal to minVersion', () => { + assert(isReindexingNeeded('1.0.0', '0.2.0', '0.2.0') === false) + }) + + it('should return false if dbVersion is greater than minVersion', () => { + assert(isReindexingNeeded('1.0.0', '0.3.0', '0.2.0') === false) + }) + + it('should throw error if currentVersion is less than minVersion', () => { + expect(() => isReindexingNeeded('0.1.0', '0.2.0', '0.2.0')).to.throw( + 'Current version 0.1.0 is less than minimum required version 0.2.0' + ) + }) + }) +}) diff --git a/src/test/unit/logging.test.ts b/src/test/unit/logging.test.ts index 0d2942ffd..89fd35923 100644 --- a/src/test/unit/logging.test.ts +++ b/src/test/unit/logging.test.ts @@ -5,6 +5,7 @@ import { expect } from 'chai' import { DEFAULT_TEST_TIMEOUT, OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, buildEnvOverrideConfig, setupEnvironment, tearDownEnvironment @@ -25,7 +26,7 @@ describe('Logger instances and transports tests', async () => { before(() => {}) // need to do it first envOverrides = await setupEnvironment( - null, + TEST_ENV_CONFIG_FILE, buildEnvOverrideConfig( [ ENVIRONMENT_VARIABLES.NODE_ENV, @@ -58,7 +59,7 @@ describe('Logger instances and transports tests', async () => { // will build the DB transport layer const config = await getConfiguration(true) // eslint-disable-next-line no-unused-vars - const DB = await new Database(config.dbConfig) + const DB = await Database.init(config.dbConfig) // Could generate Typesene error if DB is not running, but does not matter for this test OCEAN_NODE_LOGGER.logMessage('Should build DB transport layer') diff --git a/src/test/unit/networking.test.ts b/src/test/unit/networking.test.ts index 36e4a2a19..d9c98da95 100644 --- a/src/test/unit/networking.test.ts +++ b/src/test/unit/networking.test.ts @@ -1,12 +1,16 @@ import { - DEFAULT_RATE_LIMIT_PER_SECOND, + DEFAULT_RATE_LIMIT_PER_MINUTE, + // DEFAULT_MAX_CONNECTIONS_PER_MINUTE, ENVIRONMENT_VARIABLES, PROTOCOL_COMMANDS, - getConfiguration + getConfiguration, + CONNECTION_HISTORY_DELETE_THRESHOLD } from '../../utils/index.js' import { expect } from 'chai' import { + DEFAULT_TEST_TIMEOUT, OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, buildEnvOverrideConfig, setupEnvironment, tearDownEnvironment @@ -68,7 +72,7 @@ describe('Test available network interfaces', () => { null, buildEnvOverrideConfig( [ENVIRONMENT_VARIABLES.INTERFACES], - [JSON.stringify(['p2p'])] + [JSON.stringify(['P2P'])] ) ) const interfaces = JSON.parse(process.env.INTERFACES) as string[] @@ -84,7 +88,7 @@ describe('Test available network interfaces', () => { null, buildEnvOverrideConfig( [ENVIRONMENT_VARIABLES.INTERFACES], - [JSON.stringify(['http'])] + [JSON.stringify(['HTTP'])] ) ) const interfaces = JSON.parse(process.env.INTERFACES) as string[] @@ -105,7 +109,7 @@ describe('Test rate limitations and deny list defaults', () => { // const node: OceanNode = OceanNode.getInstance() before(async () => { envOverrides = buildEnvOverrideConfig( - [ENVIRONMENT_VARIABLES.RATE_DENY_LIST, ENVIRONMENT_VARIABLES.MAX_REQ_PER_SECOND], + [ENVIRONMENT_VARIABLES.RATE_DENY_LIST, ENVIRONMENT_VARIABLES.MAX_REQ_PER_MINUTE], [undefined, undefined] ) await setupEnvironment(null, envOverrides) @@ -115,7 +119,7 @@ describe('Test rate limitations and deny list defaults', () => { const config = await getConfiguration(true) expect(config.denyList.ips).to.be.length(0) expect(config.denyList.peers).to.be.length(0) - expect(config.rateLimit).to.be.equal(DEFAULT_RATE_LIMIT_PER_SECOND) + expect(config.rateLimit).to.be.equal(DEFAULT_RATE_LIMIT_PER_MINUTE) }) // put it back @@ -132,7 +136,7 @@ describe('Test rate limitations and deny list settings', () => { [ ENVIRONMENT_VARIABLES.PRIVATE_KEY, ENVIRONMENT_VARIABLES.RATE_DENY_LIST, - ENVIRONMENT_VARIABLES.MAX_REQ_PER_SECOND + ENVIRONMENT_VARIABLES.MAX_REQ_PER_MINUTE ], [ '0xcb345bd2b11264d523ddaf383094e2675c420a17511c3102a53817f13474a7ff', @@ -143,7 +147,7 @@ describe('Test rate limitations and deny list settings', () => { 3 ] ) - await setupEnvironment(null, envOverrides) + await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) }) it('should read deny list of other peers and ips', async () => { @@ -183,13 +187,12 @@ describe('Test rate limitations and deny list settings', () => { const ips = ['127.0.0.2', '127.0.0.3', '127.0.0.4', '127.0.0.5'] const rateLimitResponses = [] + const statusHandler: StatusHandler = CoreHandlersRegistry.getInstance( + node + ).getHandler(PROTOCOL_COMMANDS.STATUS) for (let i = 0; i < ips.length; i++) { node.setRemoteCaller(ips[i]) - const statusHandler: StatusHandler = CoreHandlersRegistry.getInstance( - node - ).getHandler(PROTOCOL_COMMANDS.STATUS) - const rateResp = await statusHandler.checkRateLimit() rateLimitResponses.push(rateResp) } @@ -197,6 +200,37 @@ describe('Test rate limitations and deny list settings', () => { // should have 4 valid responses expect(filtered.length).to.be.equal(ips.length) }) + + it('Test global rate limit, clear map after MAX (handler level) ', async function () { + // after more than CONNECTION_HISTORY_DELETE_THRESHOLD connections the map will be cleared + this.timeout(DEFAULT_TEST_TIMEOUT * 3) + let originalIPPiece = '127.0.' + + const rateLimitResponses = [] + + const statusHandler: StatusHandler = CoreHandlersRegistry.getInstance( + node + ).getHandler(PROTOCOL_COMMANDS.STATUS) + + const aboveLimit = 20 + for (let i = 0, x = 0; i < CONNECTION_HISTORY_DELETE_THRESHOLD + aboveLimit; i++) { + const ip = originalIPPiece + x // start at 127.0.0.2 + node.setRemoteCaller(ip) + const rateResp = await statusHandler.checkRateLimit() + rateLimitResponses.push(rateResp) + x++ + // start back + if (x > 254) { + x = 0 + originalIPPiece = '127.0.0.' // next piece + } + } + // it should clear the history after CONNECTION_HISTORY_DELETE_THRESHOLD + expect(statusHandler.getOceanNode().getRequestMapSize()).to.be.lessThanOrEqual( + aboveLimit + ) + }) + after(async () => { await tearDownEnvironment(envOverrides) }) diff --git a/src/test/unit/ocean.test.ts b/src/test/unit/ocean.test.ts index 3da38e0be..9b13a1c10 100644 --- a/src/test/unit/ocean.test.ts +++ b/src/test/unit/ocean.test.ts @@ -8,10 +8,12 @@ import { ENVIRONMENT_VARIABLES, getConfiguration } from '../../utils/index.js' import { expect } from 'chai' import { OverrideEnvConfig, + TEST_ENV_CONFIG_FILE, buildEnvOverrideConfig, setupEnvironment, tearDownEnvironment } from '../utils/utils.js' +import { sleep } from '../../utils/util.js' let envOverrides: OverrideEnvConfig[] @@ -33,14 +35,14 @@ describe('Status command tests', async () => { JSON.stringify([1, 137]) ] ) - envOverrides = await setupEnvironment(null, envOverrides) + envOverrides = await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) // because of this const config = await getConfiguration(true) - const db = await new Database(config.dbConfig) + const db = await Database.init(config.dbConfig) const oceanP2P = new OceanP2P(config, db) const oceanIndexer = new OceanIndexer(db, config.indexingNetworks) const oceanProvider = new OceanProvider(db) - const oceanNode = OceanNode.getInstance(db, oceanP2P) + const oceanNode = OceanNode.getInstance(config, db, oceanP2P) after(async () => { // Restore original local setup / env variables after test @@ -48,7 +50,8 @@ describe('Status command tests', async () => { await oceanIndexer.stopAllThreads() }) - it('Ocean Node instance', () => { + it('Ocean Node instance', async () => { + await sleep(3000) expect(oceanNode).to.be.instanceOf(OceanNode) expect(config.supportedNetworks).to.eql({ '1': 'https://rpc.eth.gateway.fm', @@ -60,7 +63,7 @@ describe('Status command tests', async () => { }) it('Ocean P2P should be initialized correctly', () => { expect(oceanNode.getP2PNode()).to.not.eql(null) - expect(OceanNode.getInstance(db).getP2PNode()).to.not.eql(null) + expect(OceanNode.getInstance(config, db).getP2PNode()).to.not.eql(null) }) it('Ocean Indexer should be initialized correctly', () => { oceanNode.addIndexer(oceanIndexer) diff --git a/src/test/unit/oceanP2P.test.ts b/src/test/unit/oceanP2P.test.ts index 7eff298fa..340dabbe9 100644 --- a/src/test/unit/oceanP2P.test.ts +++ b/src/test/unit/oceanP2P.test.ts @@ -29,8 +29,8 @@ describe('OceanP2P Test', () => { '0x3634cc4a3d2694a1186a7ce545f149e022eea103cc254d18d08675104bb4b5ac' ] ) - before(() => { - setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) + before(async () => { + await setupEnvironment(TEST_ENV_CONFIG_FILE, envOverrides) }) it('Start instance of OceanP2P node1', async () => { @@ -51,6 +51,9 @@ describe('OceanP2P Test', () => { process.env.PRIVATE_KEY = process.env.NODE2_PRIVATE_KEY config2 = await getConfiguration(true) config2.p2pConfig.ipV4BindTcpPort = 0 + config2.p2pConfig.ipV4BindWsPort = 0 + config2.p2pConfig.ipV6BindTcpPort = 0 + config2.p2pConfig.ipV6BindWsPort = 0 // we don't need bootstrap nodes, we rely on Multicast DNS config2.p2pConfig.mDNSInterval = mDNSInterval * 1e3 config2.p2pConfig.bootstrapNodes = [] diff --git a/src/test/unit/storage.test.ts b/src/test/unit/storage.test.ts index 4ef9fa174..5ea056e39 100644 --- a/src/test/unit/storage.test.ts +++ b/src/test/unit/storage.test.ts @@ -88,7 +88,7 @@ describe('URL Storage tests', () => { error = err } expect(error.message).to.eql( - 'Error validationg the URL file: URL or method are missing' + 'Error validating the URL file: URL or method are missing' ) file = { type: 'url', @@ -106,7 +106,7 @@ describe('URL Storage tests', () => { error = err } expect(error.message).to.eql( - 'Error validationg the URL file: URL or method are missing' + 'Error validating the URL file: URL or method are missing' ) }) it('URL validation fails on invalid method', () => { @@ -126,7 +126,7 @@ describe('URL Storage tests', () => { } catch (err) { error = err } - expect(error.message).to.eql('Error validationg the URL file: Invalid method for URL') + expect(error.message).to.eql('Error validating the URL file: Invalid method for URL') }) it('URL validation fails on filename', () => { @@ -147,7 +147,7 @@ describe('URL Storage tests', () => { error = err } expect(error.message).to.eql( - 'Error validationg the URL file: URL looks like a file path' + 'Error validating the URL file: URL looks like a file path' ) }) it('Gets download URL', () => { @@ -205,9 +205,7 @@ describe('Unsafe URL tests', () => { } catch (err) { error = err } - expect(error.message).to.eql( - 'Error validationg the URL file: URL is marked as unsafe' - ) + expect(error.message).to.eql('Error validating the URL file: URL is marked as unsafe') }) it('Should allow safe URL', () => { file = { @@ -254,7 +252,7 @@ describe('IPFS Storage tests', () => { } catch (err) { error = err } - expect(error.message).to.eql('Error validationg the IPFS file: Missing CID') + expect(error.message).to.eql('Error validating the IPFS file: Missing CID') }) after(() => { @@ -296,7 +294,7 @@ describe('Arweave Storage tests', () => { error = err } expect(error.message).to.eql( - 'Error validationg the Arweave file: Missing transaction ID' + 'Error validating the Arweave file: Missing transaction ID' ) }) @@ -376,7 +374,7 @@ describe('URL Storage with malformed URL', () => { error = err } expect(error.message).to.equal( - 'Error validationg the URL file: URL looks like a file path' + 'Error validating the URL file: URL looks like a file path' ) }) }) @@ -442,7 +440,7 @@ describe('Arweave Storage with malformed transaction ID', () => { error = err } expect(error.message).to.equal( - 'Error validationg the Arweave file: Transaction ID looks like an URL. Please specify URL storage instead.' + 'Error validating the Arweave file: Transaction ID looks like an URL. Please specify URL storage instead.' ) }) @@ -460,7 +458,7 @@ describe('Arweave Storage with malformed transaction ID', () => { error = err } expect(error.message).to.equal( - 'Error validationg the Arweave file: Transaction ID looks like a file path' + 'Error validating the Arweave file: Transaction ID looks like a file path' ) }) }) @@ -485,7 +483,7 @@ describe('Arweave Storage with malformed transaction ID', () => { error = err } expect(error.message).to.equal( - 'Error validationg the IPFS file: CID looks like an URL. Please specify URL storage instead.' + 'Error validating the IPFS file: CID looks like an URL. Please specify URL storage instead.' ) }) @@ -503,7 +501,7 @@ describe('Arweave Storage with malformed transaction ID', () => { error = err } expect(error.message).to.equal( - 'Error validationg the IPFS file: CID looks like a file path' + 'Error validating the IPFS file: CID looks like a file path' ) }) }) diff --git a/src/test/utils/assets.ts b/src/test/utils/assets.ts index c58efe5d5..19bf33a24 100644 --- a/src/test/utils/assets.ts +++ b/src/test/utils/assets.ts @@ -78,6 +78,8 @@ export async function publishAsset(asset: any, publisherAccount: Signer) { genericAsset.services[0].files.datatokenAddress = datatokenAddress genericAsset.services[0].files.nftAddress = nftAddress + genericAsset.services[0].datatokenAddress = datatokenAddress + genericAsset.nftAddress = nftAddress // let's call node to encrypt const data = Uint8Array.from( @@ -183,14 +185,14 @@ export async function orderAsset( if (!providerFees) { const oceanNodeConfig = await getConfiguration(true) - const statusCommand = { + const getFeesCommand = { command: PROTOCOL_COMMANDS.GET_FEES, ddoId: genericAsset.id, serviceId: service.id, consumerAddress, node: oceanNodeConfig.keys.peerId.toString() } - const response = await new FeesHandler(oceanNode).handle(statusCommand) + const response = await new FeesHandler(oceanNode).handle(getFeesCommand) const fees = await streamToObject(response.stream as Readable) providerFees = fees.providerFee } diff --git a/src/test/utils/contracts.ts b/src/test/utils/contracts.ts new file mode 100644 index 000000000..06e1a14a8 --- /dev/null +++ b/src/test/utils/contracts.ts @@ -0,0 +1,129 @@ +import { Contract, ethers, JsonRpcProvider, Signer } from 'ethers' +import { AccessListContract } from '../../@types' +import { + getOceanArtifactsAdressesByChainId, + DEVELOPMENT_CHAIN_ID, + getOceanArtifactsAdresses +} from '../../utils/address.js' +import AccessListFactory from '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessListFactory.sol/AccessListFactory.json' assert { type: 'json' } +import AccessList from '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessList.sol/AccessList.json' assert { type: 'json' } + +export const EXISTING_ACCESSLISTS: Map = new Map< + string, + AccessListContract +>() +/** + * Returns a contract instance for the given address + * @param {string} address - The address of the contract + * @param {AbiItem[]} [abi] - The ABI of the contract + * @returns {Contract} - The contract instance + */ +export function getContract(address: string, abi: any, signer: Signer): Contract { + const contract = new ethers.Contract(address, abi, signer) + return contract +} + +export function getEventFromTx(txReceipt: { logs: any[] }, eventName: string) { + return txReceipt?.logs?.filter((log) => { + return log.fragment?.name === eventName + })[0] +} +/** + * Create new Access List Contract + * @param {Signer} signer The signer of the transaction. + * @param {string} contractFactoryAddress The AccessListFactory address. + * @param {any} contractFactoryAbi The AccessListFactory ABI. + * @param {string} nameAccessList The name for access list. + * @param {string} symbolAccessList The symbol for access list. + * @param {boolean} transferable Default false, to be soulbound. + * @param {string} owner Owner of the access list. + * @param {string[]} user Users of the access lists as addresses. + * @param {string[]} tokenURI Token URIs list. + * @return {Promise} The transaction hash or null if no transaction + */ +export async function deployAccessListContract( + signer: Signer, + contractFactoryAddress: string, + contractFactoryAbi: any, + nameAccessList: string, + symbolAccessList: string, + transferable: boolean = false, + owner: string, + user: string[], + tokenURI: string[] +): Promise { + if (!nameAccessList || !symbolAccessList) { + throw new Error(`Access list symbol and name are required`) + } + + const contract = getContract(contractFactoryAddress, contractFactoryAbi, signer) + + try { + const tx = await contract.deployAccessListContract( + nameAccessList, + symbolAccessList, + transferable, + owner, + user, + tokenURI + ) + + if (!tx) { + const e = 'Tx for deploying new access list was not processed on chain.' + console.error(e) + throw e + } + const trxReceipt = await tx.wait(1) + const events = getEventFromTx(trxReceipt, 'NewAccessList') + return events.args[0] + } catch (e) { + console.error(`Creation of AccessList failed: ${e}`) + return null + } +} + +export async function deployAndGetAccessListConfig( + owner: Signer, + provider?: ethers.JsonRpcProvider, + wallets?: ethers.Signer[] +): Promise { + provider = provider || new JsonRpcProvider('http://127.0.0.1:8545') + let networkArtifacts = getOceanArtifactsAdressesByChainId(DEVELOPMENT_CHAIN_ID) + if (!networkArtifacts) { + networkArtifacts = getOceanArtifactsAdresses().development + } + + wallets = wallets || [ + (await provider.getSigner(0)) as Signer, + (await provider.getSigner(1)) as Signer, + (await provider.getSigner(2)) as Signer, + (await provider.getSigner(3)) as Signer + ] + const txAddress = await deployAccessListContract( + owner, // owner is first account + networkArtifacts.AccessListFactory, + AccessListFactory.abi, + 'AllowList', + 'ALLOW', + false, + await owner.getAddress(), + [ + await wallets[0].getAddress(), + await wallets[1].getAddress(), + await wallets[2].getAddress(), + await wallets[3].getAddress() + ], + ['https://oceanprotocol.com/nft/'] + ) + console.log('Successfully deployed AccessList at address: ', txAddress) + + const contractAcessList = getContract(txAddress, AccessList.abi, owner) + // console.log('contractAcessList:', contractAcessList) + if (contractAcessList) { + const result: AccessListContract = { + '8996': [txAddress] + } + return result + } + return null +} diff --git a/src/test/utils/hooks.ts b/src/test/utils/hooks.ts index 7e2d1032d..88acc1a72 100644 --- a/src/test/utils/hooks.ts +++ b/src/test/utils/hooks.ts @@ -39,7 +39,7 @@ function getEnvOverrides(): OverrideEnvConfig[] { [ 'http://localhost:5005/', 'https://arweave.net/', - '{ "1": {"rpc": "https://rpc.eth.gateway.fm", "chainId": 1, "network": "mainet", "chunkSize": 100}, "137": {"rpc": "https://polygon.meowrpc.com", "chainId": 137, "network": "polygon", "chunkSize": 100 }}', + '{ "8996": {"rpc": "http://127.0.0.1:8545", "chainId": 8996, "network": "development", "chunkSize": 100}, "137": {"rpc": "https://polygon.meowrpc.com", "chainId": 137, "network": "polygon", "chunkSize": 100 }}', '0xc594c6e5def4bab63ac29eed19a134c130388f74f019bc74b8f4389df2837a58', SELECTED_RUN_DATABASE, SELECTED_RUN_DATABASE === DB_TYPES.ELASTIC_SEARCH @@ -53,6 +53,7 @@ export const mochaHooks = { beforeAll() { // get stuff we want to override envOverrides = getEnvOverrides() + // if it exists will use it, otherwise nothing happens // in any case it WILL NOT override the existing configuration // it returns the original object with the original value preserved to be restored later @@ -60,7 +61,9 @@ export const mochaHooks = { envOverrides = overrides }) initialSetupDone = true - CONFIG_LOGGER.debug(`(Hook) Initial test setup: ${JSON.stringify(envOverrides)} `) + CONFIG_LOGGER.debug( + `(Hook) Initial test setup: ${JSON.stringify(envOverrides, null, 4)} ` + ) // just in case the configuration value fails this.timeout(DEFAULT_TEST_TIMEOUT) diff --git a/src/test/utils/utils.ts b/src/test/utils/utils.ts index dfcacfee3..8376d6ae1 100644 --- a/src/test/utils/utils.ts +++ b/src/test/utils/utils.ts @@ -13,6 +13,7 @@ const __dirname = path.dirname(__filename) // relative to test/utils (default value, but can use other paths) export const TEST_ENV_CONFIG_FILE = '../.env.test' +export const TEST_ENV_CONFIG_PATH = '../.env.test2' // use this if we need to override the default configuration while testing export interface OverrideEnvConfig { name: string // name of the var diff --git a/src/utils/address.ts b/src/utils/address.ts index 66d6adbba..d4b735ad9 100644 --- a/src/utils/address.ts +++ b/src/utils/address.ts @@ -1,7 +1,7 @@ import fs from 'fs' import addresses from '@oceanprotocol/contracts/addresses/address.json' assert { type: 'json' } import { CORE_LOGGER } from './logging/common.js' -import { ENVIRONMENT_VARIABLES, existsEnvironmentVariable } from './index.js' +import { isDefined } from './index.js' /** * Get the artifacts address from the address.json file @@ -10,9 +10,9 @@ import { ENVIRONMENT_VARIABLES, existsEnvironmentVariable } from './index.js' */ export function getOceanArtifactsAdresses(): any { try { - if (existsEnvironmentVariable(ENVIRONMENT_VARIABLES.ADDRESS_FILE)) { + if (isDefined(process.env.ADDRESS_FILE)) { // eslint-disable-next-line security/detect-non-literal-fs-filename - const data = fs.readFileSync(ENVIRONMENT_VARIABLES.ADDRESS_FILE.value, 'utf8') + const data = fs.readFileSync(process.env.ADDRESS_FILE, 'utf8') return JSON.parse(data) } return addresses @@ -41,10 +41,7 @@ export function getOceanArtifactsAdressesByChainId(chain: number): any { } } // just warn about this missing configuration if running locally - if ( - chain === DEVELOPMENT_CHAIN_ID && - !existsEnvironmentVariable(ENVIRONMENT_VARIABLES.ADDRESS_FILE, true) - ) { + if (chain === DEVELOPMENT_CHAIN_ID && !isDefined(process.env.ADDRESS_FILE)) { CORE_LOGGER.warn( 'Cannot find contract artifacts addresses for "development" chain. Please set the "ADDRESS_FILE" environmental variable!' ) @@ -55,11 +52,18 @@ export function getOceanArtifactsAdressesByChainId(chain: number): any { return null } +// eslint-disable-next-line require-await +export function getOceanTokenAddressForChain(chainId: number): Promise { + const addresses = getOceanArtifactsAdressesByChainId(chainId) + if (addresses && addresses.Ocean) return addresses.Ocean + return null +} + // default token addresses per chain export const OCEAN_ARTIFACTS_ADDRESSES_PER_CHAIN = addresses export const DEVELOPMENT_CHAIN_ID = 8996 export const KNOWN_CONFIDENTIAL_EVMS = [ - 23294, // mainnet oasis_sapphire, - 23295 // oasis_sapphire_testnet + BigInt(23294), // mainnet oasis_sapphire, + BigInt(23295) // oasis_sapphire_testnet ] diff --git a/src/utils/asset.ts b/src/utils/asset.ts index 44eeddb51..de19ec94b 100644 --- a/src/utils/asset.ts +++ b/src/utils/asset.ts @@ -1,8 +1,8 @@ import axios from 'axios' -import { DDO } from '../@types/DDO/DDO' -import { Service } from '../@types/DDO/Service' +import { Service, DDOManager, DDO } from '@oceanprotocol/ddo-js' import { DDO_IDENTIFIER_PREFIX } from './constants.js' import { CORE_LOGGER } from './logging/common.js' +import { GENERIC_EMOJIS, LOG_LEVELS_STR } from './logging/Logger.js' import { createHash } from 'crypto' import { ethers, getAddress, Signer } from 'ethers' import { KNOWN_CONFIDENTIAL_EVMS } from './address.js' @@ -14,21 +14,26 @@ import { getContractAddress, getNFTFactory } from '../components/Indexer/utils.j // Asset as per asset.py on provider, is a class there, while on ocean.Js we only have a type // this is an utility to extract information from the Asset services export const AssetUtils = { - getServiceIndexById(asset: DDO, id: string): number | null { - for (let c = 0; c < asset.services.length; c++) - if (asset.services[c].id === id) return c + getServiceIndexById(asset: DDO | Record, id: string): number | null { + const ddoInstance = DDOManager.getDDOClass(asset) + const { services } = ddoInstance.getDDOFields() + for (let c = 0; c < services.length; c++) if (services[c].id === id) return c return null }, - getServiceByIndex(asset: DDO, index: number): Service | null { - if (index >= 0 && index < asset.services.length) { - return asset.services[index] + getServiceByIndex(asset: DDO | Record, index: number): any | null { + const ddoInstance = DDOManager.getDDOClass(asset) + const { services } = ddoInstance.getDDOFields() + if (index >= 0 && index < services.length) { + return services[index] } return null }, - getServiceById(asset: DDO, id: string): Service | null { - const services = asset.services.filter((service: Service) => service.id === id) - return services.length ? services[0] : null + getServiceById(asset: DDO | Record, id: string): any | null { + const ddoInstance = DDOManager.getDDOClass(asset) + const { services } = ddoInstance.getDDOFields() as any + const filteredServices = services.filter((service: any) => service.id === id) + return filteredServices.length ? filteredServices[0] : null } } @@ -47,7 +52,8 @@ export async function fetchFileMetadata( const response = await axios({ url, method: method || 'get', - responseType: 'stream' + responseType: 'stream', + timeout: 30000 }) contentType = response.headers['content-type'] let totalSize = 0 @@ -91,6 +97,15 @@ export function validateDDOHash( return ddoID === hashAddressAndChain } +export function deleteIndexedMetadataIfExists(ddo: DDO): DDO { + const ddoCopy: DDO = structuredClone(ddo) + if ('indexedMetadata' in ddoCopy) { + delete ddoCopy.indexedMetadata + return ddoCopy + } + return ddo +} + /** * Generates DDO Id given the chain and nft address provided * @param nftAddress the nft address @@ -114,7 +129,7 @@ export function generateDDOHash(nftAddress: string, chainId: number): string | n * @param network name or chain id * @returns true if confidential evm */ -export function isConfidentialEVM(network: number): boolean { +export function isConfidentialEVM(network: bigint): boolean { return KNOWN_CONFIDENTIAL_EVMS.includes(network) } @@ -171,7 +186,7 @@ export async function isDataTokenTemplate4( } } -export function isConfidentialChainDDO(ddoChain: number, ddoService: Service): boolean { +export function isConfidentialChainDDO(ddoChain: bigint, ddoService: Service): boolean { const isConfidential = isConfidentialEVM(ddoChain) return isConfidential && (!ddoService.files || ddoService.files.length === 0) } @@ -192,7 +207,10 @@ export async function getFilesObjectFromConfidentialEVM( signer: Signer, consumerAddress: string, consumerSignature: string, - consumerData: string // ddo id + nonce + consumerData: string + // NOTE about signatures consume data: + // ddo id + nonce (for downloading) + // consumerAddress + datasets[0].documentId + nonce (for start/init compute) ): Promise { try { const currentProviderAddress = await signer.getAddress() @@ -228,3 +246,34 @@ export async function getFilesObjectFromConfidentialEVM( return null } } + +export async function validateDDO(ddo: Record): Promise { + const ddoInstance = DDOManager.getDDOClass(ddo) + const ddoData = ddoInstance.getDDOData() + if ('indexedMetadata' in ddoData && ddoData.indexedMetadata?.nft?.state !== 0) { + // Skipping validation for short DDOs as it currently doesn't work + // TODO: DDO validation needs to be updated to consider the fields required by the schema + // See github issue: https://github.com/oceanprotocol/ocean-node/issues/256 + return true + } + + const validation = await ddoInstance.validate() + if (validation[0] === true) { + CORE_LOGGER.logMessageWithEmoji( + `Validation of DDO with did: ${ddo.id} has passed`, + true, + GENERIC_EMOJIS.EMOJI_OCEAN_WAVE, + LOG_LEVELS_STR.LEVEL_DEBUG + ) + return true + } else { + CORE_LOGGER.logMessageWithEmoji( + `Validation of DDO with schema version ${ddo.version} failed with errors: ` + + JSON.stringify(validation[1]), + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_WARN + ) + return false + } +} diff --git a/src/utils/auth.ts b/src/utils/auth.ts index b3790456b..7cc3839de 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,17 +1,24 @@ -import { ethers } from 'ethers' +import { ethers, isAddress } from 'ethers' import { CORE_LOGGER } from './logging/common.js' -import { getAllowedAdmins } from './index.js' -import { CommonValidation } from '../components/httpRoutes/requestValidator.js' - -export function validateAdminSignature( +import { Blockchain, getConfiguration } from './index.js' +import { RPCS } from '../@types/blockchain.js' +import { isDefined } from '../utils/util.js' +import AccessListContract from '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessList.sol/AccessList.json' assert { type: 'json' } +import { getAccountsFromAccessList } from '../utils/credentials.js' +import { OceanNodeConfig } from '../@types/OceanNode.js' +import { LOG_LEVELS_STR } from './logging/Logger.js' +import { CommonValidation } from './validators.js' +export async function validateAdminSignature( expiryTimestamp: number, signature: string -): CommonValidation { +): Promise { + const message = expiryTimestamp.toString() + const signerAddress = ethers.verifyMessage(message, signature)?.toLowerCase() + CORE_LOGGER.logMessage(`Resolved signer address: ${signerAddress}`) try { - const message = expiryTimestamp.toString() - const signerAddress = ethers.verifyMessage(message, signature)?.toLowerCase() - CORE_LOGGER.logMessage(`Resolved signer address: ${signerAddress}`) - const allowedAdmins = getAllowedAdmins() + const allowedAdmins: string[] = await getAdminAddresses() + console.log(`Allowed admins: ${allowedAdmins}`) + if (allowedAdmins.length === 0) { const errorMsg = "Allowed admins list is empty. Please add admins' addresses." CORE_LOGGER.logMessage(errorMsg) @@ -40,3 +47,55 @@ export function validateAdminSignature( return { valid: false, error: errorMsg } } } + +export async function getAdminAddresses(): Promise { + const config: OceanNodeConfig = await getConfiguration() + const validAddresses: string[] = [] + if (config.allowedAdmins && config.allowedAdmins.length > 0) { + for (const admin of config.allowedAdmins) { + if (isAddress(admin) === true) { + validAddresses.push(admin) + } + } + if (validAddresses.length === 0) { + CORE_LOGGER.log( + LOG_LEVELS_STR.LEVEL_ERROR, + `Invalid format for ETH address from ALLOWED ADMINS.` + ) + } + } + if ( + config.allowedAdminsList && + isDefined(config.supportedNetworks) && + Object.keys(config.allowedAdminsList).length > 0 + ) { + const RPCS: RPCS = config.supportedNetworks + const supportedChains: string[] = Object.keys(config.supportedNetworks) + const accessListsChainsListed = Object.keys(config.allowedAdminsList) + for (const chain of supportedChains) { + const { chainId, network, rpc, fallbackRPCs } = RPCS[chain] + const blockchain = new Blockchain(rpc, network, chainId, fallbackRPCs) + + // check the access lists for this chain + if (accessListsChainsListed.length > 0 && accessListsChainsListed.includes(chain)) { + for (const accessListAddress of config.allowedAdminsList[chainId]) { + // instantiate contract and check addresses present + balanceOf() + const accessListContract = new ethers.Contract( + accessListAddress, + AccessListContract.abi, + blockchain.getSigner() + ) + + const adminsFromAccessList: string[] = await getAccountsFromAccessList( + accessListContract, + chainId + ) + if (adminsFromAccessList.length > 0) { + return validAddresses.concat(adminsFromAccessList) + } + } + } + } + } + return validAddresses +} diff --git a/src/utils/blockchain.ts b/src/utils/blockchain.ts index bfafb5665..72f4f9d31 100644 --- a/src/utils/blockchain.ts +++ b/src/utils/blockchain.ts @@ -16,6 +16,14 @@ import { CORE_LOGGER } from './logging/common.js' import { sleep } from './util.js' import { ConnectionStatus } from '../@types/blockchain.js' import { ValidateChainId } from '../@types/commands.js' +import { KNOWN_CONFIDENTIAL_EVMS } from '../utils/address.js' + +const MIN_GAS_FEE_POLYGON = 30000000000 // minimum recommended 30 gwei polygon main and mumbai fees +const MIN_GAS_FEE_SEPOLIA = 4000000000 // minimum 4 gwei for eth sepolia testnet +const MIN_GAS_FEE_SAPPHIRE = 10000000000 // recommended for mainnet and testnet 10 gwei +const POLYGON_NETWORK_ID = 137 +const MUMBAI_NETWORK_ID = 80001 +const SEPOLIA_NETWORK_ID = 11155111 export class Blockchain { private signer: Signer @@ -58,6 +66,10 @@ export class Blockchain { return this.chainId } + public async getWalletAddress(): Promise { + return await this.signer.getAddress() + } + public async isNetworkReady(): Promise { if (this.networkAvailable && this.provider.ready) { return { ready: true } @@ -152,11 +164,75 @@ export class Blockchain { // oldNetwork exists, it represents a changing network this.networkAvailable = newNetwork instanceof Network } + + public async getFairGasPrice(gasFeeMultiplier: number): Promise { + const price = await (await this.signer.provider.getFeeData()).gasPrice + const x = BigInt(price.toString()) + if (gasFeeMultiplier) { + const res = BigInt(price.toString()) * BigInt(gasFeeMultiplier) + return res.toString(10) + } else return x.toString() + } + + public async getGasOptions(estGas: bigint, gasFeeMultiplier: number): Promise<{}> { + const { chainId } = await this.signer.provider.getNetwork() + const feeHistory = await this.signer.provider.getFeeData() + const gasLimit = estGas + BigInt(20000) + + if (feeHistory.maxPriorityFeePerGas) { + let aggressiveFeePriorityFeePerGas = feeHistory.maxPriorityFeePerGas.toString() + let aggressiveFeePerGas = feeHistory.maxFeePerGas.toString() + if (gasFeeMultiplier > 1) { + aggressiveFeePriorityFeePerGas = ( + (feeHistory.maxPriorityFeePerGas * BigInt(gasFeeMultiplier * 100)) / + BigInt(100) + ).toString() + aggressiveFeePerGas = ( + (feeHistory.maxFeePerGas * BigInt(gasFeeMultiplier * 100)) / + BigInt(100) + ).toString() + } + const overrides = { + gasLimit, + maxPriorityFeePerGas: + (chainId === BigInt(MUMBAI_NETWORK_ID) || + chainId === BigInt(POLYGON_NETWORK_ID)) && + Number(aggressiveFeePriorityFeePerGas) < MIN_GAS_FEE_POLYGON + ? MIN_GAS_FEE_POLYGON + : chainId === BigInt(SEPOLIA_NETWORK_ID) && + Number(aggressiveFeePriorityFeePerGas) < MIN_GAS_FEE_SEPOLIA + ? MIN_GAS_FEE_SEPOLIA + : KNOWN_CONFIDENTIAL_EVMS.includes(chainId) && + Number(aggressiveFeePriorityFeePerGas) < MIN_GAS_FEE_SAPPHIRE + ? MIN_GAS_FEE_SAPPHIRE + : Number(aggressiveFeePriorityFeePerGas), + maxFeePerGas: + (chainId === BigInt(MUMBAI_NETWORK_ID) || + chainId === BigInt(POLYGON_NETWORK_ID)) && + Number(aggressiveFeePerGas) < MIN_GAS_FEE_POLYGON + ? MIN_GAS_FEE_POLYGON + : chainId === BigInt(SEPOLIA_NETWORK_ID) && + Number(aggressiveFeePerGas) < MIN_GAS_FEE_SEPOLIA + ? MIN_GAS_FEE_SEPOLIA + : KNOWN_CONFIDENTIAL_EVMS.includes(chainId) && + Number(aggressiveFeePerGas) < MIN_GAS_FEE_SAPPHIRE + ? MIN_GAS_FEE_SAPPHIRE + : Number(aggressiveFeePerGas) + } + return overrides + } else { + const overrides = { + gasLimit, + gasPrice: feeHistory.gasPrice + } + return overrides + } + } } export async function getDatatokenDecimals( datatokenAddress: string, - provider: JsonRpcProvider + provider: ethers.Provider ): Promise { const datatokenContract = new Contract(datatokenAddress, ERC20Template.abi, provider) try { @@ -194,6 +270,15 @@ export async function verifyMessage( } } +export function getMessageHash(message: string): Uint8Array { + const messageHash = ethers.solidityPackedKeccak256( + ['bytes'], + [ethers.hexlify(ethers.toUtf8Bytes(message))] + ) + const messageHashBytes = ethers.toBeArray(messageHash) + return messageHashBytes +} + export async function checkSupportedChainId(chainId: number): Promise { const config = await getConfiguration() if (!chainId || !(`${chainId.toString()}` in config.supportedNetworks)) { diff --git a/src/utils/config.ts b/src/utils/config.ts index 9e85d0f48..f8a538302 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,628 +1,10 @@ -import type { - DenyList, - OceanNodeConfig, - OceanNodeKeys, - OceanNodeDockerConfig -} from '../@types/OceanNode' -import type { C2DClusterInfo } from '../@types/C2D.js' -import { C2DClusterType } from '../@types/C2D.js' -import { createFromPrivKey } from '@libp2p/peer-id-factory' -import { keys } from '@libp2p/crypto' -import { - DEFAULT_RATE_LIMIT_PER_SECOND, - ENVIRONMENT_VARIABLES, - EnvVariable, - hexStringToByteArray -} from '../utils/index.js' -import { defaultBootstrapAddresses, knownUnsafeURLs } from '../utils/constants.js' +import { isDefined } from './util.js' +import { getConfiguration } from './config/builder.js' -import { LOG_LEVELS_STR, GENERIC_EMOJIS, getLoggerLevelEmoji } from './logging/Logger.js' -import { RPCS } from '../@types/blockchain' -import { getAddress, Wallet } from 'ethers' -import { FeeAmount, FeeStrategy, FeeTokens } from '../@types/Fees' -import { - getOceanArtifactsAdresses, - OCEAN_ARTIFACTS_ADDRESSES_PER_CHAIN -} from '../utils/address.js' -import { CONFIG_LOGGER } from './logging/common.js' -import { create256Hash } from './crypt.js' +export * from './config/index.js' -// usefull for lazy loading and avoid boilerplate on other places -let previousConfiguration: OceanNodeConfig = null - -export async function getPeerIdFromPrivateKey( - privateKey: string -): Promise { - const key = new keys.supportedKeys.secp256k1.Secp256k1PrivateKey( - hexStringToByteArray(privateKey.slice(2)) - ) - - return { - peerId: await createFromPrivKey(key), - publicKey: key.public.bytes, - // Notes: - // using 'key.public.bytes' gives extra 4 bytes: 08021221 - // using (key as any)._publicKey is stripping this same 4 bytes at the beginning: 08021221 - // when getting the peer details with 'peerIdFromString(peerName)' it returns the version with the 4 extra bytes - // and we also need to send that to the client, so he can uncompress the public key correctly and perform the check and the encryption - // so it would make more sense to use this value on the configuration - privateKey: (key as any)._key, - ethAddress: new Wallet(privateKey.substring(2)).address - } -} - -function getEnvValue(env: any, defaultValue: any) { - /* Gets value for an ENV var, returning defaultValue if not defined */ - return env != null ? (env as string) : defaultValue -} - -function getIntEnvValue(env: any, defaultValue: number) { - /* Gets int value for an ENV var, returning defaultValue if not defined */ - const num = parseInt(env, 10) - return isNaN(num) ? defaultValue : num -} - -export function getBoolEnvValue(envName: string, defaultValue: boolean): boolean { - if (!(envName in process.env)) { - return defaultValue - } - if ( - process.env[envName] === 'true' || - process.env[envName] === '1' || - process.env[envName]?.toLowerCase() === 'yes' - ) { - return true - } - return false -} - -function getSupportedChains(): RPCS | null { - const logError = function (): null { - // missing or invalid RPC list - CONFIG_LOGGER.logMessageWithEmoji( - 'Missing or Invalid RPCS env variable format, Running node without the Indexer component...', - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return null - } - if (!process.env.RPCS) { - return logError() - } - let supportedNetworks: RPCS = null - try { - supportedNetworks = JSON.parse(process.env.RPCS) - } catch (e) { - return logError() - } - - return supportedNetworks -} - -function getIndexingNetworks(supportedNetworks: RPCS): RPCS | null { - const indexerNetworksEnv = process.env.INDEXER_NETWORKS - if (!indexerNetworksEnv) { - CONFIG_LOGGER.logMessageWithEmoji( - 'INDEXER_NETWORKS is not defined, running Indexer with all supported networks defined in RPCS env variable ...', - true, - GENERIC_EMOJIS.EMOJI_CHECK_MARK, - LOG_LEVELS_STR.LEVEL_INFO - ) - return supportedNetworks - } - try { - const indexerNetworks: number[] = JSON.parse(indexerNetworksEnv) - - if (indexerNetworks.length === 0) { - CONFIG_LOGGER.logMessageWithEmoji( - 'INDEXER_NETWORKS is an empty array, Running node without the Indexer component...', - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return null - } - - // Use reduce to filter supportedNetworks - const filteredNetworks = indexerNetworks.reduce((acc: RPCS, chainId) => { - if (supportedNetworks[chainId]) { - acc[chainId] = supportedNetworks[chainId] - } - return acc - }, {}) - - return filteredNetworks - } catch (e) { - CONFIG_LOGGER.logMessageWithEmoji( - 'Missing or Invalid INDEXER_NETWORKS env variable format,running Indexer with all supported networks defined in RPCS env variable ...', - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return supportedNetworks - } -} -// valid decrypthers -function getAuthorizedDecrypters(isStartup?: boolean): string[] { - return readAddressListFromEnvVariable( - ENVIRONMENT_VARIABLES.AUTHORIZED_DECRYPTERS, - isStartup - ) -} -// allowed validators -export function getAllowedValidators(isStartup?: boolean): string[] { - return readAddressListFromEnvVariable( - ENVIRONMENT_VARIABLES.ALLOWED_VALIDATORS, - isStartup - ) -} -// valid node admins -export function getAllowedAdmins(isStartup?: boolean): string[] { - return readAddressListFromEnvVariable(ENVIRONMENT_VARIABLES.ALLOWED_ADMINS, isStartup) -} - -// whenever we want to read an array of strings from an env variable, use this common function -function readListFromEnvVariable( - envVariable: any, - isStartup?: boolean, - defaultValue: string[] = [] -): string[] { - const { name } = envVariable - try { - if (!existsEnvironmentVariable(envVariable, isStartup)) { - return defaultValue - } - const addressesRaw: string[] = JSON.parse(process.env[name]) - if (!Array.isArray(addressesRaw)) { - CONFIG_LOGGER.logMessageWithEmoji( - `Invalid ${name} env variable format`, - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return defaultValue - } - return addressesRaw - } catch (error) { - CONFIG_LOGGER.logMessageWithEmoji( - `Missing or Invalid address(es) in ${name} env variable`, - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return defaultValue - } -} - -// whenever we want to read an array of addresses from an env variable, use this common function -function readAddressListFromEnvVariable(envVariable: any, isStartup?: boolean): string[] { - const addressesRaw: string[] = readListFromEnvVariable(envVariable, isStartup) - return addressesRaw.map((address) => getAddress(address)) -} -/** - * get default values for provider fee tokens - * @param supportedNetworks chains that we support - * @returns ocean fees token - */ -function getDefaultFeeTokens(supportedNetworks: RPCS): FeeTokens[] { - const nodeFeesTokens: FeeTokens[] = [] - let addressesData: any = getOceanArtifactsAdresses() - if (!addressesData) { - addressesData = OCEAN_ARTIFACTS_ADDRESSES_PER_CHAIN - } - // check if we have configured anything ourselves - const hasSupportedNetworks = - supportedNetworks && Object.keys(supportedNetworks).length > 0 - // check if we have it supported - Object.keys(addressesData).forEach((chain: any) => { - const chainName = chain as string - const { chainId, Ocean } = addressesData[chainName] - - // if we have set the supported chains, we use those chains/tokens - if (hasSupportedNetworks) { - // check if exists the correct one to add - const keyId: string = chainId as string - const chainInfo: any = supportedNetworks[keyId] - if (chainInfo) { - nodeFeesTokens.push({ - chain: keyId, - token: Ocean - }) - } - } else { - // otherwise, we add all we know about - nodeFeesTokens.push({ - chain: chainId as string, - token: Ocean - }) - } - }) - return nodeFeesTokens -} - -// parse fees structure from .env -/** - * - * @param supportedNetworks networks supported - * @param isStartup boolean to avoid logging too much - * @returns Fees structure - */ -function getOceanNodeFees(supportedNetworks: RPCS, isStartup?: boolean): FeeStrategy { - const logError = () => { - CONFIG_LOGGER.logMessageWithEmoji( - 'Error parsing Fee Strategy! Please check "FEE_TOKENS" and "FEE_AMOUNT" env variables. Will use defaults...', - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - } - let nodeFeesAmount: FeeAmount - let nodeFeesTokens: FeeTokens[] = [] - try { - // if not exists, just use defaults - if (!existsEnvironmentVariable(ENVIRONMENT_VARIABLES.FEE_AMOUNT)) { - if (isStartup) { - logMissingVariableWithDefault(ENVIRONMENT_VARIABLES.FEE_AMOUNT) - } - - nodeFeesAmount = { amount: 0, unit: 'MB' } - } else { - nodeFeesAmount = JSON.parse(process.env.FEE_AMOUNT) as FeeAmount - } - if (!existsEnvironmentVariable(ENVIRONMENT_VARIABLES.FEE_TOKENS)) { - // try to get first for artifacts address if available - if (isStartup) { - logMissingVariableWithDefault(ENVIRONMENT_VARIABLES.FEE_TOKENS) - } - - nodeFeesTokens = getDefaultFeeTokens(supportedNetworks) - } else { - const tokens = JSON.parse(ENVIRONMENT_VARIABLES.FEE_TOKENS.value) - Object.keys(tokens).forEach((key: any) => { - nodeFeesTokens.push({ - chain: key as string, - token: tokens[key] - }) - }) - } - - return { - feeTokens: nodeFeesTokens, - feeAmount: nodeFeesAmount - } - } catch (error) { - if (isStartup) { - logError() - } - // make sure we always return something usable - return { - feeTokens: nodeFeesTokens.length - ? nodeFeesTokens - : getDefaultFeeTokens(supportedNetworks), - feeAmount: nodeFeesAmount || { amount: 0, unit: 'MB' } - } - } -} - -function getC2DDockerConfig(isStartup?: boolean): OceanNodeDockerConfig { - const config = { - socketPath: getEnvValue(process.env.DOCKER_SOCKET_PATH, null), - protocol: getEnvValue(process.env.DOCKER_PROTOCOL, null), - host: getEnvValue(process.env.DOCKER_HOST, null), - port: getIntEnvValue(process.env.DOCKER_PORT, 0), - caPath: getEnvValue(process.env.DOCKER_CA_PATH, null), - certPath: getEnvValue(process.env.DOCKER_CERT_PATH, null), - keyPath: getEnvValue(process.env.DOCKER_KEY_PATH, null) - } - return config -} -// get C2D environments -function getC2DClusterEnvironment(isStartup?: boolean): C2DClusterInfo[] { - const clusters: C2DClusterInfo[] = [] - // avoid log too much (too much noise on tests as well), this is not even required - if (existsEnvironmentVariable(ENVIRONMENT_VARIABLES.OPERATOR_SERVICE_URL, isStartup)) { - try { - const clustersURLS: string[] = JSON.parse( - process.env.OPERATOR_SERVICE_URL - ) as string[] - - for (const theURL of clustersURLS) { - clusters.push({ - connection: theURL, - hash: create256Hash(theURL), - type: C2DClusterType.OPF_K8 - }) - } - } catch (error) { - CONFIG_LOGGER.logMessageWithEmoji( - `Invalid or missing "${ENVIRONMENT_VARIABLES.OPERATOR_SERVICE_URL.name}" env variable => ${process.env.OPERATOR_SERVICE_URL}...`, - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - } - } - - return clusters -} - -// connect interfaces (p2p or/and http) -function getNodeInterfaces(isStartup: boolean = false) { - let interfaces: string[] = ['P2P', 'HTTP'] - if (!existsEnvironmentVariable(ENVIRONMENT_VARIABLES.INTERFACES)) { - if (isStartup) { - logMissingVariableWithDefault(ENVIRONMENT_VARIABLES.INTERFACES) - } - } else { - try { - interfaces = JSON.parse(process.env.INTERFACES) as string[] - if (interfaces.length === 0) { - return ['P2P', 'HTTP'] - } - } catch (err) { - CONFIG_LOGGER.logMessageWithEmoji( - `Invalid "${ENVIRONMENT_VARIABLES.INTERFACES.name}" env variable => ${process.env.INTERFACES}. Will use defaults...`, - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - } - } - // make it case insensitive - return interfaces.map((iface: string) => { - return iface.toUpperCase() - }) -} - -/** - * checks if a var is defined on env - * @param envVariable check utils/constants ENVIRONMENT_VARIABLES - * @param hasDefault if true we ignore if not set - * @returns boolean - */ -export function existsEnvironmentVariable(envVariable: any, log = false): boolean { - let { name, value, required } = envVariable - // extra check in case we change environment with tests (get the latest) - if (process.env[name] !== value) { - value = process.env[name] - } - if (!value) { - if (log) { - CONFIG_LOGGER.logMessageWithEmoji( - `Invalid or missing "${name}" env variable...`, - true, - required - ? GENERIC_EMOJIS.EMOJI_CROSS_MARK - : getLoggerLevelEmoji(LOG_LEVELS_STR.LEVEL_WARN), - required ? LOG_LEVELS_STR.LEVEL_ERROR : LOG_LEVELS_STR.LEVEL_WARN - ) - } - - return false - } - return true -} - -function logMissingVariableWithDefault(envVariable: EnvVariable) { - CONFIG_LOGGER.log( - LOG_LEVELS_STR.LEVEL_WARN, - `Missing "${envVariable.name}" env variable. Will use defaults...`, - true - ) -} -// have a rate limit for handler calls -function getRateLimit(isStartup: boolean = false) { - if (!existsEnvironmentVariable(ENVIRONMENT_VARIABLES.MAX_REQ_PER_SECOND)) { - if (isStartup) { - logMissingVariableWithDefault(ENVIRONMENT_VARIABLES.MAX_REQ_PER_SECOND) - } - return DEFAULT_RATE_LIMIT_PER_SECOND - } else { - try { - return getIntEnvValue(process.env.MAX_REQ_PER_SECOND, DEFAULT_RATE_LIMIT_PER_SECOND) - } catch (err) { - CONFIG_LOGGER.error( - `Invalid "${ENVIRONMENT_VARIABLES.MAX_REQ_PER_SECOND.name}" env variable...` - ) - return DEFAULT_RATE_LIMIT_PER_SECOND - } - } -} - -// get blocked ips and peer ids -function getDenyList(isStartup: boolean = false): DenyList { - const defaultDenyList: DenyList = { - peers: [], - ips: [] - } - if (!existsEnvironmentVariable(ENVIRONMENT_VARIABLES.RATE_DENY_LIST, isStartup)) { - return defaultDenyList - } else { - try { - const list: DenyList = JSON.parse(process.env.RATE_DENY_LIST) as DenyList - return list - } catch (err) { - CONFIG_LOGGER.error( - `Invalid "${ENVIRONMENT_VARIABLES.RATE_DENY_LIST.name}" env variable...` - ) - return defaultDenyList - } - } -} - -// lazy access ocean node config, when we don't need updated values from process.env -// this only goes through .env processing once (more suitable for a running node instance) -export async function getConfiguration( - forceReload: boolean = false, - isStartup: boolean = false -): Promise { - if (!previousConfiguration || forceReload) { - previousConfiguration = await getEnvConfig(isStartup) - } - return previousConfiguration -} - -// we can just use the lazy version above "getConfiguration()" and specify if we want to reload from .env variables -async function getEnvConfig(isStartup?: boolean): Promise { - const privateKey = process.env.PRIVATE_KEY - if (!privateKey || privateKey.length !== 66) { - // invalid private key - CONFIG_LOGGER.logMessageWithEmoji( - 'Invalid PRIVATE_KEY env variable..', - true, - GENERIC_EMOJIS.EMOJI_CROSS_MARK, - LOG_LEVELS_STR.LEVEL_ERROR - ) - return null - } - - const supportedNetworks = getSupportedChains() - const indexingNetworks = supportedNetworks - ? getIndexingNetworks(supportedNetworks) - : null - // Notes: we need to have this config on the class and use always that, otherwise we're processing - // all this info every time we call getConfig(), and also loggin too much - - const keys = await getPeerIdFromPrivateKey(privateKey) - // do not log this information everytime we call getConfig() - if (isStartup) { - CONFIG_LOGGER.logMessageWithEmoji( - 'Starting node with peerID: ' + keys.peerId, - true, - GENERIC_EMOJIS.EMOJI_CHECK_MARK - ) - } - - // http and/or p2p connections - const interfaces = getNodeInterfaces(isStartup) - let bootstrapTtl = getIntEnvValue(process.env.P2P_BOOTSTRAP_TTL, 120000) - if (bootstrapTtl === 0) bootstrapTtl = Infinity - const config: OceanNodeConfig = { - authorizedDecrypters: getAuthorizedDecrypters(isStartup), - allowedValidators: getAllowedValidators(isStartup), - keys, - // Only enable indexer if we have a DB_URL and supportedNetworks - hasIndexer: !!(!!getEnvValue(process.env.DB_URL, '') && !!indexingNetworks), - hasHttp: interfaces.includes('HTTP'), - hasP2P: interfaces.includes('P2P'), - p2pConfig: { - bootstrapNodes: readListFromEnvVariable( - ENVIRONMENT_VARIABLES.P2P_BOOTSTRAP_NODES, - isStartup, - defaultBootstrapAddresses - ), - bootstrapTimeout: getIntEnvValue(process.env.P2P_BOOTSTRAP_TIMEOUT, 20000), - bootstrapTagName: getEnvValue(process.env.P2P_BOOTSTRAP_TAGNAME, 'bootstrap'), - bootstrapTagValue: getIntEnvValue(process.env.P2P_BOOTSTRAP_TAGVALUE, 50), - bootstrapTTL: bootstrapTtl, - enableIPV4: getBoolEnvValue('P2P_ENABLE_IPV4', true), - enableIPV6: getBoolEnvValue('P2P_ENABLE_IPV6', true), - ipV4BindAddress: getEnvValue(process.env.P2P_ipV4BindAddress, '0.0.0.0'), - ipV4BindTcpPort: getIntEnvValue(process.env.P2P_ipV4BindTcpPort, 0), - ipV4BindWsPort: getIntEnvValue(process.env.P2P_ipV4BindWsPort, 0), - ipV6BindAddress: getEnvValue(process.env.P2P_ipV6BindAddress, '::1'), - ipV6BindTcpPort: getIntEnvValue(process.env.P2P_ipV6BindTcpPort, 0), - ipV6BindWsPort: getIntEnvValue(process.env.P2P_ipV6BindWsPort, 0), - announceAddresses: readListFromEnvVariable( - ENVIRONMENT_VARIABLES.P2P_ANNOUNCE_ADDRESSES, - isStartup - ), - pubsubPeerDiscoveryInterval: getIntEnvValue( - process.env.P2P_pubsubPeerDiscoveryInterval, - 10000 // every 10 seconds - ), - dhtMaxInboundStreams: getIntEnvValue(process.env.P2P_dhtMaxInboundStreams, 500), - dhtMaxOutboundStreams: getIntEnvValue(process.env.P2P_dhtMaxOutboundStreams, 500), - enableDHTServer: getBoolEnvValue(process.env.P2P_ENABLE_DHT_SERVER, false), - mDNSInterval: getIntEnvValue(process.env.P2P_mDNSInterval, 20e3), // 20 seconds - connectionsMaxParallelDials: getIntEnvValue( - process.env.P2P_connectionsMaxParallelDials, - 15 - ), - connectionsDialTimeout: getIntEnvValue( - process.env.P2P_connectionsDialTimeout, - 30e3 - ), // 10 seconds, - upnp: getBoolEnvValue('P2P_ENABLE_UPNP', true), - autoNat: getBoolEnvValue('P2P_ENABLE_AUTONAT', true), - enableCircuitRelayServer: getBoolEnvValue('P2P_ENABLE_CIRCUIT_RELAY_SERVER', false), - enableCircuitRelayClient: getBoolEnvValue('P2P_ENABLE_CIRCUIT_RELAY_CLIENT', false), - circuitRelays: getIntEnvValue(process.env.P2P_CIRCUIT_RELAYS, 0), - announcePrivateIp: getBoolEnvValue('P2P_ANNOUNCE_PRIVATE', false), - filterAnnouncedAddresses: readListFromEnvVariable( - ENVIRONMENT_VARIABLES.P2P_FILTER_ANNOUNCED_ADDRESSES, - isStartup, - [ - '127.0.0.0/8', - '10.0.0.0/8', - '172.16.0.0/12', - '192.168.0.0/16', - '100.64.0.0/10', - '169.254.0.0/16', - '192.0.0.0/24', - '192.0.2.0/24', - '198.51.100.0/24', - '203.0.113.0/24', - '224.0.0.0/4', - '240.0.0.0/4' - ] // list of all non-routable IP addresses, not availabe from public internet, private networks or specific reserved use - ), - minConnections: getIntEnvValue(process.env.P2P_MIN_CONNECTIONS, 1), - maxConnections: getIntEnvValue(process.env.P2P_MAX_CONNECTIONS, 300), - autoDialPeerRetryThreshold: getIntEnvValue( - process.env.P2P_AUTODIALPEERRETRYTHRESHOLD, - 1000 * 120 - ), - autoDialConcurrency: getIntEnvValue(process.env.P2P_AUTODIALCONCURRENCY, 5), - maxPeerAddrsToDial: getIntEnvValue(process.env.P2P_MAXPEERADDRSTODIAL, 5), - autoDialInterval: getIntEnvValue(process.env.P2P_AUTODIALINTERVAL, 5000) - }, - hasDashboard: process.env.DASHBOARD !== 'false', - httpPort: getIntEnvValue(process.env.HTTP_API_PORT, 8000), - dbConfig: { - url: getEnvValue(process.env.DB_URL, ''), - username: getEnvValue(process.env.DB_USERNAME, ''), - password: getEnvValue(process.env.DB_PASSWORD, ''), - dbType: getEnvValue(process.env.DB_TYPE, null) - }, - supportedNetworks, - indexingNetworks, - feeStrategy: getOceanNodeFees(supportedNetworks, isStartup), - c2dClusters: getC2DClusterEnvironment(isStartup), - dockerConfig: getC2DDockerConfig(isStartup), - c2dNodeUri: getEnvValue(process.env.C2D_NODE_URI, ''), - accountPurgatoryUrl: getEnvValue(process.env.ACCOUNT_PURGATORY_URL, ''), - assetPurgatoryUrl: getEnvValue(process.env.ASSET_PURGATORY_URL, ''), - allowedAdmins: getAllowedAdmins(isStartup), - rateLimit: getRateLimit(isStartup), - denyList: getDenyList(isStartup), - unsafeURLs: readListFromEnvVariable( - ENVIRONMENT_VARIABLES.UNSAFE_URLS, - isStartup, - knownUnsafeURLs - ) - } - - if (!previousConfiguration) { - previousConfiguration = config - } else if (configChanged(previousConfiguration, config)) { - CONFIG_LOGGER.warn( - 'Detected Ocean Node Configuration change... This might have unintended effects' - ) - } - return config -} - -function configChanged(previous: OceanNodeConfig, current: OceanNodeConfig): boolean { - return JSON.stringify(previous) !== JSON.stringify(current) -} - -// useful for debugging purposes -export async function printCurrentConfig() { - const conf = await getConfiguration(true) - console.log(JSON.stringify(conf, null, 4)) +export function isPolicyServerConfigured(): boolean { + return isDefined(process.env.POLICY_SERVER_URL) } -// P2P routes related export const hasP2PInterface = (await (await getConfiguration())?.hasP2P) || false diff --git a/src/utils/config/builder.ts b/src/utils/config/builder.ts new file mode 100644 index 000000000..f606fec9e --- /dev/null +++ b/src/utils/config/builder.ts @@ -0,0 +1,302 @@ +import type { OceanNodeConfig, OceanNodeKeys } from '../../@types/OceanNode.js' +import type { C2DClusterInfo, C2DDockerConfig } from '../../@types/C2D/C2D.js' +import type { RPCS } from '../../@types/blockchain.js' +import type { FeeTokens } from '../../@types/Fees.js' +import { C2DClusterType } from '../../@types/C2D/C2D.js' +import { keys } from '@libp2p/crypto' +import { createFromPrivKey } from '@libp2p/peer-id-factory' +import { Wallet } from 'ethers' +import fs from 'fs' +import os from 'os' +import path from 'path' +import { hexStringToByteArray, computeCodebaseHash } from '../index.js' +import { + getOceanArtifactsAdresses, + OCEAN_ARTIFACTS_ADDRESSES_PER_CHAIN +} from '../address.js' +import { create256Hash } from '../crypt.js' +import { CONFIG_LOGGER } from '../logging/common.js' +import { LOG_LEVELS_STR, GENERIC_EMOJIS } from '../logging/Logger.js' +import { OceanNodeConfigSchema } from './schemas.js' +import { ENV_TO_CONFIG_MAPPING } from './constants.js' +import { fileURLToPath } from 'url' +import lodash from 'lodash' + +let previousConfiguration: OceanNodeConfig = null + +function mapEnvToConfig( + env: NodeJS.ProcessEnv, + mapping: Record +): Record { + const result: Record = {} + for (const [envKey, configKey] of Object.entries(mapping)) { + const value = env[envKey] + if (value !== undefined && value !== 'undefined') { + lodash.set(result, configKey, value) + } + } + return result +} + +function preprocessConfigData(data: any): void { + if (data.INTERFACES) { + try { + const interfaces = JSON.parse(data.INTERFACES).map((i: string) => i.toUpperCase()) + if (interfaces.length > 0) { + data.hasHttp = interfaces.includes('HTTP') + data.hasP2P = interfaces.includes('P2P') + } + } catch (error) { + CONFIG_LOGGER.warn(`Failed to parse INTERFACES: ${error.message}`) + } + delete data.INTERFACES + } + + // Transform DB_* env vars to dbConfig + if (data.DB_URL) { + data.dbConfig = { + url: data.DB_URL, + username: data.DB_USERNAME, + password: data.DB_PASSWORD, + dbType: data.DB_TYPE || 'elasticsearch' + } + delete data.DB_URL + delete data.DB_USERNAME + delete data.DB_PASSWORD + delete data.DB_TYPE + } + + // Transform FEE_* env vars to feeStrategy + if (data.FEE_AMOUNT && data.FEE_TOKENS) { + try { + const feeAmount = JSON.parse(data.FEE_AMOUNT) + const tokens = JSON.parse(data.FEE_TOKENS) + const feeTokens = Object.keys(tokens).map((key) => ({ + chain: key, + token: tokens[key] + })) + data.feeStrategy = { feeAmount, feeTokens } + } catch (error) { + CONFIG_LOGGER.error(`Failed to parse fee strategy: ${error.message}`) + } + delete data.FEE_AMOUNT + delete data.FEE_TOKENS + } +} + +export async function getPeerIdFromPrivateKey( + privateKey: string +): Promise { + const key = new keys.supportedKeys.secp256k1.Secp256k1PrivateKey( + hexStringToByteArray(privateKey.slice(2)) + ) + + return { + peerId: await createFromPrivKey(key), + publicKey: key.public.bytes, + privateKey: (key as any)._key, + ethAddress: new Wallet(privateKey.substring(2)).address + } +} + +export function getDefaultFeeTokens(supportedNetworks?: RPCS): FeeTokens[] { + const nodeFeesTokens: FeeTokens[] = [] + let addressesData: any = getOceanArtifactsAdresses() + if (!addressesData) { + addressesData = OCEAN_ARTIFACTS_ADDRESSES_PER_CHAIN + } + + const hasSupportedNetworks = + supportedNetworks && Object.keys(supportedNetworks).length > 0 + + Object.keys(addressesData).forEach((chain: any) => { + const chainName = chain as string + const { chainId, Ocean } = addressesData[chainName] + + if (hasSupportedNetworks) { + const keyId: string = chainId as string + const chainInfo: any = supportedNetworks[keyId] + if (chainInfo) { + nodeFeesTokens.push({ + chain: keyId, + token: Ocean + }) + } + } else { + nodeFeesTokens.push({ + chain: chainId as string, + token: Ocean + }) + } + }) + return nodeFeesTokens +} + +export function buildC2DClusters( + dockerComputeEnvironments: C2DDockerConfig[] +): C2DClusterInfo[] { + const clusters: C2DClusterInfo[] = [] + + if (process.env.OPERATOR_SERVICE_URL) { + try { + const clustersURLS: string[] = JSON.parse(process.env.OPERATOR_SERVICE_URL) + for (const theURL of clustersURLS) { + clusters.push({ + connection: theURL, + hash: create256Hash(theURL), + type: C2DClusterType.OPF_K8 + }) + } + } catch (error) { + CONFIG_LOGGER.error(`Failed to parse OPERATOR_SERVICE_URL: ${error.message}`) + } + } + + if (dockerComputeEnvironments) { + for (const dockerC2d of dockerComputeEnvironments) { + if (dockerC2d.socketPath || dockerC2d.host) { + const hash = create256Hash(JSON.stringify(dockerC2d)) + clusters.push({ + connection: dockerC2d, + hash, + type: C2DClusterType.DOCKER, + tempFolder: './c2d_storage/' + hash + }) + } + } + } + + return clusters +} + +export function getConfigFilePath(configPath?: string): string { + if (!configPath) { + configPath = process.env.CONFIG_PATH || path.join(process.cwd(), 'config.json') + } + return configPath +} + +export function loadConfigFromFile(configPath?: string): OceanNodeConfig { + configPath = getConfigFilePath(configPath) + + if (configPath.startsWith('$HOME')) { + const home = process.env.HOME || os.homedir() + if (!home) { + throw new Error( + 'Config path contains $HOME but HOME is not set in the environment.' + ) + } + configPath = path.join(home, configPath.slice('$HOME'.length)) + } + + if ( + configPath !== path.join(process.cwd(), 'config.json') && + !path.isAbsolute(configPath) + ) { + throw new Error(`Config path must be absolute. Got: ${configPath}`) + } + + if (!fs.existsSync(configPath)) { + throw new Error(`Config file not found at path: ${configPath}`) + } + + const rawData = fs.readFileSync(configPath, 'utf-8') + let config: OceanNodeConfig + + try { + config = JSON.parse(rawData) + } catch (err) { + throw new Error(`Invalid JSON in config file: ${configPath}. Error: ${err.message}`) + } + + return config +} + +export async function buildMergedConfig(): Promise { + const baseConfig = loadConfigFromFile() + const privateKey = process.env.PRIVATE_KEY + if (!privateKey || privateKey.length !== 66) { + CONFIG_LOGGER.logMessageWithEmoji( + 'Invalid or missing PRIVATE_KEY env variable. Must be 66 characters (0x + 64 hex chars).', + true, + GENERIC_EMOJIS.EMOJI_CROSS_MARK, + LOG_LEVELS_STR.LEVEL_ERROR + ) + throw new Error('Invalid PRIVATE_KEY') + } + + const keys = await getPeerIdFromPrivateKey(privateKey) + + const { env } = process + const envOverrides: Record = { keys } + + Object.assign(envOverrides, mapEnvToConfig(env, ENV_TO_CONFIG_MAPPING)) + + const merged = lodash.merge({}, baseConfig, envOverrides) + + preprocessConfigData(merged) + + const parsed = OceanNodeConfigSchema.safeParse(merged) + + if (!parsed.success) { + console.error('\n❌ Invalid Ocean Node configuration:') + for (const issue of parsed.error.issues) { + console.error(` • ${issue.path.join('.')}: ${issue.message}`) + } + throw new Error('Configuration validation failed') + } + + const config = parsed.data as any + + // Post-processing transformations + if (!config.indexingNetworks) { + config.indexingNetworks = config.supportedNetworks + } + + if (Array.isArray(config.indexingNetworks) && config.supportedNetworks) { + const filteredNetworks: RPCS = {} + for (const chainId of config.indexingNetworks) { + const chainIdStr = String(chainId) + if (config.supportedNetworks[chainIdStr]) { + filteredNetworks[chainIdStr] = config.supportedNetworks[chainIdStr] + } + } + config.indexingNetworks = filteredNetworks + } + + if (!config.feeStrategy) { + config.feeStrategy = { + feeAmount: { amount: 0, unit: 'MB' }, + feeTokens: getDefaultFeeTokens(config.supportedNetworks as RPCS) + } + } + + config.c2dClusters = buildC2DClusters( + config.dockerComputeEnvironments as C2DDockerConfig[] + ) + + return config as OceanNodeConfig +} + +export async function getConfiguration( + forceReload: boolean = false, + isStartup: boolean = false +): Promise { + if (!previousConfiguration || forceReload) { + previousConfiguration = await buildMergedConfig() + } + + if (!previousConfiguration.codeHash) { + const __filename = fileURLToPath(import.meta.url) + const __dirname = path.dirname(__filename.replace('utils/config', 'utils')) + previousConfiguration.codeHash = await computeCodebaseHash(__dirname) + } + + return previousConfiguration +} + +export async function printCurrentConfig() { + const conf = await getConfiguration(true) + conf.keys.privateKey = '[*** HIDDEN CONTENT ***]' + console.log(JSON.stringify(conf, null, 4)) +} diff --git a/src/utils/config/constants.ts b/src/utils/config/constants.ts new file mode 100644 index 000000000..fbe0d5b40 --- /dev/null +++ b/src/utils/config/constants.ts @@ -0,0 +1,127 @@ +export const ENV_TO_CONFIG_MAPPING = { + INTERFACES: 'INTERFACES', + DB_URL: 'DB_URL', + DB_USERNAME: 'DB_USERNAME', + DB_PASSWORD: 'DB_PASSWORD', + DB_TYPE: 'DB_TYPE', + FEE_AMOUNT: 'FEE_AMOUNT', + FEE_TOKENS: 'FEE_TOKENS', + HTTP_API_PORT: 'httpPort', + CONTROL_PANEL: 'hasControlPanel', + RPCS: 'supportedNetworks', + IPFS_GATEWAY: 'ipfsGateway', + ARWEAVE_GATEWAY: 'arweaveGateway', + ACCOUNT_PURGATORY_URL: 'accountPurgatoryUrl', + ASSET_PURGATORY_URL: 'assetPurgatoryUrl', + UNSAFE_URLS: 'unsafeURLs', + IS_BOOTSTRAP: 'isBootstrap', + ESCROW_CLAIM_TIMEOUT: 'claimDurationTimeout', + VALIDATE_UNSIGNED_DDO: 'validateUnsignedDDO', + JWT_SECRET: 'jwtSecret', + MAX_REQ_PER_MINUTE: 'rateLimit', + MAX_CONNECTIONS_PER_MINUTE: 'maxConnections', + RATE_DENY_LIST: 'denyList', + AUTHORIZED_DECRYPTERS: 'authorizedDecrypters', + AUTHORIZED_DECRYPTERS_LIST: 'authorizedDecryptersList', + ALLOWED_VALIDATORS: 'allowedValidators', + ALLOWED_VALIDATORS_LIST: 'allowedValidatorsList', + AUTHORIZED_PUBLISHERS: 'authorizedPublishers', + AUTHORIZED_PUBLISHERS_LIST: 'authorizedPublishersList', + ALLOWED_ADMINS: 'allowedAdmins', + ALLOWED_ADMINS_LIST: 'allowedAdminsList', + DOCKER_COMPUTE_ENVIRONMENTS: 'dockerComputeEnvironments', + P2P_BOOTSTRAP_NODES: 'p2pConfig.bootstrapNodes', + P2P_BOOTSTRAP_TIMEOUT: 'p2pConfig.bootstrapTimeout', + P2P_BOOTSTRAP_TAGNAME: 'p2pConfig.bootstrapTagName', + P2P_BOOTSTRAP_TAGVALUE: 'p2pConfig.bootstrapTagValue', + P2P_BOOTSTRAP_TTL: 'p2pConfig.bootstrapTTL', + P2P_ENABLE_IPV4: 'p2pConfig.enableIPV4', + P2P_ENABLE_IPV6: 'p2pConfig.enableIPV6', + P2P_ipV4BindAddress: 'p2pConfig.ipV4BindAddress', + P2P_ipV4BindTcpPort: 'p2pConfig.ipV4BindTcpPort', + P2P_ipV4BindWsPort: 'p2pConfig.ipV4BindWsPort', + P2P_ipV6BindAddress: 'p2pConfig.ipV6BindAddress', + P2P_ipV6BindTcpPort: 'p2pConfig.ipV6BindTcpPort', + P2P_ipV6BindWsPort: 'p2pConfig.ipV6BindWsPort', + P2P_ANNOUNCE_ADDRESSES: 'p2pConfig.announceAddresses', + P2P_pubsubPeerDiscoveryInterval: 'p2pConfig.pubsubPeerDiscoveryInterval', + P2P_dhtMaxInboundStreams: 'p2pConfig.dhtMaxInboundStreams', + P2P_dhtMaxOutboundStreams: 'p2pConfig.dhtMaxOutboundStreams', + P2P_DHT_FILTER: 'p2pConfig.dhtFilter', + P2P_mDNSInterval: 'p2pConfig.mDNSInterval', + P2P_connectionsMaxParallelDials: 'p2pConfig.connectionsMaxParallelDials', + P2P_connectionsDialTimeout: 'p2pConfig.connectionsDialTimeout', + P2P_ENABLE_UPNP: 'p2pConfig.upnp', + P2P_ENABLE_AUTONAT: 'p2pConfig.autoNat', + P2P_ENABLE_CIRCUIT_RELAY_SERVER: 'p2pConfig.enableCircuitRelayServer', + P2P_ENABLE_CIRCUIT_RELAY_CLIENT: 'p2pConfig.enableCircuitRelayClient', + P2P_CIRCUIT_RELAYS: 'p2pConfig.circuitRelays', + P2P_ANNOUNCE_PRIVATE: 'p2pConfig.announcePrivateIp', + P2P_FILTER_ANNOUNCED_ADDRESSES: 'p2pConfig.filterAnnouncedAddresses', + P2P_MIN_CONNECTIONS: 'p2pConfig.minConnections', + P2P_MAX_CONNECTIONS: 'p2pConfig.maxConnections', + P2P_AUTODIALPEERRETRYTHRESHOLD: 'p2pConfig.autoDialPeerRetryThreshold', + P2P_AUTODIALCONCURRENCY: 'p2pConfig.autoDialConcurrency', + P2P_MAXPEERADDRSTODIAL: 'p2pConfig.maxPeerAddrsToDial', + P2P_AUTODIALINTERVAL: 'p2pConfig.autoDialInterval', + P2P_ENABLE_NETWORK_STATS: 'p2pConfig.enableNetworkStats' +} as const + +// Configuration defaults +export const DEFAULT_RATE_LIMIT_PER_MINUTE = 30 +export const DEFAULT_MAX_CONNECTIONS_PER_MINUTE = 60 * 2 // 120 requests per minute + +export const DEFAULT_BOOTSTRAP_ADDRESSES = [ + // OPF nodes + // node1 + '/dns4/node1.oceanprotocol.com/tcp/9000/p2p/16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP', + '/dns4/node1.oceanprotocol.com/tcp/9001/ws/p2p/16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP', + '/dns6/node1.oceanprotocol.com/tcp/9002/p2p/16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP', + '/dns6/node1.oceanprotocol.com/tcp/9003/ws/p2p/16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP', + // node 2 + '/dns4/node2.oceanprotocol.com/tcp/9000/p2p/16Uiu2HAmHwzeVw7RpGopjZe6qNBJbzDDBdqtrSk7Gcx1emYsfgL4', + '/dns4/node2.oceanprotocol.com/tcp/9001/ws/p2p/16Uiu2HAmHwzeVw7RpGopjZe6qNBJbzDDBdqtrSk7Gcx1emYsfgL4', + '/dns6/node2.oceanprotocol.com/tcp/9002/p2p/16Uiu2HAmHwzeVw7RpGopjZe6qNBJbzDDBdqtrSk7Gcx1emYsfgL4', + '/dns6/node2.oceanprotocol.com/tcp/9003/ws/p2p/16Uiu2HAmHwzeVw7RpGopjZe6qNBJbzDDBdqtrSk7Gcx1emYsfgL4', + // node 3 + '/dns4/node3.oceanprotocol.com/tcp/9000/p2p/16Uiu2HAmBKSeEP3v4tYEPsZsZv9VELinyMCsrVTJW9BvQeFXx28U', + '/dns4/node3.oceanprotocol.com/tcp/9001/ws/p2p/16Uiu2HAmBKSeEP3v4tYEPsZsZv9VELinyMCsrVTJW9BvQeFXx28U', + '/dns6/node3.oceanprotocol.com/tcp/9002/p2p/16Uiu2HAmBKSeEP3v4tYEPsZsZv9VELinyMCsrVTJW9BvQeFXx28U', + '/dns6/node3.oceanprotocol.com/tcp/9003/ws/p2p/16Uiu2HAmBKSeEP3v4tYEPsZsZv9VELinyMCsrVTJW9BvQeFXx28U', + // node 4 + '/dns4/node4.oceanprotocol.com/tcp/9000/p2p/16Uiu2HAmSTVTArioKm2wVcyeASHYEsnx2ZNq467Z4GMDU4ErEPom', + '/dns4/node4.oceanprotocol.com/tcp/9001/ws/p2p/16Uiu2HAmSTVTArioKm2wVcyeASHYEsnx2ZNq467Z4GMDU4ErEPom', + '/dns6/node4.oceanprotocol.com/tcp/9002/p2p/16Uiu2HAmSTVTArioKm2wVcyeASHYEsnx2ZNq467Z4GMDU4ErEPom', + '/dns6/node4.oceanprotocol.com/tcp/9003/ws/p2p/16Uiu2HAmSTVTArioKm2wVcyeASHYEsnx2ZNq467Z4GMDU4ErEPom' +] as const + +export const DEFAULT_UNSAFE_URLS = [ + // AWS and GCP + '^.*(169.254.169.254).*', + // GCP + '^.*(metadata.google.internal).*', + '^.*(http://metadata).*', + // Azure + '^.*(http://169.254.169.254).*', + // Oracle Cloud + '^.*(http://192.0.0.192).*', + // Alibaba Cloud + '^.*(http://100.100.100.200).*', + // k8s ETCD + '^.*(127.0.0.1).*' +] as const + +export const DEFAULT_FILTER_ANNOUNCED_ADDRESSES = [ + '127.0.0.0/8', + '10.0.0.0/8', + '172.16.0.0/12', + '192.168.0.0/16', + '100.64.0.0/10', + '169.254.0.0/16', + '192.0.0.0/24', + '192.0.2.0/24', + '198.51.100.0/24', + '203.0.113.0/24', + '224.0.0.0/4', + '240.0.0.0/4' +] as const diff --git a/src/utils/config/index.ts b/src/utils/config/index.ts new file mode 100644 index 000000000..276c92be9 --- /dev/null +++ b/src/utils/config/index.ts @@ -0,0 +1,6 @@ +export * from './schemas.js' +export * from './transforms.js' +export * from './constants.js' +export * from './builder.js' + +export { getConfiguration, getConfigFilePath, printCurrentConfig } from './builder.js' diff --git a/src/utils/config/schemas.ts b/src/utils/config/schemas.ts new file mode 100644 index 000000000..bd7237a3f --- /dev/null +++ b/src/utils/config/schemas.ts @@ -0,0 +1,332 @@ +import { z } from 'zod' +import { getAddress } from 'ethers' +import { dhtFilterMethod } from '../../@types/OceanNode.js' +import { C2DClusterType } from '../../@types/C2D/C2D.js' +import { CONFIG_LOGGER } from '../logging/common.js' +import { booleanFromString, jsonFromString } from './transforms.js' +import { + DEFAULT_BOOTSTRAP_ADDRESSES, + DEFAULT_RATE_LIMIT_PER_MINUTE, + DEFAULT_UNSAFE_URLS, + DEFAULT_FILTER_ANNOUNCED_ADDRESSES +} from './constants.js' + +function isValidUrl(urlString: string): boolean { + try { + // eslint-disable-next-line no-new + new URL(urlString) + return true + } catch { + return false + } +} + +export const SupportedNetworkSchema = z.object({ + chainId: z.number(), + rpc: z.string(), + network: z.string().optional(), + chunkSize: z.number().optional(), + startBlock: z.number().optional(), + fallbackRPCs: z.array(z.string()).optional() +}) + +export const RPCSSchema = z.record(z.string(), SupportedNetworkSchema) + +export const AccessListContractSchema = z + .union([ + z.record(z.string(), z.array(z.string())), + z.array(z.any()).transform((): null => null), + z.null() + ]) + .nullable() + +export const OceanNodeKeysSchema = z.object({ + peerId: z.any().optional(), + publicKey: z.any().optional(), + privateKey: z.any().optional(), + ethAddress: z.string().optional() +}) + +export const DenyListSchema = z.object({ + peers: z.array(z.string()).default([]), + ips: z.array(z.string()).default([]) +}) + +export const FeeAmountSchema = z.object({ + amount: z.number(), + unit: z.string() +}) + +export const FeeTokensSchema = z.object({ + chain: z.string(), + token: z.string() +}) + +export const FeeStrategySchema = z.object({ + feeTokens: z.array(FeeTokensSchema).optional(), + feeAmount: FeeAmountSchema.optional() +}) + +export const OceanNodeDBConfigSchema = z.object({ + url: z.string().nullable(), + username: z.string().optional(), + password: z.string().optional(), + dbType: z.string().nullable() +}) + +export const ComputeResourceSchema = z.object({ + id: z.string(), + total: z.number().optional(), + description: z.string().optional(), + type: z.string().optional(), + kind: z.string().optional(), + min: z.number().optional(), + max: z.number().optional(), + inUse: z.number().optional(), + init: z.any().optional() +}) + +export const ComputeResourcesPricingInfoSchema = z.object({ + id: z.string(), + price: z.number() +}) + +export const ComputeEnvFeesSchema = z.object({ + feeToken: z.string().optional(), + prices: z.array(ComputeResourcesPricingInfoSchema).optional() +}) + +export const ComputeEnvironmentFreeOptionsSchema = z.object({ + maxJobDuration: z.number().int().optional().default(3600), + maxJobs: z.number().int().optional().default(3), + resources: z.array(ComputeResourceSchema).optional(), + access: z + .object({ + addresses: z.array(z.string()), + accessLists: z.array(z.string()) + }) + .optional() +}) + +export const C2DDockerConfigSchema = z.array( + z + .object({ + socketPath: z.string().optional(), + protocol: z.string().optional(), + host: z.string().optional(), + port: z.number().optional(), + caPath: z.string().optional(), + certPath: z.string().optional(), + keyPath: z.string().optional(), + resources: z.array(ComputeResourceSchema).optional(), + storageExpiry: z.number().int().optional().default(604800), + maxJobDuration: z.number().int().optional().default(3600), + access: z + .object({ + addresses: z.array(z.string()), + accessLists: z.array(z.string()) + }) + .optional(), + fees: z.record(z.string(), z.array(ComputeEnvFeesSchema)), + free: ComputeEnvironmentFreeOptionsSchema.optional() + }) + .refine((data) => data.fees !== undefined && Object.keys(data.fees).length > 0, { + message: 'There is no fees configuration!' + }) + .refine((data) => data.storageExpiry >= data.maxJobDuration, { + message: '"storageExpiry" should be greater than "maxJobDuration"' + }) + .refine( + (data) => { + if (!data.resources) return false + return data.resources.some((r) => r.id === 'disk' && r.total) + }, + { message: 'There is no "disk" resource configured. This is mandatory' } + ) + .transform((data) => { + if (data.resources) { + for (const resource of data.resources) { + if (resource.id === 'disk' && resource.total) { + resource.type = 'disk' + } + } + } + return data + }) +) + +export const C2DClusterInfoSchema = z.object({ + type: z.nativeEnum(C2DClusterType), + hash: z.string(), + connection: z.any().optional(), + tempFolder: z.string().optional() +}) + +export const OceanNodeP2PConfigSchema = z.object({ + bootstrapNodes: jsonFromString(z.array(z.string())).default([ + ...DEFAULT_BOOTSTRAP_ADDRESSES + ]), + bootstrapTimeout: z.coerce.number().optional().default(10000), + bootstrapTagName: z.string().optional().default('bootstrap'), + bootstrapTagValue: z.coerce.number().optional().default(50), + bootstrapTTL: z.coerce.number().optional(), + enableIPV4: booleanFromString.optional().default(true), + enableIPV6: booleanFromString.optional().default(true), + ipV4BindAddress: z.string().nullable().optional().default('0.0.0.0'), + ipV4BindTcpPort: z.coerce.number().nullable().optional().default(9000), + ipV4BindWsPort: z.coerce.number().nullable().optional().default(9001), + ipV6BindAddress: z.string().nullable().optional().default('::'), + ipV6BindTcpPort: z.coerce.number().nullable().optional().default(9002), + ipV6BindWsPort: z.coerce.number().nullable().optional().default(9003), + pubsubPeerDiscoveryInterval: z.coerce.number().optional().default(1000), + dhtMaxInboundStreams: z.coerce.number().optional().default(500), + dhtMaxOutboundStreams: z.coerce.number().optional().default(500), + dhtFilter: z + .union([z.nativeEnum(dhtFilterMethod), z.string(), z.number(), z.null()]) + .transform((v) => { + if (v === null) { + return dhtFilterMethod.filterNone + } + if (typeof v === 'number' || typeof v === 'string') { + const filterValue = typeof v === 'string' ? parseInt(v, 10) : v + switch (filterValue) { + case 1: + return dhtFilterMethod.filterPrivate + case 2: + return dhtFilterMethod.filterPublic + default: + return dhtFilterMethod.filterNone + } + } + return v + }) + .optional() + .default(dhtFilterMethod.filterNone), + mDNSInterval: z.coerce.number().optional().default(20e3), + connectionsMaxParallelDials: z.coerce.number().optional().default(15), + connectionsDialTimeout: z.coerce.number().optional().default(30e3), + upnp: booleanFromString.optional().default(true), + autoNat: booleanFromString.optional().default(true), + enableCircuitRelayServer: booleanFromString.optional().default(false), + enableCircuitRelayClient: booleanFromString.optional().default(false), + circuitRelays: z.coerce.number().optional().default(0), + announcePrivateIp: booleanFromString.optional().default(false), + announceAddresses: jsonFromString(z.array(z.string())).optional().default([]), + filterAnnouncedAddresses: jsonFromString(z.array(z.string())) + .optional() + .default([...DEFAULT_FILTER_ANNOUNCED_ADDRESSES]), + minConnections: z.coerce.number().optional().default(1), + maxConnections: z.coerce.number().optional().default(300), + autoDialPeerRetryThreshold: z.coerce.number().optional().default(120000), + autoDialConcurrency: z.coerce.number().optional().default(5), + maxPeerAddrsToDial: z.coerce.number().optional().default(5), + autoDialInterval: z.coerce.number().optional().default(5000), + enableNetworkStats: booleanFromString.optional().default(false) +}) + +const addressArrayFromString = jsonFromString(z.array(z.string())).transform( + (addresses) => { + if (!Array.isArray(addresses)) return [] + try { + return addresses.map((addr) => getAddress(addr)) + } catch (error) { + CONFIG_LOGGER.error(`Invalid address in list: ${error.message}`) + return [] + } + } +) + +export const OceanNodeConfigSchema = z + .object({ + dockerComputeEnvironments: jsonFromString(C2DDockerConfigSchema) + .optional() + .default([]), + + authorizedDecrypters: addressArrayFromString.optional().default([]), + authorizedDecryptersList: jsonFromString(AccessListContractSchema).optional(), + + allowedValidators: addressArrayFromString.optional().default([]), + allowedValidatorsList: jsonFromString(AccessListContractSchema).optional(), + + authorizedPublishers: addressArrayFromString.optional().default([]), + authorizedPublishersList: jsonFromString(AccessListContractSchema).optional(), + + keys: OceanNodeKeysSchema.optional(), + + INTERFACES: z.string().optional(), + hasP2P: booleanFromString.optional().default(true), + hasHttp: booleanFromString.optional().default(true), + + p2pConfig: OceanNodeP2PConfigSchema.nullable().optional(), + hasIndexer: booleanFromString.default(true), + hasControlPanel: booleanFromString.default(true), + + DB_URL: z.string().optional(), + DB_USERNAME: z.string().optional(), + DB_PASSWORD: z.string().optional(), + DB_TYPE: z.string().optional(), + dbConfig: OceanNodeDBConfigSchema.optional(), + + FEE_AMOUNT: z.string().optional(), + FEE_TOKENS: z.string().optional(), + feeStrategy: FeeStrategySchema.optional(), + + httpPort: z.coerce.number().optional().default(3000), + rateLimit: z.coerce.number().optional().default(DEFAULT_RATE_LIMIT_PER_MINUTE), + + ipfsGateway: z.string().nullable().optional(), + arweaveGateway: z.string().nullable().optional(), + + supportedNetworks: jsonFromString(RPCSSchema).optional(), + + claimDurationTimeout: z.coerce.number().default(3600), + indexingNetworks: z + .union([jsonFromString(RPCSSchema), z.array(z.union([z.string(), z.number()]))]) + .optional(), + + c2dClusters: z.array(C2DClusterInfoSchema).optional(), + accountPurgatoryUrl: z + .string() + .nullable() + .refine((url) => !url || isValidUrl(url), { + message: 'accountPurgatoryUrl must be a valid URL' + }), + assetPurgatoryUrl: z + .string() + .nullable() + .refine((url) => !url || isValidUrl(url), { + message: 'assetPurgatoryUrl must be a valid URL' + }), + allowedAdmins: addressArrayFromString.optional(), + allowedAdminsList: jsonFromString(AccessListContractSchema).optional(), + + codeHash: z.string().optional(), + maxConnections: z.coerce.number().optional(), + denyList: jsonFromString(DenyListSchema).optional().default({ peers: [], ips: [] }), + unsafeURLs: jsonFromString(z.array(z.string())) + .optional() + .default([...DEFAULT_UNSAFE_URLS]), + isBootstrap: booleanFromString.optional().default(false), + validateUnsignedDDO: booleanFromString.optional().default(true), + jwtSecret: z.string() + }) + .passthrough() + .superRefine((data, ctx) => { + if (!data.hasHttp && !data.hasP2P) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'At least one interface (HTTP or P2P) must be enabled', + path: ['hasHttp'] + }) + } + + if (data.hasP2P && !data.p2pConfig) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'P2P configuration is required when hasP2P is true', + path: ['p2pConfig'] + }) + } + }) + +export type OceanNodeConfigParsed = z.infer diff --git a/src/utils/config/transforms.ts b/src/utils/config/transforms.ts new file mode 100644 index 000000000..20d0f8f13 --- /dev/null +++ b/src/utils/config/transforms.ts @@ -0,0 +1,25 @@ +import { z } from 'zod' +import { CONFIG_LOGGER } from '../logging/common.js' + +export const booleanFromString = z.union([z.boolean(), z.string()]).transform((v) => { + if (typeof v === 'string') { + return v === 'true' || v === '1' || v.toLowerCase() === 'yes' + } + return v +}) + +export const jsonFromString = (schema: z.ZodType) => + z.union([schema, z.string(), z.undefined()]).transform((v) => { + if (v === undefined || v === 'undefined') { + return undefined + } + if (typeof v === 'string') { + try { + return JSON.parse(v) + } catch (error) { + CONFIG_LOGGER.warn(`Failed to parse JSON: ${error.message}`) + return v + } + } + return v + }) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index b1acee704..1b0dee87b 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -4,7 +4,6 @@ import { Hashes } from '../@types/blockchain' export const PROTOCOL_COMMANDS = { DOWNLOAD: 'download', DOWNLOAD_URL: 'downloadURL', // we still use this - ECHO: 'echo', ENCRYPT: 'encrypt', ENCRYPT_FILE: 'encryptFile', DECRYPT_DDO: 'decryptDDO', @@ -19,8 +18,10 @@ export const PROTOCOL_COMMANDS = { VALIDATE_DDO: 'validateDDO', COMPUTE_GET_ENVIRONMENTS: 'getComputeEnvironments', COMPUTE_START: 'startCompute', + FREE_COMPUTE_START: 'freeStartCompute', COMPUTE_STOP: 'stopCompute', COMPUTE_GET_STATUS: 'getComputeStatus', + COMPUTE_GET_STREAMABLE_LOGS: 'getComputeStreamableLogs', COMPUTE_GET_RESULT: 'getComputeResult', COMPUTE_INITIALIZE: 'initializeCompute', STOP_NODE: 'stopNode', @@ -28,12 +29,20 @@ export const PROTOCOL_COMMANDS = { REINDEX_CHAIN: 'reindexChain', HANDLE_INDEXING_THREAD: 'handleIndexingThread', COLLECT_FEES: 'collectFees', - POLICY_SERVER_PASSTHROUGH: 'PolicyServerPassthrough' + POLICY_SERVER_PASSTHROUGH: 'PolicyServerPassthrough', + GET_P2P_PEER: 'getP2PPeer', + GET_P2P_PEERS: 'getP2PPeers', + GET_P2P_NETWORK_STATS: 'getP2PNetworkStats', + FIND_PEER: 'findPeer', + CREATE_AUTH_TOKEN: 'createAuthToken', + INVALIDATE_AUTH_TOKEN: 'invalidateAuthToken', + FETCH_CONFIG: 'fetchConfig', + PUSH_CONFIG: 'pushConfig', + JOBS: 'jobs' } // more visible, keep then close to make sure we always update both export const SUPPORTED_PROTOCOL_COMMANDS: string[] = [ PROTOCOL_COMMANDS.DOWNLOAD, - PROTOCOL_COMMANDS.ECHO, PROTOCOL_COMMANDS.ENCRYPT, PROTOCOL_COMMANDS.ENCRYPT_FILE, PROTOCOL_COMMANDS.NONCE, @@ -48,16 +57,27 @@ export const SUPPORTED_PROTOCOL_COMMANDS: string[] = [ PROTOCOL_COMMANDS.VALIDATE_DDO, PROTOCOL_COMMANDS.COMPUTE_GET_ENVIRONMENTS, PROTOCOL_COMMANDS.COMPUTE_START, + PROTOCOL_COMMANDS.FREE_COMPUTE_START, PROTOCOL_COMMANDS.COMPUTE_STOP, PROTOCOL_COMMANDS.COMPUTE_GET_STATUS, PROTOCOL_COMMANDS.COMPUTE_GET_RESULT, + PROTOCOL_COMMANDS.COMPUTE_GET_STREAMABLE_LOGS, PROTOCOL_COMMANDS.COMPUTE_INITIALIZE, PROTOCOL_COMMANDS.STOP_NODE, PROTOCOL_COMMANDS.REINDEX_TX, PROTOCOL_COMMANDS.REINDEX_CHAIN, PROTOCOL_COMMANDS.HANDLE_INDEXING_THREAD, PROTOCOL_COMMANDS.COLLECT_FEES, - PROTOCOL_COMMANDS.POLICY_SERVER_PASSTHROUGH + PROTOCOL_COMMANDS.POLICY_SERVER_PASSTHROUGH, + PROTOCOL_COMMANDS.GET_P2P_PEER, + PROTOCOL_COMMANDS.GET_P2P_PEERS, + PROTOCOL_COMMANDS.GET_P2P_NETWORK_STATS, + PROTOCOL_COMMANDS.FIND_PEER, + PROTOCOL_COMMANDS.CREATE_AUTH_TOKEN, + PROTOCOL_COMMANDS.INVALIDATE_AUTH_TOKEN, + PROTOCOL_COMMANDS.FETCH_CONFIG, + PROTOCOL_COMMANDS.PUSH_CONFIG, + PROTOCOL_COMMANDS.JOBS ] export const MetadataStates = { @@ -78,7 +98,11 @@ export const EVENTS = { TOKEN_URI_UPDATE: 'TokenURIUpdate', EXCHANGE_CREATED: 'ExchangeCreated', EXCHANGE_RATE_CHANGED: 'ExchangeRateChanged', - DISPENSER_CREATED: 'DispenserCreated' + DISPENSER_CREATED: 'DispenserCreated', + DISPENSER_ACTIVATED: 'DispenserActivated', + DISPENSER_DEACTIVATED: 'DispenserDeactivated', + EXCHANGE_ACTIVATED: 'ExchangeActivated', + EXCHANGE_DEACTIVATED: 'ExchangeDeactivated' } export const INDEXER_CRAWLING_EVENTS = { @@ -132,6 +156,22 @@ export const EVENT_HASHES: Hashes = { '0x7d0aa581e6eb87e15f58588ff20c39ff6622fc796ec9bb664df6ed3eb02442c9': { type: EVENTS.DISPENSER_CREATED, text: 'DispenserCreated(address,address,uint256,uint256,address)' + }, + '0xe9372084cb52c5392afee4b9d79d131e04b1e65676088d50a8f39fffb16a8745': { + type: EVENTS.DISPENSER_ACTIVATED, + text: 'DispenserActivated(address)' + }, + '0x393f01061139648745ea000bb047bbe1785bd3a19d3a9c90f6747e1d2357d2b8': { + type: EVENTS.DISPENSER_DEACTIVATED, + text: 'DispenserDeactivated(address)' + }, + '0xc7344c45124818d1d3a4c24ccb9b86d8b88d3bd05209b2a42b494cb32a503529': { + type: EVENTS.EXCHANGE_ACTIVATED, + text: 'ExchangeActivated(bytes32,address)' + }, + '0x03da9148e1de78fba22de63c573465562ebf6ef878a1d3ea83790a560229984c': { + type: EVENTS.EXCHANGE_DEACTIVATED, + text: 'ExchangeDeactivated(bytes32,address)' } } @@ -156,6 +196,11 @@ export const ENVIRONMENT_VARIABLES: Record = { value: process.env.HTTP_API_PORT, required: false }, + CONFIG_PATH: { + name: 'CONFIG_PATH', + value: process.env.CONFIG_PATH, + required: false + }, PRIVATE_KEY: { name: 'PRIVATE_KEY', value: process.env.PRIVATE_KEY, required: true }, // used on test environments (ci) NODE1_PRIVATE_KEY: { @@ -221,6 +266,11 @@ export const ENVIRONMENT_VARIABLES: Record = { value: process.env.AUTHORIZED_DECRYPTERS, required: false }, + AUTHORIZED_DECRYPTERS_LIST: { + name: 'AUTHORIZED_DECRYPTERS_LIST', + value: process.env.AUTHORIZED_DECRYPTERS_LIST, + required: false + }, OPERATOR_SERVICE_URL: { name: 'OPERATOR_SERVICE_URL', value: process.env.OPERATOR_SERVICE_URL, @@ -236,6 +286,11 @@ export const ENVIRONMENT_VARIABLES: Record = { value: process.env.ALLOWED_VALIDATORS, required: false }, + ALLOWED_VALIDATORS_LIST: { + name: 'ALLOWED_VALIDATORS_LIST', + value: process.env.ALLOWED_VALIDATORS_LIST, + required: false + }, INDEXER_INTERVAL: { name: 'INDEXER_INTERVAL', value: process.env.INDEXER_INTERVAL, @@ -251,6 +306,11 @@ export const ENVIRONMENT_VARIABLES: Record = { value: process.env.ALLOWED_ADMINS, required: false }, + ALLOWED_ADMINS_LIST: { + name: 'ALLOWED_ADMINS_LIST', + value: process.env.ALLOWED_ADMINS_LIST, + required: false + }, ASSET_PURGATORY_URL: { name: 'ASSET_PURGATORY_URL', value: process.env.ASSET_PURGATORY_URL, @@ -261,15 +321,22 @@ export const ENVIRONMENT_VARIABLES: Record = { value: process.env.ACCOUNT_PURGATORY_URL, required: false }, - DASHBOARD: { - name: 'DASHBOARD', - value: process.env.DASHBOARD, + CONTROL_PANEL: { + name: 'CONTROL_PANEL', + // keep this for backwards compatibility for now + value: process.env.CONTROL_PANEL || process.env.DASHBOARD, + required: false + }, + MAX_REQ_PER_MINUTE: { + // rate limit per minute (MAX requests per minute for a given IP or peer ID) + name: 'MAX_REQ_PER_MINUTE', + value: process.env.MAX_REQ_PER_MINUTE, required: false }, - MAX_REQ_PER_SECOND: { - // rate limit per second - name: 'MAX_REQ_PER_SECOND', - value: process.env.MAX_REQ_PER_SECOND, + MAX_CONNECTIONS_PER_MINUTE: { + // rate connections limit per minute (MAX requests per minute that the node will process) + name: 'MAX_CONNECTIONS_PER_MINUTE', + value: process.env.MAX_CONNECTIONS_PER_MINUTE, required: false }, RATE_DENY_LIST: { @@ -317,57 +384,128 @@ export const ENVIRONMENT_VARIABLES: Record = { name: 'DB_TYPE', value: process.env.DB_TYPE, required: false + }, + CRON_DELETE_DB_LOGS: { + name: 'CRON_DELETE_DB_LOGS', + value: process.env.CRON_DELETE_DB_LOGS, + required: false + }, + CRON_CLEANUP_C2D_STORAGE: { + name: 'CRON_CLEANUP_C2D_STORAGE', + value: process.env.CRON_CLEANUP_C2D_STORAGE, + required: false + }, + DOCKER_COMPUTE_ENVIRONMENTS: { + name: 'DOCKER_COMPUTE_ENVIRONMENTS', + value: process.env.DOCKER_COMPUTE_ENVIRONMENTS, + required: false + }, + DOCKER_SOCKET_PATH: { + name: 'DOCKER_SOCKET_PATH', + value: process.env.DOCKER_SOCKET_PATH, + required: false + }, + DOCKER_PROTOCOL: { + name: 'DOCKER_PROTOCOL', + value: process.env.DOCKER_PROTOCOL, + required: false + }, + DOCKER_HOST: { + name: 'DOCKER_HOST', + value: process.env.DOCKER_HOST, + required: false + }, + DOCKER_PORT: { + name: 'DOCKER_PORT', + value: process.env.DOCKER_PORT, + required: false + }, + DOCKER_CA_PATH: { + name: 'DOCKER_CA_PATH', + value: process.env.DOCKER_CA_PATH, + required: false + }, + DOCKER_CERT_PATH: { + name: 'DOCKER_CERT_PATH', + value: process.env.DOCKER_CERT_PATH, + required: false + }, + DOCKER_KEY_PATH: { + name: 'DOCKER_KEY_PATH', + value: process.env.DOCKER_KEY_PATH, + required: false + }, + IS_BOOTSTRAP: { + name: 'IS_BOOTSTRAP', + value: process.env.IS_BOOTSTRAP, + required: false + }, + AUTHORIZED_PUBLISHERS: { + name: 'AUTHORIZED_PUBLISHERS', + value: process.env.AUTHORIZED_PUBLISHERS, + required: false + }, + AUTHORIZED_PUBLISHERS_LIST: { + name: 'AUTHORIZED_PUBLISHERS_LIST', + value: process.env.AUTHORIZED_PUBLISHERS_LIST, + required: false + }, + POLICY_SERVER_URL: { + name: 'POLICY_SERVER_URL', + value: process.env.POLICY_SERVER_URL, + required: false + }, + VALIDATE_UNSIGNED_DDO: { + name: 'VALIDATE_UNSIGNED_DDO', + value: process.env.VALIDATE_UNSIGNED_DDO, + required: false + }, + P2P_ipV4BindAddress: { + name: 'P2P_ipV4BindAddress', + value: process.env.P2P_ipV4BindAddress, + required: false + }, + P2P_ipV4BindTcpPort: { + name: 'P2P_ipV4BindTcpPort', + value: process.env.P2P_ipV4BindTcpPort, + required: false + }, + P2P_ipV4BindWsPort: { + name: 'P2P_ipV4BindWsPort', + value: process.env.P2P_ipV4BindWsPort, + required: false + }, + P2P_ipV6BindAddress: { + name: 'P2P_ipV6BindAddress', + value: process.env.P2P_ipV6BindAddress, + required: false + }, + P2P_ipV6BindTcpPort: { + name: 'P2P_ipV6BindTcpPort', + value: process.env.P2P_ipV6BindTcpPort, + required: false + }, + P2P_ipV6BindWsPort: { + name: 'P2P_ipV6BindWsPort', + value: process.env.P2P_ipV6BindWsPort, + required: false + }, + P2P_MIN_CONNECTIONS: { + name: 'P2P_MIN_CONNECTIONS', + value: process.env.P2P_MIN_CONNECTIONS, + required: false + }, + P2P_MAX_CONNECTIONS: { + name: 'P2P_MAX_CONNECTIONS', + value: process.env.P2P_MAX_CONNECTIONS, + required: false } } - -// default to 3 requests per second (configurable) -export const DEFAULT_RATE_LIMIT_PER_SECOND = 3 +export const CONNECTION_HISTORY_DELETE_THRESHOLD = 300 +// 1 minute +export const CONNECTIONS_RATE_INTERVAL = 60 * 1000 // Typesense's maximum limit to send 250 hits at a time export const TYPESENSE_HITS_CAP = 250 export const DDO_IDENTIFIER_PREFIX = 'did:op:' // global ocean node API services path export const SERVICES_API_BASE_PATH = '/api/services' - -export const defaultBootstrapAddresses = [ - // Public IPFS bootstraps - // '/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ', - // '/dnsaddr/bootstrap.libp2p.io/ipfs/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN', - // '/dnsaddr/bootstrap.libp2p.io/ipfs/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa', - // OPF nodes - // node1 - '/dns4/node1.oceanprotocol.com/tcp/9000/p2p/16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP', - '/dns4/node1.oceanprotocol.com/tcp/9001/ws/p2p/16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP', - '/dns6/node1.oceanprotocol.com/tcp/9002/p2p/16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP', - '/dns6/node1.oceanprotocol.com/tcp/9003/ws/p2p/16Uiu2HAmLhRDqfufZiQnxvQs2XHhd6hwkLSPfjAQg1gH8wgRixiP', - // node 2 - '/dns4/node2.oceanprotocol.com/tcp/9000/p2p/16Uiu2HAmHwzeVw7RpGopjZe6qNBJbzDDBdqtrSk7Gcx1emYsfgL4', - '/dns4/node2.oceanprotocol.com/tcp/9001/ws/p2p/16Uiu2HAmHwzeVw7RpGopjZe6qNBJbzDDBdqtrSk7Gcx1emYsfgL4', - '/dns6/node2.oceanprotocol.com/tcp/9002/p2p/16Uiu2HAmHwzeVw7RpGopjZe6qNBJbzDDBdqtrSk7Gcx1emYsfgL4', - '/dns6/node2.oceanprotocol.com/tcp/9003/ws/p2p/16Uiu2HAmHwzeVw7RpGopjZe6qNBJbzDDBdqtrSk7Gcx1emYsfgL4', - // node 3 - '/dns4/node3.oceanprotocol.com/tcp/9000/p2p/16Uiu2HAmBKSeEP3v4tYEPsZsZv9VELinyMCsrVTJW9BvQeFXx28U', - '/dns4/node3.oceanprotocol.com/tcp/9001/ws/p2p/16Uiu2HAmBKSeEP3v4tYEPsZsZv9VELinyMCsrVTJW9BvQeFXx28U', - '/dns6/node3.oceanprotocol.com/tcp/9002/p2p/16Uiu2HAmBKSeEP3v4tYEPsZsZv9VELinyMCsrVTJW9BvQeFXx28U', - '/dns6/node3.oceanprotocol.com/tcp/9003/ws/p2p/16Uiu2HAmBKSeEP3v4tYEPsZsZv9VELinyMCsrVTJW9BvQeFXx28U', - // node 4 - '/dns4/node4.oceanprotocol.com/tcp/9000/p2p/16Uiu2HAmSTVTArioKm2wVcyeASHYEsnx2ZNq467Z4GMDU4ErEPom', - '/dns4/node4.oceanprotocol.com/tcp/9001/ws/p2p/16Uiu2HAmSTVTArioKm2wVcyeASHYEsnx2ZNq467Z4GMDU4ErEPom', - '/dns6/node4.oceanprotocol.com/tcp/9002/p2p/16Uiu2HAmSTVTArioKm2wVcyeASHYEsnx2ZNq467Z4GMDU4ErEPom', - '/dns6/node4.oceanprotocol.com/tcp/9003/ws/p2p/16Uiu2HAmSTVTArioKm2wVcyeASHYEsnx2ZNq467Z4GMDU4ErEPom' -] - -export const knownUnsafeURLs: string[] = [ - // AWS and GCP - '^.*(169.254.169.254).*', - // GCP - '^.*(metadata.google.internal).*', - '^.*(http://metadata).*', - // Azure - '^.*(http://169.254.169.254).*', - // Oracle Cloud - '^.*(http://192.0.0.192).*', - // Alibaba Cloud - '^.*(http://100.100.100.200).*', - // k8s ETCD - '^.*(127.0.0.1).*' -] diff --git a/src/utils/credentials.ts b/src/utils/credentials.ts index aeaccf3c3..b406fc110 100644 --- a/src/utils/credentials.ts +++ b/src/utils/credentials.ts @@ -1,4 +1,13 @@ -import { Credential, Credentials } from '../@types/DDO/Credentials' +import { Contract, ethers, EventLog, Signer } from 'ethers' +import AccessList from '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessList.sol/AccessList.json' assert { type: 'json' } +import { AccessListContract } from '../@types/OceanNode.js' +import { CORE_LOGGER } from './logging/common.js' + +import { getNFTContract } from '../components/Indexer/utils.js' +import { isDefined } from './util.js' +import { getOceanArtifactsAdressesByChainId } from './address.js' +import { Credential, Credentials, CREDENTIALS_TYPES } from '@oceanprotocol/ddo-js' +import { KNOWN_CREDENTIALS_TYPES } from '../@types/DDO/Credentials.js' export function findCredential( credentials: Credential[], @@ -19,29 +28,196 @@ export function findCredential( }) } +export function hasAddressMatchAllRule(credentials: Credential[]): boolean { + const creds = credentials.find((credential: Credential) => { + if (Array.isArray(credential?.values)) { + if (credential.values.length > 0 && credential.type) { + const filteredValues: string[] = credential.values + .map((v: any) => (typeof v === 'string' ? v : v?.address ?? v?.value)) + .filter((v: any) => typeof v === 'string' && v.toLowerCase().includes('*')) + return ( + filteredValues.length > 0 && + credential.type.toLowerCase() === KNOWN_CREDENTIALS_TYPES[0] + ) + } + } + return false + }) + return isDefined(creds) +} + /** * This method checks credentials * @param credentials credentials * @param consumerAddress consumer address */ export function checkCredentials(credentials: Credentials, consumerAddress: string) { - const consumerCredentials = { - type: 'address', + const consumerCredentials: Credential = { + type: CREDENTIALS_TYPES.ADDRESS, values: [String(consumerAddress)?.toLowerCase()] } + + const accessGranted = true // check deny access if (Array.isArray(credentials?.deny) && credentials.deny.length > 0) { const accessDeny = findCredential(credentials.deny, consumerCredentials) + // credential is on deny list, so it should be blocked access if (accessDeny) { return false } + // credential not found, so it really depends if we have a match } // check allow access if (Array.isArray(credentials?.allow) && credentials.allow.length > 0) { const accessAllow = findCredential(credentials.allow, consumerCredentials) - if (!accessAllow) { - return false + if (accessAllow || hasAddressMatchAllRule(credentials.allow)) { + return true + } + return false + } + return accessGranted +} + +export function areKnownCredentialTypes(credentials: Credentials): boolean { + if (isDefined(credentials)) { + if (isDefined(credentials.allow) && credentials.allow.length > 0) { + for (const credential of credentials.allow) { + if (!isKnownCredentialType(credential.type)) { + return false + } + } + } + + if (isDefined(credentials.deny) && credentials.deny.length > 0) { + for (const credential of credentials.deny) { + if (!isKnownCredentialType(credential.type)) { + return false + } + } } } return true } + +// utility function that can be used on multiple access lists +/** + * @param accessList the access list contract address + * @param chainId the chain id to check + * @param addressToCheck the account address to check on the access list + * @param signer signer for the contract part + * @returns true if the account has balanceOf > 0 OR if the accessList is empty OR does not contain info for this chain, false otherwise + */ +export async function checkCredentialOnAccessList( + accessList: AccessListContract, + chainId: string, + addressToCheck: string, + signer: Signer +): Promise { + if (!accessList) { + return true + } + const chainsListed = Object.keys(accessList) + // check the access lists for this chain + if (chainsListed.length > 0 && chainsListed.includes(chainId)) { + let isAuthorized = false + for (const accessListAddress of accessList[chainId]) { + const accessListContract = new ethers.Contract( + accessListAddress, + AccessList.abi, + signer + ) + // if has at least 1 token than is is authorized + const balance = await accessListContract.balanceOf(addressToCheck) + if (Number(balance) > 0) { + isAuthorized = true + break + } + } + if (!isAuthorized) { + CORE_LOGGER.error( + `Account ${addressToCheck} is NOT part of the given access list group.` + ) + } + return isAuthorized + } + return true +} +// from https://github.com/oceanprotocol/ocean-node/issues/808 +// The idea is to use an nft contract and check if one address is on the list by calling 'balanceOf' +// (means user has at least one token) +export async function findAccessListCredentials( + signer: Signer, + contractAddress: string, + address: string +): Promise { + const nftContract: ethers.Contract = getNFTContract(signer, contractAddress) + if (!nftContract) { + return false + } + return await findAccountFromAccessList(nftContract, address) +} + +export async function findAccountFromAccessList( + nftContract: ethers.Contract, + walletAddress: string +): Promise { + try { + const balance = await nftContract.balanceOf(walletAddress) + return Number(balance) > 0 + } catch (err) { + return false + } +} + +export function isKnownCredentialType(credentialType: string): boolean { + return ( + isDefined(credentialType) && + KNOWN_CREDENTIALS_TYPES.findIndex((type) => { + return type.toLowerCase() === credentialType.toLowerCase() + }) > -1 + ) +} + +/** + * Gets the addresses present on the contract access list (the ones with balanceOf > 1) + * @param contractAcessList + * @param chainId + * @returns + */ +export async function getAccountsFromAccessList( + contractAcessList: Contract, + chainId: number, + startBlock?: number, + endBlock?: number +): Promise { + const resultAccounts: string[] = [] + const networkArtifacts = getOceanArtifactsAdressesByChainId(chainId) + // some basic extra checks + if (!networkArtifacts || (startBlock && endBlock && endBlock > startBlock)) { + return resultAccounts + } + + try { + const eventLogs: Array = (await contractAcessList.queryFilter( + 'AddressAdded', + startBlock || networkArtifacts.startBlock, + endBlock || 'latest' + )) as Array + for (const log of eventLogs) { + // check the account address + if (log.args.length === 2 && Number(log.args[1] >= 1)) { + const address: string = log.args[0] + // still has it? + const balance = await contractAcessList.balanceOf(address) + if (Number(balance) >= 1) { + resultAccounts.push(address) + } + } + } + } catch (e) { + CORE_LOGGER.error( + `Cannot get accounts from accessList ${contractAcessList}: \n${e.message}` + ) + } + return resultAccounts +} diff --git a/src/utils/cronjobs/p2pAnnounceC2D.ts b/src/utils/cronjobs/p2pAnnounceC2D.ts new file mode 100644 index 000000000..b1142b6b0 --- /dev/null +++ b/src/utils/cronjobs/p2pAnnounceC2D.ts @@ -0,0 +1,100 @@ +import { OceanNode } from '../../OceanNode.js' +// import { P2P_LOGGER } from '../logging/common.js' +const GB = 1024 * 1024 * 1024 // 1 GB in bytes + +export async function p2pAnnounceC2D(node: OceanNode) { + const announce: any[] = [] + const computeEngines = node.getC2DEngines() + const result = await computeEngines.fetchEnvironments() + for (const env of result) { + for (const resource of env.resources) { + switch (resource.type) { + case 'cpu': + case 'gpu': + // For CPU and GPU, we assume the min and max are in terms of cores + // and we generate announcements for each core count in the range + for (let i = resource.min ? resource.min : 1; i <= resource.max; i++) { + const obj: Record = {} + obj.free = false + obj[resource.type] = i + if (!announce.includes(obj)) { + announce.push(obj) + } + if (resource.type === 'gpu' && resource.kind) { + obj.description = resource.description // add kind if available + if (!announce.includes(obj)) { + announce.push(obj) + } + } + } + break + case 'ram': + case 'disk': + for (let i = resource.min; i <= resource.max; i += GB) { + const obj: Record = {} + obj.free = false + obj[resource.type] = Math.round(i / GB) + if (!announce.includes(obj) && obj[resource.type] > 0) { + announce.push(obj) + } + } + break + } + } + for (const resource of env.free.resources) { + let min = 0 + let kind = null + let type = null + // we need to get the min from resources + for (const res of env.resources) { + if (res.id === resource.id) { + ;({ min } = res) + ;({ kind } = res) + ;({ type } = res) + } + } + + switch (type) { + case 'cpu': + case 'gpu': + // For CPU and GPU, we assume the min and max are in terms of cores + // and we generate announcements for each core count in the range + // if min is not defined, we assume it is 1 + for (let i = min || 1; i <= resource.max; i++) { + const obj: Record = {} + obj.free = true + obj[type] = i + if (!announce.includes(obj)) { + announce.push(obj) + } + if (type === 'gpu' && kind) { + obj.kind = kind // add kind if available + if (!announce.includes(obj)) { + announce.push(obj) + } + } + } + break + + case 'ram': + case 'disk': + for (let i = min; i <= resource.max; i += GB) { + const obj: Record = {} + obj.free = true + obj[type] = Math.round(i / GB) + if (!announce.includes(obj) && obj[type] > 0) { + announce.push(obj) + } + } + break + } + } + } + // now announce all resources to p2p network + for (const obj of announce) { + const res = { + c2d: obj + } + node.getP2PNode().advertiseString(JSON.stringify(res)) + } +} diff --git a/src/utils/cronjobs/p2pAnnounceDDOS.ts b/src/utils/cronjobs/p2pAnnounceDDOS.ts new file mode 100644 index 000000000..30cf716de --- /dev/null +++ b/src/utils/cronjobs/p2pAnnounceDDOS.ts @@ -0,0 +1,39 @@ +// republish the ddos we have +// related: https://github.com/libp2p/go-libp2p-kad-dht/issues/323 + +import { OceanNode } from '../../OceanNode.js' +import { P2P_LOGGER } from '../logging/common.js' + +export async function p2pAnnounceDDOS(node: OceanNode) { + try { + const db = node.getDatabase() + const p2pNode = node.getP2PNode() + if (!db || !db.ddo) { + P2P_LOGGER.info( + `republishStoredDDOS() attempt aborted because there is no database!` + ) + return + } + const ddoDb = db.ddo + const searchParameters = { + q: '*' + } + + const result: any = await ddoDb.search(searchParameters) + if (result && result.length > 0 && result[0].found) { + P2P_LOGGER.logMessage(`Will republish cid for ${result[0].found} documents`, true) + result[0].hits.forEach((hit: any) => { + const ddo = hit.document + p2pNode.advertiseString(ddo.id) + p2pNode.cacheDDO(ddo) + + // todo check stuff like purgatory + }) + // update time + } else { + P2P_LOGGER.logMessage('There is nothing to republish, skipping...', true) + } + } catch (err) { + P2P_LOGGER.error(`Caught "${err.message}" on republishStoredDDOS()`) + } +} diff --git a/src/utils/cronjobs/scheduleCronJobs.ts b/src/utils/cronjobs/scheduleCronJobs.ts new file mode 100644 index 000000000..776edc451 --- /dev/null +++ b/src/utils/cronjobs/scheduleCronJobs.ts @@ -0,0 +1,82 @@ +// scheduleCronJobs.ts + +import { Database } from '../../components/database/index.js' +import { OceanNode } from '../../OceanNode.js' +import { ENVIRONMENT_VARIABLES } from '../constants.js' +import { OCEAN_NODE_LOGGER } from '../logging/common.js' +import * as cron from 'node-cron' +import { p2pAnnounceDDOS } from './p2pAnnounceDDOS.js' +import { p2pAnnounceC2D } from './p2pAnnounceC2D.js' +import { sleep } from '../util.js' + +// republish any ddos we are providing to the network every 4 hours +// (we can put smaller interval for testing purposes) +const REPUBLISH_INTERVAL_HOURS = 1000 * 60 * 60 * 4 // 4 hours + +export async function scheduleCronJobs(node: OceanNode) { + await sleep(2000) // wait for 2 seconds to ensure the node is fully initialized + try { + scheduleDeleteLogsJob(node.getDatabase()) + } catch (e) { + OCEAN_NODE_LOGGER.error(`Error when deleting old logs: ${e.message}`) + } + try { + scheduleCleanExpiredC2DJobs(node.getDatabase()) + } catch (e) { + OCEAN_NODE_LOGGER.error(`Error when deleting expired c2d jobs: ${e.message}`) + } + // execute p2pAnnounceDDOS immediately on startup + // and then every REPUBLISH_INTERVAL_HOURS + p2pAnnounceDDOS(node) + setInterval(() => p2pAnnounceDDOS(node), REPUBLISH_INTERVAL_HOURS) + + // execute p2pAnnounceC2D immediately on startup + // and then every REPUBLISH_INTERVAL_HOURS + p2pAnnounceC2D(node) + setInterval(() => p2pAnnounceC2D(node), REPUBLISH_INTERVAL_HOURS) +} + +function scheduleDeleteLogsJob(dbconn: Database | null) { + // Schedule the cron job to run daily at midnight + + if (dbconn && dbconn.logs) { + const expression = + process.env[ENVIRONMENT_VARIABLES.CRON_DELETE_DB_LOGS.name] || '0 0 * * *' + cron.schedule(expression, async () => { + try { + const deletedLogsNum = await dbconn.logs.deleteOldLogs() + OCEAN_NODE_LOGGER.logMessage( + `${deletedLogsNum} old logs deleted successfully.`, + true + ) + } catch (err) { + OCEAN_NODE_LOGGER.error(`Error deleting old logs: ${err.message}`) + } + }) + } else { + OCEAN_NODE_LOGGER.warn( + 'Logs CronJob: Database connection not established or logs instance not available (skipped).' + ) + } +} + +function scheduleCleanExpiredC2DJobs(dbconn: Database | null) { + // Schedule the cron job to run every 5 minutes or whatever specified + + if (dbconn && dbconn.c2d) { + const expression = + process.env[ENVIRONMENT_VARIABLES.CRON_CLEANUP_C2D_STORAGE.name] || '*/5 * * * *' + cron.schedule(expression, async () => { + try { + const deleted = await dbconn.c2d.cleanStorageExpiredJobs() + OCEAN_NODE_LOGGER.info(`${deleted} expired C2D jobs cleaned successfully.`) + } catch (err) { + OCEAN_NODE_LOGGER.error(`Error deleting expired jobs: ${err.message}`) + } + }) + } else { + OCEAN_NODE_LOGGER.warn( + 'C2D CronJob: Database connection not established or C2D instance not available (skipped).' + ) + } +} diff --git a/src/utils/database.ts b/src/utils/database.ts index 1d3a5ec60..83c910c30 100644 --- a/src/utils/database.ts +++ b/src/utils/database.ts @@ -13,7 +13,7 @@ export async function getDatabase(forceReload: boolean = false): Promise `${info.timestamp} ${info.level}: ${info.message.trim()}` + (info: any) => `${info.timestamp} ${info.level}: ${String(info.message).trim()}` ) ) const consoleColorFormatting: winston.Logform.Format | Record = { diff --git a/src/utils/logging/logDeleteCron.ts b/src/utils/logging/logDeleteCron.ts deleted file mode 100644 index 80bc7d49a..000000000 --- a/src/utils/logging/logDeleteCron.ts +++ /dev/null @@ -1,23 +0,0 @@ -// scheduleCronJobs.ts - -import { Database } from '../../components/database/index.js' -import { OCEAN_NODE_LOGGER } from './common.js' -import * as cron from 'node-cron' - -export function scheduleCronJobs(dbconn: Database | null) { - // Schedule the cron job to run daily at midnight - cron.schedule('0 0 * * *', async () => { - if (dbconn && dbconn.logs) { - const deletedLogsNum = await dbconn.logs.deleteOldLogs() - OCEAN_NODE_LOGGER.logMessage( - `${deletedLogsNum} old logs deleted successfully.`, - true - ) - } else { - OCEAN_NODE_LOGGER.logMessage( - 'Database connection not established or logs instance not available.', - true - ) - } - }) -} diff --git a/src/utils/util.ts b/src/utils/util.ts index e16351c7f..a6c4b1339 100644 --- a/src/utils/util.ts +++ b/src/utils/util.ts @@ -145,3 +145,22 @@ export function asyncCallWithTimeout( export function isDefined(something: any): boolean { return something !== undefined && something !== null } + +export function deleteKeysFromObject(source: any, keys: string[]): any { + keys.forEach((keyName) => { + if (keyName in source) { + delete source[keyName] + } + }) + return source +} + +export function convertGigabytesToBytes(gigabytes: number): number { + if (gigabytes < 0) { + throw new Error('Input must be a non-negative number') + } + + const bytesInAGigabyte = 1024 ** 3 // 1 gigabyte = 1024^3 bytes + const bytes = gigabytes * bytesInAGigabyte + return bytes +} diff --git a/src/utils/validators.ts b/src/utils/validators.ts index 7c45f15c1..d99d45d12 100644 --- a/src/utils/validators.ts +++ b/src/utils/validators.ts @@ -1,6 +1,20 @@ import { ConsumerParameter } from '../@types/DDO/ConsumerParameter.js' +import { OceanNodeConfig } from '../@types/OceanNode.js' import { ValidateParams } from '../components/httpRoutes/validateCommands.js' +import { RequestLimiter } from '../OceanNode.js' import { CORE_LOGGER } from './logging/common.js' +import { CONNECTIONS_RATE_INTERVAL } from './constants.js' +import { DEFAULT_MAX_CONNECTIONS_PER_MINUTE } from './index.js' + +// TODO we should group common stuff, +// we have multiple similar validation interfaces +export interface CommonValidation { + valid: boolean + error?: string +} + +// hold data about last request made +const connectionsData = new Map() function checkString(value: any) { return typeof value === 'string' || value instanceof String @@ -18,6 +32,68 @@ function checkObject(value: any) { return typeof value === 'object' && value !== null && !Array.isArray(value) } +export function checkRequestsRateLimit( + requestIP: string, + configuration: OceanNodeConfig, + now: number +): CommonValidation { + const limit = configuration.rateLimit + let clientData = connectionsData.get(requestIP) + + if (!clientData || clientData === undefined) { + clientData = { + lastRequestTime: now, + requester: requestIP, + numRequests: 1 + } + connectionsData.set(requestIP, clientData) + return { valid: true, error: '' } + } + + const timeSinceLastRequest = now - clientData.lastRequestTime + const windowExpired = timeSinceLastRequest > CONNECTIONS_RATE_INTERVAL + + if (clientData.numRequests >= limit && !windowExpired) { + const waitTime = Math.ceil((CONNECTIONS_RATE_INTERVAL - timeSinceLastRequest) / 1000) + return { + valid: false, + error: `Rate limit exceeded. Try again in ${waitTime} seconds.` + } + } + + if (windowExpired) { + clientData.numRequests = 1 + clientData.lastRequestTime = now + return { valid: true, error: '' } + } + + clientData.numRequests += 1 + return { valid: true, error: '' } +} + +export function checkGlobalConnectionsRateLimit( + configuration: OceanNodeConfig, + now: number +): CommonValidation { + const maxConnections = + configuration.maxConnections || DEFAULT_MAX_CONNECTIONS_PER_MINUTE + let activeRequesters = 0 + + for (const [, clientData] of connectionsData.entries()) { + if (now - clientData.lastRequestTime <= CONNECTIONS_RATE_INTERVAL) { + activeRequesters += 1 + } + } + const valid = activeRequesters <= maxConnections + + return { + valid, + error: valid + ? '' + : `Too many active connections (${activeRequesters}/${maxConnections}) in the last minute.` + } +} + export function validateConsumerParameters( ddoConsumerParameters: ConsumerParameter | ConsumerParameter[], userSentObject: any | any[] diff --git a/tsconfig.json b/tsconfig.json index 0014e9e08..405c8ef30 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "module": "esnext", - "target": "ES2022", + "target": "es2022", "moduleResolution": "node", "esModuleInterop": true, "resolveJsonModule": true,