diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..fc2971e0 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,19 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily + + # Maintain dependencies for Docker + - package-ecosystem: docker + directory: / + schedule: + interval: daily + + # Maintain dependencies for npm and yarn + - package-ecosystem: npm + directory: / + schedule: + interval: daily diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..3fc372ea --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,42 @@ +name: CI + +on: + pull_request: + types: [opened, reopened, synchronize] + push: + branches: + - rootstock + +permissions: read-all + +jobs: + checks: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + with: + fetch-depth: 0 + submodules: true + + - name: Setup Node to enable Crepack + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e #v4.3.0 + with: + node-version: ${{ env.node_version }} + + - run: corepack enable + + - name: Setup Node + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e #v4.3.0 + with: + cache: "yarn" + node-version-file: ".nvmrc" + + - name: Install dependencies + run: | + yarn install + + - name: Perform tests + run: | + yarn test diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..8a0de0ea --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,47 @@ +name: "CodeQL" + +on: + push: + branches: ["rootstock", "main"] + pull_request: + branches: ["rootstock", "main"] + schedule: + - cron: "0 0 * * *" + +permissions: read-all + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [javascript] + + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + + - name: Before Index (java) + if: ${{ matrix.language == 'java' }} + run: ./configure.sh + + - name: Initialize CodeQL + uses: github/codeql-action/init@5973e2313ac1b9aaedb1f911a1e91228cde07d28 # v2.26.0 + with: + languages: ${{ matrix.language }} + queries: +security-and-quality + + - name: Autobuild + uses: github/codeql-action/autobuild@5973e2313ac1b9aaedb1f911a1e91228cde07d28 # v2.26.0 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@5973e2313ac1b9aaedb1f911a1e91228cde07d28 # v2.26.0 + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/dependency_review.yml b/.github/workflows/dependency_review.yml new file mode 100644 index 00000000..dbd2acb7 --- /dev/null +++ b/.github/workflows/dependency_review.yml @@ -0,0 +1,21 @@ +name: "Dependency Review" + +on: [pull_request] + +permissions: read-all + +jobs: + dependency-review: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: "Checkout Repository" + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + + - name: "Dependency Review" + uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1 + with: + fail-on-severity: high + comment-summary-in-pr: true diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..d99259b1 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,85 @@ +name: Deploy to Amazon ECS + +on: + release: + types: [created, edited, published] + +permissions: read-all + +env: + IMAGE_NAME: safe-watcher + IMAGE_TAG: ${{ github.sha }} + +jobs: + build-and-deploy: + permissions: + id-token: write # This is required for requesting the JWT + contents: read # This is required for actions/checkout + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0 + + - name: Generate local image name + id: generate-local-img-name + run: | + echo "image-name=${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}" \ + >> $GITHUB_OUTPUT + + - name: Build and tag Container image + id: build-image + uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 #v6.17.0 + with: + tags: ${{ steps.generate-local-img-name.outputs.image-name }} + file: Dockerfile + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: linux/amd64 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df #v4.2.1 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 1200 + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@062b18b96a7aff071d4dc91bc00c4c1a7945b076 #v2.0.1 + + - name: Generate image name + id: generate-img-name + run: | + echo "image-name=${{ steps.login-ecr.outputs.registry }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}" \ + >> $GITHUB_OUTPUT + + - name: Rebuild, tag and push Container image + id: rebuild--push-image + uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 #v6.17.0 + with: + push: true + tags: ${{ steps.generate-img-name.outputs.image-name }} + file: Dockerfile + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: linux/amd64 + + - name: Fill in the new image ID in the Amazon ECS task definition + id: task-def + uses: aws-actions/amazon-ecs-render-task-definition@e89b6874818d80bb892e7010a5013519bde9d9a6 #v1.7.2 + with: + task-definition-arn: ${{ secrets.AWS_ECS_TASK_DEFINITION_ARN }} + container-name: ${{ secrets.AWS_ECS_CONTAINER_NAME }} + image: ${{ steps.generate-img-name.outputs.image-name }} + + - name: Deploy Amazon ECS task definition + uses: aws-actions/amazon-ecs-deploy-task-definition@538b32884c2bf327057c6805f0315e5ee92102cc #v2.3.2 + with: + task-definition: ${{ steps.task-def.outputs.task-definition }} + service: ${{ secrets.AWS_ECS_SERVICE }} + cluster: ${{ secrets.AWS_ECS_CLUSTER }} + wait-for-service-stability: true diff --git a/.github/workflows/lint_pr.yml b/.github/workflows/lint_pr.yml index 0d498bad..cd5eaa65 100644 --- a/.github/workflows/lint_pr.yml +++ b/.github/workflows/lint_pr.yml @@ -8,11 +8,13 @@ on: - edited - synchronize +permissions: read-all + jobs: main: name: Validate PR title runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request@v4 + - uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017 #v5.5.3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index acb822d6..1c338feb 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -4,6 +4,8 @@ on: pull_request: types: [opened, reopened, synchronize] +permissions: read-all + env: HUSKY: 0 CI: true @@ -13,19 +15,19 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 with: fetch-depth: 0 submodules: true - - name: Use Latest Corepack - run: | - echo "Before: corepack version => $(corepack --version || echo 'not installed')" - npm install -g corepack@latest - echo "After : corepack version => $(corepack --version)" - corepack enable + - name: Setup Node to enable Crepack + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e #v4.3.0 + with: + node-version: ${{ env.node_version }} + + - run: corepack enable - - uses: actions/setup-node@v4 + - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e #v4.3.0 with: cache: "yarn" node-version-file: ".nvmrc" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 34175e5f..2c93c2ed 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,10 +3,11 @@ name: Release on: push: branches: - - "main" - - "next" + - "rootstock" workflow_dispatch: +permissions: read-all + env: HUSKY: 0 CI: true @@ -16,19 +17,19 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 with: fetch-depth: 0 submodules: true - - name: Use Latest Corepack - run: | - echo "Before: corepack version => $(corepack --version || echo 'not installed')" - npm install -g corepack@latest - echo "After : corepack version => $(corepack --version)" - corepack enable + - name: Setup Node to enable Crepack + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e #v4.3.0 + with: + node-version: ${{ env.node_version }} - - uses: actions/setup-node@v4 + - run: corepack enable + + - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e #v4.3.0 with: cache: "yarn" node-version-file: ".nvmrc" @@ -40,15 +41,8 @@ jobs: - name: Build run: yarn build - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ github.token }} - - name: Semantic Release - uses: cycjimmy/semantic-release-action@v4 + uses: cycjimmy/semantic-release-action@0a51e81a6baff2acad3ee88f4121c589c73d0f0e #v4.2.0 with: extra_plugins: | @codedependant/semantic-release-docker diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 00000000..166b8391 --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,69 @@ +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: "33 2 * * 2" + push: + branches: ["rootstock"] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + # Uncomment the permissions below if installing in a private repository. + # contents: read + # actions: read + + steps: + - name: "Checkout code" + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecard on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard (optional). + # Commenting out will disable upload of results to your repo's Code Scanning dashboard + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@1b1aada464948af03b950897e5eb522f92603cc2 # v3.24.9 + with: + sarif_file: results.sarif diff --git a/Dockerfile b/Dockerfile index 5f85c780..9f41a1b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,21 @@ -FROM gcr.io/distroless/nodejs22-debian12 +FROM node:24@sha256:7cd385e17f9d66b2c3ae40597359286073a33266db71b5f01ce2d87db81b52f7 AS build + +WORKDIR /app +COPY package.json /app/ + +RUN npm install + +COPY . /app +RUN npm run build + +FROM node:24-alpine@sha256:2e6c7937cb36d1e4af3c261b29e862205beb7a409de01f12b6df34800cc108ec + +# Update packages and install dependencies +RUN apk --no-cache add curl jq xxd + +# Set the default shell to zsh +ENV SHELL=/usr/bin/zsh +SHELL ["/usr/bin/zsh", "-c"] USER 1000:1000 @@ -9,6 +26,12 @@ ENV NODE_ENV=production ARG PACKAGE_VERSION LABEL org.opencontainers.image.version="${PACKAGE_VERSION}" -COPY dist /app +COPY --from=build /app/dist /app + +COPY src/safe-hashes/safe_hashes.sh /app/safe-hashes.sh + +# Copy foundry tools +COPY --from=ghcr.io/foundry-rs/foundry:stable /usr/local/bin/chisel /usr/local/bin/chisel +COPY --from=ghcr.io/foundry-rs/foundry:stable /usr/local/bin/cast /usr/local/bin/cast CMD ["/app/index.mjs"] diff --git a/config.example.yaml b/config.example.yaml index 6a4bc3a1..b7926ad7 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -1,7 +1,7 @@ telegramBotToken: "xxxx" telegramChannelId: "-1111" safeAddresses: - - "eth:0x11111" + - "desc: eth:0x11111" signers: "0x22222": "alice" "0x33333": "bob" diff --git a/package.json b/package.json index 0e5f97b4..a03da0b8 100644 --- a/package.json +++ b/package.json @@ -16,14 +16,22 @@ "lint": "eslint \"**/*.ts\" --fix", "lint:ci": "eslint \"**/*.ts\"", "typecheck:ci": "tsc --noEmit", - "test": "vitest" + "test": "npx jest --coverage --watchAll=false || exit 0", + "test:watch": "npx jest --coverage --watch" }, "dependencies": { + "@aws-sdk/client-dynamodb": "^3.803.0", + "@aws-sdk/client-secrets-manager": "^3.787.0", + "@rsksmart/rsk-utils": "^2.0.5", + "@slack/types": "^2.14.0", + "@slack/web-api": "^7.8.0", + "@types/tmp": "^0.2.6", "@vlad-yakovlev/telegram-md": "^2.0.0", "abitype": "^1.0.8", "date-fns": "^4.1.0", "nanoid": "^5.0.9", "pino": "^9.5.0", + "tmp": "^0.2.3", "viem": "^2.21.55", "yaml": "^2.7.0", "zod": "^3.24.2", @@ -34,14 +42,21 @@ "@commitlint/config-conventional": "^19.0.3", "@gearbox-protocol/eslint-config": "^2.0.0-next.2", "@gearbox-protocol/prettier-config": "^2.0.0-next.0", + "@types/jest": "^29.5.14", "@types/node": "^22.13.5", - "esbuild": "^0.24.0", + "aws-sdk-client-mock": "^4.1.0", + "aws-sdk-client-mock-jest": "^4.1.0", + "esbuild": "^0.25.0", "eslint": "^8.57.0", + "fetch-mock": "^12.5.2", "husky": "^9.0.11", + "jest": "^29.7.0", "lint-staged": "^15.2.2", "msw": "^2.2.2", "pino-pretty": "^13.0.0", "prettier": "^3.2.5", + "ts-jest": "^29.3.2", + "ts-node": "^10.9.2", "tsx": "^4.7.1", "typescript": "^5.3.3", "vitest": "^2.1.8" @@ -65,5 +80,27 @@ ], "*.{json,md}": "prettier --write" }, + "jest": { + "testEnvironment": "node", + "preset": "ts-jest", + "moduleNameMapper": { + "^(\\.\\.?\\/.+)\\.jsx?$": "$1" + }, + "collectCoverageFrom": [ + "src/aws/*.ts", + "src/safe-hashes/*.ts", + "src/safe/*.ts", + "src/config/*.ts", + "src/utils/*.ts" + ], + "coverageThreshold": { + "global": { + "branches": 75, + "functions": 90, + "lines": 90, + "statements": 95 + } + } + }, "packageManager": "yarn@4.6.0" } diff --git a/src/Healthcheck.ts b/src/Healthcheck.ts index 5be02290..435a81b9 100644 --- a/src/Healthcheck.ts +++ b/src/Healthcheck.ts @@ -10,7 +10,7 @@ const nanoid = customAlphabet("1234567890abcdef", 8); class Healthcheck { #id = nanoid(); #version?: string; - #start = Math.round(new Date().valueOf() / 1000); + #start = new Date(); public async run(): Promise { this.#version = process.env.PACKAGE_VERSION || "dev"; @@ -18,6 +18,7 @@ class Healthcheck { // Routing if (req.url === "/") { res.writeHead(200, { "Content-Type": "application/json" }); + logger.debug("healthcheck ping"); res.end( JSON.stringify({ uptime: formatDuration( @@ -28,13 +29,16 @@ class Healthcheck { } else if (req.url === "/metrics") { try { res.writeHead(200, { "Content-Type": "text/plain" }); + logger.debug("healthcheck metrics"); res.end(this.#metrics()); } catch (ex) { res.writeHead(500, { "Content-Type": "text/plain" }); + logger.error("healthcheck error", { error: ex }); res.end("error"); } } else { res.writeHead(404, { "Content-Type": "text/plain" }); + logger.error("healthcheck not found", { url: req.url }); res.end("not found"); } }); diff --git a/src/SafeWatcher.ts b/src/SafeWatcher.ts index 14057b08..57208554 100644 --- a/src/SafeWatcher.ts +++ b/src/SafeWatcher.ts @@ -1,3 +1,4 @@ +import { toChecksumAddress } from "@rsksmart/rsk-utils"; import type { Logger } from "pino"; import type { Address, Hash } from "viem"; @@ -12,43 +13,57 @@ import type { Signer, } from "./safe/index.js"; import { MULTISEND_CALL_ONLY, SafeApiWrapper } from "./safe/index.js"; +import type { SafeTxHashesResponse } from "./safe-hashes/index.js"; +import { parseResponse, SafeTxHashes } from "./safe-hashes/index.js"; import type { INotificationSender } from "./types.js"; interface SafeWatcherOptions { - safe: PrefixedAddress; + safe: Partial>; signers?: Partial>; notifier?: INotificationSender; - api?: SafeAPIMode; + api?: SafeAPIMode | ISafeAPI; } class SafeWatcher { - readonly #prefix: string; - readonly #safe: Address; + readonly prefix: string; + readonly safe: `0x${string}`; + readonly name: string; readonly #notificationSender?: INotificationSender; readonly #logger: Logger; readonly #api: ISafeAPI; - readonly #txs: Map = new Map(); - readonly #signers: Partial>; + readonly txs: Map = new Map(); + readonly signers: Partial>; - #interval?: NodeJS.Timeout; + interval?: NodeJS.Timeout; constructor(opts: SafeWatcherOptions) { - const [prefix, address] = parsePrefixedAddress(opts.safe); + const [prefixedAddress, alias] = Object.entries(opts.safe)[0]; + const [prefix, address] = parsePrefixedAddress( + prefixedAddress as PrefixedAddress, + ); this.#logger = logger.child({ chain: prefix, address }); - this.#prefix = prefix; - this.#safe = address; + this.prefix = prefix; + this.safe = address; + this.name = typeof alias === "string" ? alias : ""; this.#notificationSender = opts.notifier; - this.#signers = opts.signers ?? {}; - this.#api = new SafeApiWrapper(opts.safe, opts.api); + this.signers = opts.signers ?? {}; + if (opts.api && typeof opts.api === "object") { + this.#api = opts.api as ISafeAPI; + } else { + this.#api = new SafeApiWrapper( + prefixedAddress as PrefixedAddress, + opts.api, + ); + } } public async start(pollInterval: number): Promise { const txs = await this.#api.fetchAll(); for (const tx of txs) { - this.#txs.set(tx.safeTxHash, tx); + this.txs.set(tx.safeTxHash, tx); } if (pollInterval > 0) { - this.#interval = setInterval(() => { + this.interval = setInterval(() => { this.poll().catch(e => { this.#logger.error(e); }); @@ -58,8 +73,9 @@ class SafeWatcher { } public stop(): void { - if (this.#interval) { - clearInterval(this.#interval); + if (this.interval) { + clearInterval(this.interval); + this.interval = undefined; } } @@ -92,14 +108,14 @@ class SafeWatcher { for (const tx of txs) { try { - const old = this.#txs.get(tx.safeTxHash); + const old = this.txs.get(tx.safeTxHash); if (old) { await this.#processTxUpdate(tx, old, pendingTxs); } else { await this.#processNewTx(tx, pendingTxs); } - } catch (e) { - this.#logger.error(e); + } catch (error) { + this.#logger.error(error); } } } @@ -112,24 +128,30 @@ class SafeWatcher { { tx: tx.safeTxHash, nonce: tx.nonce }, "detected new tx", ); - this.#txs.set(tx.safeTxHash, tx); + this.txs.set(tx.safeTxHash, tx); // await this.anvilManagerAPI.requestSafeReport(this.#chain.network, [ // tx.safeTxHash, // ]); const detailed = await this.#fetchDetailed(tx.safeTxHash); - + const safeTxHashes: SafeTxHashesResponse = parseResponse( + await SafeTxHashes(this.prefix, this.safe, tx.nonce), + ); const isMalicious = !MULTISEND_CALL_ONLY.has(detailed.to.toLowerCase() as Address) && detailed.operation !== 0; - await this.#notificationSender?.notify({ - type: isMalicious ? "malicious" : "created", - chainPrefix: this.#prefix, - safe: this.#safe, - tx: detailed, - pending, - }); + await this.#notificationSender?.notify( + { + type: isMalicious ? "malicious" : "created", + name: this.name, + chainPrefix: this.prefix, + safe: this.safe, + tx: detailed, + pending, + }, + safeTxHashes, + ); } async #processTxUpdate( @@ -137,7 +159,7 @@ class SafeWatcher { old: ListedSafeTx, pending: ListedSafeTx[], ): Promise { - this.#txs.set(tx.safeTxHash, tx); + this.txs.set(tx.safeTxHash, tx); if ( old.isExecuted === tx.isExecuted && old.confirmations === tx.confirmations @@ -150,24 +172,43 @@ class SafeWatcher { ); const detailed = await this.#fetchDetailed(tx.safeTxHash); + const safeTxHashes: SafeTxHashesResponse = parseResponse( + await SafeTxHashes(this.prefix, this.safe, tx.nonce), + ); + await this.#notificationSender?.notify( + { + type: tx.isExecuted ? "executed" : "updated", + name: this.name, + chainPrefix: this.prefix, + safe: this.safe, + tx: detailed, + pending, + }, + safeTxHashes, + ); + } - await this.#notificationSender?.notify({ - type: tx.isExecuted ? "executed" : "updated", - chainPrefix: this.#prefix, - safe: this.#safe, - tx: detailed, - pending, - }); + #checkSumAddress(address: Address): Address { + let checksumedAddress: Address = address as `0x${string}`; + if (this.prefix.trim() === "rsk") { + checksumedAddress = toChecksumAddress(address, 30) as `0x${string}`; + } else if (this.prefix.trim() === "trsk") { + checksumedAddress = toChecksumAddress(address, 31) as `0x${string}`; + } + return checksumedAddress; } async #fetchDetailed(safeTxHash: Hash): Promise> { const tx = await this.#api.fetchDetailed(safeTxHash); return { ...tx, - proposer: { address: tx.proposer, name: this.#signers[tx.proposer] }, + proposer: { + address: tx.proposer, + name: this.signers[this.#checkSumAddress(tx.proposer)], + }, confirmations: tx.confirmations.map(c => ({ address: c, - name: this.#signers[c], + name: this.signers[this.#checkSumAddress(c)], })), }; } diff --git a/src/aws/DynamoDB.ts b/src/aws/DynamoDB.ts new file mode 100644 index 00000000..fd177dc6 --- /dev/null +++ b/src/aws/DynamoDB.ts @@ -0,0 +1,41 @@ +import type { ScanCommandInput } from "@aws-sdk/client-dynamodb"; +import { DynamoDBClient, ScanCommand } from "@aws-sdk/client-dynamodb"; + +import logger from "../logger.js"; + +export class DynamoDB { + private client: DynamoDBClient; + constructor() { + this.client = new DynamoDBClient({}); + } + public async getItems( + tableName: string, + ): Promise<{ address: string; alias: string }[]> { + const params: ScanCommandInput = { + TableName: tableName, + }; + + const command = new ScanCommand(params); + try { + const response = await this.client.send(command); + if (response.Items) { + const items = response.Items.map(item => { + return { + address: item.address?.S, + alias: item.alias?.S, + }; + }); + const filteredItems = items.filter( + item => item.address && item.alias, + ) as { address: string; alias: string }[]; + return filteredItems; + } else { + logger.debug(`No items found in table: ${tableName}`); + throw new Error(`No items found in table: ${tableName}`); + } + } catch (error) { + logger.error("Error fetching items", error); + throw new Error("Error fetching items"); + } + } +} diff --git a/src/aws/ECS.ts b/src/aws/ECS.ts new file mode 100644 index 00000000..eb55383c --- /dev/null +++ b/src/aws/ECS.ts @@ -0,0 +1,3 @@ +export function isECS() { + return Boolean(process.env.ECS_CONTAINER_METADATA_URI_V4); +} diff --git a/src/aws/SecretManager.ts b/src/aws/SecretManager.ts new file mode 100644 index 00000000..67490c96 --- /dev/null +++ b/src/aws/SecretManager.ts @@ -0,0 +1,33 @@ +import { + GetSecretValueCommand, + SecretsManagerClient, +} from "@aws-sdk/client-secrets-manager"; + +import logger from "../logger.js"; +import type { SecretStored } from "./index.js"; + +export async function getSecrets(): Promise { + const secretsManagerClient = new SecretsManagerClient({}); + const command = new GetSecretValueCommand({ + SecretId: "safe-watcher-config", + }); + try { + const response = await secretsManagerClient.send(command); + if (!response.SecretString) { + logger.error("Error parsing secret, SecretString undefined"); + throw new Error("Error parsing secret, SecretString undefined"); + } + const parsedSecret = JSON.parse(response.SecretString); + const secret: SecretStored = { + slackBotToken: parsedSecret.slackBotToken, + slackChannelId: parsedSecret.slackChannelId, + safeAddressesTable: parsedSecret.safeAddressesTable, + safeSignersTable: parsedSecret.safeSignersTable, + }; + logger.info("Secret retrieved successfully"); + return secret; + } catch (error) { + logger.error("Error retrieving secret", error); + throw new Error("Error retrieving secret"); + } +} diff --git a/src/aws/buildConfig.ts b/src/aws/buildConfig.ts new file mode 100644 index 00000000..50f5b459 --- /dev/null +++ b/src/aws/buildConfig.ts @@ -0,0 +1,84 @@ +import { Schema } from "../config/schema.js"; +import logger from "../logger.js"; +import type { SecretStored } from "./index.js"; +import { DynamoDB, getSecrets } from "./index.js"; + +export async function buildConfig(): Promise { + const secretStored: SecretStored = await getSecrets(); + const dynamoDB = new DynamoDB(); + + const addresses = await fetchFormattedAddresses( + dynamoDB, + secretStored.safeAddressesTable, + ); + const signers = await fetchFormattedSigners( + dynamoDB, + secretStored.safeSignersTable, + ); + + const schema: Schema = { + slackBotToken: secretStored.slackBotToken, + slackChannelId: secretStored.slackChannelId, + safeAddresses: addresses, + signers, + safeURL: "https://app.safe.global", + pollInterval: 20, + api: "fallback", + }; + + return Schema.parse(schema); +} + +async function fetchFormattedAddresses( + dynamoDB: DynamoDB, + tableName: string, +): Promise< + [ + Partial>, + ...Partial>[], + ] +> { + const rawAddresses = (await dynamoDB.getItems(tableName)) as { + address: string; + alias: string; + }[]; + logger.debug(rawAddresses); + + return formatAddress(rawAddresses).map(item => ({ + [item.address]: item.alias, + })) as [ + Partial>, + ...Partial>[], + ]; +} + +async function fetchFormattedSigners( + dynamoDB: DynamoDB, + tableName: string, +): Promise<{ [key: string]: string }> { + const rawSigners = await dynamoDB.getItems(tableName); + return formatSigners(rawSigners); +} + +function formatAddress( + addresses: { address: string; alias: string }[], +): { address: `${string}:0x${string}`; alias: string }[] { + return addresses + .filter(item => /^[^:]+:0x[a-fA-F0-9]{40}$/.test(item.address)) + .map(item => ({ + address: item.address as `${string}:0x${string}`, + alias: item.alias, + })); +} + +function formatSigners(signers: { address: string; alias: string }[]): { + [key: string]: string; +} { + return signers.reduce( + (acc, item) => { + acc[item.address] = item.alias; + return acc; + }, + Object.create(null) as { [key: string]: string }, + ); +} diff --git a/src/aws/index.ts b/src/aws/index.ts new file mode 100644 index 00000000..e2d82f85 --- /dev/null +++ b/src/aws/index.ts @@ -0,0 +1,5 @@ +export * from "./buildConfig.js"; +export * from "./DynamoDB.js"; +export * from "./ECS.js"; +export * from "./schema.js"; +export * from "./SecretManager.js"; diff --git a/src/aws/schema.ts b/src/aws/schema.ts new file mode 100644 index 00000000..c8d3258c --- /dev/null +++ b/src/aws/schema.ts @@ -0,0 +1,6 @@ +export interface SecretStored { + slackBotToken: string; + slackChannelId: string; + safeAddressesTable: string; + safeSignersTable: string; +} diff --git a/src/config/loadConfig.ts b/src/config/loadConfig.ts index 95d0fc4c..e599a36a 100644 --- a/src/config/loadConfig.ts +++ b/src/config/loadConfig.ts @@ -1,17 +1,35 @@ +import { writeFileSync } from "fs"; +import tmp from "tmp"; import { loadConfig as load } from "zod-config"; import { envAdapter } from "zod-config/env-adapter"; +import { jsonAdapter } from "zod-config/json-adapter"; import { yamlAdapter } from "zod-config/yaml-adapter"; +import { buildConfig, isECS } from "../aws/index.js"; +import logger from "../logger.js"; import { Schema } from "./schema.js"; export async function loadConfig(): Promise { - let path = "config.yaml"; - const cIndex = process.argv.indexOf("--config"); - if (cIndex > 0) { - path = process.argv[cIndex + 1] || path; + if (isECS()) { + // If running in ECS, load config from AWS + const config = await buildConfig(); + const tempFilePath = tmp.fileSync({ postfix: ".json" }).name; + writeFileSync(tempFilePath, JSON.stringify(config)); + + return load({ + schema: Schema, + adapters: [jsonAdapter({ path: tempFilePath })], + }); + } else { + const cIndex = process.argv.indexOf("--config"); + let path = "config.yaml"; + logger.info("Loading config from local file"); + if (cIndex > 0) { + path = process.argv[cIndex + 1] || path; + } + return load({ + schema: Schema, + adapters: [yamlAdapter({ path }), envAdapter()], + }); } - return load({ - schema: Schema, - adapters: [yamlAdapter({ path }), envAdapter()], - }); } diff --git a/src/config/parsePrefixedAddress.ts b/src/config/parsePrefixedAddress.ts index 540f1ad3..92226c16 100644 --- a/src/config/parsePrefixedAddress.ts +++ b/src/config/parsePrefixedAddress.ts @@ -7,7 +7,7 @@ export function parsePrefixedAddress( addr: PrefixedAddress, ): [prefix: string, address: Address] { const [prefix, address] = addr.split(":"); - if (!isAddress(address)) { + if (!isAddress(address, { strict: false })) { throw new Error(`invalid prefixed safe address '${addr}'`); } return [prefix, address]; diff --git a/src/config/schema.ts b/src/config/schema.ts index 12e72206..6dc540cd 100644 --- a/src/config/schema.ts +++ b/src/config/schema.ts @@ -28,17 +28,27 @@ export const Schema = z.object({ */ pollInterval: z.number().int().positive().default(20), /** - * Telegram bot token + * Telegram bot token for notifications (optional) */ - telegramBotToken: z.string(), + telegramBotToken: z.string().optional(), /** - * Telegram channel ID + * Telegram channel ID for notifications (optional) */ - telegramChannelId: z.string(), + telegramChannelId: z.string().optional(), /** - * Prefixed safe addresses to watch, e.g. `eth:0x11111` + * Slack Bot token for notifications (optional) */ - safeAddresses: z.array(PrefixedAddress).min(1), + slackBotToken: z.string().optional(), + /** + * Slack channel ID for notifications (optional) + */ + slackChannelId: z.string().optional(), + /** + * Prefixed safe addresses to watch, with human-readable name e.g. `eth:0x11111 Test` + */ + safeAddresses: z + .array(z.record(PrefixedAddress, z.string().min(1))) + .nonempty(), /** * Mapping of signer address to human-readable name */ diff --git a/src/index.ts b/src/index.ts index cab0e892..e989a9f3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,14 +3,35 @@ import { setTimeout } from "node:timers/promises"; import { loadConfig } from "./config/index.js"; import Healthcheck from "./Healthcheck.js"; import logger from "./logger.js"; -import { NotificationSender, Telegram } from "./notifications/index.js"; +import { NotificationSender, Slack, Telegram } from "./notifications/index.js"; import SafeWatcher from "./SafeWatcher.js"; async function run() { const config = await loadConfig(); const sender = new NotificationSender(); - await sender.addNotifier(new Telegram(config)); + // add Telegram notifier if configured + if (config.telegramBotToken && config.telegramChannelId) { + await sender.addNotifier( + new Telegram({ + telegramBotToken: config.telegramBotToken, + telegramChannelId: config.telegramChannelId, + safeURL: config.safeURL, + }), + ); + logger.info("Added notifier Telegram"); + } + + // add Slack notifier if configured + if (config.slackBotToken && config.slackChannelId) { + await sender.addNotifier( + new Slack({ + slackBotToken: config.slackBotToken, + slackChannelId: config.slackChannelId, + }), + ); + logger.info("Added notifier Slack"); + } const safes = config.safeAddresses.map(async (safe, i) => { await setTimeout(1000 * i); diff --git a/src/logger.ts b/src/logger.ts index faaeacfd..c64a5726 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -4,7 +4,7 @@ const logger = pino({ level: process.env.NODE_ENV === "test" ? "silent" - : process.env.LOG_LEVEL ?? "debug", + : (process.env.LOG_LEVEL ?? "debug"), base: {}, formatters: { level: label => { diff --git a/src/notifications/NotificationSender.ts b/src/notifications/NotificationSender.ts index ed6e764e..e8f61da2 100644 --- a/src/notifications/NotificationSender.ts +++ b/src/notifications/NotificationSender.ts @@ -1,4 +1,5 @@ import logger from "../logger.js"; +import type { SafeTxHashesResponse } from "../safe-hashes/index.js"; import type { Event, INotificationSender, INotifier } from "../types.js"; export class NotificationSender implements INotificationSender { @@ -8,10 +9,15 @@ export class NotificationSender implements INotificationSender { this.#notifiers.push(notifier); } - public async notify(event: Event): Promise { + public async notify( + event: Event, + safeTxHashes: SafeTxHashesResponse, + ): Promise { logger.debug({ event }, "notifying"); try { - await Promise.allSettled(this.#notifiers.map(n => n.send(event))); + await Promise.allSettled( + this.#notifiers.map(n => n.send(event, safeTxHashes)), + ); } catch (e) { logger.error(e); } diff --git a/src/notifications/Slack.ts b/src/notifications/Slack.ts new file mode 100644 index 00000000..2ff58fd6 --- /dev/null +++ b/src/notifications/Slack.ts @@ -0,0 +1,151 @@ +import type { Block, KnownBlock } from "@slack/types"; +import { WebClient } from "@slack/web-api"; + +import logger from "../logger.js"; +import { SAFE_API_URLS } from "../safe/constants.js"; +import type { SafeTxHashesResponse } from "../safe-hashes/index.js"; +import type { Event, INotifier } from "../types.js"; + +export interface SlackOptions { + slackBotToken: string; + slackChannelId: string; +} + +interface SlackMessage { + blocks: (Block | KnownBlock)[]; + text: string; +} + +export class Slack implements INotifier { + readonly #apiToken: string; + readonly #channelId: string; + + constructor(opts: SlackOptions) { + this.#apiToken = opts.slackBotToken; + this.#channelId = opts.slackChannelId; + } + + public async send( + event: Event, + safeTxHashes: SafeTxHashesResponse, + ): Promise { + const message: SlackMessage = this.#formatMessage(event, safeTxHashes); + await this.#sendToSlack(message); + } + + #formatMessage( + event: Event, + safeTxHashes: SafeTxHashesResponse, + ): SlackMessage { + const { type, chainPrefix, safe, tx, name } = event; + + const blocks: KnownBlock[] = [ + { + type: "section", + text: { + type: "mrkdwn", + text: `*Transaction ${type} on ${name}*\nChain: ${chainPrefix}\nSafe: \`${safe}\`\nTx Hash: \`${tx.safeTxHash}\`\nNonce: \`${tx.nonce}\``, + }, + }, + { + type: "section", + text: { + type: "mrkdwn", + text: `*Signatures*: ${tx.confirmations.length}/${tx.confirmationsRequired}`, + }, + }, + { + type: "section", + text: { + type: "mrkdwn", + text: `*Proposer*: ${this.#formatSigner(tx.proposer)}`, + }, + }, + { + type: "section", + text: { + type: "mrkdwn", + text: `*Signers*: ${tx.confirmations.map(this.#formatSigner).join(", ")}`, + }, + }, + { + type: "section", + text: { + type: "mrkdwn", + text: `*To*: \`${safeTxHashes.transactionData.to}\`\n + *Value*: \`${safeTxHashes.transactionData.value}\`\n + *Data*: \`${safeTxHashes.transactionData.data}\`\n + *Encoded Message*: \`${safeTxHashes.transactionData.encodedMessage}\`\n + *Method*: \`${safeTxHashes.transactionData.method}\`\n + *Parameters: \`${safeTxHashes.transactionData.parameters}\`\n + *Binary String Literal*: \`${safeTxHashes.legacyLedgerFormat.binaryStringLiteral}\`\n + *Domain Hash*: \`${safeTxHashes.hashes.domainHash}\`\n + *Message Hash*: \`${safeTxHashes.hashes.messageHash}\`\n + *Transaction Hash*: \`${safeTxHashes.hashes.safeTransactionHash}\``, + }, + }, + { + type: "divider", + }, + { + type: "actions", + elements: [ + { + type: "button", + text: { + type: "plain_text", + text: "View Transaction", + }, + url: `${SAFE_API_URLS[chainPrefix.trim()]}/${chainPrefix.trim()}:${safe}/transactions/queue`, + }, + ], + }, + ]; + + // Add alert for malicious transactions + if (type === "malicious") { + blocks.unshift({ + type: "section", + text: { + type: "mrkdwn", + text: "🚨 *ALERT! ACTION REQUIRED: MALICIOUS TRANSACTION DETECTED!* 🚨", + }, + }); + } + + const message: SlackMessage = { + blocks, + text: `Transaction ${type} [${tx.confirmations.length}/${tx.confirmationsRequired}] with safeTxHash ${tx.safeTxHash}`, + }; + return message; + } + + #formatSigner(signer: { address: string; name?: string }): string { + return signer.name ? `*${signer.name}*` : `\`${signer.address}\``; + } + + async #sendToSlack(message: SlackMessage): Promise { + if (!this.#apiToken && !this.#channelId) { + logger.warn("slack not configured"); + return; + } + + const webClient = new WebClient(this.#apiToken); + + try { + const response = await webClient.chat.postMessage({ + channel: this.#channelId, + text: message.text, + blocks: message.blocks, + }); + + if (response.ok) { + logger.debug("slack message sent successfully"); + } else { + throw new Error(`${response}`); + } + } catch (err) { + logger.error({ err, message }, "cannot send to slack"); + } + } +} diff --git a/src/notifications/Telegram.ts b/src/notifications/Telegram.ts index 847b9c56..cc7f3920 100644 --- a/src/notifications/Telegram.ts +++ b/src/notifications/Telegram.ts @@ -3,6 +3,7 @@ import { md } from "@vlad-yakovlev/telegram-md"; import logger from "../logger.js"; import type { Signer } from "../safe/index.js"; +import type { SafeTxHashesResponse } from "../safe-hashes/index.js"; import type { Event, EventType, INotifier } from "../types.js"; const ACTIONS: Record = { @@ -17,6 +18,8 @@ const NETWORKS: Record = { eth: "Eth Mainnet", gor: "Eth Goerli", oeth: "Optimism", + rsk: "Rootstock Mainnet", + trsk: "Rootstock Testnet", }; export interface TelegramOptions { @@ -36,13 +39,16 @@ export class Telegram implements INotifier { this.#safeURL = opts.safeURL; } - public async send(event: Event): Promise { - const msg = this.#getMessage(event); + public async send( + event: Event, + safeTxHashes: SafeTxHashesResponse, + ): Promise { + const msg = this.#getMessage(event, safeTxHashes); await this.#sendToTelegram(msg.toString()); } - #getMessage(event: Event): Markdown { - const { type, chainPrefix, safe, tx } = event; + #getMessage(event: Event, safeTxHashes: SafeTxHashesResponse): Markdown { + const { type, chainPrefix, safe, tx, name } = event; const link = md.link( "🔗 transaction", @@ -56,9 +62,10 @@ export class Telegram implements INotifier { let confirmations = md.join(tx.confirmations.map(printSigner), ", "); confirmations = md`Signed by: ${confirmations}`; - const msg = md`${ACTIONS[type]} ${NETWORKS[chainPrefix]} multisig [${tx.confirmations.length}/${tx.confirmationsRequired}] with safeTxHash ${md.inlineCode(tx.safeTxHash)} and nonce ${md.inlineCode(tx.nonce)}`; + const msg = md`${ACTIONS[type]} ${NETWORKS[chainPrefix]} ${name} multisig [${tx.confirmations.length}/${tx.confirmationsRequired}] with safeTxHash ${md.inlineCode(tx.safeTxHash)} and nonce ${md.inlineCode(tx.nonce)}`; - const components = [msg, proposer, confirmations]; + const msg2 = md`to: ${safeTxHashes.transactionData.to}`; + const components = [msg, proposer, confirmations, msg2]; const links = [link /* , report */]; // if (pendingReport) { // links.push(md.link("📄 pending report", pendingReport)); diff --git a/src/notifications/index.ts b/src/notifications/index.ts index 54679e24..7f7151fd 100644 --- a/src/notifications/index.ts +++ b/src/notifications/index.ts @@ -1,2 +1,3 @@ export * from "./NotificationSender.js"; +export * from "./Slack.js"; export * from "./Telegram.js"; diff --git a/src/safe-hashes/Safetxhashes.ts b/src/safe-hashes/Safetxhashes.ts new file mode 100644 index 00000000..fab92c66 --- /dev/null +++ b/src/safe-hashes/Safetxhashes.ts @@ -0,0 +1,80 @@ +import { exec } from "child_process"; +import type { Address } from "viem"; + +import logger from "../logger.js"; +import { NETWORKS } from "./constants.js"; +import type { SafeTxHashesResponse } from "./index.js"; + +export function SafeTxHashes( + prefix: string, + address: Address, + nonce: number, +): Promise { + const network = NETWORKS[prefix]; + return new Promise((resolve, reject) => { + exec( + `/app/safe-hashes.sh --network ${network} --address ${address} --nonce ${nonce}`, + (error, stdout, stderr) => { + if (error) { + logger.error(`error: ${error.message}`); + reject(new Error(`Error executing script: ${error.message}`)); + return; + } + if (stderr) { + logger.error(`stderr: ${stderr}`); + reject(new Error(`Error executing script: ${stderr}`)); + return; + } + logger.debug("stdout:", stdout); + resolve(stdout as string); + }, + ); + }); +} + +export function parseResponse(response: string): SafeTxHashesResponse { + const lines = response.split("\n"); + const extract = (key: string) => + lines.find(line => line.includes(key))?.split(": ")[1] || ""; + + return { + transactionData: { + multisigAddress: extract("Multisig address") as Address, + to: extract("To") as Address, + value: (() => { + const rawValue = extract("Value"); + const parsedValue = parseInt(rawValue, 10); + if (isNaN(parsedValue)) { + logger.warn( + `Invalid numeric value extracted for "Value": ${rawValue}`, + ); + return 0; + } + return parsedValue; + })(), + data: extract("Data: 0x") as `0x${string}`, + encodedMessage: extract("Encoded message") as `0x${string}`, + method: extract("Method") || null, + parameters: extractParameters(lines), + }, + legacyLedgerFormat: { + binaryStringLiteral: extract("Binary string literal"), + }, + hashes: { + domainHash: extract("Domain hash") as `0x${string}`, + messageHash: extract("Message hash") as `0x${string}`, + safeTransactionHash: extract("Safe transaction hash") as `0x${string}`, + }, + }; +} + +function extractParameters(lines: string[]): string | null { + const start = lines.findIndex(line => line.includes("Parameters: [")) + 1; + const end = lines.findIndex( + line => line.includes("Legacy Ledger Format"), + start, + ); + return start > 0 && end > start + ? lines.slice(start, end - 2).join("\n") + : null; +} diff --git a/src/safe-hashes/constants.ts b/src/safe-hashes/constants.ts new file mode 100644 index 00000000..6a18d18b --- /dev/null +++ b/src/safe-hashes/constants.ts @@ -0,0 +1,7 @@ +export const NETWORKS: Record = { + arb1: "arbitrum", + eth: "ethereum", + // gor: "https://safe-transaction-goerli.safe.global", + oeth: "optimism", + rsk: "rootstock", +}; diff --git a/src/safe-hashes/index.ts b/src/safe-hashes/index.ts new file mode 100644 index 00000000..34ce1acb --- /dev/null +++ b/src/safe-hashes/index.ts @@ -0,0 +1,2 @@ +export * from "./Safetxhashes.js"; +export * from "./schema.js"; diff --git a/src/safe-hashes/safe_hashes.sh b/src/safe-hashes/safe_hashes.sh new file mode 100755 index 00000000..40fc665f --- /dev/null +++ b/src/safe-hashes/safe_hashes.sh @@ -0,0 +1,899 @@ +#!/usr/bin/env bash + +######################## +# Don't trust, verify! # +######################## + +# @license GNU Affero General Public License v3.0 only +# @author pcaversaccio + +# Set the terminal formatting constants. +readonly GREEN="\e[32m" +readonly RED="\e[31m" +readonly UNDERLINE="\e[4m" +readonly BOLD="\e[1m" +readonly RESET="\e[0m" + +# Check the Bash version compatibility. +if [[ "${BASH_VERSINFO[0]:-0}" -lt 4 ]]; then + echo -e "${BOLD}${RED}Error: This script requires Bash 4.0 or higher.${RESET}" + echo -e "${BOLD}${RED}Current version: $BASH_VERSION${RESET}" + echo -e "${BOLD}${RED}Please upgrade your Bash installation.${RESET}" + echo -e "${BOLD}${RED}If you've already upgraded via Homebrew, try running:${RESET}" + echo -e "${BOLD}${RED}/opt/homebrew/bin/bash $0 $@${RESET}" + exit 1 +fi + +# Utility function to ensure all required tools are installed. +check_required_tools() { + local tools=("curl" "jq" "chisel" "cast") + local missing_tools=() + + for tool in "${tools[@]}"; do + if ! command -v "$tool" &>/dev/null; then + missing_tools+=("$tool") + fi + done + + if [[ ${#missing_tools[@]} -ne 0 ]]; then + echo -e "${BOLD}${RED}The following required tools are not installed:${RESET}" + for tool in "${missing_tools[@]}"; do + echo -e "${BOLD}${RED} - $tool${RESET}" + done + echo -e "${BOLD}${RED}Please install them to run the script properly.${RESET}" + exit 1 + fi +} + +check_required_tools + +# Enable strict error handling: +# -E: Inherit `ERR` traps in functions and subshells. +# -e: Exit immediately if a command exits with a non-zero status. +# -u: Treat unset variables as an error and exit. +# -o pipefail: Return the exit status of the first failed command in a pipeline. +set -Eeuo pipefail + +# Enable debug mode if the environment variable `DEBUG` is set to `true`. +if [[ "${DEBUG:-false}" == "true" ]]; then + # Print each command before executing it. + set -x +fi + +# Set the type hash constants. +# => `keccak256("EIP712Domain(uint256 chainId,address verifyingContract)");` +# See: https://github.com/safe-global/safe-smart-account/blob/a0a1d4292006e26c4dbd52282f4c932e1ffca40f/contracts/Safe.sol#L54-L57. +readonly DOMAIN_SEPARATOR_TYPEHASH="0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218" +# => `keccak256("EIP712Domain(address verifyingContract)");` +# See: https://github.com/safe-global/safe-smart-account/blob/703dde2ea9882a35762146844d5cfbeeec73e36f/contracts/GnosisSafe.sol#L20-L23. +readonly DOMAIN_SEPARATOR_TYPEHASH_OLD="0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749" +# => `keccak256("SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)");` +# See: https://github.com/safe-global/safe-smart-account/blob/a0a1d4292006e26c4dbd52282f4c932e1ffca40f/contracts/Safe.sol#L59-L62. +readonly SAFE_TX_TYPEHASH="0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8" +# => `keccak256("SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 dataGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)");` +# See: https://github.com/safe-global/safe-smart-account/blob/427d6f7e779431333c54bcb4d4cde31e4d57ce96/contracts/GnosisSafe.sol#L25-L28. +readonly SAFE_TX_TYPEHASH_OLD="0x14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b20" +# => `keccak256("SafeMessage(bytes message)");` +# See: https://github.com/safe-global/safe-smart-account/blob/febab5e4e859e6e65914f17efddee415e4992961/contracts/libraries/SignMessageLib.sol#L12-L13. +readonly SAFE_MSG_TYPEHASH="0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca" + +# Define the supported networks from the Safe transaction service. +# See https://docs.safe.global/core-api/transaction-service-supported-networks. +declare -A -r API_URLS=( + ["arbitrum"]="https://safe-transaction-arbitrum.safe.global" + ["aurora"]="https://safe-transaction-aurora.safe.global" + ["avalanche"]="https://safe-transaction-avalanche.safe.global" + ["base"]="https://safe-transaction-base.safe.global" + ["base-sepolia"]="https://safe-transaction-base-sepolia.safe.global" + ["blast"]="https://safe-transaction-blast.safe.global" + ["bsc"]="https://safe-transaction-bsc.safe.global" + ["celo"]="https://safe-transaction-celo.safe.global" + ["ethereum"]="https://safe-transaction-mainnet.safe.global" + ["gnosis"]="https://safe-transaction-gnosis-chain.safe.global" + ["gnosis-chiado"]="https://safe-transaction-chiado.safe.global" + ["linea"]="https://safe-transaction-linea.safe.global" + ["mantle"]="https://safe-transaction-mantle.safe.global" + ["optimism"]="https://safe-transaction-optimism.safe.global" + ["polygon"]="https://safe-transaction-polygon.safe.global" + ["polygon-zkevm"]="https://safe-transaction-zkevm.safe.global" + ["rootstock"]="https://gateway.safe.rootstock.io" + ["rootstock-testnet"]="https://gateway.safe.rootstock.io" + ["scroll"]="https://safe-transaction-scroll.safe.global" + ["sepolia"]="https://safe-transaction-sepolia.safe.global" + ["worldchain"]="https://safe-transaction-worldchain.safe.global" + ["xlayer"]="https://safe-transaction-xlayer.safe.global" + ["zksync"]="https://safe-transaction-zksync.safe.global" +) + +# Define the chain IDs of the supported networks from the Safe transaction service. +declare -A -r CHAIN_IDS=( + ["arbitrum"]="42161" + ["aurora"]="1313161554" + ["avalanche"]="43114" + ["base"]="8453" + ["base-sepolia"]="84532" + ["blast"]="81457" + ["bsc"]="56" + ["celo"]="42220" + ["ethereum"]="1" + ["gnosis"]="100" + ["gnosis-chiado"]="10200" + ["linea"]="59144" + ["mantle"]="5000" + ["optimism"]="10" + ["polygon"]="137" + ["polygon-zkevm"]="1101" + ["rootstock"]="30" + ["rootstock-testnet"]="31" + ["scroll"]="534352" + ["sepolia"]="11155111" + ["worldchain"]="480" + ["xlayer"]="196" + ["zksync"]="324" +) + +version() { + echo "safe_hashes 0.1.3" + exit 0 +} + +# Utility function to display the usage information. +usage() { + cat < --address
--nonce [--untrusted] + --message print-mst-calldata + $0 --offline --network --address
--nonce [OPTIONS] + +Options: + --version Display the script version + --help Display this help message + --list-networks List all supported networks and their chain IDs + --network Specify the network (required) + --address
Specify the Safe multisig address (required) + --nonce Specify the transaction nonce (required for transaction hashes) + --message Specify the message file (required for off-chain message hashes) + --untrusted Use untrusted endpoint (adds trusted=false parameter to API calls) + --offline Calculate transaction hash offline with custom parameters + --print-mst-calldata Print the calldata for the entire multi-sig transaction + +Additional options for offline mode: + --to Target address (required in offline mode) + --value Transaction value in wei (default: 0) + --data Transaction data (default: 0x) + --operation Operation type (default: 0) + --safe-tx-gas SafeTxGas (default: 0) + --base-gas BaseGas (default: 0) + --gas-price GasPrice (default: 0) + --gas-token Gas token address (default: 0x0000...0000) + --refund-receiver Refund receiver address (default: 0x0000...0000) + --safe-version Safe version (default: 1.3.0) + +Examples: + # Online transaction hash calculation (trusted by default): + $0 --network ethereum --address 0x1234...5678 --nonce 42 + + # Online transaction hash calculation with untrusted endpoint: + $0 --network ethereum --address 0x1234...5678 --nonce 42 --untrusted + + # Off-chain message hash calculation: + $0 --network ethereum --address 0x1234...5678 --message message.txt + + # Offline transaction hash calculation: + $0 --offline --network ethereum --address 0x1234...5678 --to 0x9876...5432 \\ + --data 0x095e...0001 --value 1000000000000000000 --nonce 42 + +EOF + exit 1 +} +# Utility function to list all supported networks. +list_networks() { + echo "Supported Networks:" + for network in $(echo "${!CHAIN_IDS[@]}" | tr " " "\n" | sort); do + echo " $network (${CHAIN_IDS[$network]})" + done + exit 0 +} + +# Utility function to print a section header. +print_header() { + local header=$1 + if [[ -t 1 ]] && tput sgr0 >/dev/null 2>&1; then + # Terminal supports formatting. + printf "\n${UNDERLINE}%s${RESET}\n" "$header" + else + # Fallback for terminals without formatting support. + printf "\n%s\n" "> $header:" + fi +} + +# Utility function to print a labelled value. +print_field() { + local label=$1 + local value=$2 + local empty_line="${3:-false}" + + if [[ -t 1 ]] && tput sgr0 >/dev/null 2>&1; then + # Terminal supports formatting. + printf "%s: ${GREEN}%s${RESET}\n" "$label" "$value" + else + # Fallback for terminals without formatting support. + printf "%s: %s\n" "$label" "$value" + fi + + # Print an empty line if requested. + if [[ "$empty_line" == "true" ]]; then + printf "\n" + fi +} + +# Utility function to print the transaction data. +print_transaction_data() { + local address=$1 + local to=$2 + local value=$3 + local data=$4 + local message=$5 + + print_header "Transaction Data" + print_field "Multisig address" "$address" + print_field "To" "$to" + print_field "Value" "$value" + print_field "Data" "$data" + print_field "Encoded message" "$message" +} + +print_mst_calldata_data() { + local to=$1 + local value=$2 + local data=$3 + local operation=$4 + local safe_tx_gas=$5 + local base_gas=$6 + local gas_price=$7 + local gas_token=$8 + local refund_receiver=$9 + local signatures=${10} + local confirmations_required=${11} + local confirmations_count=${12} + + print_header "Multi-sig Transaction Calldata Data" + print_field "Confirmations count: " "$confirmations_count" + print_field "Required number: " "$confirmations_required" + + if [[ "$confirmations_count" -lt "$confirmations_required" ]]; then + echo "Not enough confirmations to print calldata" + else + local full_calldata=$(cast calldata "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)" \ + "$to" \ + "$value" \ + "$data" \ + "$operation" \ + "$safe_tx_gas" \ + "$base_gas" \ + "$gas_price" \ + "$gas_token" \ + "$refund_receiver" \ + "$signatures") + print_field "Full transaction calldata" "$full_calldata" + local tx_data_hashed=$(cast keccak "$data") + print_field "Transaction calldata hash" "$tx_data_hashed" + fi +} + +# Utility function to format the hash (keep `0x` lowercase, rest uppercase). +format_hash() { + local hash=$1 + local prefix="${hash:0:2}" + local rest="${hash:2}" + echo "${prefix,,}${rest^^}" +} + +# Utility function to print the hash information. +print_hash_info() { + local domain_hash=$1 + local message_hash=$2 + local safe_tx_hash=$3 + local binary_literal=$( + echo -n "${safe_tx_hash#0x}" | xxd -r -p | \ + perl -pe 's/([^[:print:]]|[\x80-\xff])/sprintf("\\x%02x",ord($1))/ge; s/([^ -~])/sprintf("\\x%02x",ord($1))/ge' + ) + + print_header "Legacy Ledger Format" + print_field "Binary string literal" "$binary_literal" + + print_header "Hashes" + print_field "Domain hash" "$(format_hash "$domain_hash")" + print_field "Message hash" "$(format_hash "$message_hash")" + print_field "Safe transaction hash" "$safe_tx_hash" +} + +# Utility function to print the ABI-decoded transaction data. +print_decoded_data() { + local data_decoded=$1 + + if [[ "$data_decoded" == "0x" ]]; then + print_field "Method" "0x (ETH Transfer)" + print_field "Parameters" "[]" + else + local method=$(echo "$data_decoded" | jq -r ".method") + local parameters=$(echo "$data_decoded" | jq -r ".parameters") + + print_field "Method" "$method" + print_field "Parameters" "$parameters" + + # Check if the called function is sensitive and print a warning in bold. + case "$method" in + addOwnerWithThreshold | removeOwner | swapOwner | changeThreshold) + echo + echo -e "${BOLD}${RED}WARNING: The \"$method\" function modifies the owners or threshold of the Safe. Proceed with caution!${RESET}" + ;; + esac + + # Check for sensitive functions in nested transactions. + echo "$parameters" | jq -c ".[] | .valueDecoded[]? | select(.dataDecoded != null)" | while read -r nested_param; do + nested_method=$(echo "$nested_param" | jq -r ".dataDecoded.method") + + if [[ "$nested_method" =~ ^(addOwnerWithThreshold|removeOwner|swapOwner|changeThreshold)$ ]]; then + echo + echo -e "${BOLD}${RED}WARNING: The \"$nested_method\" function modifies the owners or threshold of the Safe! Proceed with caution!${RESET}" + fi + done + fi +} + +# Utility function to extract the clean Safe multisig version. +get_version() { + local version=$1 + # Safe multisig versions can have the format `X.Y.Z+L2`. + # Remove any suffix after and including the `+` in the version string for comparison. + local clean_version=$(echo "$version" | sed "s/+.*//") + echo "$clean_version" +} + +# Utility function to validate the Safe multisig version. +validate_version() { + local version=$1 + if [[ -z "$version" ]]; then + echo "$(tput setaf 3)No Safe multisig contract found for the specified network. Please ensure that you have selected the correct network.$(tput setaf 0)" + exit 0 + fi + + local clean_version=$(get_version "$version") + + # Ensure that the Safe multisig version is `>= 0.1.0`. + if [[ "$(printf "%s\n%s" "$clean_version" "0.1.0" | sort -V | head -n1)" == "$clean_version" && "$clean_version" != "0.1.0" ]]; then + echo "$(tput setaf 3)Safe multisig version \"${clean_version}\" is not supported!$(tput setaf 0)" + exit 0 + fi +} + +# Utility function to calculate the domain hash. +calculate_domain_hash() { + local version=$1 + local domain_separator_typehash=$2 + local domain_hash_args=$3 + + # Validate the Safe multisig version. + validate_version "$version" + + local clean_version=$(get_version "$version") + + # Safe multisig versions `<= 1.2.0` use a legacy (i.e. without `chainId`) `DOMAIN_SEPARATOR_TYPEHASH` value. + # Starting with version `1.3.0`, the `chainId` field was introduced: https://github.com/safe-global/safe-smart-account/pull/264. + if [[ "$(printf "%s\n%s" "$clean_version" "1.2.0" | sort -V | head -n1)" == "$clean_version" ]]; then + domain_separator_typehash="$DOMAIN_SEPARATOR_TYPEHASH_OLD" + domain_hash_args="$domain_separator_typehash, $address" + fi + + # Calculate the domain hash. + local domain_hash=$(chisel eval "keccak256(abi.encode($domain_hash_args))" | + awk '/Data:/ {gsub(/\x1b\[[0-9;]*m/, "", $3); print $3}') + echo "$domain_hash" +} + +# Utility function to calculate the domain and message hashes. +calculate_hashes() { + local chain_id=$1 + local address=$2 + local to=$3 + local value=$4 + local data=$5 + local operation=$6 + local safe_tx_gas=$7 + local base_gas=$8 + local gas_price=$9 + local gas_token=${10} + local refund_receiver=${11} + local nonce=${12} + local data_decoded=${13} + local version=${14} + + local domain_separator_typehash="$DOMAIN_SEPARATOR_TYPEHASH" + local domain_hash_args="$domain_separator_typehash, $chain_id, $address" + local safe_tx_typehash="$SAFE_TX_TYPEHASH" + + # Validate the Safe multisig version. + validate_version "$version" + + local clean_version=$(get_version "$version") + + # Calculate the domain hash. + local domain_hash=$(calculate_domain_hash "$version" "$domain_separator_typehash" "$domain_hash_args") + + # Calculate the data hash. + # The dynamic value `bytes` is encoded as a `keccak256` hash of its content. + # See: https://eips.ethereum.org/EIPS/eip-712#definition-of-encodedata. + local data_hashed=$(cast keccak "$data") + + # Safe multisig versions `< 1.0.0` use a legacy (i.e. the parameter value `baseGas` was + # called `dataGas` previously) `SAFE_TX_TYPEHASH` value. Starting with version `1.0.0`, + # `baseGas` was introduced: https://github.com/safe-global/safe-smart-account/pull/90. + if [[ "$(printf "%s\n%s" "$clean_version" "1.0.0" | sort -V | head -n1)" == "$clean_version" && "$clean_version" != "1.0.0" ]]; then + safe_tx_typehash="$SAFE_TX_TYPEHASH_OLD" + fi + + # Encode the message. + local message=$(cast abi-encode "SafeTxStruct(bytes32,address,uint256,bytes32,uint8,uint256,uint256,uint256,address,address,uint256)" \ + "$safe_tx_typehash" \ + "$to" \ + "$value" \ + "$data_hashed" \ + "$operation" \ + "$safe_tx_gas" \ + "$base_gas" \ + "$gas_price" \ + "$gas_token" \ + "$refund_receiver" \ + "$nonce") + + # Calculate the message hash. + local message_hash=$(cast keccak "$message") + + # Calculate the Safe transaction hash. + local safe_tx_hash=$(chisel eval "keccak256(abi.encodePacked(bytes1(0x19), bytes1(0x01), bytes32($domain_hash), bytes32($message_hash)))" | + awk '/Data:/ {gsub(/\x1b\[[0-9;]*m/, "", $3); print $3}') + + # Print the retrieved transaction data. + print_transaction_data "$address" "$to" "$value" "$data" "$message" + + # Print the ABI-decoded transaction data. + if [[ "$data_decoded" == "{}" ]]; then + echo "Skipping decoded data, since raw data was passed" + else + print_decoded_data "$data_decoded" + fi + # Print the results with the same formatting for "Domain hash" and "Message hash" as a Ledger hardware device. + print_hash_info "$domain_hash" "$message_hash" "$safe_tx_hash" +} + + +# Utility function to validate the network name. +validate_network() { + local network="$1" + if [[ -z "${API_URLS[$network]:-}" || -z "${CHAIN_IDS[$network]:-}" ]]; then + echo -e "${BOLD}${RED}Invalid network name: \"${network}\"${RESET}\n" >&2 + calculate_safe_hashes --list-networks >&2 + exit 1 + fi +} + +# Utility function to retrieve the API URL of the selected network. +get_api_url() { + local network="$1" + validate_network "$network" + echo "${API_URLS[$network]}" +} + +# Utility function to retrieve the chain ID of the selected network. +get_chain_id() { + local network="$1" + validate_network "$network" + echo "${CHAIN_IDS[$network]}" +} + +# Utility function to validate the multisig address. +validate_address() { + local address="$1" + if [[ -z "$address" || ! "$address" =~ ^0x[a-fA-F0-9]{40}$ ]]; then + echo -e "${BOLD}${RED}Invalid Ethereum address format: \"${address}\"${RESET}" >&2 + exit 1 + fi +} + +# Utility function to validate the transaction nonce. +validate_nonce() { + local nonce="$1" + if [[ -z "$nonce" || ! "$nonce" =~ ^[0-9]+$ ]]; then + echo -e "${BOLD}${RED}Invalid nonce value: \"${nonce}\". Must be a non-negative integer!${RESET}" >&2 + exit 1 + fi +} + +# Utility function to validate the message file. +validate_message_file() { + local message_file="$1" + if [[ ! -f "$message_file" ]]; then + echo -e "${BOLD}${RED}Message file not found: \"${message_file}\"!${RESET}" >&2 + exit 1 + fi + if [[ ! -s "$message_file" ]]; then + echo -e "${BOLD}${RED}Message file is empty: \"${message_file}\"!${RESET}" >&2 + exit 1 + fi +} + +# Utility function to calculate the domain and message hashes for off-chain messages. +calculate_offchain_message_hashes() { + local network=$1 + local chain_id=$2 + local address=$3 + local message_file=$4 + local version=$5 + + validate_message_file "$message_file" + + # Validate the Safe multisig version. + validate_version "$version" + + local message_raw=$(< "$message_file") + # Normalise line endings to `LF` (`\n`). + message_raw=$(echo "$message_raw" | tr -d "\r") + local hashed_message=$(cast hash-message "$message_raw") + + local domain_separator_typehash="$DOMAIN_SEPARATOR_TYPEHASH" + local domain_hash_args="$domain_separator_typehash, $chain_id, $address" + + # Calculate the domain hash. + local domain_hash=$(calculate_domain_hash "$version" "$domain_separator_typehash" "$domain_hash_args") + + # Calculate the message hash. + local message_hash=$(chisel eval "keccak256(abi.encode(bytes32($SAFE_MSG_TYPEHASH), keccak256(abi.encode(bytes32($hashed_message)))))" | + awk '/Data:/ {gsub(/\x1b\[[0-9;]*m/, "", $3); print $3}') + + # Calculate the Safe message hash. + local safe_msg_hash=$(chisel eval "keccak256(abi.encodePacked(bytes1(0x19), bytes1(0x01), bytes32($domain_hash), bytes32($message_hash)))" | + awk '/Data:/ {gsub(/\x1b\[[0-9;]*m/, "", $3); print $3}') + + # Calculate and display the hashes. + echo "===================================" + echo "= Selected Network Configurations =" + echo -e "===================================\n" + print_field "Network" "$network" + print_field "Chain ID" "$chain_id" true + echo "====================================" + echo "= Message Data and Computed Hashes =" + echo "====================================" + print_header "Message Data" + print_field "Multisig address" "$address" + print_field "Message" "$message_raw" + print_header "Hashes" + print_field "Raw message hash" "$hashed_message" + print_field "Domain hash" "$(format_hash "$domain_hash")" + print_field "Message hash" "$(format_hash "$message_hash")" + print_field "Safe message hash" "$safe_msg_hash" +} + +# Safe Transaction/Message Hashes Calculator +# This function orchestrates the entire process of calculating the Safe transaction/message hashes: +# 1. Parses command-line arguments (`network`, `address`, `nonce`, `message`). +# 2. Validates that all required parameters are provided. +# 3. Retrieves the API URL and chain ID for the specified network. +# 4. Constructs the API endpoint URL. +# 5. If a message file is provided: +# - Validates that no nonce is specified (as it's not applicable for off-chain message hashes). +# - Calls `calculate_offchain_message_hashes` to compute and display the message hashes. +# 6. If a nonce is provided: +# - Fetches the transaction data from the Safe transaction service API. +# - Extracts the relevant transaction details from the API response. +# - Calls the `calculate_hashes` function to compute and display the results. +calculate_safe_hashes() { + # Display the help message if no arguments are provided. + if [[ $# -eq 0 ]]; then + usage + fi + + local network="" address="" nonce="" message_file="" offline=false version="1.3.0" untrusted=false + local offline_to="" offline_value="0" offline_data="0x" offline_operation="0" + local offline_safe_tx_gas="0" offline_base_gas="0" offline_gas_price="0" + local offline_gas_token="0x0000000000000000000000000000000000000000" + local offline_refund_receiver="0x0000000000000000000000000000000000000000" + local print_mst_calldata=false + + # Parse command line arguments + while [[ $# -gt 0 ]]; do + case "$1" in + -v|--version) version ;; + --help) usage ;; + --offline) offline=true; shift ;; + --print-mst-calldata) print_mst_calldata=true; shift ;; + --untrusted) untrusted=true; shift ;; + --network) network="$2"; shift 2 ;; + --address) address="$2"; shift 2 ;; + --nonce) nonce="$2"; shift 2 ;; + --message) message_file="$2"; shift 2 ;; + --to) offline_to="$2"; shift 2 ;; + --value) offline_value="$2"; shift 2 ;; + --data) offline_data="$2"; shift 2 ;; + --operation) offline_operation="$2"; shift 2 ;; + --safe-tx-gas) offline_safe_tx_gas="$2"; shift 2 ;; + --base-gas) offline_base_gas="$2"; shift 2 ;; + --gas-price) offline_gas_price="$2"; shift 2 ;; + --gas-token) offline_gas_token="$2"; shift 2 ;; + --refund-receiver) offline_refund_receiver="$2"; shift 2 ;; + --safe-version) version="$2"; shift 2 ;; + --list-networks) list_networks ;; + *) echo "Unknown option: $1" >&2; usage ;; + esac + done + + # Validation + if [[ "$offline" == true && "$print_mst_calldata" == true ]]; then + echo -e "${RED}Error: The --print-mst-calldata option is not supported in offline mode. Please remove it and try again.${RESET}" >&2 + exit 1 + fi + + # Validate if the required parameters have the correct format. + validate_network "$network" + validate_address "$address" + local chain_id=$(get_chain_id "$network") + local api_url="" + + # Only get api_url and version in online mode or for message files + if [[ "$offline" != "true" || -n "$message_file" ]]; then + api_url=$(get_api_url "$network") + if [[ "$network" == "rootstock" || "$network" == "rootstock-testnet" ]]; then + version=$(curl -sf "${api_url}/v1/chains/${chain_id}/safes/${address}" | jq -r ".version // \"0.0.0\"") + else + version=$(curl -sf "${api_url}/api/v1/safes/${address}/" | jq -r ".version // \"0.0.0\"") + fi + fi + + # Handle message file mode first + if [[ -n "$message_file" ]]; then + if [[ -n "$nonce" ]]; then + echo -e "${RED}Error: When calculating off-chain message hashes, do not specify a nonce.${RESET}" >&2 + exit 1 + fi + calculate_offchain_message_hashes "$network" "$chain_id" "$address" "$message_file" "$version" + exit 0 + fi + + if [[ "$offline" == true ]]; then + handle_offline_mode "$network" "$chain_id" "$address" "$nonce" "$version" \ + "$offline_to" "$offline_value" "$offline_data" "$offline_operation" \ + "$offline_safe_tx_gas" "$offline_base_gas" "$offline_gas_price" \ + "$offline_gas_token" "$offline_refund_receiver" + else + handle_online_mode "$network" "$chain_id" "$api_url" "$version" \ + "$address" "$nonce" "$untrusted" "$print_mst_calldata" + fi +} + +handle_online_mode() { + # Get the API URL and chain ID for the specified network. + local network="$1" + local chain_id="$2" + local api_url="$3" + local version="$4" + local address="$5" + local nonce="$6" + local untrusted="$7" + local print_mst_calldata="$8" + + local endpoint="" + if [[ "$network" == "rootstock" || "$network" == "rootstock-testnet" ]]; then + endpoint="${api_url}/v1/chains/${chain_id}/safes/${address}/multisig-transactions?nonce=${nonce}" + else + endpoint="${api_url}/api/v1/safes/${address}/multisig-transactions/?nonce=${nonce}" + fi + if [[ "$untrusted" == "true" ]]; then + if [[ "$network" == "rootstock" || "$network" == "rootstock-testnet" ]]; then + echo "$(tput setaf 1)Error: The --untrusted flag is not supported by Rootstock networks$(tput sgr0)" >&2 + exit 1 + fi + endpoint="${endpoint}&trusted=false" + fi + + # Validate if the nonce parameter has the correct format. + validate_nonce "$nonce" + + # Fetch the transaction data from the API. + local response=$(curl -sf "$endpoint") + + # For debugging purposes: + # echo "Endpoint: $endpoint" + + local count=0 + if [[ "$network" == "rootstock" || "$network" == "rootstock-testnet" ]]; then + count=$(echo "$response" | jq -r ".results | length // 0") + else + count=$(echo "$response" | jq -r ".count // \"0\"") + fi + local idx=0 + + # Inform the user that no transactions are available for the specified nonce. + if [[ $count -eq 0 ]]; then + echo "$(tput setaf 3)No transaction is available for this nonce!$(tput setaf 0)" + exit 0 + # Notify the user about multiple transactions with identical nonce values and prompt for user input. + elif [[ $count -gt 1 ]]; then + cat <&2 + usage + fi + + # Validate addresses + validate_address "$offline_to" + [[ "$offline_gas_token" != "0x0000000000000000000000000000000000000000" ]] && validate_address "$offline_gas_token" + [[ "$offline_refund_receiver" != "0x0000000000000000000000000000000000000000" ]] && validate_address "$offline_refund_receiver" + + # Calculate and display the hashes + echo "===================================" + echo "= Selected Network Configurations =" + echo -e "===================================\n" + print_field "Network" "$network" + print_field "Chain ID" "$chain_id" true + echo "========================================" + echo "= Transaction Data and Computed Hashes =" + echo "========================================" + calculate_hashes "$chain_id" \ + "$address" \ + "$offline_to" \ + "$offline_value" \ + "$offline_data" \ + "$offline_operation" \ + "$offline_safe_tx_gas" \ + "$offline_base_gas" \ + "$offline_gas_price" \ + "$offline_gas_token" \ + "$offline_refund_receiver" \ + "$nonce" \ + "{}" \ + "$version" +} + +# Entry point for the script +calculate_safe_hashes "$@" diff --git a/src/safe-hashes/schema.ts b/src/safe-hashes/schema.ts new file mode 100644 index 00000000..44807f0e --- /dev/null +++ b/src/safe-hashes/schema.ts @@ -0,0 +1,21 @@ +import type { Address } from "viem"; + +export interface SafeTxHashesResponse { + transactionData: { + multisigAddress: Address; + to: Address; + value: number; + data: `0x${string}`; + encodedMessage: `0x${string}`; + method: string | null; + parameters: string | null; + }; + legacyLedgerFormat: { + binaryStringLiteral: string; + }; + hashes: { + domainHash: `0x${string}`; + messageHash: `0x${string}`; + safeTransactionHash: `0x${string}`; + }; +} diff --git a/src/safe/AltAPI.ts b/src/safe/AltAPI.ts index 1f814594..9664cc93 100644 --- a/src/safe/AltAPI.ts +++ b/src/safe/AltAPI.ts @@ -1,6 +1,7 @@ import type { Address, Hash, Hex } from "viem"; import { BaseApi } from "./BaseApi.js"; +import { CHAIN_IDS } from "./constants.js"; import type { ISafeAPI, ListedSafeTx, SafeTx } from "./types.js"; type TxID = `multisig_${Address}_${Hash}`; @@ -119,14 +120,7 @@ function parseTxId(id: TxID): ParsedTxId { return { multisig: multisig as Address, safeTxHash: safeTxHash as Hash }; } -const CHAIN_IDS: Record = { - arb1: 42161, - eth: 1, - gor: 5, - oeth: 10, -}; - -function normalizeLisited(tx: ListedTx): ListedSafeTx { +function normalizeListed(tx: ListedTx): ListedSafeTx { const { safeTxHash } = parseTxId(tx.id); return { safeTxHash, @@ -142,7 +136,7 @@ function normalizeDetailed(tx: Transaction): SafeTx
{ return { safeTxHash, nonce: tx.detailedExecutionInfo.nonce, - to: tx.txInfo.to.value, + to: tx.txData.to.value, operation: tx.txData.operation, proposer: tx.detailedExecutionInfo.confirmations?.[0].signer.value ?? "0x0", confirmations: @@ -161,17 +155,17 @@ export class AltAPI extends BaseApi implements ISafeAPI { const data = await this.#fetchList(url); results.push(...(data.results.map(tx => tx.transaction) ?? [])); url = data.next; - } catch (e) { - this.logger.error(e); - break; + } catch (error) { + this.logger.error(error); + return Promise.reject(error); } } while (url); - return results.map(normalizeLisited); + return results.map(normalizeListed); } public async fetchLatest(): Promise { const data = await this.#fetchList(); - return (data.results.map(tx => tx.transaction) ?? []).map(normalizeLisited); + return (data.results.map(tx => tx.transaction) ?? []).map(normalizeListed); } public async fetchDetailed(safeTxHash: Hash): Promise> { @@ -201,14 +195,14 @@ export class AltAPI extends BaseApi implements ISafeAPI { } private get chainId(): number { - const chainId = CHAIN_IDS[this.prefix]; + const chainId = CHAIN_IDS[this.prefix.trim()]; if (!chainId) { - throw new Error(`no chain id for prefix '${this.prefix}'`); + throw new Error(`no chain id for prefix '${this.prefix.trim()}'`); } return chainId; } private get apiURL(): string { - return `https://safe-client.safe.global/v1/chains/${this.chainId}`; + return `https://gateway.safe.rootstock.io/v1/chains/${this.chainId}`; } } diff --git a/src/safe/BaseApi.ts b/src/safe/BaseApi.ts index 52ef0d22..6477c0c6 100644 --- a/src/safe/BaseApi.ts +++ b/src/safe/BaseApi.ts @@ -1,5 +1,6 @@ import type { Logger } from "pino"; import type { Address } from "viem"; +import { getAddress } from "viem"; import type { PrefixedAddress } from "../config/index.js"; import { parsePrefixedAddress } from "../config/index.js"; @@ -13,26 +14,31 @@ export abstract class BaseApi { constructor(safe: PrefixedAddress) { const [prefix, address] = parsePrefixedAddress(safe); - this.address = address; + this.address = getAddress(address); this.prefix = prefix; this.logger = logger.child({ prefix, address }); } protected async fetch(url: string): Promise { this.logger.debug(`fetching ${url}`); - const resp = await fetchRetry(url, { - retries: 20, - validateResponse: r => { - if (!r.ok) { - throw new Error(`invalid response status: ${r.status}`); - } - const ct = r.headers.get("Content-Type"); - if (!ct?.includes("application/json")) { - throw new Error(`invalid content type: ${ct}`); - } - }, - }); - const data = await resp.json(); - return data; + try { + const resp = await fetchRetry(url, { + retries: 20, + validateResponse: r => { + if (!r.ok) { + throw new Error(`invalid response status: ${r.status}`); + } + const ct = r.headers.get("Content-Type"); + if (!ct?.includes("application/json")) { + throw new Error(`invalid content type: ${ct}`); + } + }, + }); + const data = await resp.json(); + return data; + } catch (error) { + this.logger.error(error); + return Promise.reject(error); + } } } diff --git a/src/safe/ClassicAPI.ts b/src/safe/ClassicAPI.ts index 8f7cd8c7..3118f5b7 100644 --- a/src/safe/ClassicAPI.ts +++ b/src/safe/ClassicAPI.ts @@ -1,6 +1,7 @@ import type { Address, Hash } from "viem"; import { BaseApi } from "./BaseApi.js"; +import { APIS } from "./constants.js"; import type { ISafeAPI, ListedSafeTx, SafeTx } from "./types.js"; // export interface SafeMultisigTransactionResponse { @@ -67,7 +68,7 @@ interface SafeMultisigTransactionData { countUniqueNonce: number; } -function normalizeListed(tx: SafeMultisigTransaction): ListedSafeTx { +export function normalizeListed(tx: SafeMultisigTransaction): ListedSafeTx { return { safeTxHash: tx.safeTxHash, nonce: tx.nonce, @@ -90,13 +91,6 @@ function normalizeDetailed(tx: SafeMultisigTransaction): SafeTx
{ }; } -const APIS: Record = { - arb1: "https://safe-transaction-arbitrum.safe.global", - eth: "https://safe-transaction-mainnet.safe.global", - gor: "https://safe-transaction-goerli.safe.global", - oeth: "https://safe-transaction-optimism.safe.global", -}; - export class ClassicAPI extends BaseApi implements ISafeAPI { readonly #txs = new Map(); @@ -148,9 +142,9 @@ export class ClassicAPI extends BaseApi implements ISafeAPI { } private get apiURL(): string { - const api = APIS[this.prefix]; + let api = APIS[this.prefix.trim()]; if (!api) { - throw new Error(`no API URL for chain '${this.prefix}'`); + throw new Error(`no API URL for chain '${this.prefix.trim()}'`); } return api; } diff --git a/src/safe/SafeApiWrapper.ts b/src/safe/SafeApiWrapper.ts index f71c7e65..27794692 100644 --- a/src/safe/SafeApiWrapper.ts +++ b/src/safe/SafeApiWrapper.ts @@ -1,9 +1,11 @@ +import type { Address, Hash } from "viem"; + import type { PrefixedAddress } from "../config/index.js"; import { AltAPI } from "./AltAPI.js"; import { BaseApi } from "./BaseApi.js"; import { ClassicAPI } from "./ClassicAPI.js"; import type { SafeAPIMode } from "./schema.js"; -import type { ISafeAPI } from "./types.js"; +import type { ISafeAPI, ListedSafeTx, SafeTx } from "./types.js"; const methods = ["fetchAll", "fetchLatest", "fetchDetailed"] as Array< keyof ISafeAPI @@ -18,18 +20,23 @@ export class SafeApiWrapper extends BaseApi implements ISafeAPI { this.#classic = new ClassicAPI(safe); this.#alt = new AltAPI(safe); for (const m of methods) { + // @ts-ignore */ this[m] = async (...args: Parameters) => { if (mode === "classic") { + // @ts-ignore */ return this.#classic[m](...args); } else if (mode === "alt") { + // @ts-ignore */ return this.#alt[m](...args); } else { try { + // @ts-ignore */ const classic = await Promise.resolve(this.#classic[m](...args)); return classic; } catch (e) { this.logger.error(e); this.logger.warn("falling back to alternative api"); + // @ts-ignore */ const alt = await Promise.resolve(this.#alt[m](...args)); return alt; } @@ -37,4 +44,7 @@ export class SafeApiWrapper extends BaseApi implements ISafeAPI { }; } } + fetchAll: () => Promise; + fetchLatest: () => Promise; + fetchDetailed: (safeTxHash: Hash) => Promise>; } diff --git a/src/safe/constants.ts b/src/safe/constants.ts index 4185a26a..db52f515 100644 --- a/src/safe/constants.ts +++ b/src/safe/constants.ts @@ -8,3 +8,30 @@ export const MULTISEND_CALL_ONLY = new Set
([ "0x9641d764fc13c8b624c04430c7356c1c7c8102e2", "0x40a2accbd92bca938b02010e17a5b8929b49130d", ]); + +export const CHAIN_IDS: Record = { + arb1: 42161, + eth: 1, + gor: 5, + oeth: 10, + rsk: 30, + trsk: 31, +}; + +export const APIS: Record = { + arb1: "https://safe-transaction-arbitrum.safe.global", + eth: "https://safe-transaction-mainnet.safe.global", + gor: "https://safe-transaction-goerli.safe.global", + oeth: "https://safe-transaction-optimism.safe.global", + rsk: "https://transaction.safe.rootstock.io", + trsk: "https://transaction.safe.rootstock.io", +}; + +export const SAFE_API_URLS: Record = { + arb1: "https://safe.global", + eth: "https://ssafe.global", + gor: "https://safe.global", + oeth: "https://safe.global", + rsk: "https://safe.rootstock.io", + trsk: "https://safe.rootstock.io", +}; diff --git a/src/types.ts b/src/types.ts index ecd8ee2f..82566f74 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,10 +1,12 @@ import type { Address } from "viem"; import type { ListedSafeTx, SafeTx, Signer } from "./safe/index.js"; +import type { SafeTxHashesResponse } from "./safe-hashes/index.js"; export type EventType = "created" | "updated" | "executed" | "malicious"; export interface Event { + name: string; chainPrefix: string; safe: Address; type: EventType; @@ -13,9 +15,12 @@ export interface Event { } export interface INotificationSender { - notify: (event: Event) => Promise; + notify: (event: Event, safeTxHashes: SafeTxHashesResponse) => Promise; } export interface INotifier { - send: (event: Event) => void | Promise; + send: ( + event: Event, + safeTxHashes: SafeTxHashesResponse, + ) => void | Promise; } diff --git a/test/AltAPI.test.ts b/test/AltAPI.test.ts new file mode 100644 index 00000000..ecae570b --- /dev/null +++ b/test/AltAPI.test.ts @@ -0,0 +1,158 @@ +jest.mock("../src/utils/index.js", () => ({ + fetchRetry: jest.fn(), +})); + +import { expect } from "@jest/globals"; + +import { AltAPI } from "../src/safe/AltAPI.js"; +import { fetchRetry } from "../src/utils/index.js"; +import { + mockAddress, + mockDetailedTx, + mockListedTx, + mockSafeAddress, + mockSafeTxHash, +} from "./utils/config-utils.js"; + +const fetchRetryMock = fetchRetry as any; + +describe("AltAPI", () => { + let api: AltAPI; + + beforeEach(() => { + api = new AltAPI(mockSafeAddress); + fetchRetryMock.mockReset(); + fetchRetryMock.mockImplementation((url: string) => { + // For fetchAll and fetchLatest + if ( + url.includes("multisig-transactions") && + !url.includes("0xaaaaaaaa") + ) { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [ + { + type: "TRANSACTION", + transaction: { + txInfo: { + type: "Transfer", + to: { value: mockAddress }, + dataSize: "0", + value: "0", + methodName: "transfer", + actionCount: 1, + isCancellation: false, + }, + id: `multisig_${mockAddress}_${mockSafeTxHash}`, + timestamp: Date.now(), + txStatus: "AWAITING_CONFIRMATIONS", + executionInfo: { + type: "MULTISIG", + nonce: 1, + confirmationsRequired: 2, + confirmationsSubmitted: 0, + missingSigners: null, + }, + txHash: null, + }, + conflictType: "None", + }, + ], + next: null, + previous: null, + }), + } as unknown as Response); + } + // For fetchDetailed + if (url.includes("0xaaaaaaaa")) { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + safeAddress: mockAddress, + txId: `multisig_${mockAddress}_${mockSafeTxHash}`, + executedAt: null, + txStatus: "AWAITING_CONFIRMATIONS", + txInfo: { + type: "Transfer", + to: { value: mockAddress }, + dataSize: "0", + value: "0", + methodName: "transfer", + actionCount: 1, + isCancellation: false, + }, + txData: { + hexData: "0x", + to: { value: mockAddress }, + value: "0", + operation: 0, + trustedDelegateCallTarget: false, + addressInfoIndex: {}, + }, + txHash: null, + detailedExecutionInfo: { + type: "MULTISIG", + submittedAt: Date.now(), + nonce: 1, + safeTxGas: "0", + baseGas: "0", + gasPrice: "0", + gasToken: "0x0000000000000000000000000000000000000000", + refundReceiver: { + value: "0x0000000000000000000000000000000000000000", + }, + safeTxHash: mockSafeTxHash, + executor: null, + signers: [{ value: mockAddress }], + confirmationsRequired: 2, + confirmations: [{ signer: { value: mockAddress } }], + rejectors: [], + gasTokenInfo: null, + trusted: true, + proposer: { value: mockAddress }, + proposedByDelegate: null, + }, + note: null, + }), + } as unknown as Response); + } + // Default fallback + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => Promise.resolve({}), + } as unknown as Response); + }); + }); + + test("should fetch all transactions", async () => { + const txs = await api.fetchAll(); + expect(txs).toHaveLength(1); + expect(txs[0]).toEqual(mockListedTx); + }); + + test("should fetch latest transactions", async () => { + const txs = await api.fetchLatest(); + expect(txs).toHaveLength(1); + expect(txs[0]).toEqual(mockListedTx); + }); + + test("should fetch detailed transaction", async () => { + const tx = await api.fetchDetailed(mockSafeTxHash); + expect(tx).toEqual(mockDetailedTx); + }); + + test("should handle API errors gracefully", async () => { + const error = new Error("API Error"); + jest.spyOn(api as any, "fetch").mockRejectedValueOnce(error); + await expect(api.fetchAll()).resolves.toEqual([]); + }); +}); diff --git a/test/BaseAPI.test.ts b/test/BaseAPI.test.ts new file mode 100644 index 00000000..785fc163 --- /dev/null +++ b/test/BaseAPI.test.ts @@ -0,0 +1,103 @@ +jest.mock("../src/utils/index.js", () => ({ + fetchRetry: jest.fn(), +})); + +import { expect } from "@jest/globals"; + +import { ClassicAPI } from "../src/safe/ClassicAPI.js"; +import { fetchRetry } from "../src/utils/index.js"; +import { mockSafeAddress } from "./utils/config-utils.js"; + +const fetchRetryMock = fetchRetry as any; + +describe("BaseApi", () => { + // Helper for fetchRetryMock implementation + function fetchRetryMockImpl(url: string, opts: any) { + let response: any; + if (url.includes("non-200")) { + response = { + ok: false, + status: 404, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => Promise.resolve({}), + }; + } else if (url.includes("non-json")) { + response = { + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "text/plain" }), + json: () => Promise.resolve({}), + }; + } else if (url.includes("success")) { + response = { + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => Promise.resolve({ test: "data" }), + }; + } else { + response = { + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => Promise.resolve({}), + }; + } + if (opts && typeof opts.validateResponse === "function") { + try { + opts.validateResponse(response); + } catch (e) { + return Promise.reject(e); + } + } + return Promise.resolve(response); + } + + test("should initialize with correct address and prefix", () => { + const api = new ClassicAPI(mockSafeAddress); + expect(api["address"]).toBe("0x0000000000000000000000000000000000000001"); + expect(api["prefix"]).toBe("rsk"); + }); + + test("should throw error for invalid address", () => { + const invalidAddress = "rsk:0xinvalid" as const; + expect(() => new ClassicAPI(invalidAddress)).toThrow( + "invalid prefixed safe address", + ); + }); + + test("should throw error for missing prefix", () => { + // Use an address without a prefix, cast to any to bypass type check + const noPrefixAddress = "0x0000000000000000000000000000000000000001" as any; + expect(() => new ClassicAPI(noPrefixAddress)).toThrow( + "invalid prefixed safe address", + ); + }); + + describe("fetch", () => { + let api: ClassicAPI; + + beforeEach(() => { + api = new ClassicAPI(mockSafeAddress); + fetchRetryMock.mockReset(); + fetchRetryMock.mockImplementation(fetchRetryMockImpl); + }); + + test("should throw error for non-200 response", async () => { + await expect(api["fetch"]("non-200")).rejects.toThrow( + "invalid response status: 404", + ); + }); + + test("should throw error for non-JSON response", async () => { + await expect(api["fetch"]("non-json")).rejects.toThrow( + "invalid content type: text/plain", + ); + }); + + test("should successfully fetch and parse JSON response", async () => { + const result = await api["fetch"]("success"); + expect(result).toEqual({ test: "data" }); + }); + }); +}); diff --git a/test/ClassicAPI.test.ts b/test/ClassicAPI.test.ts new file mode 100644 index 00000000..53829682 --- /dev/null +++ b/test/ClassicAPI.test.ts @@ -0,0 +1,257 @@ +jest.mock("../src/utils/index.js", () => ({ + fetchRetry: jest.fn(), +})); + +import { ClassicAPI, normalizeListed } from "../src/safe/ClassicAPI.js"; +import { fetchRetry } from "../src/utils/index.js"; +import { + mockAddress, + mockDetailedTx, + mockListedTx, + mockSafeAddress, + mockSafeTxHash, +} from "./utils/config-utils.js"; + +const fetchRetryMock = fetchRetry as any; + +describe("ClassicAPI", () => { + let api: ClassicAPI; + + beforeEach(() => { + api = new ClassicAPI(mockSafeAddress); + fetchRetryMock.mockReset(); + fetchRetryMock.mockImplementation((url: string) => { + // For fetchAll and fetchLatest + if ( + url.includes("multisig-transactions") && + !url.includes("0xaaaaaaaa") + ) { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [ + { + safeTxHash: mockSafeTxHash, + nonce: 1, + isExecuted: false, + confirmationsRequired: 2, + confirmations: [], + to: mockAddress, + operation: 0, + proposer: mockAddress, + }, + ], + next: null, + previous: null, + }), + } as unknown as Response); + } + // For fetchDetailed + if (url.includes("0xaaaaaaaa")) { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + safeTxHash: mockSafeTxHash, + nonce: 1, + isExecuted: false, + confirmationsRequired: 2, + confirmations: [{ owner: mockAddress }], + to: mockAddress, + operation: 0, + proposer: mockAddress, + }), + } as unknown as Response); + } + // Default fallback + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => Promise.resolve({}), + } as unknown as Response); + }); + }); + + test("should fetch all transactions", async () => { + const txs = await api.fetchAll(); + expect(txs).toHaveLength(1); + expect(txs[0]).toEqual(mockListedTx); + }); + + test("should fetch latest transactions", async () => { + const txs = await api.fetchLatest(); + expect(txs).toHaveLength(1); + expect(txs[0]).toEqual(mockListedTx); + }); + + test("should fetch detailed transaction", async () => { + const tx = await api.fetchDetailed(mockSafeTxHash); + expect(tx).toEqual(mockDetailedTx); + }); +}); + +describe("ClassicAPI branch coverage", () => { + let api: ClassicAPI; + + test("should throw error if API URL for prefix is missing", async () => { + const invalidPrefixAddress = + "unknown:0x0000000000000000000000000000000000000001" as any; + const api = new ClassicAPI(invalidPrefixAddress); + await expect(api.fetchAll()).rejects.toThrow( + "no API URL for chain 'unknown'", + ); + }); + + test("should return cached value in fetchDetailed", async () => { + api = new ClassicAPI(mockSafeAddress); + fetchRetryMock.mockReset(); + // First call: fetches and caches + fetchRetryMock.mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + safeTxHash: mockSafeTxHash, + nonce: 1, + isExecuted: false, + confirmationsRequired: 2, + confirmations: [{ owner: mockAddress }], + to: mockAddress, + operation: 0, + proposer: mockAddress, + }), + } as unknown as Response); + }); + const tx1 = await api.fetchDetailed(mockSafeTxHash); + // Second call: should hit cache, so no fetchRetry call + fetchRetryMock.mockImplementationOnce(() => { + throw new Error("Should not be called"); + }); + const tx2 = await api.fetchDetailed(mockSafeTxHash); + expect(tx2).toEqual(tx1); + }); + + test("should handle paginated fetchAll", async () => { + api = new ClassicAPI(mockSafeAddress); + fetchRetryMock.mockReset(); + // First page: has next + fetchRetryMock.mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [ + { + safeTxHash: mockSafeTxHash, + nonce: 1, + isExecuted: false, + confirmationsRequired: 2, + confirmations: [], + to: mockAddress, + operation: 0, + proposer: mockAddress, + }, + ], + next: "next-page", + previous: null, + }), + } as unknown as Response); + }); + // Second page: no next + fetchRetryMock.mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [ + { + safeTxHash: mockSafeTxHash, + nonce: 2, + isExecuted: false, + confirmationsRequired: 2, + confirmations: [], + to: mockAddress, + operation: 0, + proposer: mockAddress, + }, + ], + next: null, + previous: "prev-page", + }), + } as unknown as Response); + }); + const txs = await api.fetchAll(); + expect(txs).toHaveLength(2); + expect(txs[0].nonce).toBe(1); + expect(txs[1].nonce).toBe(2); + }); + + test("should normalize listed transaction with undefined confirmations", () => { + const tx = { + safeTxHash: mockSafeTxHash, + nonce: 1, + isExecuted: false, + confirmationsRequired: 2, + confirmations: [], + to: mockAddress, + operation: 0, + proposer: mockAddress, + submissionDate: new Date().toISOString(), + transactionHash: mockSafeTxHash, + }; + const normalized = normalizeListed(tx); + expect(normalized.confirmations).toBe(0); + }); + + test("should handle empty results in fetchAll", async () => { + api = new ClassicAPI(mockSafeAddress); + fetchRetryMock.mockReset(); + fetchRetryMock.mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [], + next: null, + previous: null, + }), + } as unknown as Response); + }); + const txs = await api.fetchAll(); + expect(txs).toHaveLength(0); + }); + + test("should handle empty results in fetchLatest", async () => { + api = new ClassicAPI(mockSafeAddress); + fetchRetryMock.mockReset(); + fetchRetryMock.mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [], + next: null, + previous: null, + }), + } as unknown as Response); + }); + const txs = await api.fetchLatest(); + expect(txs).toHaveLength(0); + }); +}); diff --git a/test/SafeAPIWrapper.test.ts b/test/SafeAPIWrapper.test.ts new file mode 100644 index 00000000..8d7a1dfb --- /dev/null +++ b/test/SafeAPIWrapper.test.ts @@ -0,0 +1,170 @@ +// test/safe.test.ts +// This file is intended for direct tests of src/safe (SafeApiWrapper, ClassicAPI, AltAPI, BaseApi, etc.) +// Add your unit tests for those classes here. + +jest.mock("../src/utils/index.js", () => ({ + fetchRetry: jest.fn(), +})); + +import { expect } from "@jest/globals"; + +import { SafeApiWrapper } from "../src/safe/SafeApiWrapper.js"; +import { fetchRetry } from "../src/utils/index.js"; +import { + mockAddress, + mockSafeAddress, + mockSafeTxHash, +} from "./utils/config-utils.js"; + +const fetchRetryMock = fetchRetry as any; + +describe("SafeApiWrapper", () => { + let wrapper: SafeApiWrapper; + + test("should use classic API when mode is classic", async () => { + wrapper = new SafeApiWrapper(mockSafeAddress, "classic"); + fetchRetryMock.mockReset(); + fetchRetryMock.mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [ + { + safeTxHash: mockSafeTxHash, + nonce: 1, + isExecuted: false, + confirmationsRequired: 2, + confirmations: [], + to: mockAddress, + operation: 0, + proposer: mockAddress, + submissionDate: new Date().toISOString(), + transactionHash: mockSafeTxHash, + }, + ], + next: null, + previous: null, + }), + } as unknown as Response); + }); + const txs = await wrapper.fetchAll(); + expect(txs).toHaveLength(1); + expect(txs[0].nonce).toBe(1); + }); + + test("should use alt API when mode is alt", async () => { + wrapper = new SafeApiWrapper(mockSafeAddress, "alt"); + fetchRetryMock.mockReset(); + fetchRetryMock.mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [ + { + type: "TRANSACTION", + transaction: { + txInfo: { + type: "Transfer", + to: { value: mockAddress }, + dataSize: "0", + value: "0", + methodName: "transfer", + actionCount: 1, + isCancellation: false, + }, + id: `multisig_${mockAddress}_${mockSafeTxHash}`, + timestamp: Date.now(), + txStatus: "AWAITING_CONFIRMATIONS", + executionInfo: { + type: "MULTISIG", + nonce: 1, + confirmationsRequired: 2, + confirmationsSubmitted: 0, + missingSigners: null, + }, + txHash: null, + }, + conflictType: "None", + }, + ], + next: null, + previous: null, + }), + } as unknown as Response); + }); + const txs = await wrapper.fetchAll(); + expect(txs).toHaveLength(1); + expect(txs[0].nonce).toBe(1); + }); + + test("should fallback to alt API when classic API fails", async () => { + wrapper = new SafeApiWrapper(mockSafeAddress, "fallback"); + fetchRetryMock.mockReset(); + // Classic API fails + fetchRetryMock.mockImplementationOnce(() => { + return Promise.reject(new Error("Classic API Error")); + }); + // Alt API succeeds + fetchRetryMock.mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + headers: new Headers({ "Content-Type": "application/json" }), + json: () => + Promise.resolve({ + results: [ + { + type: "TRANSACTION", + transaction: { + txInfo: { + type: "Transfer", + to: { value: mockAddress }, + dataSize: "0", + value: "0", + methodName: "transfer", + actionCount: 1, + isCancellation: false, + }, + id: `multisig_${mockAddress}_${mockSafeTxHash}`, + timestamp: Date.now(), + txStatus: "AWAITING_CONFIRMATIONS", + executionInfo: { + type: "MULTISIG", + nonce: 1, + confirmationsRequired: 2, + confirmationsSubmitted: 0, + missingSigners: null, + }, + txHash: null, + }, + conflictType: "None", + }, + ], + next: null, + previous: null, + }), + } as unknown as Response); + }); + const txs = await wrapper.fetchAll(); + expect(txs).toHaveLength(1); + expect(txs[0].nonce).toBe(1); + }); + + test("should log error when both classic and alt APIs fail", async () => { + const wrapper = new SafeApiWrapper(mockSafeAddress, "fallback"); + fetchRetryMock.mockImplementationOnce(() => { + return Promise.reject(new Error("Classic API Error")); + }); + fetchRetryMock.mockImplementationOnce(() => { + return Promise.reject(new Error("Alt API Error")); + }); + const result = await wrapper.fetchAll(); + expect(result).toEqual([]); + }); +}); diff --git a/test/SafeWatcher.test.ts b/test/SafeWatcher.test.ts new file mode 100644 index 00000000..b8248a1c --- /dev/null +++ b/test/SafeWatcher.test.ts @@ -0,0 +1,323 @@ +import { expect, jest } from "@jest/globals"; +import type { Address, Hash } from "viem"; + +import type { ISafeAPI, ListedSafeTx, SafeTx } from "../src/safe/types.js"; +import SafeWatcher from "../src/SafeWatcher.js"; +import type { Event, INotificationSender } from "../src/types.js"; + +// Mock MULTISEND_CALL_ONLY +jest.mock("../src/safe/constants.js", () => ({ + MULTISEND_CALL_ONLY: new Set(["0x1234def" as Address]), +})); + +// Global test constants +const safe = { + "rsk:0x0000000000000000000000000000000000000001": "Test", +} as const; + +// Mock data +const mockSafeTx: ListedSafeTx = { + safeTxHash: + "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" as Hash, + nonce: 1, + isExecuted: false, + confirmations: 0, + confirmationsRequired: 2, +}; + +const mockSafeTx2: ListedSafeTx = { + safeTxHash: + "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" as Hash, + nonce: 2, + isExecuted: false, + confirmations: 1, + confirmationsRequired: 2, +}; + +const mockDetailedTx: SafeTx
= { + safeTxHash: + "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" as Hash, + nonce: 1, + isExecuted: false, + confirmations: ["0x0000000000000000000000000000000000000002" as Address], + proposer: "0x0000000000000000000000000000000000000002" as Address, + to: "0x0000000000000000000000000000000000000003" as Address, + operation: 0, + confirmationsRequired: 2, +}; + +const mockMaliciousTx: SafeTx
= { + ...mockDetailedTx, + operation: 1, + to: "0x0000000000000000000000000000000000000004" as Address, // not in any MULTISEND_CALL_ONLY set +}; + +// Add a signers map for name resolution +const signers = { + "0x0000000000000000000000000000000000000002": "Alice", +} as const; + +// Helper functions for test setup +function createMockApi( + overrides: Partial<{ + fetchAll: jest.Mock<() => Promise>; + fetchLatest: jest.Mock<() => Promise>; + fetchDetailed: jest.Mock<(hash: Hash) => Promise>>; + }> = {}, +) { + return { + fetchAll: jest.fn<() => Promise>().mockResolvedValue([]), + fetchLatest: jest.fn<() => Promise>().mockResolvedValue([]), + fetchDetailed: jest + .fn<(hash: Hash) => Promise>>() + .mockResolvedValue(mockDetailedTx), + ...overrides, + } as ISafeAPI; +} + +function createTestWatcher( + options: { + api?: ISafeAPI; + notifier?: ReturnType["notifier"]; + } = {}, +) { + const { api = createMockApi(), notifier } = options; + return new SafeWatcher({ safe, api, notifier, signers }); +} + +// Mock the SafeTxHashes and parseResponse functions +jest.mock("../src/safe-hashes/index.js", () => ({ + SafeTxHashes: () => + Promise.resolve( + `Multisig address: 0xabc\nTo: 0xdef\nValue: 0\nData: 0x\nEncoded message: 0x123\nMethod: null\nParameters: []\nLegacy Ledger Format\nBinary string literal: 0x456\nDomain hash: 0x1\nMessage hash: 0x2\nSafe transaction hash: 0x3`, + ), + parseResponse: (x: any) => x, +})); + +// Mock the SafeApiWrapper class +jest.mock("../src/safe/index.js", () => { + const actual = jest.requireActual("../src/safe/index.js"); + // eslint-disable-next-line prefer-object-spread + return Object.assign({}, actual, { + SafeApiWrapper: jest.fn().mockImplementation(() => ({ + fetchAll: jest + .fn<() => Promise>() + .mockResolvedValue([] as ListedSafeTx[]), + fetchLatest: jest + .fn<() => Promise>() + .mockResolvedValue([] as ListedSafeTx[]), + fetchDetailed: jest + .fn<(hash: string) => Promise>>() + .mockResolvedValue(mockDetailedTx), + })) as unknown as ISafeAPI, + MULTISEND_CALL_ONLY: new Set(["0x1234def"]), + }); +}); + +// Create a simple mock notifier +function createMockNotifier(): { + notifier: INotificationSender; + mock: jest.MockedFunction; +} { + const mock = jest.fn(async (..._args: any[]) => { + return Promise.resolve(); + }); + return { + notifier: { notify: mock }, + mock, + }; +} + +describe("SafeWatcher", () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe("Initialization", () => { + test("should initialize with correct safe address and name", () => { + const safewatcher = createTestWatcher(); + expect(safewatcher.prefix).toBe("rsk"); + expect(safewatcher.safe).toBe( + "0x0000000000000000000000000000000000000001", + ); + expect(safewatcher.name).toBe("Test"); + }); + + test("should throw error for invalid safe address", () => { + const invalidSafe = { "rsk:invalid": "Test" }; + const create = () => new SafeWatcher({ safe: invalidSafe }); + expect(create).toThrow("invalid prefixed safe address 'rsk:invalid'"); + }); + }); + + describe("Transaction Monitoring", () => { + test("should start monitoring and fetch initial transactions", async () => { + const mockApi = createMockApi({ + fetchAll: jest + .fn<() => Promise>() + .mockResolvedValue([mockSafeTx, mockSafeTx2]), + }); + const safewatcher = createTestWatcher({ api: mockApi }); + await safewatcher.start(0); + await safewatcher["poll"](); + safewatcher.stop(); + expect(safewatcher.txs.size).toBe(2); + expect( + safewatcher.txs.get( + "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + ), + ).toBeDefined(); + expect( + safewatcher.txs.get( + "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + ), + ).toBeDefined(); + }); + + test("should detect new transactions", async () => { + const { notifier, mock } = createMockNotifier(); + const mockApi = createMockApi({ + fetchLatest: jest + .fn<() => Promise>() + .mockResolvedValue([mockSafeTx]), + }); + const watcher = createTestWatcher({ api: mockApi, notifier }); + watcher.txs.clear(); + await watcher.start(0); + await watcher["poll"](); + watcher.stop(); + expect(mock).toHaveBeenCalled(); + const event = mock.mock.calls[0][0] as Event; + expect(event.type).toBe("created"); + }); + + test("should detect malicious transactions", async () => { + const { notifier, mock } = createMockNotifier(); + const mockApi = createMockApi({ + fetchLatest: jest + .fn<() => Promise>() + .mockResolvedValue([mockSafeTx]), + fetchDetailed: jest + .fn<(hash: Hash) => Promise>>() + .mockResolvedValue(mockMaliciousTx), + }); + const watcher = createTestWatcher({ api: mockApi, notifier }); + watcher.txs.clear(); + await watcher.start(0); + await watcher["poll"](); + watcher.stop(); + expect(mock).toHaveBeenCalled(); + const event = mock.mock.calls[0][0] as Event; + expect(event.type).toBe("malicious"); + }); + }); + + describe("Error Handling", () => { + test("should handle API errors gracefully", async () => { + const mockApi = createMockApi({ + fetchAll: jest + .fn<() => Promise>() + .mockRejectedValue(new Error("API Error")), + fetchLatest: jest + .fn<() => Promise>() + .mockRejectedValue(new Error("API Error")), + fetchDetailed: jest + .fn<(hash: Hash) => Promise>>() + .mockRejectedValue(new Error("API Error")), + }); + const safewatcher = createTestWatcher({ api: mockApi }); + await expect(safewatcher.start(0)).rejects.toThrow("API Error"); + }); + + test("should handle fetchDetailed errors in poll", async () => { + const { notifier, mock } = createMockNotifier(); + const mockApi = createMockApi({ + fetchLatest: jest + .fn<() => Promise>() + .mockResolvedValue([mockSafeTx]), + fetchDetailed: jest + .fn<(hash: Hash) => Promise>>() + .mockRejectedValue(new Error("API Error")), + }); + const watcher = createTestWatcher({ api: mockApi, notifier }); + + await watcher.start(0); + await watcher["poll"](); + + expect(mock).not.toHaveBeenCalled(); + }); + }); + + describe("Transaction Processing", () => { + test("should handle transaction updates correctly", async () => { + const { notifier, mock } = createMockNotifier(); + const mockApi = createMockApi({ + fetchLatest: jest + .fn<() => Promise>() + .mockResolvedValue([mockSafeTx]), + }); + const watcher = createTestWatcher({ api: mockApi, notifier }); + + // First add the transaction + await watcher.start(0); + await watcher["poll"](); + + // Then update it + const updatedTx = { ...mockSafeTx, confirmations: 1 }; + const mockFetchLatest = mockApi.fetchLatest as jest.Mock< + () => Promise + >; + mockFetchLatest.mockResolvedValueOnce([updatedTx]); + await watcher["poll"](); + + expect(mock).toHaveBeenCalledTimes(2); + const updateEvent = mock.mock.calls[1][0] as Event; + expect(updateEvent.type).toBe("updated"); + }); + + test("should handle executed transactions", async () => { + const { notifier, mock } = createMockNotifier(); + const mockApi = createMockApi({ + fetchLatest: jest + .fn<() => Promise>() + .mockResolvedValue([mockSafeTx]), + }); + const watcher = createTestWatcher({ api: mockApi, notifier }); + + // First add the transaction + await watcher.start(0); + await watcher["poll"](); + + // Then mark it as executed + const executedTx = { ...mockSafeTx, isExecuted: true }; + const mockFetchLatest = mockApi.fetchLatest as jest.Mock< + () => Promise + >; + mockFetchLatest.mockResolvedValueOnce([executedTx]); + await watcher["poll"](); + + expect(mock).toHaveBeenCalledTimes(2); + const executeEvent = mock.mock.calls[1][0] as Event; + expect(executeEvent.type).toBe("executed"); + }); + }); + + describe("Watcher Lifecycle", () => { + test("should stop polling when stop is called", async () => { + const watcher = createTestWatcher(); + + await watcher.start(100); // Start with 100ms interval + expect(watcher.interval).toBeDefined(); + + watcher.stop(); + expect(watcher.interval).toBeUndefined(); + }); + + test("should not start polling with zero interval", async () => { + const watcher = createTestWatcher(); + + await watcher.start(0); + expect(watcher.interval).toBeUndefined(); + }); + }); +}); diff --git a/test/buildConfig.test.ts b/test/buildConfig.test.ts new file mode 100644 index 00000000..92adcfd6 --- /dev/null +++ b/test/buildConfig.test.ts @@ -0,0 +1,36 @@ +import { ScanCommand } from "@aws-sdk/client-dynamodb"; +import { GetSecretValueCommand } from "@aws-sdk/client-secrets-manager"; + +import { buildConfig } from "../src/aws/buildConfig.js"; +import { + createMockDynamoDBClient, + createMockSecretsManagerClient, +} from "./utils/aws-utils.js"; +import { + configData, + formattedAddressesExpected, + formattedSignersExpected, +} from "./utils/config-utils.js"; + +describe("buildConfig", () => { + const ddbMock = createMockDynamoDBClient(); + const secMock = createMockSecretsManagerClient(); + + test("buildConfig, happy path", async () => { + const config = await buildConfig(); + expect(config.slackBotToken).toBe(configData.slackBotToken); + expect(config.slackChannelId).toBe(configData.slackChannelId); + expect(config.safeAddresses).toEqual(formattedAddressesExpected); + expect(config.signers).toEqual(formattedSignersExpected); + }); + + test("buildConfig, not so happy path, error on secret manager", async () => { + secMock.on(GetSecretValueCommand).resolves({}); + await expect(buildConfig()).rejects.toThrow("Error retrieving secret"); + }); + + test("buildConfig, not so happy path, error on dynamodb", async () => { + ddbMock.on(ScanCommand).resolves({}); + await expect(buildConfig()).rejects.toThrow("Error retrieving secret"); + }); +}); diff --git a/test/config-schema.test.ts b/test/config-schema.test.ts new file mode 100644 index 00000000..7c8108f8 --- /dev/null +++ b/test/config-schema.test.ts @@ -0,0 +1,195 @@ +import { Schema } from "../src/config/schema.js"; +import { + formattedAddressesExpected, + formattedSignersExpected, +} from "./utils/config-utils.js"; + +describe("Schema validation", () => { + describe("safeURL", () => { + test("should accept valid URL", () => { + const result = Schema.shape.safeURL.safeParse("https://app.safe.global"); + expect(result.success).toBe(true); + }); + + test("should reject invalid URL", () => { + const result = Schema.shape.safeURL.safeParse("not-a-url"); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe("Invalid url"); + } + }); + + test("should use default value when not provided", () => { + const result = Schema.shape.safeURL.safeParse(undefined); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toBe("https://app.safe.global"); + } + }); + }); + describe("pollInterval", () => { + test("should accept positive integer", () => { + const result = Schema.shape.pollInterval.safeParse(30); + expect(result.success).toBe(true); + }); + + test("should reject negative number", () => { + const result = Schema.shape.pollInterval.safeParse(-1); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe( + "Number must be greater than 0", + ); + } + }); + + test("should reject non-integer", () => { + const result = Schema.shape.pollInterval.safeParse(1.5); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe( + "Expected integer, received float", + ); + } + }); + + test("should use default value when not provided", () => { + const result = Schema.shape.pollInterval.safeParse(undefined); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toBe(20); + } + }); + }); + + describe("safeAddresses", () => { + test("should accept valid safe addresses", () => { + const result = Schema.shape.safeAddresses.safeParse( + formattedAddressesExpected, + ); + expect(result.success).toBe(true); + }); + + test("should reject empty array", () => { + const result = Schema.shape.safeAddresses.safeParse([]); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe( + "Array must contain at least 1 element(s)", + ); + } + }); + + test("should reject invalid address format", () => { + const result = Schema.shape.safeAddresses.safeParse([ + { "invalid-address": "Test Safe" }, + ]); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe( + "Invalid Prefixed Safe Address invalid-address", + ); + } + }); + + test("should reject empty safe name", () => { + const result = Schema.shape.safeAddresses.safeParse([ + { "eth:0x1234567890123456789012345678901234567890": "" }, + ]); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe( + "String must contain at least 1 character(s)", + ); + } + }); + }); + + describe("signers", () => { + test("should accept valid signers", () => { + const result = Schema.shape.signers.safeParse(formattedSignersExpected); + expect(result.success).toBe(true); + }); + + test("should reject invalid address format", () => { + const result = Schema.shape.signers.safeParse({ + "invalid-address": "Test Signer", + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe( + "Invalid Address invalid-address", + ); + } + }); + + test("should reject empty signer name", () => { + const result = Schema.shape.signers.safeParse({ + "0x1234567890123456789012345678901234567890": "", + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe( + "String must contain at least 1 character(s)", + ); + } + }); + + test("should use empty object as default", () => { + const result = Schema.shape.signers.safeParse(undefined); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toEqual({}); + } + }); + }); + + describe("api", () => { + test("should accept valid API modes", () => { + const validModes = ["classic", "alt", "fallback"] as const; + for (const mode of validModes) { + const result = Schema.shape.api.safeParse(mode); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toBe(mode); + } + } + }); + + test("should reject invalid API mode", () => { + const result = Schema.shape.api.safeParse("invalid-mode"); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues[0].message).toBe( + "Invalid enum value. Expected 'classic' | 'alt' | 'fallback', received 'invalid-mode'", + ); + } + }); + + test("should use fallback as default", () => { + const result = Schema.shape.api.safeParse(undefined); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toBe("fallback"); + } + }); + }); + + describe("optional fields", () => { + test("should accept undefined telegram fields", () => { + const result = Schema.shape.telegramBotToken.safeParse(undefined); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toBeUndefined(); + } + }); + + test("should accept undefined slack fields", () => { + const result = Schema.shape.slackBotToken.safeParse(undefined); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toBeUndefined(); + } + }); + }); +}); diff --git a/test/loadConfig.test.ts b/test/loadConfig.test.ts new file mode 100644 index 00000000..1ceaf390 --- /dev/null +++ b/test/loadConfig.test.ts @@ -0,0 +1,114 @@ +import { writeFileSync } from "fs"; +import { join } from "path"; +import { dirSync, setGracefulCleanup } from "tmp"; +import { loadConfig as zodLoadConfig } from "zod-config"; + +import { buildConfig, isECS } from "../src/aws/index.js"; +import { loadConfig } from "../src/config/loadConfig.js"; +import { Schema } from "../src/config/schema.js"; +import { createMockConfig } from "./utils/config-utils.js"; + +// Mock AWS module +jest.mock("../src/aws/index.js", () => ({ + buildConfig: jest.fn(), + isECS: jest.fn(), +})); + +// Mock zod-config +jest.mock("zod-config", () => ({ + loadConfig: jest.fn(), +})); + +describe("loadConfig", () => { + let tempDir: string; + let configPath: string; + + beforeEach(() => { + // Create a temporary directory for test files + tempDir = dirSync().name; + configPath = join(tempDir, "config.yaml"); + + // Reset mocks + jest.clearAllMocks(); + (isECS as jest.Mock).mockReturnValue(false); + (buildConfig as jest.Mock).mockResolvedValue({}); + }); + + afterEach(() => { + // Clean up temporary files + setGracefulCleanup(); + }); + + test("should load config from local YAML file", async () => { + // Create a test config file + const testConfig = createMockConfig(); + writeFileSync(configPath, JSON.stringify(testConfig)); + + // Mock process.argv + const originalArgv = process.argv; + process.argv = ["node", "test.js", "--config", configPath]; + + // Mock zod-config's loadConfig + (zodLoadConfig as jest.Mock).mockResolvedValue(testConfig); + + const config = await loadConfig(); + + expect(config).toEqual(testConfig); + expect(zodLoadConfig).toHaveBeenCalledWith({ + schema: Schema, + adapters: expect.any(Array), + }); + + // Restore process.argv + process.argv = originalArgv; + }); + + test("should use default config path if not specified", async () => { + // Mock process.argv without --config + const originalArgv = process.argv; + process.argv = ["node", "test.js"]; + + // Mock zod-config's loadConfig + (zodLoadConfig as jest.Mock).mockResolvedValue({}); + + await loadConfig(); + + expect(zodLoadConfig).toHaveBeenCalledWith({ + schema: Schema, + adapters: expect.any(Array), + }); + + // Restore process.argv + process.argv = originalArgv; + }); + + test("should load config from AWS when running in ECS", async () => { + // Mock ECS environment + (isECS as jest.Mock).mockReturnValue(true); + (buildConfig as jest.Mock).mockResolvedValue(createMockConfig()); + + // Mock zod-config's loadConfig + (zodLoadConfig as jest.Mock).mockResolvedValue({}); + + await loadConfig(); + + expect(buildConfig).toHaveBeenCalled(); + expect(zodLoadConfig).toHaveBeenCalledWith({ + schema: Schema, + adapters: expect.any(Array), + }); + }); + + test("should handle AWS config build failure", async () => { + // Mock ECS environment + (isECS as jest.Mock).mockReturnValue(true); + (buildConfig as jest.Mock).mockRejectedValue( + new Error("AWS config build failed"), + ); + + // Mock zod-config's loadConfig + (zodLoadConfig as jest.Mock).mockResolvedValue({}); + + await expect(loadConfig()).rejects.toThrow("AWS config build failed"); + }); +}); diff --git a/test/safe-hashes.test.ts b/test/safe-hashes.test.ts new file mode 100644 index 00000000..c0c4d032 --- /dev/null +++ b/test/safe-hashes.test.ts @@ -0,0 +1,403 @@ +import { exec } from "child_process"; +import type { Mock } from "jest-mock"; + +import { NETWORKS } from "../src/safe-hashes/constants.js"; +import { parseResponse, SafeTxHashes } from "../src/safe-hashes/index.js"; + +type ExecCallback = ( + error: Error | null, + stdout: string, + stderr: string, +) => void; + +// Mock child_process.exec +jest.mock("child_process", () => ({ + exec: jest.fn(), +})); + +describe("SafeTxHashes", () => { + const mockAddress = "0x1234567890123456789012345678901234567890" as const; + const mockNonce = 1; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + test("should execute script with correct parameters", async () => { + const mockStdout = "Success"; + (exec as unknown as Mock).mockImplementation( + (cmd: unknown, callback: unknown) => { + expect(cmd).toBe( + `/app/safe-hashes.sh --network ${NETWORKS.eth} --address ${mockAddress} --nonce ${mockNonce}`, + ); + (callback as ExecCallback)(null, mockStdout, ""); + }, + ); + + const result = await SafeTxHashes("eth", mockAddress, mockNonce); + expect(result).toBe(mockStdout); + }); + + test("should reject on script error", async () => { + const mockError = new Error("Script failed"); + (exec as unknown as Mock).mockImplementation( + (cmd: unknown, callback: unknown) => { + (callback as ExecCallback)(mockError, "", ""); + }, + ); + + await expect(SafeTxHashes("eth", mockAddress, mockNonce)).rejects.toThrow( + "Error executing script: Script failed", + ); + }); + + test("should reject on stderr output", async () => { + const mockStderr = "Error: Invalid parameters"; + (exec as unknown as Mock).mockImplementation( + (cmd: unknown, callback: unknown) => { + (callback as ExecCallback)(null, "", mockStderr); + }, + ); + + await expect(SafeTxHashes("eth", mockAddress, mockNonce)).rejects.toThrow( + "Error executing script: Error: Invalid parameters", + ); + }); + + test("should support all network prefixes", async () => { + const mockStdout = "Success"; + (exec as unknown as Mock).mockImplementation( + (cmd: unknown, callback: unknown) => { + (callback as ExecCallback)(null, mockStdout, ""); + }, + ); + + for (const prefix of Object.keys(NETWORKS)) { + await SafeTxHashes(prefix, mockAddress, mockNonce); + expect(exec).toHaveBeenCalledWith( + `/app/safe-hashes.sh --network ${NETWORKS[prefix]} --address ${mockAddress} --nonce ${mockNonce}`, + expect.any(Function), + ); + } + }); +}); + +describe("parseResponse", () => { + test("should parse valid response", () => { + const mockResponse = ` +Multisig address: 0x1234567890123456789012345678901234567890 +To: 0xabcdef1234567890abcdef1234567890abcdef12 +Value: 1000000000000000000 +Data: 0x1234567890abcdef +Encoded message: 0xabcdef1234567890 +Method: transfer +Parameters: [ + { + "name": "to", + "type": "address", + "value": "0xabcdef1234567890abcdef1234567890abcdef12" + }, + { + "name": "value", + "type": "uint256", + "value": "1000000000000000000" + } +] +Legacy Ledger Format +Binary string literal: 0x1234567890abcdef +Domain hash: 0xabcdef1234567890 +Message hash: 0x1234567890abcdef +Safe transaction hash: 0xabcdef1234567890 +`; + + const result = parseResponse(mockResponse); + + expect(result).toEqual({ + transactionData: { + multisigAddress: "0x1234567890123456789012345678901234567890", + to: "0xabcdef1234567890abcdef1234567890abcdef12", + value: 1000000000000000000, + data: "0x1234567890abcdef", + encodedMessage: "0xabcdef1234567890", + method: "transfer", + parameters: + ' {\n "name": "to",\n "type": "address",\n "value": "0xabcdef1234567890abcdef1234567890abcdef12"\n },\n {\n "name": "value",\n "type": "uint256",\n "value": "1000000000000000000"', + }, + legacyLedgerFormat: { + binaryStringLiteral: "0x1234567890abcdef", + }, + hashes: { + domainHash: "0xabcdef1234567890", + messageHash: "0x1234567890abcdef", + safeTransactionHash: "0xabcdef1234567890", + }, + }); + }); + + test("should handle missing optional fields", () => { + const mockResponse = ` +Multisig address: 0x1234567890123456789012345678901234567890 +To: 0xabcdef1234567890abcdef1234567890abcdef12 +Value: 1000000000000000000 +Data: 0x1234567890abcdef +Encoded message: 0xabcdef1234567890 +Legacy Ledger Format +Binary string literal: 0x1234567890abcdef +Domain hash: 0xabcdef1234567890 +Message hash: 0x1234567890abcdef +Safe transaction hash: 0xabcdef1234567890 +`; + + const result = parseResponse(mockResponse); + + expect(result).toEqual({ + transactionData: { + multisigAddress: "0x1234567890123456789012345678901234567890", + to: "0xabcdef1234567890abcdef1234567890abcdef12", + value: 1000000000000000000, + data: "0x1234567890abcdef", + encodedMessage: "0xabcdef1234567890", + method: null, + parameters: null, + }, + legacyLedgerFormat: { + binaryStringLiteral: "0x1234567890abcdef", + }, + hashes: { + domainHash: "0xabcdef1234567890", + messageHash: "0x1234567890abcdef", + safeTransactionHash: "0xabcdef1234567890", + }, + }); + }); + + test("should handle empty response", () => { + const result = parseResponse(""); + + expect(result).toEqual({ + transactionData: { + multisigAddress: "", + to: "", + value: 0, + data: "", + encodedMessage: "", + method: null, + parameters: null, + }, + legacyLedgerFormat: { + binaryStringLiteral: "", + }, + hashes: { + domainHash: "", + messageHash: "", + safeTransactionHash: "", + }, + }); + }); + + test("should handle malformed response", () => { + const mockResponse = ` +Invalid line +Another invalid line +`; + + const result = parseResponse(mockResponse); + + expect(result).toEqual({ + transactionData: { + multisigAddress: "", + to: "", + value: 0, + data: "", + encodedMessage: "", + method: null, + parameters: null, + }, + legacyLedgerFormat: { + binaryStringLiteral: "", + }, + hashes: { + domainHash: "", + messageHash: "", + safeTransactionHash: "", + }, + }); + }); +}); + +describe("parseResponse (realistic scenarios)", () => { + const response_with_method_and_parameters = ` +=================================== += Selected Network Configurations = +=================================== + +Network: rootstock +Chain ID: 30 + +======================================== += Transaction Data and Computed Hashes = +======================================== + +Transaction Data +Multisig address: 0x1234567890123456789012345678901234567890 +To: 0x0987654321098765432109876543210987654321 +Value: 0 +Data: 0x000000000000011111111111222222222222333333333344444444445555555555666666666677777777788888888899999999990 +Encoded message: 0xaaabbbcccdddeeefff1111222233334444555566667777888899999aaaabbbbccccdddd +Method: multiSend +Parameters: [ + { + "name": "transactions", + "type": "bytes", + "value": "0x123456789000000000000", + "valueDecoded": [ + { + "operation": 0, + "to": "0x1234567890abcdef1234567890abcdef12345678", + "value": "0", + "data": "0x111112222333344445555566667787777aaaababbaa", + "dataDecoded": { + "method": "fallback", + "parameters": [] + } + }, + { + "operation": 0, + "to": "0x1234567890abcdef1234567890abcdef12345678", + "value": "0", + "data": "0x1234567890abcdef1234567890abcdef", + "dataDecoded": { + "method": "fallback", + "parameters": [] + } + } + ] + } +] + +Legacy Ledger Format +Binary string literal: \\xf5\\xcf\\xb73/\\x95\\xd9\\x1e\\x89?w\\xbb\\xdc\\x87\\xb6T\\x1an\\x9d3n\\x80\\xe8\\xe3\\xd4bn\\x91\\xb5(\\xac\\x8e + +Hashes +Domain hash: 0x1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF +Message hash: 0x1BCDEFGHIJKL1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234 +Safe transaction hash: 0x0123456789ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF +`; + + const response_whithout_method_and_parameters = ` +=================================== += Selected Network Configurations = +=================================== + +Network: rootstock +Chain ID: 30 + +======================================== += Transaction Data and Computed Hashes = +======================================== + +Transaction Data +Multisig address: 0x1234567890123456789012345678901234567890 +To: 0x1234567890abcdef1234567890abcdef12345678 +Value: 0 +Data: 0x000000230020020020202002000 +Encoded message: 0xaaaabbbcccdddeeefff1111222233334444555566667777888899999aaaabbbbccccdddd +Method: fallback +Parameters: [] + +Legacy Ledger Format +Binary string literal: \\xc5\\x18\\x1f\\x96\\x7f#\\xf1\\x06\\xabn\\xfe\\xba\\x91\\xbd5~\\xcc\\xef\\x86\\xb0\\x8d\\xb4~\\x1b\\xa3\\x9e\\x9b\\x0a\\x9c\\xa7\\x8c\\xc5 + +Hashes +Domain hash: 0x1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF +Message hash: 0xfedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210 +Safe transaction hash: 0x0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF +`; + + const expected_answer_1 = { + transactionData: { + multisigAddress: "0x1234567890123456789012345678901234567890", + to: "0x0987654321098765432109876543210987654321", + value: 0, + data: "0x000000000000011111111111222222222222333333333344444444445555555555666666666677777777788888888899999999990", + encodedMessage: + "0xaaabbbcccdddeeefff1111222233334444555566667777888899999aaaabbbbccccdddd", + method: "multiSend", + parameters: + " {\n" + + ' "name": "transactions",\n' + + ' "type": "bytes",\n' + + ' "value": "0x123456789000000000000",\n' + + ' "valueDecoded": [\n' + + " {\n" + + ' "operation": 0,\n' + + ' "to": "0x1234567890abcdef1234567890abcdef12345678",\n' + + ' "value": "0",\n' + + ' "data": "0x111112222333344445555566667787777aaaababbaa",\n' + + ' "dataDecoded": {\n' + + ' "method": "fallback",\n' + + ' "parameters": []\n' + + " }\n" + + " },\n" + + " {\n" + + ' "operation": 0,\n' + + ' "to": "0x1234567890abcdef1234567890abcdef12345678",\n' + + ' "value": "0",\n' + + ' "data": "0x1234567890abcdef1234567890abcdef",\n' + + ' "dataDecoded": {\n' + + ' "method": "fallback",\n' + + ' "parameters": []\n' + + " }\n" + + " }\n" + + " ]\n" + + " }", + }, + legacyLedgerFormat: { + binaryStringLiteral: + "\\xf5\\xcf\\xb73/\\x95\\xd9\\x1e\\x89?w\\xbb\\xdc\\x87\\xb6T\\x1an\\x9d3n\\x80\\xe8\\xe3\\xd4bn\\x91\\xb5(\\xac\\x8e", + }, + hashes: { + domainHash: + "0x1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF", + messageHash: + "0x1BCDEFGHIJKL1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234", + safeTransactionHash: + "0x0123456789ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF", + }, + }; + + const expected_answer_2 = { + transactionData: { + multisigAddress: "0x1234567890123456789012345678901234567890", + to: "0x1234567890abcdef1234567890abcdef12345678", + value: 0, + data: "0x000000230020020020202002000", + encodedMessage: + "0xaaaabbbcccdddeeefff1111222233334444555566667777888899999aaaabbbbccccdddd", + method: "fallback", + parameters: "", + }, + legacyLedgerFormat: { + binaryStringLiteral: + "\\xc5\\x18\\x1f\\x96\\x7f#\\xf1\\x06\\xabn\\xfe\\xba\\x91\\xbd5~\\xcc\\xef\\x86\\xb0\\x8d\\xb4~\\x1b\\xa3\\x9e\\x9b\\x0a\\x9c\\xa7\\x8c\\xc5", + }, + hashes: { + domainHash: + "0x1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF", + messageHash: + "0xfedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210", + safeTransactionHash: + "0x0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF", + }, + }; + + test("Parse with method and parameters (realistic)", () => { + const response = parseResponse(response_with_method_and_parameters); + expect(response).toStrictEqual(expected_answer_1); + }); + + test("Parse without method and parameters (realistic)", () => { + const response = parseResponse(response_whithout_method_and_parameters); + expect(response).toStrictEqual(expected_answer_2); + }); +}); diff --git a/test/utils.test.ts b/test/utils.test.ts new file mode 100644 index 00000000..f5b79458 --- /dev/null +++ b/test/utils.test.ts @@ -0,0 +1,63 @@ +import { fetchRetry } from "../src/utils/fetchRetry.js"; +import { sleep } from "../src/utils/sleep.js"; + +// Mock fetch +global.fetch = jest.fn(); + +describe("fetchRetry", () => { + beforeEach(() => { + (global.fetch as jest.Mock).mockClear(); + }); + + test("should fetch successfully on first attempt", async () => { + const mockResponse = { ok: true }; + (global.fetch as jest.Mock).mockResolvedValue(mockResponse); + + const response = await fetchRetry("https://example.com"); + expect(response).toBe(mockResponse); + expect(global.fetch).toHaveBeenCalledTimes(1); + }); + + test("should retry on failure and succeed", async () => { + const mockResponse = { ok: true }; + (global.fetch as jest.Mock) + .mockRejectedValueOnce(new Error("Network error")) + .mockResolvedValueOnce(mockResponse); + + const response = await fetchRetry("https://example.com", { retries: 1 }); + expect(response).toBe(mockResponse); + expect(global.fetch).toHaveBeenCalledTimes(2); + }); + + test("should throw after all retries fail", async () => { + const error = new Error("Network error"); + (global.fetch as jest.Mock).mockRejectedValue(error); + + await expect( + fetchRetry("https://example.com", { retries: 2 }), + ).rejects.toThrow("Network error"); + expect(global.fetch).toHaveBeenCalledTimes(3); + }); + + test("should validate response if validator provided", async () => { + const mockResponse = { ok: true }; + (global.fetch as jest.Mock).mockResolvedValue(mockResponse); + const validateResponse = jest.fn().mockImplementation(() => { + throw new Error("Invalid response"); + }); + + await expect( + fetchRetry("https://example.com", { validateResponse }), + ).rejects.toThrow("Invalid response"); + expect(validateResponse).toHaveBeenCalledWith(mockResponse); + }, 10000); +}); + +describe("sleep", () => { + test("should wait for specified milliseconds", async () => { + const start = Date.now(); + await sleep(100); + const end = Date.now(); + expect(end - start).toBeGreaterThanOrEqual(100); + }); +}); diff --git a/test/utils/aws-utils.ts b/test/utils/aws-utils.ts new file mode 100644 index 00000000..e08cdfb8 --- /dev/null +++ b/test/utils/aws-utils.ts @@ -0,0 +1,43 @@ +import { DynamoDBClient, ScanCommand } from "@aws-sdk/client-dynamodb"; +import { + GetSecretValueCommand, + SecretsManagerClient, +} from "@aws-sdk/client-secrets-manager"; +import { mockClient } from "aws-sdk-client-mock"; + +import { + createMockAWSConfig, + mockAddresses, + mockSigners, +} from "./config-utils.js"; + +export const createMockDynamoDBClient = () => { + const mock = mockClient(DynamoDBClient); + mock.on(ScanCommand).callsFake(input => { + if (input.TableName === "addresses") { + return { + Items: mockAddresses.map(address => ({ + address: { S: address.address }, + alias: { S: address.alias }, + })), + }; + } else if (input.TableName === "signers") { + return { + Items: mockSigners.map(signer => ({ + address: { S: signer.address }, + alias: { S: signer.alias }, + })), + }; + } + throw new Error("Unknown table name"); + }); + return mock; +}; + +export const createMockSecretsManagerClient = () => { + const mock = mockClient(SecretsManagerClient); + mock.on(GetSecretValueCommand).resolves({ + SecretString: JSON.stringify(createMockAWSConfig()), + }); + return mock; +}; diff --git a/test/utils/config-utils.ts b/test/utils/config-utils.ts new file mode 100644 index 00000000..7d181e30 --- /dev/null +++ b/test/utils/config-utils.ts @@ -0,0 +1,77 @@ +import type { Address, Hash } from "viem"; + +import type { SecretStored } from "../../src/aws/schema.js"; +import type { ListedSafeTx, SafeTx } from "../../src/safe/types.js"; + +export const mockSafeAddress = + "rsk:0x0000000000000000000000000000000000000001" as const; + +export const mockSafeTxHash = + "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" as Hash; + +export const mockAddress = + "0x0000000000000000000000000000000000000002" as Address; + +export const createMockConfig = (overrides = {}) => ({ + safeURL: "https://app.safe.global", + pollInterval: 30, + safeAddresses: [ + { "eth:0x1234567890123456789012345678901234567890": "Test Safe" }, + ], + ...overrides, +}); + +export const configData = { + slackBotToken: "xoxb-1234567890-1234567890-1234567890", + slackChannelId: "C1234567890", + safeAddressesTable: "addresses", + safeSignersTable: "signers", +}; + +export const createMockAWSConfig = (): SecretStored => configData; + +export const mockAddresses = [ + { address: "rsk:0x1234567890123456789012345678901234567890", alias: "Alice" }, + { address: "eth:0x0987654321098765432109876543210987654321", alias: "Bob" }, + { + address: "alg:0x1234567890abcdef1234567890abcdef12345678", + alias: "Charlie", + }, +]; + +export const mockSigners = [ + { address: "0x1234567890123456789012345678901234567890", alias: "Alice" }, + { address: "0x0987654321098765432109876543210987654321", alias: "Bob" }, + { address: "0x1234567890abcdef1234567890abcdef12345678", alias: "Charlie" }, +]; + +export const formattedAddressesExpected = [ + { "rsk:0x1234567890123456789012345678901234567890": "Alice" }, + { "eth:0x0987654321098765432109876543210987654321": "Bob" }, + { "alg:0x1234567890abcdef1234567890abcdef12345678": "Charlie" }, +]; + +export const formattedSignersExpected = { + "0x1234567890123456789012345678901234567890": "Alice", + "0x0987654321098765432109876543210987654321": "Bob", + "0x1234567890abcdef1234567890abcdef12345678": "Charlie", +}; + +export const mockListedTx: ListedSafeTx = { + safeTxHash: mockSafeTxHash, + nonce: 1, + isExecuted: false, + confirmations: 0, + confirmationsRequired: 2, +}; + +export const mockDetailedTx: SafeTx
= { + safeTxHash: mockSafeTxHash, + nonce: 1, + isExecuted: false, + confirmations: [mockAddress], + proposer: mockAddress, + to: mockAddress, + operation: 0, + confirmationsRequired: 2, +}; diff --git a/tsconfig.json b/tsconfig.json index 2e96cfd8..1a8c8b89 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,13 +9,17 @@ "sourceMap": true, "outDir": "./dist", "strict": true, + "noImplicitAny": false, "noErrorTruncation": true, "strictPropertyInitialization": false, "allowSyntheticDefaultImports": true, "esModuleInterop": true, "skipLibCheck": true, + "resolveJsonModule": true, "experimentalDecorators": true, + "downlevelIteration": true, "emitDecoratorMetadata": true, "forceConsistentCasingInFileNames": true - } + }, + "include": ["src", "jest.config.ts", "test"] } diff --git a/yarn.lock b/yarn.lock index 885a15f3..345cac23 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,645 +12,1439 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0": - version: 7.26.2 - resolution: "@babel/code-frame@npm:7.26.2" +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed languageName: node linkType: hard -"@bundled-es-modules/cookie@npm:^2.0.1": - version: 2.0.1 - resolution: "@bundled-es-modules/cookie@npm:2.0.1" +"@aws-crypto/sha256-browser@npm:5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/sha256-browser@npm:5.2.0" dependencies: - cookie: "npm:^0.7.2" - checksum: 10c0/dfac5e36127e827c5557b8577f17a8aa94c057baff6d38555917927b99da0ecf0b1357e7fedadc8853ecdbd4a8a7fa1f5e64111b2a656612f4a36376f5bdbe8d + "@aws-crypto/sha256-js": "npm:^5.2.0" + "@aws-crypto/supports-web-crypto": "npm:^5.2.0" + "@aws-crypto/util": "npm:^5.2.0" + "@aws-sdk/types": "npm:^3.222.0" + "@aws-sdk/util-locate-window": "npm:^3.0.0" + "@smithy/util-utf8": "npm:^2.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/05f6d256794df800fe9aef5f52f2ac7415f7f3117d461f85a6aecaa4e29e91527b6fd503681a17136fa89e9dd3d916e9c7e4cfb5eba222875cb6c077bdc1d00d languageName: node linkType: hard -"@bundled-es-modules/statuses@npm:^1.0.1": - version: 1.0.1 - resolution: "@bundled-es-modules/statuses@npm:1.0.1" +"@aws-crypto/sha256-js@npm:5.2.0, @aws-crypto/sha256-js@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/sha256-js@npm:5.2.0" dependencies: - statuses: "npm:^2.0.1" - checksum: 10c0/c1a8ede3efa8da61ccda4b98e773582a9733edfbeeee569d4630785f8e018766202edb190a754a3ec7a7f6bd738e857829affc2fdb676b6dab4db1bb44e62785 + "@aws-crypto/util": "npm:^5.2.0" + "@aws-sdk/types": "npm:^3.222.0" + tslib: "npm:^2.6.2" + checksum: 10c0/6c48701f8336341bb104dfde3d0050c89c288051f6b5e9bdfeb8091cf3ffc86efcd5c9e6ff2a4a134406b019c07aca9db608128f8d9267c952578a3108db9fd1 languageName: node linkType: hard -"@bundled-es-modules/tough-cookie@npm:^0.1.6": - version: 0.1.6 - resolution: "@bundled-es-modules/tough-cookie@npm:0.1.6" +"@aws-crypto/supports-web-crypto@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/supports-web-crypto@npm:5.2.0" dependencies: - "@types/tough-cookie": "npm:^4.0.5" - tough-cookie: "npm:^4.1.4" - checksum: 10c0/28bcac878bff6b34719ba3aa8341e9924772ee55de5487680ebe784981ec9fccb70ed5d46f563e2404855a04de606f9e56aa4202842d4f5835bc04a4fe820571 + tslib: "npm:^2.6.2" + checksum: 10c0/4d2118e29d68ca3f5947f1e37ce1fbb3239a0c569cc938cdc8ab8390d595609b5caf51a07c9e0535105b17bf5c52ea256fed705a07e9681118120ab64ee73af2 languageName: node linkType: hard -"@commitlint/cli@npm:^19.0.3": - version: 19.7.1 - resolution: "@commitlint/cli@npm:19.7.1" - dependencies: - "@commitlint/format": "npm:^19.5.0" - "@commitlint/lint": "npm:^19.7.1" - "@commitlint/load": "npm:^19.6.1" - "@commitlint/read": "npm:^19.5.0" - "@commitlint/types": "npm:^19.5.0" - tinyexec: "npm:^0.3.0" - yargs: "npm:^17.0.0" - bin: - commitlint: cli.js - checksum: 10c0/bb5e4f004f6b16078cdc7e7d6ff1a53762cefc1265af017ccef4ab789d2c562b75fe316ccc1751da6bc1172393f2427926c863298edda2e4d00c8323f2878f5b +"@aws-crypto/util@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/util@npm:5.2.0" + dependencies: + "@aws-sdk/types": "npm:^3.222.0" + "@smithy/util-utf8": "npm:^2.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/0362d4c197b1fd64b423966945130207d1fe23e1bb2878a18e361f7743c8d339dad3f8729895a29aa34fff6a86c65f281cf5167c4bf253f21627ae80b6dd2951 + languageName: node + linkType: hard + +"@aws-sdk/client-dynamodb@npm:^3.803.0": + version: 3.808.0 + resolution: "@aws-sdk/client-dynamodb@npm:3.808.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/credential-provider-node": "npm:3.808.0" + "@aws-sdk/middleware-endpoint-discovery": "npm:3.808.0" + "@aws-sdk/middleware-host-header": "npm:3.804.0" + "@aws-sdk/middleware-logger": "npm:3.804.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.804.0" + "@aws-sdk/middleware-user-agent": "npm:3.808.0" + "@aws-sdk/region-config-resolver": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@aws-sdk/util-endpoints": "npm:3.808.0" + "@aws-sdk/util-user-agent-browser": "npm:3.804.0" + "@aws-sdk/util-user-agent-node": "npm:3.808.0" + "@smithy/config-resolver": "npm:^4.1.2" + "@smithy/core": "npm:^3.3.1" + "@smithy/fetch-http-handler": "npm:^5.0.2" + "@smithy/hash-node": "npm:^4.0.2" + "@smithy/invalid-dependency": "npm:^4.0.2" + "@smithy/middleware-content-length": "npm:^4.0.2" + "@smithy/middleware-endpoint": "npm:^4.1.4" + "@smithy/middleware-retry": "npm:^4.1.5" + "@smithy/middleware-serde": "npm:^4.0.3" + "@smithy/middleware-stack": "npm:^4.0.2" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/node-http-handler": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/smithy-client": "npm:^4.2.4" + "@smithy/types": "npm:^4.2.0" + "@smithy/url-parser": "npm:^4.0.2" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-body-length-node": "npm:^4.0.0" + "@smithy/util-defaults-mode-browser": "npm:^4.0.12" + "@smithy/util-defaults-mode-node": "npm:^4.0.12" + "@smithy/util-endpoints": "npm:^3.0.4" + "@smithy/util-middleware": "npm:^4.0.2" + "@smithy/util-retry": "npm:^4.0.3" + "@smithy/util-utf8": "npm:^4.0.0" + "@smithy/util-waiter": "npm:^4.0.3" + "@types/uuid": "npm:^9.0.1" + tslib: "npm:^2.6.2" + uuid: "npm:^9.0.1" + checksum: 10c0/17d8fe1b56346479285c49a9dc25ee68f06cf87dc7dfe69daa78a722631ee9129df9949f4308d099c28e93d9deffdefb500a5ac695c8326503681f44d267c373 + languageName: node + linkType: hard + +"@aws-sdk/client-secrets-manager@npm:^3.787.0": + version: 3.808.0 + resolution: "@aws-sdk/client-secrets-manager@npm:3.808.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/credential-provider-node": "npm:3.808.0" + "@aws-sdk/middleware-host-header": "npm:3.804.0" + "@aws-sdk/middleware-logger": "npm:3.804.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.804.0" + "@aws-sdk/middleware-user-agent": "npm:3.808.0" + "@aws-sdk/region-config-resolver": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@aws-sdk/util-endpoints": "npm:3.808.0" + "@aws-sdk/util-user-agent-browser": "npm:3.804.0" + "@aws-sdk/util-user-agent-node": "npm:3.808.0" + "@smithy/config-resolver": "npm:^4.1.2" + "@smithy/core": "npm:^3.3.1" + "@smithy/fetch-http-handler": "npm:^5.0.2" + "@smithy/hash-node": "npm:^4.0.2" + "@smithy/invalid-dependency": "npm:^4.0.2" + "@smithy/middleware-content-length": "npm:^4.0.2" + "@smithy/middleware-endpoint": "npm:^4.1.4" + "@smithy/middleware-retry": "npm:^4.1.5" + "@smithy/middleware-serde": "npm:^4.0.3" + "@smithy/middleware-stack": "npm:^4.0.2" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/node-http-handler": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/smithy-client": "npm:^4.2.4" + "@smithy/types": "npm:^4.2.0" + "@smithy/url-parser": "npm:^4.0.2" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-body-length-node": "npm:^4.0.0" + "@smithy/util-defaults-mode-browser": "npm:^4.0.12" + "@smithy/util-defaults-mode-node": "npm:^4.0.12" + "@smithy/util-endpoints": "npm:^3.0.4" + "@smithy/util-middleware": "npm:^4.0.2" + "@smithy/util-retry": "npm:^4.0.3" + "@smithy/util-utf8": "npm:^4.0.0" + "@types/uuid": "npm:^9.0.1" + tslib: "npm:^2.6.2" + uuid: "npm:^9.0.1" + checksum: 10c0/894f28b66c0ba73b2e2f2efb7b28dccebf35ab72b0442e200a41ac82e1b13c00e61264abe687f98fc4a135a66c686c8dfe8a735dfa0d82a17a13f36af41d5439 + languageName: node + linkType: hard + +"@aws-sdk/client-sso@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/client-sso@npm:3.808.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/middleware-host-header": "npm:3.804.0" + "@aws-sdk/middleware-logger": "npm:3.804.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.804.0" + "@aws-sdk/middleware-user-agent": "npm:3.808.0" + "@aws-sdk/region-config-resolver": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@aws-sdk/util-endpoints": "npm:3.808.0" + "@aws-sdk/util-user-agent-browser": "npm:3.804.0" + "@aws-sdk/util-user-agent-node": "npm:3.808.0" + "@smithy/config-resolver": "npm:^4.1.2" + "@smithy/core": "npm:^3.3.1" + "@smithy/fetch-http-handler": "npm:^5.0.2" + "@smithy/hash-node": "npm:^4.0.2" + "@smithy/invalid-dependency": "npm:^4.0.2" + "@smithy/middleware-content-length": "npm:^4.0.2" + "@smithy/middleware-endpoint": "npm:^4.1.4" + "@smithy/middleware-retry": "npm:^4.1.5" + "@smithy/middleware-serde": "npm:^4.0.3" + "@smithy/middleware-stack": "npm:^4.0.2" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/node-http-handler": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/smithy-client": "npm:^4.2.4" + "@smithy/types": "npm:^4.2.0" + "@smithy/url-parser": "npm:^4.0.2" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-body-length-node": "npm:^4.0.0" + "@smithy/util-defaults-mode-browser": "npm:^4.0.12" + "@smithy/util-defaults-mode-node": "npm:^4.0.12" + "@smithy/util-endpoints": "npm:^3.0.4" + "@smithy/util-middleware": "npm:^4.0.2" + "@smithy/util-retry": "npm:^4.0.3" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/362dc749f7b4cd9b1c1cf7de77cf7f9315e47dae6e2cd0d49611a14aee5fc04e6a44eaedd87d4d02508e5eb606a21d3a8b427017f3d6e145bc60e28380d35da2 + languageName: node + linkType: hard + +"@aws-sdk/core@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/core@npm:3.808.0" + dependencies: + "@aws-sdk/types": "npm:3.804.0" + "@smithy/core": "npm:^3.3.1" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/signature-v4": "npm:^5.1.0" + "@smithy/smithy-client": "npm:^4.2.4" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-middleware": "npm:^4.0.2" + fast-xml-parser: "npm:4.4.1" + tslib: "npm:^2.6.2" + checksum: 10c0/9cdaff2ff731f8a32e729fccfbce1ed816094cf7883be8b24883a416822ff18bb5beb2353705627cff1c3782da80167e78e2a1d077d5dcb81096a3e7be43447f + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-env@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.808.0" + dependencies: + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/aa3a0aa912a3051504674e100b56edaf92bd4b68a07d3466495b481c7d501a3938334f47b11ce6156867f6b1e8daca4084e41883e7a008a72dcd1a5724c5041e + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-http@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.808.0" + dependencies: + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/fetch-http-handler": "npm:^5.0.2" + "@smithy/node-http-handler": "npm:^4.0.4" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/smithy-client": "npm:^4.2.4" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-stream": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/e5c9d9d27c83f82baac6802ab1d4cdc2006aed010798be0c8292077c5b7a3f9709fe237135063e819aa4e15de0804dbc1a15b90fada5efa6c022e1c52c706ff1 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-ini@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.808.0" + dependencies: + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/credential-provider-env": "npm:3.808.0" + "@aws-sdk/credential-provider-http": "npm:3.808.0" + "@aws-sdk/credential-provider-process": "npm:3.808.0" + "@aws-sdk/credential-provider-sso": "npm:3.808.0" + "@aws-sdk/credential-provider-web-identity": "npm:3.808.0" + "@aws-sdk/nested-clients": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/credential-provider-imds": "npm:^4.0.2" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/shared-ini-file-loader": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/5f98690dc198987b16bcb9ae000c82da9afb1eb5141007fdcc16284b5251c8ca22bddf19ddccce600fef473447137a96cbe8363b27594f61b1878433bd234489 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-node@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.808.0" + dependencies: + "@aws-sdk/credential-provider-env": "npm:3.808.0" + "@aws-sdk/credential-provider-http": "npm:3.808.0" + "@aws-sdk/credential-provider-ini": "npm:3.808.0" + "@aws-sdk/credential-provider-process": "npm:3.808.0" + "@aws-sdk/credential-provider-sso": "npm:3.808.0" + "@aws-sdk/credential-provider-web-identity": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/credential-provider-imds": "npm:^4.0.2" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/shared-ini-file-loader": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/2892e0ca7caf3cbe3f26c247aa3343e1e97647a250acc4a1040a8278b3663af0950c9a0c5dce5f76cbd320909dc9972cb487b3a6520af3656ab1f6a3a1f2e6b7 languageName: node linkType: hard -"@commitlint/config-conventional@npm:^19.0.3": - version: 19.7.1 - resolution: "@commitlint/config-conventional@npm:19.7.1" +"@aws-sdk/credential-provider-process@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.808.0" dependencies: - "@commitlint/types": "npm:^19.5.0" - conventional-changelog-conventionalcommits: "npm:^7.0.2" - checksum: 10c0/9de7e5f1e4ac1d995293da12a646936d477c4fc50562de015df26e0b307ebf3fd2632dc8c874ba9d9a81c9540c3189e275fb6fe0b707ae6c9159c013b7dfdb56 + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/shared-ini-file-loader": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/4c7390a26618258f483cbedf0ef0dda0c38e4e500872f41c5ef8e0f08e7e45d8db50bbf611e6ad493f1e000c2d66760491440bf0901629b5d5940f66d1064496 languageName: node linkType: hard -"@commitlint/config-validator@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/config-validator@npm:19.5.0" +"@aws-sdk/credential-provider-sso@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.808.0" dependencies: - "@commitlint/types": "npm:^19.5.0" - ajv: "npm:^8.11.0" - checksum: 10c0/f04b8c66448c9a4f335d1ac9625393d471d2bcc864adc834eeec52ce19939c25475bf90677504df03ab88869e883b4ebfddff68f99f7652900d6b297ef586643 + "@aws-sdk/client-sso": "npm:3.808.0" + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/token-providers": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/shared-ini-file-loader": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/72fd6ebf774a58142a925c846deb297644c8af584985c66c9e68316cfbe22090be417886a9fd37b1df6cf5fbc6dd77866db3ee2ea1e25f9a4e2ff0d2c05e71e9 languageName: node linkType: hard -"@commitlint/ensure@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/ensure@npm:19.5.0" +"@aws-sdk/credential-provider-web-identity@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.808.0" dependencies: - "@commitlint/types": "npm:^19.5.0" - lodash.camelcase: "npm:^4.3.0" - lodash.kebabcase: "npm:^4.1.1" - lodash.snakecase: "npm:^4.1.1" - lodash.startcase: "npm:^4.4.0" - lodash.upperfirst: "npm:^4.3.1" - checksum: 10c0/94955d424da36a4e9390dfb6e128160d1dcd3ffa20b835a9b6fdd92af46bf8897851f19cbeb9d12a70e9b9c36a993d3a48a60893e74f32fe1b601e1e68484d71 + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/nested-clients": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/0be99ccace393e066e2feeb1046c2648461b71c88dd38a4adef1dd74391fcc47144e5e76e1709a3f69f4ca43f15c2c16d50cdaa9d3d6133a677c530f1a54321e + languageName: node + linkType: hard + +"@aws-sdk/endpoint-cache@npm:3.804.0": + version: 3.804.0 + resolution: "@aws-sdk/endpoint-cache@npm:3.804.0" + dependencies: + mnemonist: "npm:0.38.3" + tslib: "npm:^2.6.2" + checksum: 10c0/566bb7bb8633e95d40b8f622c3ff53d193b6b6e5f3e09ee86ef62d885e73ad5b75822e85c8ca920b0d8badc4e2c2b54697b2d87a8afae8920b4108798138d28a + languageName: node + linkType: hard + +"@aws-sdk/middleware-endpoint-discovery@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/middleware-endpoint-discovery@npm:3.808.0" + dependencies: + "@aws-sdk/endpoint-cache": "npm:3.804.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/b1826543781d0b812a24bed1c2805ebc8590267a5ccb8241f2bb7e5880b843e291aafe717a483ed3c6ed25fe17d5ac668c1e37cbb46b57dd9c26eee1cda0bd0a + languageName: node + linkType: hard + +"@aws-sdk/middleware-host-header@npm:3.804.0": + version: 3.804.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.804.0" + dependencies: + "@aws-sdk/types": "npm:3.804.0" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/4089d24b70d2d80f4936e4468f69d3ce1dfd80bc84ed0db65c57b25814c7842076e6ab55a80346f2b396b1db967c447370839a2dac836e1db81b01928985ceeb + languageName: node + linkType: hard + +"@aws-sdk/middleware-logger@npm:3.804.0": + version: 3.804.0 + resolution: "@aws-sdk/middleware-logger@npm:3.804.0" + dependencies: + "@aws-sdk/types": "npm:3.804.0" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/4b7deebb336231e529857673fbba898e578b7ca88049923f3e822e67732262a08bbcaecf388e1cd687102744ad9867ab535b71e8b086602f91e1a4bb43b39a5a languageName: node linkType: hard -"@commitlint/execute-rule@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/execute-rule@npm:19.5.0" - checksum: 10c0/966dfc09ae3fe609527fb49c7773ae210ade9d14a802a92a57ab251900a77d2968aed08df6b34f175bf4ae9bf5d675b52b346e7b10b717e8a635499e4cf42267 +"@aws-sdk/middleware-recursion-detection@npm:3.804.0": + version: 3.804.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.804.0" + dependencies: + "@aws-sdk/types": "npm:3.804.0" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/86e6d2902dd8ec8551d9f66ebc470b21bcf0d3caab457ef3395ee18fcd371d3816e86f17f39cd69a27cc39ee96b6b85d0b179e44fec5a6da11f44a4905d8ac92 languageName: node linkType: hard -"@commitlint/format@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/format@npm:19.5.0" +"@aws-sdk/middleware-user-agent@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.808.0" dependencies: - "@commitlint/types": "npm:^19.5.0" - chalk: "npm:^5.3.0" - checksum: 10c0/209a3d530d028d483886ea2337d6ec8a95b61119f53f7f1db167b13fd8a204bdcbcd704e649406a0b2285e8424b3bac9e1e6856d2a78f45e176976b9efb76e45 + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@aws-sdk/util-endpoints": "npm:3.808.0" + "@smithy/core": "npm:^3.3.1" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/b0c98fc5527bafee7376c98a919d07ed2df32584d0ae653499e1934eac21070e10360e96327a79f24e58d746f80456a6f84e819e53de403da422f28ffa1ae806 languageName: node linkType: hard -"@commitlint/is-ignored@npm:^19.7.1": - version: 19.7.1 - resolution: "@commitlint/is-ignored@npm:19.7.1" +"@aws-sdk/nested-clients@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/nested-clients@npm:3.808.0" dependencies: - "@commitlint/types": "npm:^19.5.0" - semver: "npm:^7.6.0" - checksum: 10c0/8c238002c6c7bb0a50cca2dfc001af2cec2926056e090b840e73c25f8d246ac5d8ff862d51a63900a195479869edca7889fc4c7923ffa2bb85a1475f8c469c43 + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.808.0" + "@aws-sdk/middleware-host-header": "npm:3.804.0" + "@aws-sdk/middleware-logger": "npm:3.804.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.804.0" + "@aws-sdk/middleware-user-agent": "npm:3.808.0" + "@aws-sdk/region-config-resolver": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@aws-sdk/util-endpoints": "npm:3.808.0" + "@aws-sdk/util-user-agent-browser": "npm:3.804.0" + "@aws-sdk/util-user-agent-node": "npm:3.808.0" + "@smithy/config-resolver": "npm:^4.1.2" + "@smithy/core": "npm:^3.3.1" + "@smithy/fetch-http-handler": "npm:^5.0.2" + "@smithy/hash-node": "npm:^4.0.2" + "@smithy/invalid-dependency": "npm:^4.0.2" + "@smithy/middleware-content-length": "npm:^4.0.2" + "@smithy/middleware-endpoint": "npm:^4.1.4" + "@smithy/middleware-retry": "npm:^4.1.5" + "@smithy/middleware-serde": "npm:^4.0.3" + "@smithy/middleware-stack": "npm:^4.0.2" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/node-http-handler": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/smithy-client": "npm:^4.2.4" + "@smithy/types": "npm:^4.2.0" + "@smithy/url-parser": "npm:^4.0.2" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-body-length-node": "npm:^4.0.0" + "@smithy/util-defaults-mode-browser": "npm:^4.0.12" + "@smithy/util-defaults-mode-node": "npm:^4.0.12" + "@smithy/util-endpoints": "npm:^3.0.4" + "@smithy/util-middleware": "npm:^4.0.2" + "@smithy/util-retry": "npm:^4.0.3" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/9d133ebe9259e3b7f9e58903272b6d32ad23805ad108e0eec209953e132f0dc0943b3efdcc6ba0027409789d46c781cecf7834925950f0777e111a6cdee72871 languageName: node linkType: hard -"@commitlint/lint@npm:^19.7.1": - version: 19.7.1 - resolution: "@commitlint/lint@npm:19.7.1" +"@aws-sdk/region-config-resolver@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/region-config-resolver@npm:3.808.0" dependencies: - "@commitlint/is-ignored": "npm:^19.7.1" - "@commitlint/parse": "npm:^19.5.0" - "@commitlint/rules": "npm:^19.6.0" - "@commitlint/types": "npm:^19.5.0" - checksum: 10c0/578e2a955c5d16e34dade2538966b5a0fed6ba4e81fcfb477ad3a62472467f80d84d0d79ec017aa5e6815ed6c71b246d660d9febb64cabb175e39eee426b2f98 + "@aws-sdk/types": "npm:3.804.0" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-config-provider": "npm:^4.0.0" + "@smithy/util-middleware": "npm:^4.0.2" + tslib: "npm:^2.6.2" + checksum: 10c0/3e21dcf467afda7cfe3298b94fa29e3df3440ba8ba2eddf796c8e2b88c77584ed80ea6ebc2044117bddd78bf53454043d0a42d4cad821ae87293cd1941823068 languageName: node linkType: hard -"@commitlint/load@npm:^19.6.1": - version: 19.6.1 - resolution: "@commitlint/load@npm:19.6.1" +"@aws-sdk/token-providers@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/token-providers@npm:3.808.0" dependencies: - "@commitlint/config-validator": "npm:^19.5.0" - "@commitlint/execute-rule": "npm:^19.5.0" - "@commitlint/resolve-extends": "npm:^19.5.0" - "@commitlint/types": "npm:^19.5.0" - chalk: "npm:^5.3.0" - cosmiconfig: "npm:^9.0.0" - cosmiconfig-typescript-loader: "npm:^6.1.0" - lodash.isplainobject: "npm:^4.0.6" - lodash.merge: "npm:^4.6.2" - lodash.uniq: "npm:^4.5.0" - checksum: 10c0/3f92ef6a592491dbb48ae985ef8e3897adccbbb735c09425304cbe574a0ec392b2d724ca14ebb99107e32f60bbec3b873ab64e87fea6d5af7aa579a9052a626e + "@aws-sdk/nested-clients": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/shared-ini-file-loader": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/20c651f7927a1719d42e40b8859a3434ea454da5b64dac8ea4e9b8aeaa618b53e4253e147e270f44c205d90bdeb264907d293d398a96bfb70b555a4bc9aebff1 + languageName: node + linkType: hard + +"@aws-sdk/types@npm:3.804.0, @aws-sdk/types@npm:^3.222.0": + version: 3.804.0 + resolution: "@aws-sdk/types@npm:3.804.0" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/cdda6d77466ed34de1ca0e23b9df5c576e7d67dc87cfda2a2d024a9c5f4180fe77ebaf57194a4cf034ee5edfbcd8efdeca458e9b61b1f364b261284b4a141ae5 + languageName: node + linkType: hard + +"@aws-sdk/util-endpoints@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/util-endpoints@npm:3.808.0" + dependencies: + "@aws-sdk/types": "npm:3.804.0" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-endpoints": "npm:^3.0.4" + tslib: "npm:^2.6.2" + checksum: 10c0/197e07aa9715eb3930a5f2d38fd379687ba306d3025d2498a0a4fced77ed34ab013c25e8cfec9ce07a807a72e2086472883b4ea268047fe3865fad740740f471 languageName: node linkType: hard -"@commitlint/message@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/message@npm:19.5.0" - checksum: 10c0/72b990ba8c3c41441bff2126f4ea536a635c9768dee7000b4951770ac82c5e0bb4c2d408cf28cadbf51a0abbdb7a09ddd36e0968af0997fcc166596d4c3866a7 +"@aws-sdk/util-locate-window@npm:^3.0.0": + version: 3.804.0 + resolution: "@aws-sdk/util-locate-window@npm:3.804.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/a0ceaf6531f188751fea7e829b730650689fa2196e0b3f870dde3888bcb840fe0852e10488699d4d9683db0765cd7f7060ca8ac216348991996b6d794f9957ab + languageName: node + linkType: hard + +"@aws-sdk/util-user-agent-browser@npm:3.804.0": + version: 3.804.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.804.0" + dependencies: + "@aws-sdk/types": "npm:3.804.0" + "@smithy/types": "npm:^4.2.0" + bowser: "npm:^2.11.0" + tslib: "npm:^2.6.2" + checksum: 10c0/d459a94955e7298c72dc97e7e59d276320ff004615b117bd2f63bbacf762159c5476f40a8f24d9b5eb054915bd6ce97ffade3a649d5fad98643f92a9d90a5192 languageName: node linkType: hard -"@commitlint/parse@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/parse@npm:19.5.0" +"@aws-sdk/util-user-agent-node@npm:3.808.0": + version: 3.808.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.808.0" dependencies: - "@commitlint/types": "npm:^19.5.0" - conventional-changelog-angular: "npm:^7.0.0" - conventional-commits-parser: "npm:^5.0.0" - checksum: 10c0/63655cedcf48b29613ef959155ee83f49942406abe40ee6b64ad989a169a0582451dcf15a9c9b69a66011ae451ab2e086fb80c1823cc7ddf275705ff627660b1 + "@aws-sdk/middleware-user-agent": "npm:3.808.0" + "@aws-sdk/types": "npm:3.804.0" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + checksum: 10c0/a51f66a57e2ab2f7fe7df0e1567bf0b2ce18dec3721bbfb70e44c3c20ad5eb8d972d83579af059e0c8d765f276d8aa683d5607ce6562335fcbccc66c36ce31b8 languageName: node linkType: hard -"@commitlint/read@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/read@npm:19.5.0" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" dependencies: - "@commitlint/top-level": "npm:^19.5.0" - "@commitlint/types": "npm:^19.5.0" - git-raw-commits: "npm:^4.0.0" - minimist: "npm:^1.2.8" - tinyexec: "npm:^0.3.0" - checksum: 10c0/c2d6f958930e815337a4994779ca1dfcbbb6b81b8f3098cc7380e2cc5ddeae69ebd839b48fecd08950e565d43bc42c479915c578eaf57b3877706bca1fad6b8a + "@babel/helper-validator-identifier": "npm:^7.27.1" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 languageName: node linkType: hard -"@commitlint/resolve-extends@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/resolve-extends@npm:19.5.0" - dependencies: - "@commitlint/config-validator": "npm:^19.5.0" - "@commitlint/types": "npm:^19.5.0" - global-directory: "npm:^4.0.1" - import-meta-resolve: "npm:^4.0.0" - lodash.mergewith: "npm:^4.6.2" - resolve-from: "npm:^5.0.0" - checksum: 10c0/10569a46036b7aa93c77dc5001a67bc9f36b340b97b2fd39b5ee95b0efc5e35335c61f86d4ba0bb5a8e6dd49ccf956990cce9ee29cfea9ba567e02668be01841 +"@babel/compat-data@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/compat-data@npm:7.27.2" + checksum: 10c0/077c9e01af3b90decee384a6a44dcf353898e980cee22ec7941f9074655dbbe97ec317345536cdc7ef7391521e1497930c522a3816af473076dd524be7fccd32 languageName: node linkType: hard -"@commitlint/rules@npm:^19.6.0": - version: 19.6.0 - resolution: "@commitlint/rules@npm:19.6.0" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": + version: 7.27.1 + resolution: "@babel/core@npm:7.27.1" dependencies: - "@commitlint/ensure": "npm:^19.5.0" - "@commitlint/message": "npm:^19.5.0" - "@commitlint/to-lines": "npm:^19.5.0" - "@commitlint/types": "npm:^19.5.0" - checksum: 10c0/1d93b741cfb46e6c5314ddb03282844b65db832aa4767561bb37e9d0595d02330e6a0a557fb66f86d78b2ffd91cd2ed794899df59ee23b27abc44e1e57b42d0e + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helpers": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/0fc31f87f5401ac5d375528cb009f4ea5527fc8c5bb5b64b5b22c033b60fd0ad723388933a5f3f5db14e1edd13c958e9dd7e5c68f9b68c767aeb496199c8a4bb languageName: node linkType: hard -"@commitlint/to-lines@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/to-lines@npm:19.5.0" - checksum: 10c0/7674b4b6887c09e84728b9fa9c986ab77db400bf53ec83aaae84e03e0f3ed33088d450d1f67135f0f7a4cbc1121181775199779e1ca162fe604c902987e3008f +"@babel/generator@npm:^7.27.1, @babel/generator@npm:^7.7.2": + version: 7.27.1 + resolution: "@babel/generator@npm:7.27.1" + dependencies: + "@babel/parser": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 languageName: node linkType: hard -"@commitlint/top-level@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/top-level@npm:19.5.0" +"@babel/helper-compilation-targets@npm:^7.27.1": + version: 7.27.2 + resolution: "@babel/helper-compilation-targets@npm:7.27.2" dependencies: - find-up: "npm:^7.0.0" - checksum: 10c0/8c1edc513c8d6655606e52d160d31ccd4b13234400ca67d21782798ab66701780b1ec21a7bb411fe8270db7735f10d39d3b0a3e52f3ddd1109b80741eb512bb4 + "@babel/compat-data": "npm:^7.27.2" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 languageName: node linkType: hard -"@commitlint/types@npm:^19.5.0": - version: 19.5.0 - resolution: "@commitlint/types@npm:19.5.0" +"@babel/helper-module-imports@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-imports@npm:7.27.1" dependencies: - "@types/conventional-commits-parser": "npm:^5.0.0" - chalk: "npm:^5.3.0" - checksum: 10c0/f4a93992f43b23cd5af200c69bb73227fdc0f78a6f7ebcda73dad10d558c1ac66ff164aa6dc3c2ddb322c9ed8b1a89b05f458e40d7c440a0358f435d2d71c2df + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/aix-ppc64@npm:0.21.5" - conditions: os=aix & cpu=ppc64 +"@babel/helper-module-transforms@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-transforms@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/aix-ppc64@npm:0.24.2" - conditions: os=aix & cpu=ppc64 +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.27.1 + resolution: "@babel/helper-plugin-utils@npm:7.27.1" + checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/aix-ppc64@npm:0.25.0" - conditions: os=aix & cpu=ppc64 +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm64@npm:0.21.5" - conditions: os=android & cpu=arm64 +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/android-arm64@npm:0.24.2" - conditions: os=android & cpu=arm64 +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-arm64@npm:0.25.0" - conditions: os=android & cpu=arm64 +"@babel/helpers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helpers@npm:7.27.1" + dependencies: + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e078257b9342dae2c041ac050276c5a28701434ad09478e6dc6976abd99f721a5a92e4bebddcbca6b1c3a7e8acace56a946340c701aad5e7507d2c87446459ba languageName: node linkType: hard -"@esbuild/android-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm@npm:0.21.5" - conditions: os=android & cpu=arm +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/parser@npm:7.27.2" + dependencies: + "@babel/types": "npm:^7.27.1" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/3c06692768885c2f58207fc8c2cbdb4a44df46b7d93135a083f6eaa49310f7ced490ce76043a2a7606cdcc13f27e3d835e141b692f2f6337a2e7f43c1dbb04b4 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/android-arm@npm:0.24.2" - conditions: os=android & cpu=arm +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-arm@npm:0.25.0" - conditions: os=android & cpu=arm +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde languageName: node linkType: hard -"@esbuild/android-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-x64@npm:0.21.5" - conditions: os=android & cpu=x64 +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.12.13" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 languageName: node linkType: hard -"@esbuild/android-x64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/android-x64@npm:0.24.2" - conditions: os=android & cpu=x64 +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-x64@npm:0.25.0" - conditions: os=android & cpu=x64 +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e66f7a761b8360419bbb93ab67d87c8a97465ef4637a985ff682ce7ba6918b34b29d81190204cf908d0933058ee7b42737423cd8a999546c21b3aabad4affa9a languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-arm64@npm:0.21.5" - conditions: os=darwin & cpu=arm64 +"@babel/plugin-syntax-import-meta@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/darwin-arm64@npm:0.24.2" - conditions: os=darwin & cpu=arm64 +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/darwin-arm64@npm:0.25.0" - conditions: os=darwin & cpu=arm64 +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.27.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bc5afe6a458d5f0492c02a54ad98c5756a0c13bd6d20609aae65acd560a9e141b0876da5f358dce34ea136f271c1016df58b461184d7ae9c4321e0f98588bc84 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-x64@npm:0.21.5" - conditions: os=darwin & cpu=x64 +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/darwin-x64@npm:0.24.2" - conditions: os=darwin & cpu=x64 +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/darwin-x64@npm:0.25.0" - conditions: os=darwin & cpu=x64 +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-arm64@npm:0.21.5" - conditions: os=freebsd & cpu=arm64 +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/freebsd-arm64@npm:0.24.2" - conditions: os=freebsd & cpu=arm64 +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/freebsd-arm64@npm:0.25.0" - conditions: os=freebsd & cpu=arm64 +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-x64@npm:0.21.5" - conditions: os=freebsd & cpu=x64 +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/freebsd-x64@npm:0.24.2" - conditions: os=freebsd & cpu=x64 +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/freebsd-x64@npm:0.25.0" - conditions: os=freebsd & cpu=x64 +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.27.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/11589b4c89c66ef02d57bf56c6246267851ec0c361f58929327dc3e070b0dab644be625bbe7fb4c4df30c3634bfdfe31244e1f517be397d2def1487dbbe3c37d languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm64@npm:0.21.5" - conditions: os=linux & cpu=arm64 +"@babel/template@npm:^7.27.1, @babel/template@npm:^7.3.3": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.2" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-arm64@npm:0.24.2" - conditions: os=linux & cpu=arm64 +"@babel/traverse@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/traverse@npm:7.27.1" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-arm64@npm:0.25.0" - conditions: os=linux & cpu=arm64 +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.3.3": + version: 7.27.1 + resolution: "@babel/types@npm:7.27.1" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm@npm:0.21.5" - conditions: os=linux & cpu=arm +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-arm@npm:0.24.2" - conditions: os=linux & cpu=arm +"@bundled-es-modules/cookie@npm:^2.0.1": + version: 2.0.1 + resolution: "@bundled-es-modules/cookie@npm:2.0.1" + dependencies: + cookie: "npm:^0.7.2" + checksum: 10c0/dfac5e36127e827c5557b8577f17a8aa94c057baff6d38555917927b99da0ecf0b1357e7fedadc8853ecdbd4a8a7fa1f5e64111b2a656612f4a36376f5bdbe8d languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-arm@npm:0.25.0" - conditions: os=linux & cpu=arm +"@bundled-es-modules/statuses@npm:^1.0.1": + version: 1.0.1 + resolution: "@bundled-es-modules/statuses@npm:1.0.1" + dependencies: + statuses: "npm:^2.0.1" + checksum: 10c0/c1a8ede3efa8da61ccda4b98e773582a9733edfbeeee569d4630785f8e018766202edb190a754a3ec7a7f6bd738e857829affc2fdb676b6dab4db1bb44e62785 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ia32@npm:0.21.5" - conditions: os=linux & cpu=ia32 +"@bundled-es-modules/tough-cookie@npm:^0.1.6": + version: 0.1.6 + resolution: "@bundled-es-modules/tough-cookie@npm:0.1.6" + dependencies: + "@types/tough-cookie": "npm:^4.0.5" + tough-cookie: "npm:^4.1.4" + checksum: 10c0/28bcac878bff6b34719ba3aa8341e9924772ee55de5487680ebe784981ec9fccb70ed5d46f563e2404855a04de606f9e56aa4202842d4f5835bc04a4fe820571 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-ia32@npm:0.24.2" - conditions: os=linux & cpu=ia32 +"@commitlint/cli@npm:^19.0.3": + version: 19.8.1 + resolution: "@commitlint/cli@npm:19.8.1" + dependencies: + "@commitlint/format": "npm:^19.8.1" + "@commitlint/lint": "npm:^19.8.1" + "@commitlint/load": "npm:^19.8.1" + "@commitlint/read": "npm:^19.8.1" + "@commitlint/types": "npm:^19.8.1" + tinyexec: "npm:^1.0.0" + yargs: "npm:^17.0.0" + bin: + commitlint: ./cli.js + checksum: 10c0/41a5b6aa27aaead8ed400eb212c87d06fdb8fae219ebccd37369a4aab2e3cff25afc4b3c3fa18df9dc19a0ae4ab6599f9adb5c836cad31c2589cb988aefe5515 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-ia32@npm:0.25.0" - conditions: os=linux & cpu=ia32 +"@commitlint/config-conventional@npm:^19.0.3": + version: 19.8.1 + resolution: "@commitlint/config-conventional@npm:19.8.1" + dependencies: + "@commitlint/types": "npm:^19.8.1" + conventional-changelog-conventionalcommits: "npm:^7.0.2" + checksum: 10c0/654786e1acd64756e5c88838c19d9eb5d5ee7a6f314af65585dc18cc4002990e971614e7c69f49e5489be9430671aa5b39af005a2160c5a4f26391258d38febf languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-loong64@npm:0.21.5" - conditions: os=linux & cpu=loong64 +"@commitlint/config-validator@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/config-validator@npm:19.8.1" + dependencies: + "@commitlint/types": "npm:^19.8.1" + ajv: "npm:^8.11.0" + checksum: 10c0/68f84f47503fb17845512b1da45d632211c07605e5a20ef5b56d8732b81a760fec6c5a41847b59a31628a2d40a44cc5c0cfa33e7e02247b198984bab66b06a5d languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-loong64@npm:0.24.2" - conditions: os=linux & cpu=loong64 +"@commitlint/ensure@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/ensure@npm:19.8.1" + dependencies: + "@commitlint/types": "npm:^19.8.1" + lodash.camelcase: "npm:^4.3.0" + lodash.kebabcase: "npm:^4.1.1" + lodash.snakecase: "npm:^4.1.1" + lodash.startcase: "npm:^4.4.0" + lodash.upperfirst: "npm:^4.3.1" + checksum: 10c0/1a2fdf51f333ab21ede58de82243bb53bb13dac91f3d5f1e20db865a6e5a09b51faef692badf4c59e911ad8f761c1e103827b485938b7e9688db389a444a8d7d languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-loong64@npm:0.25.0" - conditions: os=linux & cpu=loong64 +"@commitlint/execute-rule@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/execute-rule@npm:19.8.1" + checksum: 10c0/dfdcec63f16a445c85b4bf540a5abe237f230cf5a357d9bd89142722d6bea6800cccadbd570b78d6799121ed51b0ed47fe12ab69ddd7edb53449b78e9f79a4be languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-mips64el@npm:0.21.5" - conditions: os=linux & cpu=mips64el +"@commitlint/format@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/format@npm:19.8.1" + dependencies: + "@commitlint/types": "npm:^19.8.1" + chalk: "npm:^5.3.0" + checksum: 10c0/cd8688b2abd426e2cae2ab752e43198b218cb11a0f4b45fc13655799d7cfe1192eb78c757d28bc7fe11151eabc1fee412a77f3248550b34c36612969eefe59cf languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-mips64el@npm:0.24.2" - conditions: os=linux & cpu=mips64el +"@commitlint/is-ignored@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/is-ignored@npm:19.8.1" + dependencies: + "@commitlint/types": "npm:^19.8.1" + semver: "npm:^7.6.0" + checksum: 10c0/8b16583a7615f9b2a4fc8882ddd8140bfe3e909cc5d44b536d1b4e7857a90a8b15c27b30bb9b7a712b707f27c58014290a362dd8ecebdb1e8bde90d20c67eea6 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-mips64el@npm:0.25.0" - conditions: os=linux & cpu=mips64el +"@commitlint/lint@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/lint@npm:19.8.1" + dependencies: + "@commitlint/is-ignored": "npm:^19.8.1" + "@commitlint/parse": "npm:^19.8.1" + "@commitlint/rules": "npm:^19.8.1" + "@commitlint/types": "npm:^19.8.1" + checksum: 10c0/013ceb3acd7291d0e05e9c77ed160a3e8d04334b90f807f6d4fbc2682c86ba41b434721d229bf90784a59197353d80880d977a92fa6f6f025c4ab1b1773cf2ea languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ppc64@npm:0.21.5" - conditions: os=linux & cpu=ppc64 +"@commitlint/load@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/load@npm:19.8.1" + dependencies: + "@commitlint/config-validator": "npm:^19.8.1" + "@commitlint/execute-rule": "npm:^19.8.1" + "@commitlint/resolve-extends": "npm:^19.8.1" + "@commitlint/types": "npm:^19.8.1" + chalk: "npm:^5.3.0" + cosmiconfig: "npm:^9.0.0" + cosmiconfig-typescript-loader: "npm:^6.1.0" + lodash.isplainobject: "npm:^4.0.6" + lodash.merge: "npm:^4.6.2" + lodash.uniq: "npm:^4.5.0" + checksum: 10c0/a674080552f24c12b3e04f97d9dce515461fc0af6de90fe8ecd1671357361b8ce095f5598e71ca7599f7fd4a9b4d54a7c552769237c9ca6fb56dbd69742b1b4b languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-ppc64@npm:0.24.2" - conditions: os=linux & cpu=ppc64 +"@commitlint/message@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/message@npm:19.8.1" + checksum: 10c0/cd0b763d63dfe7a1b47402489fd82abe47e7c4bcc4eb71edfbc7a280f9aa83627ad30ad0cbf558e4694e39d01c523d56b0dd906c4a97629dbda57f9b00e30ccd languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-ppc64@npm:0.25.0" - conditions: os=linux & cpu=ppc64 +"@commitlint/parse@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/parse@npm:19.8.1" + dependencies: + "@commitlint/types": "npm:^19.8.1" + conventional-changelog-angular: "npm:^7.0.0" + conventional-commits-parser: "npm:^5.0.0" + checksum: 10c0/9bad063ee83ba86cdab2e61b7ed3a6fc6e5e3c7ee1c6ae2335a7fa3578fed91fc92397ccfdb7e659d2b7bfea34e837bafbed7283037f0d10f731b099cfa9a03f languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-riscv64@npm:0.21.5" - conditions: os=linux & cpu=riscv64 +"@commitlint/read@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/read@npm:19.8.1" + dependencies: + "@commitlint/top-level": "npm:^19.8.1" + "@commitlint/types": "npm:^19.8.1" + git-raw-commits: "npm:^4.0.0" + minimist: "npm:^1.2.8" + tinyexec: "npm:^1.0.0" + checksum: 10c0/a32a6d68b0178c1eca3ef58e32d4bbd5b70dc8ddc0b791c1697e5236bea1fac5ed3f97bc5e6e569399673e8341fbedf7e630f1171a40b3d756ac153d022ede68 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-riscv64@npm:0.24.2" - conditions: os=linux & cpu=riscv64 +"@commitlint/resolve-extends@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/resolve-extends@npm:19.8.1" + dependencies: + "@commitlint/config-validator": "npm:^19.8.1" + "@commitlint/types": "npm:^19.8.1" + global-directory: "npm:^4.0.1" + import-meta-resolve: "npm:^4.0.0" + lodash.mergewith: "npm:^4.6.2" + resolve-from: "npm:^5.0.0" + checksum: 10c0/0172a0c892ae7fb95e3d982db0c559735b76384241ce524bf7257bdafb2aa8239e039894629e777e1f34c28cc7bb0938b24befb494a6b383023c004bd97adb42 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-riscv64@npm:0.25.0" - conditions: os=linux & cpu=riscv64 +"@commitlint/rules@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/rules@npm:19.8.1" + dependencies: + "@commitlint/ensure": "npm:^19.8.1" + "@commitlint/message": "npm:^19.8.1" + "@commitlint/to-lines": "npm:^19.8.1" + "@commitlint/types": "npm:^19.8.1" + checksum: 10c0/fa9d6ca268eec570b948d8c804f97557fd2ae2de1420e326ff387d1234fc1a255bf1ae4185affe307b2856b3b5f6ac9f13fe26b754990987b97d80b2d688076f languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.21.5": +"@commitlint/to-lines@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/to-lines@npm:19.8.1" + checksum: 10c0/ad6592a550fb15379c454b8e017147dc4cecd5ee347b9a30fce0a19d80a9b5740562ac8f8fe4137864ac8bcc4892b682531c436e81b037bf4b7eb9cfc0aa016e + languageName: node + linkType: hard + +"@commitlint/top-level@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/top-level@npm:19.8.1" + dependencies: + find-up: "npm:^7.0.0" + checksum: 10c0/718723dc68bf72e9cfdeb1ee0188dcd58738b1ae8c7503d8a2b0666ec26f28a9e86ec9e12b432ebf37f14d04eaca2c8c80329228992187f2560b20a97a11f41b + languageName: node + linkType: hard + +"@commitlint/types@npm:^19.8.1": + version: 19.8.1 + resolution: "@commitlint/types@npm:19.8.1" + dependencies: + "@types/conventional-commits-parser": "npm:^5.0.0" + chalk: "npm:^5.3.0" + checksum: 10c0/0507db111d1ffd7b60e7ad979b7f9e674d409fc4c64561dfe30737b2c5bfefca7a1b58116106fa4ecb480059cecb13f04fa18f999d2d4a7d665b5ab13a05a803 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6 + languageName: node + linkType: hard + +"@emnapi/core@npm:^1.4.0": + version: 1.4.3 + resolution: "@emnapi/core@npm:1.4.3" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.2" + tslib: "npm:^2.4.0" + checksum: 10c0/e30101d16d37ef3283538a35cad60e22095aff2403fb9226a35330b932eb6740b81364d525537a94eb4fb51355e48ae9b10d779c0dd1cdcd55d71461fe4b45c7 + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.4.0": + version: 1.4.3 + resolution: "@emnapi/runtime@npm:1.4.3" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/3b7ab72d21cb4e034f07df80165265f85f445ef3f581d1bc87b67e5239428baa00200b68a7d5e37a0425c3a78320b541b07f76c5530f6f6f95336a6294ebf30b + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.2": + version: 1.0.2 + resolution: "@emnapi/wasi-threads@npm:1.0.2" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/f0621b1fc715221bd2d8332c0ca922617bcd77cdb3050eae50a124eb8923c54fa425d23982dc8f29d505c8798a62d1049bace8b0686098ff9dd82270e06d772e + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.21.5": version: 0.21.5 - resolution: "@esbuild/linux-s390x@npm:0.21.5" - conditions: os=linux & cpu=s390x + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-s390x@npm:0.24.2" - conditions: os=linux & cpu=s390x +"@esbuild/aix-ppc64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/aix-ppc64@npm:0.25.4" + conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-s390x@npm:0.25.0" - conditions: os=linux & cpu=s390x +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.21.5": +"@esbuild/android-arm64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/android-arm64@npm:0.25.4" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": version: 0.21.5 - resolution: "@esbuild/linux-x64@npm:0.21.5" - conditions: os=linux & cpu=x64 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/linux-x64@npm:0.24.2" - conditions: os=linux & cpu=x64 +"@esbuild/android-arm@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/android-arm@npm:0.25.4" + conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-x64@npm:0.25.0" - conditions: os=linux & cpu=x64 +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/netbsd-arm64@npm:0.24.2" - conditions: os=netbsd & cpu=arm64 +"@esbuild/android-x64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/android-x64@npm:0.25.4" + conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/netbsd-arm64@npm:0.25.0" - conditions: os=netbsd & cpu=arm64 +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.21.5": +"@esbuild/darwin-arm64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/darwin-arm64@npm:0.25.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": version: 0.21.5 - resolution: "@esbuild/netbsd-x64@npm:0.21.5" - conditions: os=netbsd & cpu=x64 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/netbsd-x64@npm:0.24.2" - conditions: os=netbsd & cpu=x64 +"@esbuild/darwin-x64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/darwin-x64@npm:0.25.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/freebsd-arm64@npm:0.25.4" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/freebsd-x64@npm:0.25.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-arm64@npm:0.25.4" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-arm@npm:0.25.4" + conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/netbsd-x64@npm:0.25.0" +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-ia32@npm:0.25.4" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-loong64@npm:0.25.4" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-mips64el@npm:0.25.4" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-ppc64@npm:0.25.4" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-riscv64@npm:0.25.4" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-s390x@npm:0.25.4" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/linux-x64@npm:0.25.4" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/netbsd-arm64@npm:0.25.4" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/openbsd-arm64@npm:0.24.2" - conditions: os=openbsd & cpu=arm64 +"@esbuild/netbsd-x64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/netbsd-x64@npm:0.25.4" + conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/openbsd-arm64@npm:0.25.0" +"@esbuild/openbsd-arm64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/openbsd-arm64@npm:0.25.4" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard @@ -662,16 +1456,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/openbsd-x64@npm:0.24.2" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/openbsd-x64@npm:0.25.0" +"@esbuild/openbsd-x64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/openbsd-x64@npm:0.25.4" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -683,16 +1470,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/sunos-x64@npm:0.24.2" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/sunos-x64@npm:0.25.0" +"@esbuild/sunos-x64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/sunos-x64@npm:0.25.4" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -704,16 +1484,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/win32-arm64@npm:0.24.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-arm64@npm:0.25.0" +"@esbuild/win32-arm64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/win32-arm64@npm:0.25.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -725,16 +1498,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/win32-ia32@npm:0.24.2" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-ia32@npm:0.25.0" +"@esbuild/win32-ia32@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/win32-ia32@npm:0.25.4" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -746,28 +1512,21 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.24.2": - version: 0.24.2 - resolution: "@esbuild/win32-x64@npm:0.24.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-x64@npm:0.25.0" +"@esbuild/win32-x64@npm:0.25.4": + version: 0.25.4 + resolution: "@esbuild/win32-x64@npm:0.25.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.1 - resolution: "@eslint-community/eslint-utils@npm:4.4.1" + version: 4.7.0 + resolution: "@eslint-community/eslint-utils@npm:4.7.0" dependencies: eslint-visitor-keys: "npm:^3.4.3" peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf languageName: node linkType: hard @@ -822,11 +1581,11 @@ __metadata: linkType: hard "@gearbox-protocol/prettier-config@npm:^2.0.0-next.0": - version: 2.0.0 - resolution: "@gearbox-protocol/prettier-config@npm:2.0.0" + version: 2.1.0 + resolution: "@gearbox-protocol/prettier-config@npm:2.1.0" peerDependencies: prettier: ^3.3.3 - checksum: 10c0/f596680b21ef0ee55a4e8cf79963999681e0d8226b444afc45acb47954748401643cd19da37d69c5355c7bbf8da9231b302116182ecffb6c4292210d354e43b9 + checksum: 10c0/ccd52281eda0d133e6c7df5079f69ad8f7c5c3a134cd617302388e8f83ffafb3a65b71936846de14053361d60db49a38b5759269f82b7f2d1a692d7dfd2294cc languageName: node linkType: hard @@ -834,23 +1593,37 @@ __metadata: version: 0.0.0-use.local resolution: "@gearbox-protocol/safe-watcher@workspace:." dependencies: + "@aws-sdk/client-dynamodb": "npm:^3.803.0" + "@aws-sdk/client-secrets-manager": "npm:^3.787.0" "@commitlint/cli": "npm:^19.0.3" "@commitlint/config-conventional": "npm:^19.0.3" "@gearbox-protocol/eslint-config": "npm:^2.0.0-next.2" "@gearbox-protocol/prettier-config": "npm:^2.0.0-next.0" + "@rsksmart/rsk-utils": "npm:^2.0.5" + "@slack/types": "npm:^2.14.0" + "@slack/web-api": "npm:^7.8.0" + "@types/jest": "npm:^29.5.14" "@types/node": "npm:^22.13.5" + "@types/tmp": "npm:^0.2.6" "@vlad-yakovlev/telegram-md": "npm:^2.0.0" abitype: "npm:^1.0.8" + aws-sdk-client-mock: "npm:^4.1.0" + aws-sdk-client-mock-jest: "npm:^4.1.0" date-fns: "npm:^4.1.0" - esbuild: "npm:^0.24.0" + esbuild: "npm:^0.25.0" eslint: "npm:^8.57.0" + fetch-mock: "npm:^12.5.2" husky: "npm:^9.0.11" + jest: "npm:^29.7.0" lint-staged: "npm:^15.2.2" msw: "npm:^2.2.2" nanoid: "npm:^5.0.9" pino: "npm:^9.5.0" pino-pretty: "npm:^13.0.0" prettier: "npm:^3.2.5" + tmp: "npm:^0.2.3" + ts-jest: "npm:^29.3.2" + ts-node: "npm:^10.9.2" tsx: "npm:^4.7.1" typescript: "npm:^5.3.3" viem: "npm:^2.21.55" @@ -887,26 +1660,26 @@ __metadata: linkType: hard "@inquirer/confirm@npm:^5.0.0": - version: 5.1.6 - resolution: "@inquirer/confirm@npm:5.1.6" + version: 5.1.10 + resolution: "@inquirer/confirm@npm:5.1.10" dependencies: - "@inquirer/core": "npm:^10.1.7" - "@inquirer/type": "npm:^3.0.4" + "@inquirer/core": "npm:^10.1.11" + "@inquirer/type": "npm:^3.0.6" peerDependencies: "@types/node": ">=18" peerDependenciesMeta: "@types/node": optional: true - checksum: 10c0/57b667f8096ec261504b613656e7b7718a238a73e059870a2b8e97c3127bc50085251100ed371250733b7cc5cd68122d8694d6a04a46de95d08bb590a8437b11 + checksum: 10c0/71a1b1c1007b0edd06984c356a9e13764ca917bdbf947a59ce0f55084d36e653daffe56b3806fc9959337aae80ff7b37eeaf01a40746e5f60de86475fdf0502a languageName: node linkType: hard -"@inquirer/core@npm:^10.1.7": - version: 10.1.7 - resolution: "@inquirer/core@npm:10.1.7" +"@inquirer/core@npm:^10.1.11": + version: 10.1.11 + resolution: "@inquirer/core@npm:10.1.11" dependencies: - "@inquirer/figures": "npm:^1.0.10" - "@inquirer/type": "npm:^3.0.4" + "@inquirer/figures": "npm:^1.0.11" + "@inquirer/type": "npm:^3.0.6" ansi-escapes: "npm:^4.3.2" cli-width: "npm:^4.1.0" mute-stream: "npm:^2.0.0" @@ -918,26 +1691,26 @@ __metadata: peerDependenciesMeta: "@types/node": optional: true - checksum: 10c0/13c25ced3e66b0ef9018fc9cc1bb841d20d56917e2609514f80df91f2395f18d9851c91987064e15afa36a6161b6bd2daee6ebef4a1791ffb12b816d4273ca55 + checksum: 10c0/b71a71d527cf612b675a7b8db815ace31ba9db2df3bf00f4a1c1f4f396e9fb9ba32f4824e26a626191c5c50aaa4b53ed14b4c324714876f345fe630ca2d9432f languageName: node linkType: hard -"@inquirer/figures@npm:^1.0.10": - version: 1.0.10 - resolution: "@inquirer/figures@npm:1.0.10" - checksum: 10c0/013b0eef03706d5ff8847c1ab1a12643edfb3d1902a5353bfe626999bc3b46653f8317d011a9dd4e831d3f2bfef3da84104a1fda4db0de0f4938122f5c70362e +"@inquirer/figures@npm:^1.0.11": + version: 1.0.11 + resolution: "@inquirer/figures@npm:1.0.11" + checksum: 10c0/6270e24eebbe42bbc4e7f8e761e906be66b4896787f31ab3e7484ad271c8edc90bce4ec20e232a5da447aee4fc73803397b2dda8cf645f4f7eea83e773b44e1e languageName: node linkType: hard -"@inquirer/type@npm:^3.0.4": - version: 3.0.4 - resolution: "@inquirer/type@npm:3.0.4" +"@inquirer/type@npm:^3.0.6": + version: 3.0.6 + resolution: "@inquirer/type@npm:3.0.6" peerDependencies: "@types/node": ">=18" peerDependenciesMeta: "@types/node": optional: true - checksum: 10c0/d1db1833e879646ce1f31daff372e90ee099457cf7a2c09a62e8bbce47aced5f22599ef51aa8b82b5ffaeb624340c263cdd9d7a9eae8d3dfc9740efad080915e + checksum: 10c0/92382c1b046559ddb16c53e1353a900a43266566a0d73902e5325433c640b6aaeaf3e34cc5b2a68fd089ff5d8add914d0b9875cdec64f7a09313f9c4420b021d languageName: node linkType: hard @@ -964,19 +1737,314 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: "npm:^5.3.1" + find-up: "npm:^4.1.0" + get-package-type: "npm:^0.1.0" + js-yaml: "npm:^3.13.1" + resolve-from: "npm:^5.0.0" + checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 languageName: node linkType: hard -"@mswjs/interceptors@npm:^0.37.0": - version: 0.37.6 - resolution: "@mswjs/interceptors@npm:0.37.6" +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" dependencies: - "@open-draft/deferred-promise": "npm:^2.2.0" - "@open-draft/logger": "npm:^0.3.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 10c0/7be408781d0a6f657e969cbec13b540c329671819c2f57acfad0dae9dbfe2c9be859f38fe99b35dba9ff1536937dc6ddc69fdcd2794812fa3c647a1619797f6c + languageName: node + linkType: hard + +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/reporters": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-changed-files: "npm:^29.7.0" + jest-config: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-resolve-dependencies: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-ansi: "npm:^6.0.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10c0/934f7bf73190f029ac0f96662c85cd276ec460d407baf6b0dbaec2872e157db4d55a7ee0b1c43b18874602f662b37cb973dda469a4e6d88b4e4845b521adeeb2 + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + checksum: 10c0/c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + checksum: 10c0/60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + checksum: 10c0/b41f193fb697d3ced134349250aed6ccea075e48c4f803159db102b826a4e473397c68c31118259868fd69a5cba70e97e1c26d2c2ff716ca39dc73a2ccec037e + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@sinonjs/fake-timers": "npm:^10.0.2" + "@types/node": "npm:*" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c + languageName: node + linkType: hard + +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + jest-mock: "npm:^29.7.0" + checksum: 10c0/a385c99396878fe6e4460c43bd7bb0a5cc52befb462cc6e7f2a3810f9e7bcce7cdeb51908fd530391ee452dc856c98baa2c5f5fa8a5b30b071d31ef7f6955cea + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + collect-v8-coverage: "npm:^1.0.0" + exit: "npm:^0.1.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^4.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.1" + strip-ansi: "npm:^6.0.0" + v8-to-istanbul: "npm:^9.0.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10c0/a754402a799541c6e5aff2c8160562525e2a47e7d568f01ebfc4da66522de39cbb809bbb0a841c7052e4270d79214e70aec3c169e4eae42a03bc1a8a20cb9fa2 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.18" + callsites: "npm:^3.0.0" + graceful-fs: "npm:^4.2.9" + checksum: 10c0/a2f177081830a2e8ad3f2e29e20b63bd40bade294880b595acf2fc09ec74b6a9dd98f126a2baa2bf4941acd89b13a4ade5351b3885c224107083a0059b60a219 + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + collect-v8-coverage: "npm:^1.0.0" + checksum: 10c0/7de54090e54a674ca173470b55dc1afdee994f2d70d185c80236003efd3fa2b753fff51ffcdda8e2890244c411fd2267529d42c4a50a8303755041ee493e6a04 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 10c0/593a8c4272797bb5628984486080cbf57aed09c7cfdc0a634e8c06c38c6bef329c46c0016e84555ee55d1cd1f381518cf1890990ff845524c1123720c8c1481b + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + babel-plugin-istanbul: "npm:^6.1.1" + chalk: "npm:^4.0.0" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pirates: "npm:^4.0.4" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^4.0.2" + checksum: 10c0/7f4a7f73dcf45dfdf280c7aa283cbac7b6e5a904813c3a93ead7e55873761fc20d5c4f0191d2019004fac6f55f061c82eb3249c2901164ad80e362e7a7ede5a6 + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: 10c0/ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@mswjs/interceptors@npm:^0.37.0": + version: 0.37.6 + resolution: "@mswjs/interceptors@npm:0.37.6" + dependencies: + "@open-draft/deferred-promise": "npm:^2.2.0" + "@open-draft/logger": "npm:^0.3.0" "@open-draft/until": "npm:^2.0.0" is-node-process: "npm:^1.2.0" outvariant: "npm:^1.4.3" @@ -985,19 +2053,46 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:1.8.1, @noble/curves@npm:^1.6.0, @noble/curves@npm:~1.8.1": - version: 1.8.1 - resolution: "@noble/curves@npm:1.8.1" +"@napi-rs/wasm-runtime@npm:^0.2.9": + version: 0.2.9 + resolution: "@napi-rs/wasm-runtime@npm:0.2.9" + dependencies: + "@emnapi/core": "npm:^1.4.0" + "@emnapi/runtime": "npm:^1.4.0" + "@tybys/wasm-util": "npm:^0.9.0" + checksum: 10c0/1cc40b854b255f84e12ade634456ba489f6bf90659ef8164a16823c515c294024c96ee2bb81ab51f35493ba9496f62842b960f915dbdcdc1791f221f989e9e59 + languageName: node + linkType: hard + +"@noble/curves@npm:1.8.2, @noble/curves@npm:~1.8.1": + version: 1.8.2 + resolution: "@noble/curves@npm:1.8.2" dependencies: - "@noble/hashes": "npm:1.7.1" - checksum: 10c0/84902c7af93338373a95d833f77981113e81c48d4bec78f22f63f1f7fdd893bc1d3d7a3ee78f01b9a8ad3dec812a1232866bf2ccbeb2b1560492e5e7d690ab1f + "@noble/hashes": "npm:1.7.2" + checksum: 10c0/e7ef119b114681d6b7530b29a21f9bbea6fa6973bc369167da2158d05054cc6e6dbfb636ba89fad7707abacc150de30188b33192f94513911b24bdb87af50bbd + languageName: node + linkType: hard + +"@noble/curves@npm:^1.6.0, @noble/curves@npm:~1.9.0": + version: 1.9.0 + resolution: "@noble/curves@npm:1.9.0" + dependencies: + "@noble/hashes": "npm:1.8.0" + checksum: 10c0/a76d57444b4d136f43363eb19229d990df15a00fb0e2efbf08a7a4cbaee655f73e46eb29b6ad07b8749be5f7b890c0a7a06a19f4324a4b149b06b3da1def8593 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.7.2, @noble/hashes@npm:~1.7.1": + version: 1.7.2 + resolution: "@noble/hashes@npm:1.7.2" + checksum: 10c0/b1411eab3c0b6691d847e9394fe7f1fcd45eeb037547c8f97e7d03c5068a499b4aef188e8e717eee67389dca4fee17d69d7e0f58af6c092567b0b76359b114b2 languageName: node linkType: hard -"@noble/hashes@npm:1.7.1, @noble/hashes@npm:^1.5.0, @noble/hashes@npm:~1.7.1": - version: 1.7.1 - resolution: "@noble/hashes@npm:1.7.1" - checksum: 10c0/2f8ec0338ccc92b576a0f5c16ab9c017a3a494062f1fbb569ae641c5e7eab32072f9081acaa96b5048c0898f972916c818ea63cbedda707886a4b5ffcfbf94e3 +"@noble/hashes@npm:1.8.0, @noble/hashes@npm:^1.5.0, @noble/hashes@npm:~1.8.0": + version: 1.8.0 + resolution: "@noble/hashes@npm:1.8.0" + checksum: 10c0/06a0b52c81a6fa7f04d67762e08b2c476a00285858150caeaaff4037356dd5e119f45b2a530f638b77a5eeca013168ec1b655db41bae3236cb2e9d511484fc77 languageName: node linkType: hard @@ -1088,171 +2183,872 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.34.9" +"@rollup/rollup-android-arm-eabi@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.40.2" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-android-arm64@npm:4.34.9" +"@rollup/rollup-android-arm64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-android-arm64@npm:4.40.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-darwin-arm64@npm:4.34.9" +"@rollup/rollup-darwin-arm64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.40.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-darwin-x64@npm:4.34.9" +"@rollup/rollup-darwin-x64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.40.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.34.9" +"@rollup/rollup-freebsd-arm64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.40.2" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-freebsd-x64@npm:4.34.9" +"@rollup/rollup-freebsd-x64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-freebsd-x64@npm:4.40.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.34.9" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.40.2" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.34.9" +"@rollup/rollup-linux-arm-musleabihf@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.40.2" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.34.9" +"@rollup/rollup-linux-arm64-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.40.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.34.9" +"@rollup/rollup-linux-arm64-musl@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.40.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.34.9" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.40.2" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.34.9" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.2" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.34.9" +"@rollup/rollup-linux-riscv64-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.40.2" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.34.9" +"@rollup/rollup-linux-riscv64-musl@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.40.2" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.40.2" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.34.9" +"@rollup/rollup-linux-x64-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.40.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.34.9" +"@rollup/rollup-linux-x64-musl@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.40.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.34.9" - conditions: os=win32 & cpu=arm64 +"@rollup/rollup-win32-arm64-msvc@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.40.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.40.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.40.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rsksmart/rsk-utils@npm:^2.0.5": + version: 2.0.5 + resolution: "@rsksmart/rsk-utils@npm:2.0.5" + dependencies: + keccak: "npm:^3.0.4" + checksum: 10c0/0279034f67150eb2a01c16e6618c176dcd52c8e2693c7436f81356ffd0c876dd5cdda36aef5e05c036613bde69e833b2749c3bdd5f4464967b1e1d54dd772bb7 + languageName: node + linkType: hard + +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b + languageName: node + linkType: hard + +"@scure/base@npm:~1.2.2, @scure/base@npm:~1.2.4, @scure/base@npm:~1.2.5": + version: 1.2.5 + resolution: "@scure/base@npm:1.2.5" + checksum: 10c0/078928dbcdd21a037b273b81b8b0bd93af8a325e2ffd535b7ccaadd48ee3c15bab600ec2920a209fca0910abc792cca9b01d3336b472405c407440e6c0aa8bd6 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.6.2": + version: 1.6.2 + resolution: "@scure/bip32@npm:1.6.2" + dependencies: + "@noble/curves": "npm:~1.8.1" + "@noble/hashes": "npm:~1.7.1" + "@scure/base": "npm:~1.2.2" + checksum: 10c0/a0abd62d1fe34b4d90b84feb25fa064ad452fd51be9fd7ea3dcd376059c0e8d08d4fe454099030f43fb91a1bee85cd955f093f221bbc522178919f779fbe565c + languageName: node + linkType: hard + +"@scure/bip32@npm:^1.5.0": + version: 1.7.0 + resolution: "@scure/bip32@npm:1.7.0" + dependencies: + "@noble/curves": "npm:~1.9.0" + "@noble/hashes": "npm:~1.8.0" + "@scure/base": "npm:~1.2.5" + checksum: 10c0/e3d4c1f207df16abcd79babcdb74d36f89bdafc90bf02218a5140cc5cba25821d80d42957c6705f35210cc5769714ea9501d4ae34732cdd1c26c9ff182a219f7 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.5.4": + version: 1.5.4 + resolution: "@scure/bip39@npm:1.5.4" + dependencies: + "@noble/hashes": "npm:~1.7.1" + "@scure/base": "npm:~1.2.4" + checksum: 10c0/0b398b8335b624c16dfb0d81b0e79f80f098bb98e327f1d68ace56636e0c56cc09a240ed3ba9c1187573758242ade7000260d65c15d3a6bcd95ac9cb284b450a + languageName: node + linkType: hard + +"@scure/bip39@npm:^1.4.0": + version: 1.6.0 + resolution: "@scure/bip39@npm:1.6.0" + dependencies: + "@noble/hashes": "npm:~1.8.0" + "@scure/base": "npm:~1.2.5" + checksum: 10c0/73a54b5566a50a3f8348a5cfd74d2092efeefc485efbed83d7a7374ffd9a75defddf446e8e5ea0385e4adb49a94b8ae83c5bad3e16333af400e932f7da3aaff8 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0, @sinonjs/commons@npm:^3.0.1": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: "npm:4.0.8" + checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:11.2.2": + version: 11.2.2 + resolution: "@sinonjs/fake-timers@npm:11.2.2" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + checksum: 10c0/a4218efa6fdafda622d02d4c0a6ab7df3641cb038bb0b14f0a3ee56f50c95aab4f1ab2d7798ce928b40c6fc1839465a558c9393a77e4dca879e1b2f8d60d8136 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + checksum: 10c0/2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^13.0.1": + version: 13.0.5 + resolution: "@sinonjs/fake-timers@npm:13.0.5" + dependencies: + "@sinonjs/commons": "npm:^3.0.1" + checksum: 10c0/a707476efd523d2138ef6bba916c83c4a377a8372ef04fad87499458af9f01afc58f4f245c5fd062793d6d70587309330c6f96947b5bd5697961c18004dc3e26 + languageName: node + linkType: hard + +"@sinonjs/samsam@npm:^8.0.0": + version: 8.0.2 + resolution: "@sinonjs/samsam@npm:8.0.2" + dependencies: + "@sinonjs/commons": "npm:^3.0.1" + lodash.get: "npm:^4.4.2" + type-detect: "npm:^4.1.0" + checksum: 10c0/31d74c415040161f2963a202d7f866bedbb5a9b522a74b08a17086c15a75c3ef2893eecebb0c65a7b1603ef4ebdf83fa73cbe384b4cd679944918ed833200443 + languageName: node + linkType: hard + +"@sinonjs/text-encoding@npm:^0.7.3": + version: 0.7.3 + resolution: "@sinonjs/text-encoding@npm:0.7.3" + checksum: 10c0/b112d1e97af7f99fbdc63c7dbcd35d6a60764dfec85cfcfff532e55cce8ecd8453f9fa2139e70aea47142c940fd90cd201d19f370b9a0141700d8a6de3116815 + languageName: node + linkType: hard + +"@slack/logger@npm:^4.0.0": + version: 4.0.0 + resolution: "@slack/logger@npm:4.0.0" + dependencies: + "@types/node": "npm:>=18.0.0" + checksum: 10c0/32c4b1f3b4a832a506b7661855d1da88eae307334563916b7513748171545a120abaaca5146a8beed1130b44c9e92f37511010b1205710baa778f5626cc2f7fa + languageName: node + linkType: hard + +"@slack/types@npm:^2.14.0, @slack/types@npm:^2.9.0": + version: 2.14.0 + resolution: "@slack/types@npm:2.14.0" + checksum: 10c0/2d45b36ee128e202b8b864fa35f5752c9f811a433d598461de83c47bf5fc5c1f45678825b4185007d8151ebb8b0ce00e6541780f4f3af5698855aebfc6550fb8 + languageName: node + linkType: hard + +"@slack/web-api@npm:^7.8.0": + version: 7.9.1 + resolution: "@slack/web-api@npm:7.9.1" + dependencies: + "@slack/logger": "npm:^4.0.0" + "@slack/types": "npm:^2.9.0" + "@types/node": "npm:>=18.0.0" + "@types/retry": "npm:0.12.0" + axios: "npm:^1.8.3" + eventemitter3: "npm:^5.0.1" + form-data: "npm:^4.0.0" + is-electron: "npm:2.2.2" + is-stream: "npm:^2" + p-queue: "npm:^6" + p-retry: "npm:^4" + retry: "npm:^0.13.1" + checksum: 10c0/76d5d935518f3c2ab9eea720c0736f5722ac6c3244f4b1ba29aa3f3525803ecc00662209c8a1cce2c2a94ec71d607c05f5f6a24456dd3e60fa65b3fe0c7b9820 + languageName: node + linkType: hard + +"@smithy/abort-controller@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/abort-controller@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/d5647478fa61d5d1cf3ac8fe5b91955c679ecf48e0d71638c0ce908fbcc87f166e42722d181f33ae3c37761de89e48c5eecf620f6fd0e99cd86edbb8365dd38d + languageName: node + linkType: hard + +"@smithy/config-resolver@npm:^4.1.2": + version: 4.1.2 + resolution: "@smithy/config-resolver@npm:4.1.2" + dependencies: + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-config-provider": "npm:^4.0.0" + "@smithy/util-middleware": "npm:^4.0.2" + tslib: "npm:^2.6.2" + checksum: 10c0/fb7b0c027d7b200807b8a3dc023be56602fcf7203b2d2e1acc2aa6cd47b3317f9d54a90c4ff133836a2d0bc79b10d70d5d3b6356ac40a53d58e422921fb8b524 + languageName: node + linkType: hard + +"@smithy/core@npm:^3.3.1, @smithy/core@npm:^3.3.2": + version: 3.3.2 + resolution: "@smithy/core@npm:3.3.2" + dependencies: + "@smithy/middleware-serde": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-middleware": "npm:^4.0.2" + "@smithy/util-stream": "npm:^4.2.0" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/c30d9af45863e3bb1dbb32d4b30ce794d56d309f1b76dffd87c21519645c109f830d2e6030b3c431bf578ee71bab7abd535b1317379094263caff8d85e090f9c + languageName: node + linkType: hard + +"@smithy/credential-provider-imds@npm:^4.0.2, @smithy/credential-provider-imds@npm:^4.0.4": + version: 4.0.4 + resolution: "@smithy/credential-provider-imds@npm:4.0.4" + dependencies: + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + "@smithy/url-parser": "npm:^4.0.2" + tslib: "npm:^2.6.2" + checksum: 10c0/5200503b7879bbe8beb959713c54b4e23788a2f2823a7b27d8332b7c3864dbcbadda8cbc4adfdfd4b74c0423ce153ff5fb51701197748636c4cc1c35cf8f7808 + languageName: node + linkType: hard + +"@smithy/fetch-http-handler@npm:^5.0.2": + version: 5.0.2 + resolution: "@smithy/fetch-http-handler@npm:5.0.2" + dependencies: + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/querystring-builder": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-base64": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/3bf84a1fe93c07558a5ba520ab0aca62518c13659d5794094764aaef95acfbcf58ba938c51b9269c485304fdbe7353eb3cd37d7e4c57863d7c50478a9e3ff4fc + languageName: node + linkType: hard + +"@smithy/hash-node@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/hash-node@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + "@smithy/util-buffer-from": "npm:^4.0.0" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/aaec3fb2146d4347e97067de4dd91759de9d0254d03e234dcced1cbd52cf8b3a77067d571bd5767cb6295da7aa7261b87a789bd597cbc45a380cd90bb47f3490 + languageName: node + linkType: hard + +"@smithy/invalid-dependency@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/invalid-dependency@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/f0b884ba25c371d3d3f507aebc24e598e23edeadf0a74dfd7092fc49c496cd427ab517454ebde454b2a05916719e01aa98f34603a5396455cc2dc009ad8799e8 + languageName: node + linkType: hard + +"@smithy/is-array-buffer@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/is-array-buffer@npm:2.2.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/2f2523cd8cc4538131e408eb31664983fecb0c8724956788b015aaf3ab85a0c976b50f4f09b176f1ed7bbe79f3edf80743be7a80a11f22cd9ce1285d77161aaf + languageName: node + linkType: hard + +"@smithy/is-array-buffer@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/is-array-buffer@npm:4.0.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/ae393fbd5944d710443cd5dd225d1178ef7fb5d6259c14f3e1316ec75e401bda6cf86f7eb98bfd38e5ed76e664b810426a5756b916702cbd418f0933e15e7a3b + languageName: node + linkType: hard + +"@smithy/middleware-content-length@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/middleware-content-length@npm:4.0.2" + dependencies: + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/4ab343b68a15cf461f3b5996460a0730463975d9da739cf40cfb5993794023269a8bd857366f855844290fabb2b340abb6ff473cec4bfd3d6653a64f17e00c4a + languageName: node + linkType: hard + +"@smithy/middleware-endpoint@npm:^4.1.4, @smithy/middleware-endpoint@npm:^4.1.5": + version: 4.1.5 + resolution: "@smithy/middleware-endpoint@npm:4.1.5" + dependencies: + "@smithy/core": "npm:^3.3.2" + "@smithy/middleware-serde": "npm:^4.0.4" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/shared-ini-file-loader": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + "@smithy/url-parser": "npm:^4.0.2" + "@smithy/util-middleware": "npm:^4.0.2" + tslib: "npm:^2.6.2" + checksum: 10c0/8e7e9a6573fd19e71fcba8c8d85ed905bee3191063ca17b4d6edfd7538e70c10d3c9e76915d82ae8c06bb8dcd05af1b8f15788a700a0d5c3d7c47e6cde677ca1 + languageName: node + linkType: hard + +"@smithy/middleware-retry@npm:^4.1.5": + version: 4.1.6 + resolution: "@smithy/middleware-retry@npm:4.1.6" + dependencies: + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/service-error-classification": "npm:^4.0.3" + "@smithy/smithy-client": "npm:^4.2.5" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-middleware": "npm:^4.0.2" + "@smithy/util-retry": "npm:^4.0.3" + tslib: "npm:^2.6.2" + uuid: "npm:^9.0.1" + checksum: 10c0/1cd5eb2ad50bc123f461cce04ca42f2ded7572a1f0a0302c1c148c1a1269199079a1c55ca7669b49cbbbe2c44d244c5501a8fb6c77efdc9974bf303261d89854 + languageName: node + linkType: hard + +"@smithy/middleware-serde@npm:^4.0.3, @smithy/middleware-serde@npm:^4.0.4": + version: 4.0.4 + resolution: "@smithy/middleware-serde@npm:4.0.4" + dependencies: + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/bb6a71ff09ee3fc1d89149684f20758a37c01de60d2abeb740348d3d36127340f904868a6d80e79a81a010a9aa39f2138ad2571f28fd3da2ff3046aae15a5b1f + languageName: node + linkType: hard + +"@smithy/middleware-stack@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/middleware-stack@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/ef94882966431729f7a7bddf8206b6495d67736b1f26fd88d6d6c283a96f9fffd12632ed7352e5f060f17d3ee1845a9a9da1247c26e4c46ff7011aac20b4aacc + languageName: node + linkType: hard + +"@smithy/node-config-provider@npm:^4.1.1": + version: 4.1.1 + resolution: "@smithy/node-config-provider@npm:4.1.1" + dependencies: + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/shared-ini-file-loader": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/05db1a08ac866ad2b5fd28da81b081b0711b03057af18b7e08d3b41942b710ad2f0cf762b1806d85246fa12fee3f063eeb56d067b7517c12f2fe9cd7a54d6554 + languageName: node + linkType: hard + +"@smithy/node-http-handler@npm:^4.0.4": + version: 4.0.4 + resolution: "@smithy/node-http-handler@npm:4.0.4" + dependencies: + "@smithy/abort-controller": "npm:^4.0.2" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/querystring-builder": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/fb621c6ebcf012a99fc442d82965ca18d752f66be6f937a400e3b4e3feef1c259c028c27df9e78fc9ac7c40679b25276cbaa8d7ab82fd111bda64003ef831358 + languageName: node + linkType: hard + +"@smithy/property-provider@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/property-provider@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/6effc5ef7895eb4802c6b4c704d5616f50cd0c376da1644176d3aef71396cb65f9df20f4dd85c8301a9fa24f8ac53601e0634463f4364f0d867928efa5eb5e3d + languageName: node + linkType: hard + +"@smithy/protocol-http@npm:^5.1.0": + version: 5.1.0 + resolution: "@smithy/protocol-http@npm:5.1.0" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/bb2f600853c0282630f5f32286a07a37294a57dbbec25ea0c6fbb6be32341b1be83e37933c2e3540e513c90dcb08f492bcb05980cde0b92b083e67ade6d56eb0 + languageName: node + linkType: hard + +"@smithy/querystring-builder@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/querystring-builder@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + "@smithy/util-uri-escape": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/2ae27840e21982926182df809872e07d6b10b2fd93b58e02fa3f9588de23d333ddf02f0f3517de8a02a949489733bdcecb8c847980f8fb12ce1f8c3b6d127e86 + languageName: node + linkType: hard + +"@smithy/querystring-parser@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/querystring-parser@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/e6115fce0a07b1509f407cd3eca371cce1d9c09c7e3bd9156e35506b8ab1100f9864fb8779d4dbe0169501af23f062ebc2176afc012e9132e917781cd11a2f82 + languageName: node + linkType: hard + +"@smithy/service-error-classification@npm:^4.0.3": + version: 4.0.3 + resolution: "@smithy/service-error-classification@npm:4.0.3" + dependencies: + "@smithy/types": "npm:^4.2.0" + checksum: 10c0/bc8a1239f2176fc0e980624e189871b309b0d61c5652022df236f34cd96e97f15719fd44c9d74cf2e1b632f5620a0fcccc6db77dbf9452bcec4e427456d96563 + languageName: node + linkType: hard + +"@smithy/shared-ini-file-loader@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/shared-ini-file-loader@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/1e3d4921b6efbd1aa448a775dcb9a490d0221dd0a4fee434c5d83376de478013b3ad06d58a3d52db781124d4a53bd289fffcdb52eabffe9de152b0010332cee2 + languageName: node + linkType: hard + +"@smithy/signature-v4@npm:^5.1.0": + version: 5.1.0 + resolution: "@smithy/signature-v4@npm:5.1.0" + dependencies: + "@smithy/is-array-buffer": "npm:^4.0.0" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-hex-encoding": "npm:^4.0.0" + "@smithy/util-middleware": "npm:^4.0.2" + "@smithy/util-uri-escape": "npm:^4.0.0" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/7f3aed4999b47f04485846a90a08d0863c8bf4201a38616faf4bcb3166892a5b2946e7d0f1d5dc068b667913713873e21ab8374d60c1ff02828972d8c9201282 + languageName: node + linkType: hard + +"@smithy/smithy-client@npm:^4.2.4, @smithy/smithy-client@npm:^4.2.5": + version: 4.2.5 + resolution: "@smithy/smithy-client@npm:4.2.5" + dependencies: + "@smithy/core": "npm:^3.3.2" + "@smithy/middleware-endpoint": "npm:^4.1.5" + "@smithy/middleware-stack": "npm:^4.0.2" + "@smithy/protocol-http": "npm:^5.1.0" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-stream": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/9a95d3d14a224e57ca2af31de07026944cda9ea61176f91e1156e776e1195dfd1dbc062d97febb09253a446fc63aecb162af4a2566555117bf0581c1f65ac7f8 + languageName: node + linkType: hard + +"@smithy/types@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/types@npm:4.2.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/a8bd92c7e548bcbe7be211152de041ec164cfcc857d7574a87b1667c38827e5616563c13bd38a1d44b88bbfa3ee8f591dc597d4e2d50f3bc74e320ea82d7c49e + languageName: node + linkType: hard + +"@smithy/url-parser@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/url-parser@npm:4.0.2" + dependencies: + "@smithy/querystring-parser": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/3da40fc18871c145bcbbb036a3d767ae113b954e94c745770f268dc877378cbafa6fc06759ea5a5e5c159a88e7331739b35b69f4d110ba0bd04b2d0923443f32 + languageName: node + linkType: hard + +"@smithy/util-base64@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-base64@npm:4.0.0" + dependencies: + "@smithy/util-buffer-from": "npm:^4.0.0" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/ad18ec66cc357c189eef358d96876b114faf7086b13e47e009b265d0ff80cec046052500489c183957b3a036768409acdd1a373e01074cc002ca6983f780cffc + languageName: node + linkType: hard + +"@smithy/util-body-length-browser@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-body-length-browser@npm:4.0.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/574a10934024a86556e9dcde1a9776170284326c3dfcc034afa128cc5a33c1c8179fca9cfb622ef8be5f2004316cc3f427badccceb943e829105536ec26306d9 + languageName: node + linkType: hard + +"@smithy/util-body-length-node@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-body-length-node@npm:4.0.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/e91fd3816767606c5f786166ada26440457fceb60f96653b3d624dcf762a8c650e513c275ff3f647cb081c63c283cc178853a7ed9aa224abc8ece4eeeef7a1dd + languageName: node + linkType: hard + +"@smithy/util-buffer-from@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-buffer-from@npm:2.2.0" + dependencies: + "@smithy/is-array-buffer": "npm:^2.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/223d6a508b52ff236eea01cddc062b7652d859dd01d457a4e50365af3de1e24a05f756e19433f6ccf1538544076b4215469e21a4ea83dc1d58d829725b0dbc5a + languageName: node + linkType: hard + +"@smithy/util-buffer-from@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-buffer-from@npm:4.0.0" + dependencies: + "@smithy/is-array-buffer": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/be7cd33b6cb91503982b297716251e67cdca02819a15797632091cadab2dc0b4a147fff0709a0aa9bbc0b82a2644a7ed7c8afdd2194d5093cee2e9605b3a9f6f + languageName: node + linkType: hard + +"@smithy/util-config-provider@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-config-provider@npm:4.0.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/cd9498d5f77a73aadd575084bcb22d2bb5945bac4605d605d36f2efe3f165f2b60f4dc88b7a62c2ed082ffa4b2c2f19621d0859f18399edbc2b5988d92e4649f + languageName: node + linkType: hard + +"@smithy/util-defaults-mode-browser@npm:^4.0.12": + version: 4.0.13 + resolution: "@smithy/util-defaults-mode-browser@npm:4.0.13" + dependencies: + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/smithy-client": "npm:^4.2.5" + "@smithy/types": "npm:^4.2.0" + bowser: "npm:^2.11.0" + tslib: "npm:^2.6.2" + checksum: 10c0/9b96396b0ce0a68d5927d332e1c13bed0bc05e5e9f206569e4617259f18b0797275a91a1a62c72ac2d7b4fbf23a6b31cce3211bdbee88e9d6833a4181e4bba54 + languageName: node + linkType: hard + +"@smithy/util-defaults-mode-node@npm:^4.0.12": + version: 4.0.13 + resolution: "@smithy/util-defaults-mode-node@npm:4.0.13" + dependencies: + "@smithy/config-resolver": "npm:^4.1.2" + "@smithy/credential-provider-imds": "npm:^4.0.4" + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/property-provider": "npm:^4.0.2" + "@smithy/smithy-client": "npm:^4.2.5" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/b26d7b2fe4795b3e001d34a4946ec796470b67cb1328e4014e55aab8d12eb2f017f164645b191e2431374f99e9bb0c39db74890046147a4a1e417c64e8411a44 + languageName: node + linkType: hard + +"@smithy/util-endpoints@npm:^3.0.4": + version: 3.0.4 + resolution: "@smithy/util-endpoints@npm:3.0.4" + dependencies: + "@smithy/node-config-provider": "npm:^4.1.1" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/76c980e42da9d113e768d2638c1cfcb3e90dacb24cd47a443a97f3a70cc13bc56ba27af79465fa8dbf561fb2f028c2e19bed4e5296ace4f9e6b2082ee0a7ae1f + languageName: node + linkType: hard + +"@smithy/util-hex-encoding@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-hex-encoding@npm:4.0.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/70dbb3aa1a79aff3329d07a66411ff26398df338bdd8a6d077b438231afe3dc86d9a7022204baddecd8bc633f059d5c841fa916d81dd7447ea79b64148f386d2 + languageName: node + linkType: hard + +"@smithy/util-middleware@npm:^4.0.2": + version: 4.0.2 + resolution: "@smithy/util-middleware@npm:4.0.2" + dependencies: + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/18c3882c94f1b1bbb3825c30d1e41ae77a8da3dcd93ebbf1c486f34d5db9e06431789aef54d1b1fbb0424b115fc1e1ae17d27efe4af4277173d901a76147fef8 + languageName: node + linkType: hard + +"@smithy/util-retry@npm:^4.0.3": + version: 4.0.3 + resolution: "@smithy/util-retry@npm:4.0.3" + dependencies: + "@smithy/service-error-classification": "npm:^4.0.3" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/a00c47182efed65f3a86afc28fef69ae1e083965cc69f18bc82fb86e23179c3d083639c4819c97a625924b207dc1efaf7b68cf52e1c030f7c9a9625bbea215e0 + languageName: node + linkType: hard + +"@smithy/util-stream@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/util-stream@npm:4.2.0" + dependencies: + "@smithy/fetch-http-handler": "npm:^5.0.2" + "@smithy/node-http-handler": "npm:^4.0.4" + "@smithy/types": "npm:^4.2.0" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-buffer-from": "npm:^4.0.0" + "@smithy/util-hex-encoding": "npm:^4.0.0" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/52449a6ec68a483fdeef816128c923c744e278f6cf4d5b6fbe50e29fa8b6e5813df26221389f22bce143deb91f047ac56f87db85306908c5d0b87460e162bf63 + languageName: node + linkType: hard + +"@smithy/util-uri-escape@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-uri-escape@npm:4.0.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/23984624060756adba8aa4ab1693fe6b387ee5064d8ec4dfd39bb5908c4ee8b9c3f2dc755da9b07505d8e3ce1338c1867abfa74158931e4728bf3cfcf2c05c3d + languageName: node + linkType: hard + +"@smithy/util-utf8@npm:^2.0.0": + version: 2.3.0 + resolution: "@smithy/util-utf8@npm:2.3.0" + dependencies: + "@smithy/util-buffer-from": "npm:^2.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/e18840c58cc507ca57fdd624302aefd13337ee982754c9aa688463ffcae598c08461e8620e9852a424d662ffa948fc64919e852508028d09e89ced459bd506ab + languageName: node + linkType: hard + +"@smithy/util-utf8@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-utf8@npm:4.0.0" + dependencies: + "@smithy/util-buffer-from": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/28a5a5372cbf0b3d2e32dd16f79b04c2aec6f704cf13789db922e9686fde38dde0171491cfa4c2c201595d54752a319faaeeed3c325329610887694431e28c98 + languageName: node + linkType: hard + +"@smithy/util-waiter@npm:^4.0.3": + version: 4.0.3 + resolution: "@smithy/util-waiter@npm:4.0.3" + dependencies: + "@smithy/abort-controller": "npm:^4.0.2" + "@smithy/types": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/0ca992cd85719b367655943df08e8f7f0dd0f4ffe335809de7ed4c133ee2db5b58a2661cfc43040cf91512ef21783c8302fc2352f95910ecf3f0a50b0e32c2ff + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.34.9" - conditions: os=win32 & cpu=ia32 +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.34.9": - version: 4.34.9 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.34.9" - conditions: os=win32 & cpu=x64 +"@tybys/wasm-util@npm:^0.9.0": + version: 0.9.0 + resolution: "@tybys/wasm-util@npm:0.9.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d languageName: node linkType: hard -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b +"@types/babel__core@npm:^7.1.14": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff languageName: node linkType: hard -"@scure/base@npm:~1.2.2, @scure/base@npm:~1.2.4": - version: 1.2.4 - resolution: "@scure/base@npm:1.2.4" - checksum: 10c0/469c8aee80d6d6973e1aac6184befa04568f1b4016e40c889025f4a721575db9c1ca0c2ead80613896cce929392740322a18da585a427f157157e797dc0a42a9 +"@types/babel__generator@npm:*": + version: 7.27.0 + resolution: "@types/babel__generator@npm:7.27.0" + dependencies: + "@babel/types": "npm:^7.0.0" + checksum: 10c0/9f9e959a8792df208a9d048092fda7e1858bddc95c6314857a8211a99e20e6830bdeb572e3587ae8be5429e37f2a96fcf222a9f53ad232f5537764c9e13a2bbd languageName: node linkType: hard -"@scure/bip32@npm:1.6.2, @scure/bip32@npm:^1.5.0": - version: 1.6.2 - resolution: "@scure/bip32@npm:1.6.2" +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" dependencies: - "@noble/curves": "npm:~1.8.1" - "@noble/hashes": "npm:~1.7.1" - "@scure/base": "npm:~1.2.2" - checksum: 10c0/a0abd62d1fe34b4d90b84feb25fa064ad452fd51be9fd7ea3dcd376059c0e8d08d4fe454099030f43fb91a1bee85cd955f093f221bbc522178919f779fbe565c + "@babel/parser": "npm:^7.1.0" + "@babel/types": "npm:^7.0.0" + checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b languageName: node linkType: hard -"@scure/bip39@npm:1.5.4, @scure/bip39@npm:^1.4.0": - version: 1.5.4 - resolution: "@scure/bip39@npm:1.5.4" +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.7 + resolution: "@types/babel__traverse@npm:7.20.7" dependencies: - "@noble/hashes": "npm:~1.7.1" - "@scure/base": "npm:~1.2.4" - checksum: 10c0/0b398b8335b624c16dfb0d81b0e79f80f098bb98e327f1d68ace56636e0c56cc09a240ed3ba9c1187573758242ade7000260d65c15d3a6bcd95ac9cb284b450a + "@babel/types": "npm:^7.20.7" + checksum: 10c0/5386f0af44f8746b063b87418f06129a814e16bb2686965a575e9d7376b360b088b89177778d8c426012abc43dd1a2d8ec3218bfc382280c898682746ce2ffbd languageName: node linkType: hard @@ -1272,10 +3068,61 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a +"@types/estree@npm:1.0.7, @types/estree@npm:^1.0.0": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c + languageName: node + linkType: hard + +"@types/glob-to-regexp@npm:^0.4.4": + version: 0.4.4 + resolution: "@types/glob-to-regexp@npm:0.4.4" + checksum: 10c0/7288ff853850d8302a8770a3698b187fc3970ad12ee6427f0b3758a3e7a0ebb0bd993abc6ebaaa979d09695b4194157d2bfaa7601b0fb9ed72c688b4c1298b88 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/235d2fc69741448e853333b7c3d1180a966dd2b8972c8cbcd6b2a0c6cd7f8d582ab2b8e58219dbc62cce8f1b40aa317ff78ea2201cdd8249da5025adebed6f0b + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "npm:*" + checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.14": + version: 29.5.14 + resolution: "@types/jest@npm:29.5.14" + dependencies: + expect: "npm:^29.0.0" + pretty-format: "npm:^29.0.0" + checksum: 10c0/18e0712d818890db8a8dab3d91e9ea9f7f19e3f83c2e50b312f557017dc81466207a71f3ed79cf4428e813ba939954fa26ffa0a9a7f153181ba174581b1c2aed languageName: node linkType: hard @@ -1293,19 +3140,49 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^22.13.5": - version: 22.13.9 - resolution: "@types/node@npm:22.13.9" +"@types/node@npm:*, @types/node@npm:>=18.0.0, @types/node@npm:^22.13.5": + version: 22.15.17 + resolution: "@types/node@npm:22.15.17" dependencies: - undici-types: "npm:~6.20.0" - checksum: 10c0/eb6acd04169a076631dcaab712128d492cd17a1b3f10daae4a377f3d439c860c3cd3e32f4ef221671f56183b976ac7c4089f4193457314a88675ead4663438a4 + undici-types: "npm:~6.21.0" + checksum: 10c0/fb92aa10b628683c5b965749f955bc2322485ecb0ea6c2f4cae5f2c7537a16834607e67083a9e9281faaae8d7dee9ada8d6a5c0de9a52c17d82912ef00c0fdd4 + languageName: node + linkType: hard + +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 10c0/7c5c9086369826f569b83a4683661557cab1361bac0897a1cefa1a915ff739acd10ca0d62b01071046fe3f5a3f7f2aec80785fe283b75602dc6726781ea3e328 languageName: node linkType: hard "@types/semver@npm:^7.5.0": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa + version: 7.7.0 + resolution: "@types/semver@npm:7.7.0" + checksum: 10c0/6b5f65f647474338abbd6ee91a6bbab434662ddb8fe39464edcbcfc96484d388baad9eb506dff217b6fc1727a88894930eb1f308617161ac0f376fe06be4e1ee + languageName: node + linkType: hard + +"@types/sinon@npm:^17.0.3": + version: 17.0.4 + resolution: "@types/sinon@npm:17.0.4" + dependencies: + "@types/sinonjs__fake-timers": "npm:*" + checksum: 10c0/7c67ae1050d98a86d8dd771f0a764e97adb9d54812bf3b001195f8cfaa1e2bdfc725d5b970b91e7b0bb6b7c1ca209f47993f2c6f84f1f868313c37441313ca5b + languageName: node + linkType: hard + +"@types/sinonjs__fake-timers@npm:*": + version: 8.1.5 + resolution: "@types/sinonjs__fake-timers@npm:8.1.5" + checksum: 10c0/2b8bdc246365518fc1b08f5720445093cce586183acca19a560be6ef81f824bd9a96c090e462f622af4d206406dadf2033c5daf99a51c1096da6494e5c8dc32e + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c languageName: node linkType: hard @@ -1316,6 +3193,13 @@ __metadata: languageName: node linkType: hard +"@types/tmp@npm:^0.2.6": + version: 0.2.6 + resolution: "@types/tmp@npm:0.2.6" + checksum: 10c0/a11bfa2cd8eaa6c5d62f62a3569192d7a2c28efdc5c17af0b0551db85816b2afc8156f3ca15ac76f0b142ae1403f04f44279871424233a1f3390b2e5fc828cd0 + languageName: node + linkType: hard + "@types/tough-cookie@npm:^4.0.5": version: 4.0.5 resolution: "@types/tough-cookie@npm:4.0.5" @@ -1323,6 +3207,29 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^9.0.1": + version: 9.0.8 + resolution: "@types/uuid@npm:9.0.8" + checksum: 10c0/b411b93054cb1d4361919579ef3508a1f12bf15b5fdd97337d3d351bece6c921b52b6daeef89b62340fd73fd60da407878432a1af777f40648cbe53a01723489 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 10c0/d16937d7ac30dff697801c3d6f235be2166df42e4a88bf730fa6dc09201de3727c0a9500c59a672122313341de5f24e45ee0ff579c08ce91928e519090b7906b + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^6.7.2": version: 6.21.0 resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" @@ -1453,6 +3360,127 @@ __metadata: languageName: node linkType: hard +"@unrs/resolver-binding-darwin-arm64@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.7.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-x64@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.7.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-freebsd-x64@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.7.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-musl@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.7.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.2" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.2" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.2" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-gnu@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.7.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-musl@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.7.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-wasm32-wasi@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.7.2" + dependencies: + "@napi-rs/wasm-runtime": "npm:^0.2.9" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-x64-msvc@npm:1.7.2": + version: 1.7.2 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.7.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@vitest/expect@npm:2.1.9": version: 2.1.9 resolution: "@vitest/expect@npm:2.1.9" @@ -1465,6 +3493,18 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:>1.6.0": + version: 3.1.3 + resolution: "@vitest/expect@npm:3.1.3" + dependencies: + "@vitest/spy": "npm:3.1.3" + "@vitest/utils": "npm:3.1.3" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/3a61e5526ed57491c9c230cb592849a2c15e6b4376bfaec4f623ac75fdcf5c24c322949cfb5362136fc8be5eb19be88d094917ea5f700bd3da0ea0c68ee4a8d9 + languageName: node + linkType: hard + "@vitest/mocker@npm:2.1.9": version: 2.1.9 resolution: "@vitest/mocker@npm:2.1.9" @@ -1493,6 +3533,15 @@ __metadata: languageName: node linkType: hard +"@vitest/pretty-format@npm:3.1.3": + version: 3.1.3 + resolution: "@vitest/pretty-format@npm:3.1.3" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/eba164d2c0b2babbcf6bb054da3b326d08cc3a0289ade3c64309bfe5e7c3124cd4d45a60b2f673cf4f5b3a97381fb7af7009780a5d9665afdf7f8263fa34c068 + languageName: node + linkType: hard + "@vitest/runner@npm:2.1.9": version: 2.1.9 resolution: "@vitest/runner@npm:2.1.9" @@ -1523,6 +3572,15 @@ __metadata: languageName: node linkType: hard +"@vitest/spy@npm:3.1.3": + version: 3.1.3 + resolution: "@vitest/spy@npm:3.1.3" + dependencies: + tinyspy: "npm:^3.0.2" + checksum: 10c0/6a8c187069827c56f3492f212ccf76c797fe52392849948af736a0f579e4533fa91041d829e2574b252af4aaadec066ca0714450d6457b31526153978bc55192 + languageName: node + linkType: hard + "@vitest/utils@npm:2.1.9": version: 2.1.9 resolution: "@vitest/utils@npm:2.1.9" @@ -1534,6 +3592,17 @@ __metadata: languageName: node linkType: hard +"@vitest/utils@npm:3.1.3": + version: 3.1.3 + resolution: "@vitest/utils@npm:3.1.3" + dependencies: + "@vitest/pretty-format": "npm:3.1.3" + loupe: "npm:^3.1.3" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/1c4ea711b87a8b2c7dc2da91f20427dccc34c0d1d0e81b8142780d24b6caa3c724e8287f7e01e9e875262b6bb912d55711fb99e66f718ba30cc21706a335829d + languageName: node + linkType: hard + "@vlad-yakovlev/telegram-md@npm:^2.0.0": version: 2.0.0 resolution: "@vlad-yakovlev/telegram-md@npm:2.0.0" @@ -1554,9 +3623,9 @@ __metadata: linkType: hard "abbrev@npm:^3.0.0": - version: 3.0.0 - resolution: "abbrev@npm:3.0.0" - checksum: 10c0/049704186396f571650eb7b22ed3627b77a5aedf98bb83caf2eac81ca2a3e25e795394b0464cfb2d6076df3db6a5312139eac5b6a126ca296ac53c5008069c28 + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf languageName: node linkType: hard @@ -1584,7 +3653,16 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.9.0": +"acorn-walk@npm:^8.1.1": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 + languageName: node + linkType: hard + +"acorn@npm:^8.11.0, acorn@npm:^8.4.1, acorn@npm:^8.9.0": version: 8.14.1 resolution: "acorn@npm:8.14.1" bin: @@ -1624,7 +3702,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.3.2": +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -1665,6 +3743,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df + languageName: node + linkType: hard + "ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" @@ -1672,6 +3757,32 @@ __metadata: languageName: node linkType: hard +"anymatch@npm:^3.0.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -1732,16 +3843,17 @@ __metadata: linkType: hard "array.prototype.findlastindex@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlastindex@npm:1.2.5" + version: 1.2.6 + resolution: "array.prototype.findlastindex@npm:1.2.6" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" + es-abstract: "npm:^1.23.9" es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3 + es-object-atoms: "npm:^1.1.1" + es-shim-unscopables: "npm:^1.1.0" + checksum: 10c0/82559310d2e57ec5f8fc53d7df420e3abf0ba497935de0a5570586035478ba7d07618cb18e2d4ada2da514c8fb98a034aaf5c06caa0a57e2f7f4c4adedef5956 languageName: node linkType: hard @@ -1804,26 +3916,158 @@ __metadata: languageName: node linkType: hard -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + +"async@npm:^3.2.3": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: 10c0/e329a6665512736a9bbb073e1761b4ec102f7926cce35037753146a9db9c8104f5044c1662e4a863576ce544fb8be27cd2be6bc8c1a40147d03f31eb1cfb6e8a + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"aws-sdk-client-mock-jest@npm:^4.1.0": + version: 4.1.0 + resolution: "aws-sdk-client-mock-jest@npm:4.1.0" + dependencies: + "@vitest/expect": "npm:>1.6.0" + expect: "npm:>28.1.3" + tslib: "npm:^2.1.0" + peerDependencies: + aws-sdk-client-mock: 4.1.0 + vitest: ">1.6.0" + peerDependenciesMeta: + vitest: + optional: true + checksum: 10c0/bf68498476328b483e2847eb4a0ff65b4d6bf5850ed650d0c5e433373337b9fa3bdd0a64d63f3ff389747b150b1706a150b28e39bb6b5a7c490e9df49a0e62e1 + languageName: node + linkType: hard + +"aws-sdk-client-mock@npm:^4.1.0": + version: 4.1.0 + resolution: "aws-sdk-client-mock@npm:4.1.0" + dependencies: + "@types/sinon": "npm:^17.0.3" + sinon: "npm:^18.0.1" + tslib: "npm:^2.1.0" + checksum: 10c0/045caad0cff0ffeb08e69849dcae51aac8999163c58d71220bf47a82c237aabab2abf92bf6bf3bd7666e6e8984513c628e01a89eafa46fb230201d6587bc01e9 + languageName: node + linkType: hard + +"axios@npm:^1.8.3": + version: 1.9.0 + resolution: "axios@npm:1.9.0" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/9371a56886c2e43e4ff5647b5c2c3c046ed0a3d13482ef1d0135b994a628c41fbad459796f101c655e62f0c161d03883454474d2e435b2e021b1924d9f24994c + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": "npm:^29.7.0" + "@types/babel__core": "npm:^7.1.14" + babel-plugin-istanbul: "npm:^6.1.1" + babel-preset-jest: "npm:^29.6.3" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + slash: "npm:^3.0.0" + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 10c0/2eda9c1391e51936ca573dd1aedfee07b14c59b33dbe16ef347873ddd777bcf6e2fc739681e9e9661ab54ef84a3109a03725be2ac32cd2124c07ea4401cbe8c1 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@istanbuljs/load-nyc-config": "npm:^1.0.0" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-instrument: "npm:^5.0.4" + test-exclude: "npm:^6.0.0" + checksum: 10c0/1075657feb705e00fd9463b329921856d3775d9867c5054b449317d39153f8fbcebd3e02ebf00432824e647faff3683a9ca0a941325ef1afe9b3c4dd51b24beb + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": "npm:^7.3.3" + "@babel/types": "npm:^7.3.3" + "@types/babel__core": "npm:^7.1.14" + "@types/babel__traverse": "npm:^7.0.6" + checksum: 10c0/7e6451caaf7dce33d010b8aafb970e62f1b0c0b57f4978c37b0d457bbcf0874d75a395a102daf0bae0bd14eafb9f6e9a165ee5e899c0a4f1f3bb2e07b304ed2e languageName: node linkType: hard -"atomic-sleep@npm:^1.0.0": - version: 1.0.0 - resolution: "atomic-sleep@npm:1.0.0" - checksum: 10c0/e329a6665512736a9bbb073e1761b4ec102f7926cce35037753146a9db9c8104f5044c1662e4a863576ce544fb8be27cd2be6bc8c1a40147d03f31eb1cfb6e8a +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.1.0 + resolution: "babel-preset-current-node-syntax@npm:1.1.0" + dependencies: + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-bigint": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/0b838d4412e3322cb4436f246e24e9c00bebcedfd8f00a2f51489db683bd35406bbd55a700759c28d26959c6e03f84dd6a1426f576f440267c1d7a73c5717281 languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.7": - version: 1.0.7 - resolution: "available-typed-arrays@npm:1.0.7" +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" dependencies: - possible-typed-array-names: "npm:^1.0.0" - checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + babel-plugin-jest-hoist: "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/ec5fd0276b5630b05f0c14bb97cc3815c6b31600c683ebb51372e54dcb776cff790bdeeabd5b8d01ede375a040337ccbf6a3ccd68d3a34219125945e167ad943 languageName: node linkType: hard @@ -1834,6 +4078,13 @@ __metadata: languageName: node linkType: hard +"bowser@npm:^2.11.0": + version: 2.11.0 + resolution: "bowser@npm:2.11.0" + checksum: 10c0/04efeecc7927a9ec33c667fa0965dea19f4ac60b3fea60793c2e6cf06c1dcd2f7ae1dbc656f450c5f50783b1c75cf9dc173ba6f3b7db2feee01f8c4b793e1bd3 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -1862,6 +4113,45 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.24.0": + version: 4.24.5 + resolution: "browserslist@npm:4.24.5" + dependencies: + caniuse-lite: "npm:^1.0.30001716" + electron-to-chromium: "npm:^1.5.149" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.3" + bin: + browserslist: cli.js + checksum: 10c0/f4c1ce1a7d8fdfab5e5b88bb6e93d09e8a883c393f86801537a252da0362dbdcde4dbd97b318246c5d84c6607b2f6b47af732c1b000d6a8a881ee024bad29204 + languageName: node + linkType: hard + +"bs-logger@npm:^0.2.6": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: "npm:2.x" + checksum: 10c0/80e89aaaed4b68e3374ce936f2eb097456a0dddbf11f75238dbd53140b1e39259f0d248a5089ed456f1158984f22191c3658d54a713982f676709fbe1a6fa5a0 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: "npm:^0.4.0" + checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + "cac@npm:^6.7.14": version: 6.7.14 resolution: "cac@npm:6.7.14" @@ -1911,7 +4201,7 @@ __metadata: languageName: node linkType: hard -"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": version: 1.0.4 resolution: "call-bound@npm:1.0.4" dependencies: @@ -1928,7 +4218,28 @@ __metadata: languageName: node linkType: hard -"chai@npm:^5.1.2": +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001716": + version: 1.0.30001718 + resolution: "caniuse-lite@npm:1.0.30001718" + checksum: 10c0/67f9ad09bc16443e28d14f265d6e468480cd8dc1900d0d8b982222de80c699c4f2306599c3da8a3fa7139f110d4b30d49dbac78f215470f479abb6ffe141d5d3 + languageName: node + linkType: hard + +"chai@npm:^5.1.2, chai@npm:^5.2.0": version: 5.2.0 resolution: "chai@npm:5.2.0" dependencies: @@ -1941,7 +4252,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0": +"chalk@npm:^4.0.0, chalk@npm:^4.0.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -1958,6 +4269,13 @@ __metadata: languageName: node linkType: hard +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e + languageName: node + linkType: hard + "check-error@npm:^2.1.1": version: 2.1.1 resolution: "check-error@npm:2.1.1" @@ -1972,6 +4290,20 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.4.3 + resolution: "cjs-module-lexer@npm:1.4.3" + checksum: 10c0/076b3af85adc4d65dbdab1b5b240fe5b45d44fcf0ef9d429044dd94d19be5589376805c44fb2d4b3e684e5fe6a9b7cf3e426476a6507c45283c5fc6ff95240be + languageName: node + linkType: hard + "cli-cursor@npm:^5.0.0": version: 5.0.0 resolution: "cli-cursor@npm:5.0.0" @@ -2009,6 +4341,20 @@ __metadata: languageName: node linkType: hard +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: 10c0/ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1 + languageName: node + linkType: hard + "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -2032,6 +4378,15 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + "commander@npm:^13.1.0": version: 13.1.0 resolution: "commander@npm:13.1.0" @@ -2088,6 +4443,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + "cookie@npm:^0.7.2": version: 0.7.2 resolution: "cookie@npm:0.7.2" @@ -2125,6 +4487,30 @@ __metadata: languageName: node linkType: hard +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + prompts: "npm:^2.0.1" + bin: + create-jest: bin/create-jest.js + checksum: 10c0/e7e54c280692470d3398f62a6238fd396327e01c6a0757002833f06d00afc62dd7bfe04ff2b9cd145264460e6b4d1eb8386f2925b7e567f97939843b7b0e812f + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -2190,7 +4576,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.7, debug@npm:^4.4.0": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.7, debug@npm:^4.4.0": version: 4.4.0 resolution: "debug@npm:4.4.0" dependencies: @@ -2211,6 +4597,18 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.0.0": + version: 1.6.0 + resolution: "dedent@npm:1.6.0" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/671b8f5e390dd2a560862c4511dd6d2638e71911486f78cb32116551f8f2aa6fcaf50579ffffb2f866d46b5b80fd72470659ca5760ede8f967619ef7df79e8a5 + languageName: node + linkType: hard + "deep-eql@npm:^5.0.1": version: 5.0.2 resolution: "deep-eql@npm:5.0.2" @@ -2225,6 +4623,13 @@ __metadata: languageName: node linkType: hard +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + "define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" @@ -2247,6 +4652,48 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 + languageName: node + linkType: hard + +"diff@npm:^5.2.0": + version: 5.2.0 + resolution: "diff@npm:5.2.0" + checksum: 10c0/aed0941f206fe261ecb258dc8d0ceea8abbde3ace5827518ff8d302f0fc9cc81ce116c4d8f379151171336caf0516b79e01abdc1ed1201b6440d895a66689eb4 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -2301,6 +4748,31 @@ __metadata: languageName: node linkType: hard +"ejs@npm:^3.1.10": + version: 3.1.10 + resolution: "ejs@npm:3.1.10" + dependencies: + jake: "npm:^10.8.5" + bin: + ejs: bin/cli.js + checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.149": + version: 1.5.152 + resolution: "electron-to-chromium@npm:1.5.152" + checksum: 10c0/99c58dc8fc6b22ea64f118599663a0d336aa28693fbd275d06f3e2c1d1a6c954fcb88f5b2390223267bb3487940d3e587b6acac8b1b2ebc4dc65c44cd7739c7c + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 + languageName: node + linkType: hard + "emoji-regex@npm:^10.3.0": version: 10.4.0 resolution: "emoji-regex@npm:10.4.0" @@ -2340,16 +4812,6 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.15.0": - version: 5.18.1 - resolution: "enhanced-resolve@npm:5.18.1" - dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10c0/4cffd9b125225184e2abed9fdf0ed3dbd2224c873b165d0838fd066cde32e0918626cba2f1f4bf6860762f13a7e2364fd89a82b99566be2873d813573ac71846 - languageName: node - linkType: hard - "env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -2478,9 +4940,9 @@ __metadata: linkType: hard "es-module-lexer@npm:^1.5.4": - version: 1.6.0 - resolution: "es-module-lexer@npm:1.6.0" - checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b languageName: node linkType: hard @@ -2505,7 +4967,7 @@ __metadata: languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.2": +"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": version: 1.1.0 resolution: "es-shim-unscopables@npm:1.1.0" dependencies: @@ -2605,121 +5067,35 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.24.0": - version: 0.24.2 - resolution: "esbuild@npm:0.24.2" - dependencies: - "@esbuild/aix-ppc64": "npm:0.24.2" - "@esbuild/android-arm": "npm:0.24.2" - "@esbuild/android-arm64": "npm:0.24.2" - "@esbuild/android-x64": "npm:0.24.2" - "@esbuild/darwin-arm64": "npm:0.24.2" - "@esbuild/darwin-x64": "npm:0.24.2" - "@esbuild/freebsd-arm64": "npm:0.24.2" - "@esbuild/freebsd-x64": "npm:0.24.2" - "@esbuild/linux-arm": "npm:0.24.2" - "@esbuild/linux-arm64": "npm:0.24.2" - "@esbuild/linux-ia32": "npm:0.24.2" - "@esbuild/linux-loong64": "npm:0.24.2" - "@esbuild/linux-mips64el": "npm:0.24.2" - "@esbuild/linux-ppc64": "npm:0.24.2" - "@esbuild/linux-riscv64": "npm:0.24.2" - "@esbuild/linux-s390x": "npm:0.24.2" - "@esbuild/linux-x64": "npm:0.24.2" - "@esbuild/netbsd-arm64": "npm:0.24.2" - "@esbuild/netbsd-x64": "npm:0.24.2" - "@esbuild/openbsd-arm64": "npm:0.24.2" - "@esbuild/openbsd-x64": "npm:0.24.2" - "@esbuild/sunos-x64": "npm:0.24.2" - "@esbuild/win32-arm64": "npm:0.24.2" - "@esbuild/win32-ia32": "npm:0.24.2" - "@esbuild/win32-x64": "npm:0.24.2" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/5a25bb08b6ba23db6e66851828d848bd3ff87c005a48c02d83e38879058929878a6baa5a414e1141faee0d1dece3f32b5fbc2a87b82ed6a7aa857cf40359aeb5 - languageName: node - linkType: hard - -"esbuild@npm:~0.25.0": - version: 0.25.0 - resolution: "esbuild@npm:0.25.0" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.0" - "@esbuild/android-arm": "npm:0.25.0" - "@esbuild/android-arm64": "npm:0.25.0" - "@esbuild/android-x64": "npm:0.25.0" - "@esbuild/darwin-arm64": "npm:0.25.0" - "@esbuild/darwin-x64": "npm:0.25.0" - "@esbuild/freebsd-arm64": "npm:0.25.0" - "@esbuild/freebsd-x64": "npm:0.25.0" - "@esbuild/linux-arm": "npm:0.25.0" - "@esbuild/linux-arm64": "npm:0.25.0" - "@esbuild/linux-ia32": "npm:0.25.0" - "@esbuild/linux-loong64": "npm:0.25.0" - "@esbuild/linux-mips64el": "npm:0.25.0" - "@esbuild/linux-ppc64": "npm:0.25.0" - "@esbuild/linux-riscv64": "npm:0.25.0" - "@esbuild/linux-s390x": "npm:0.25.0" - "@esbuild/linux-x64": "npm:0.25.0" - "@esbuild/netbsd-arm64": "npm:0.25.0" - "@esbuild/netbsd-x64": "npm:0.25.0" - "@esbuild/openbsd-arm64": "npm:0.25.0" - "@esbuild/openbsd-x64": "npm:0.25.0" - "@esbuild/sunos-x64": "npm:0.25.0" - "@esbuild/win32-arm64": "npm:0.25.0" - "@esbuild/win32-ia32": "npm:0.25.0" - "@esbuild/win32-x64": "npm:0.25.0" +"esbuild@npm:^0.25.0, esbuild@npm:~0.25.0": + version: 0.25.4 + resolution: "esbuild@npm:0.25.4" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.4" + "@esbuild/android-arm": "npm:0.25.4" + "@esbuild/android-arm64": "npm:0.25.4" + "@esbuild/android-x64": "npm:0.25.4" + "@esbuild/darwin-arm64": "npm:0.25.4" + "@esbuild/darwin-x64": "npm:0.25.4" + "@esbuild/freebsd-arm64": "npm:0.25.4" + "@esbuild/freebsd-x64": "npm:0.25.4" + "@esbuild/linux-arm": "npm:0.25.4" + "@esbuild/linux-arm64": "npm:0.25.4" + "@esbuild/linux-ia32": "npm:0.25.4" + "@esbuild/linux-loong64": "npm:0.25.4" + "@esbuild/linux-mips64el": "npm:0.25.4" + "@esbuild/linux-ppc64": "npm:0.25.4" + "@esbuild/linux-riscv64": "npm:0.25.4" + "@esbuild/linux-s390x": "npm:0.25.4" + "@esbuild/linux-x64": "npm:0.25.4" + "@esbuild/netbsd-arm64": "npm:0.25.4" + "@esbuild/netbsd-x64": "npm:0.25.4" + "@esbuild/openbsd-arm64": "npm:0.25.4" + "@esbuild/openbsd-x64": "npm:0.25.4" + "@esbuild/sunos-x64": "npm:0.25.4" + "@esbuild/win32-arm64": "npm:0.25.4" + "@esbuild/win32-ia32": "npm:0.25.4" + "@esbuild/win32-x64": "npm:0.25.4" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -2773,17 +5149,24 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/5767b72da46da3cfec51661647ec850ddbf8a8d0662771139f10ef0692a8831396a0004b2be7966cecdb08264fb16bdc16290dcecd92396fac5f12d722fa013d + checksum: 10c0/db9f51248f0560bc46ab219461d338047617f6caf373c95f643b204760bdfa10c95b48cfde948949f7e509599ae4ab61c3f112092a3534936c6abfb800c565b0 languageName: node linkType: hard -"escalade@npm:^3.1.1": +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 languageName: node linkType: hard +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -2837,16 +5220,16 @@ __metadata: linkType: hard "eslint-import-resolver-typescript@npm:^3.6.0": - version: 3.8.3 - resolution: "eslint-import-resolver-typescript@npm:3.8.3" + version: 3.10.1 + resolution: "eslint-import-resolver-typescript@npm:3.10.1" dependencies: "@nolyfill/is-core-module": "npm:1.0.39" - debug: "npm:^4.3.7" - enhanced-resolve: "npm:^5.15.0" + debug: "npm:^4.4.0" get-tsconfig: "npm:^4.10.0" - is-bun-module: "npm:^1.0.2" - stable-hash: "npm:^0.0.4" - tinyglobby: "npm:^0.2.12" + is-bun-module: "npm:^2.0.0" + stable-hash: "npm:^0.0.5" + tinyglobby: "npm:^0.2.13" + unrs-resolver: "npm:^1.6.2" peerDependencies: eslint: "*" eslint-plugin-import: "*" @@ -2856,7 +5239,7 @@ __metadata: optional: true eslint-plugin-import-x: optional: true - checksum: 10c0/886ceeab4cad14958d7c7d3432ead2486374616c8ada7925ab96e55f919f2dbbbdbe7c3081d7d238231e84699849e82930417a66e05638bcc8202e1263edddeb + checksum: 10c0/02ba72cf757753ab9250806c066d09082e00807b7b6525d7687e1c0710bc3f6947e39120227fe1f93dabea3510776d86fb3fd769466ba3c46ce67e9f874cb702 languageName: node linkType: hard @@ -2911,8 +5294,8 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.33.2": - version: 7.37.4 - resolution: "eslint-plugin-react@npm:7.37.4" + version: 7.37.5 + resolution: "eslint-plugin-react@npm:7.37.5" dependencies: array-includes: "npm:^3.1.8" array.prototype.findlast: "npm:^1.2.5" @@ -2924,7 +5307,7 @@ __metadata: hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.8" + object.entries: "npm:^1.1.9" object.fromentries: "npm:^2.0.8" object.values: "npm:^1.2.1" prop-types: "npm:^15.8.1" @@ -2934,7 +5317,7 @@ __metadata: string.prototype.repeat: "npm:^1.0.0" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10c0/4acbbdb19669dfa9a162ed8847c3ad1918f6aea1ceb675ee320b5d903b4e463fdef25e15233295b6d0a726fef2ea8b015c527da769c7690932ddc52d5b82ba12 + checksum: 10c0/c850bfd556291d4d9234f5ca38db1436924a1013627c8ab1853f77cac73ec19b020e861e6c7b783436a48b6ffcdfba4547598235a37ad4611b6739f65fd8ad57 languageName: node linkType: hard @@ -3045,6 +5428,16 @@ __metadata: languageName: node linkType: hard +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + "esquery@npm:^1.4.2": version: 1.6.0 resolution: "esquery@npm:1.6.0" @@ -3093,6 +5486,30 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + "execa@npm:^8.0.1": version: 8.0.1 resolution: "execa@npm:8.0.1" @@ -3110,10 +5527,30 @@ __metadata: languageName: node linkType: hard +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: 10c0/71d2ad9b36bc25bb8b104b17e830b40a08989be7f7d100b13269aaae7c3784c3e6e1e88a797e9e87523993a25ba27c8958959a554535370672cfb4d824af8989 + languageName: node + linkType: hard + "expect-type@npm:^1.1.0": - version: 1.2.0 - resolution: "expect-type@npm:1.2.0" - checksum: 10c0/6069e1980bf16b9385646800e23499c1447df636c433014f6bbabe4bb0e20bd0033f30d38a6f9ae0938b0203a9e870cc82cdfd74b7c837b480cefb8e8240d8e8 + version: 1.2.1 + resolution: "expect-type@npm:1.2.1" + checksum: 10c0/b775c9adab3c190dd0d398c722531726cdd6022849b4adba19dceab58dda7e000a7c6c872408cd73d665baa20d381eca36af4f7b393a4ba60dd10232d1fb8898 + languageName: node + linkType: hard + +"expect@npm:>28.1.3, expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/2eddeace66e68b8d8ee5f7be57f3014b19770caaf6815c7a08d131821da527fb8c8cb7b3dcd7c883d2d3d8d184206a4268984618032d1e4b16dc8d6596475d41 languageName: node linkType: hard @@ -3151,7 +5588,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b @@ -3186,6 +5623,17 @@ __metadata: languageName: node linkType: hard +"fast-xml-parser@npm:4.4.1": + version: 4.4.1 + resolution: "fast-xml-parser@npm:4.4.1" + dependencies: + strnum: "npm:^1.0.5" + bin: + fxparser: src/cli/cli.js + checksum: 10c0/7f334841fe41bfb0bf5d920904ccad09cefc4b5e61eaf4c225bf1e1bb69ee77ef2147d8942f783ee8249e154d1ca8a858e10bda78a5d78b8bed3f48dcee9bf33 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.19.1 resolution: "fastq@npm:1.19.1" @@ -3195,15 +5643,36 @@ __metadata: languageName: node linkType: hard -"fdir@npm:^6.4.3": - version: 6.4.3 - resolution: "fdir@npm:6.4.3" +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: "npm:2.1.1" + checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 + languageName: node + linkType: hard + +"fdir@npm:^6.4.4": + version: 6.4.4 + resolution: "fdir@npm:6.4.4" peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true - checksum: 10c0/d13c10120e9625adf21d8d80481586200759928c19405a816b77dd28eaeb80e7c59c5def3e2941508045eb06d34eb47fad865ccc8bf98e6ab988bb0ed160fb6f + checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd + languageName: node + linkType: hard + +"fetch-mock@npm:^12.5.2": + version: 12.5.2 + resolution: "fetch-mock@npm:12.5.2" + dependencies: + "@types/glob-to-regexp": "npm:^0.4.4" + dequal: "npm:^2.0.3" + glob-to-regexp: "npm:^0.4.1" + regexparam: "npm:^3.0.0" + checksum: 10c0/015ca2c7eba304beb0df06e15399c50ed0f3e167a2b1ea218a8505c468ddeae0cfab1e5d4efcdee2a62aa17c9c8a1d8ccb5e1683b00a55e7a93bb5b31b183688 languageName: node linkType: hard @@ -3216,6 +5685,15 @@ __metadata: languageName: node linkType: hard +"filelist@npm:^1.0.4": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: "npm:^5.0.1" + checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 + languageName: node + linkType: hard + "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -3225,6 +5703,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -3264,7 +5752,17 @@ __metadata: languageName: node linkType: hard -"for-each@npm:^0.3.3": +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + +"for-each@npm:^0.3.3, for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" dependencies: @@ -3283,6 +5781,18 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.0": + version: 4.0.2 + resolution: "form-data@npm:4.0.2" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + mime-types: "npm:^2.1.12" + checksum: 10c0/e534b0cf025c831a0929bf4b9bbe1a9a6b03e273a8161f9947286b9b13bf8fb279c6944aae0070c4c311100c6d6dbb815cd955dc217728caf73fad8dc5b8ee9c + languageName: node + linkType: hard + "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -3299,7 +5809,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -3309,7 +5819,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -3346,6 +5856,13 @@ __metadata: languageName: node linkType: hard +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + "get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -3378,6 +5895,13 @@ __metadata: languageName: node linkType: hard +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be + languageName: node + linkType: hard + "get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": version: 1.0.1 resolution: "get-proto@npm:1.0.1" @@ -3388,6 +5912,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + "get-stream@npm:^8.0.1": version: 8.0.1 resolution: "get-stream@npm:8.0.1" @@ -3446,7 +5977,14 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -3462,7 +6000,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3": +"glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -3485,6 +6023,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + "globals@npm:^13.19.0": version: 13.24.0 resolution: "globals@npm:13.24.0" @@ -3525,7 +6070,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -3540,9 +6085,9 @@ __metadata: linkType: hard "graphql@npm:^16.8.1": - version: 16.10.0 - resolution: "graphql@npm:16.10.0" - checksum: 10c0/303730675538c8bd6c76b447dc6f03e61242e2d2596b408c34759666ec4877409e5593a7a0467d590ac5407b8c663b093b599556a77f24f281abea69ddc53de6 + version: 16.11.0 + resolution: "graphql@npm:16.11.0" + checksum: 10c0/124da7860a2292e9acf2fed0c71fc0f6a9b9ca865d390d112bdd563c1f474357141501c12891f4164fe984315764736ad67f705219c62f7580681d431a85db88 languageName: node linkType: hard @@ -3617,10 +6162,17 @@ __metadata: languageName: node linkType: hard +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 languageName: node linkType: hard @@ -3644,6 +6196,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + "human-signals@npm:^5.0.0": version: 5.0.0 resolution: "human-signals@npm:5.0.0" @@ -3686,6 +6245,18 @@ __metadata: languageName: node linkType: hard +"import-local@npm:^3.0.2": + version: 3.2.0 + resolution: "import-local@npm:3.2.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 + languageName: node + linkType: hard + "import-meta-resolve@npm:^4.0.0": version: 4.1.0 resolution: "import-meta-resolve@npm:4.1.0" @@ -3710,7 +6281,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2": +"inherits@npm:2, inherits@npm:^2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -3795,12 +6366,12 @@ __metadata: languageName: node linkType: hard -"is-bun-module@npm:^1.0.2": - version: 1.3.0 - resolution: "is-bun-module@npm:1.3.0" +"is-bun-module@npm:^2.0.0": + version: 2.0.0 + resolution: "is-bun-module@npm:2.0.0" dependencies: - semver: "npm:^7.6.3" - checksum: 10c0/2966744188fcd28e0123c52158c7073973f88babfa9ab04e2846ec5862d6b0f8f398df6413429d930f7c5ee6111ce2cbfb3eb8652d9ec42d4a37dc5089a866fb + semver: "npm:^7.7.1" + checksum: 10c0/7d27a0679cfa5be1f5052650391f9b11040cd70c48d45112e312c56bc6b6ca9c9aea70dcce6cc40b1e8947bfff8567a5c5715d3b066fb478522dab46ea379240 languageName: node linkType: hard @@ -3841,6 +6412,13 @@ __metadata: languageName: node linkType: hard +"is-electron@npm:2.2.2": + version: 2.2.2 + resolution: "is-electron@npm:2.2.2" + checksum: 10c0/327bb373f7be01b16cdff3998b5ddaa87d28f576092affaa7fe0659571b3306fdd458afbf0683a66841e7999af13f46ad0e1b51647b469526cd05a4dd736438a + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -3880,6 +6458,13 @@ __metadata: languageName: node linkType: hard +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d + languageName: node + linkType: hard + "is-generator-function@npm:^1.0.10": version: 1.1.0 resolution: "is-generator-function@npm:1.1.0" @@ -3974,6 +6559,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^2, is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + "is-stream@npm:^3.0.0": version: 3.0.0 resolution: "is-stream@npm:3.0.0" @@ -4020,86 +6612,604 @@ __metadata: languageName: node linkType: hard -"is-weakmap@npm:^2.0.2": - version: 2.0.2 - resolution: "is-weakmap@npm:2.0.2" - checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": + version: 1.1.1 + resolution: "is-weakref@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/8e0a9c07b0c780949a100e2cab2b5560a48ecd4c61726923c1a9b77b6ab0aa0046c9e7fb2206042296817045376dee2c8ab1dabe08c7c3dfbf195b01275a085b + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" + dependencies: + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isows@npm:1.0.6": + version: 1.0.6 + resolution: "isows@npm:1.0.6" + peerDependencies: + ws: "*" + checksum: 10c0/f89338f63ce2f497d6cd0f86e42c634209328ebb43b3bdfdc85d8f1589ee75f02b7e6d9e1ba274101d0f6f513b1b8cbe6985e6542b4aaa1f0c5fd50d9c1be95c + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": "npm:^7.12.3" + "@babel/parser": "npm:^7.14.7" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^6.3.0" + checksum: 10c0/8a1bdf3e377dcc0d33ec32fe2b6ecacdb1e4358fd0eb923d4326bb11c67622c0ceb99600a680f3dad5d29c66fc1991306081e339b4d43d0b8a2ab2e1d910a6ee + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" + dependencies: + "@babel/core": "npm:^7.23.9" + "@babel/parser": "npm:^7.23.9" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^7.5.4" + checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + source-map: "npm:^0.6.1" + checksum: 10c0/19e4cc405016f2c906dff271a76715b3e881fa9faeb3f09a86cb99b8512b3a5ed19cadfe0b54c17ca0e54c1142c9c6de9330d65506e35873994e06634eebeb66 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 + languageName: node + linkType: hard + +"iterator.prototype@npm:^1.1.4": + version: 1.1.5 + resolution: "iterator.prototype@npm:1.1.5" + dependencies: + define-data-property: "npm:^1.1.4" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.6" + get-proto: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/f7a262808e1b41049ab55f1e9c29af7ec1025a000d243b83edf34ce2416eedd56079b117fa59376bb4a724110690f13aa8427f2ee29a09eec63a7e72367626d0 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jake@npm:^10.8.5": + version: 10.9.2 + resolution: "jake@npm:10.9.2" + dependencies: + async: "npm:^3.2.3" + chalk: "npm:^4.0.2" + filelist: "npm:^1.0.4" + minimatch: "npm:^3.1.2" + bin: + jake: bin/cli.js + checksum: 10c0/c4597b5ed9b6a908252feab296485a4f87cba9e26d6c20e0ca144fb69e0c40203d34a2efddb33b3d297b8bd59605e6c1f44f6221ca1e10e69175ecbf3ff5fe31 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: "npm:^5.0.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + checksum: 10c0/e071384d9e2f6bb462231ac53f29bff86f0e12394c1b49ccafbad225ce2ab7da226279a8a94f421949920bef9be7ef574fd86aee22e8adfa149be73554ab828b + languageName: node + linkType: hard + +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + co: "npm:^4.6.0" + dedent: "npm:^1.0.0" + is-generator-fn: "npm:^2.0.0" + jest-each: "npm:^29.7.0" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + pure-rand: "npm:^6.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 10c0/8d15344cf7a9f14e926f0deed64ed190c7a4fa1ed1acfcd81e4cc094d3cc5bf7902ebb7b874edc98ada4185688f90c91e1747e0dfd7ac12463b097968ae74b5e + languageName: node + linkType: hard + +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + create-jest: "npm:^29.7.0" + exit: "npm:^0.1.2" + import-local: "npm:^3.0.2" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + yargs: "npm:^17.3.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 10c0/a658fd55050d4075d65c1066364595962ead7661711495cfa1dfeecf3d6d0a8ffec532f3dbd8afbb3e172dd5fd2fb2e813c5e10256e7cf2fea766314942fb43a + languageName: node + linkType: hard + +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/test-sequencer": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-jest: "npm:^29.7.0" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + deepmerge: "npm:^4.2.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-circus: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + parse-json: "npm:^5.2.0" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 10c0/bab23c2eda1fff06e0d104b00d6adfb1d1aabb7128441899c9bff2247bd26710b050a5364281ce8d52b46b499153bf7e3ee88b19831a8f3451f1477a0246a0f1 + languageName: node + linkType: hard + +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: "npm:^3.0.0" + checksum: 10c0/d932a8272345cf6b6142bb70a2bb63e0856cc0093f082821577ea5bdf4643916a98744dfc992189d2b1417c38a11fa42466f6111526bc1fb81366f56410f3be9 + languageName: node + linkType: hard + +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + pretty-format: "npm:^29.7.0" + checksum: 10c0/f7f9a90ebee80cc688e825feceb2613627826ac41ea76a366fa58e669c3b2403d364c7c0a74d862d469b103c843154f8456d3b1c02b487509a12afa8b59edbb4 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/61f04fec077f8b1b5c1a633e3612fc0c9aa79a0ab7b05600683428f1e01a4d35346c474bde6f439f9fcc1a4aa9a2861ff852d079a43ab64b02105d1004b2592b + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/graceful-fs": "npm:^4.1.3" + "@types/node": "npm:*" + anymatch: "npm:^3.0.3" + fb-watchman: "npm:^2.0.0" + fsevents: "npm:^2.3.2" + graceful-fs: "npm:^4.2.9" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + walker: "npm:^1.0.8" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/2683a8f29793c75a4728787662972fedd9267704c8f7ef9d84f2beed9a977f1cf5e998c07b6f36ba5603f53cb010c911fe8cd0ac9886e073fe28ca66beefd30c + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/71bb9f77fc489acb842a5c7be030f2b9acb18574dc9fb98b3100fc57d422b1abc55f08040884bd6e6dbf455047a62f7eaff12aa4058f7cbdc11558718ca6a395 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/0d0e70b28fa5c7d4dce701dc1f46ae0922102aadc24ed45d594dd9b7ae0a8a6ef8b216718d1ab79e451291217e05d4d49a82666e1a3cc2b428b75cd9c933244e + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": "npm:^7.12.13" + "@jest/types": "npm:^29.6.3" + "@types/stack-utils": "npm:^2.0.0" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 10c0/850ae35477f59f3e6f27efac5215f706296e2104af39232bb14e5403e067992afb5c015e87a9243ec4d9df38525ef1ca663af9f2f4766aa116f127247008bd22 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + checksum: 10c0/7b9f8349ee87695a309fe15c46a74ab04c853369e5c40952d68061d9dc3159a0f0ed73e215f81b07ee97a9faaf10aebe5877a9d6255068a0977eae6a9ff1d5ac + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 10c0/4e33fb16c4f42111159cafe26397118dcfc4cf08bc178a67149fb05f45546a91928b820894572679d62559839d0992e21080a1527faad65daaae8743a5705a3b + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: "npm:^29.6.3" + jest-snapshot: "npm:^29.7.0" + checksum: 10c0/b6e9ad8ae5b6049474118ea6441dfddd385b6d1fc471db0136f7c8fbcfe97137a9665e4f837a9f49f15a29a1deb95a14439b7aec812f3f99d08f228464930f0d languageName: node linkType: hard -"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": - version: 1.1.1 - resolution: "is-weakref@npm:1.1.1" +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" dependencies: - call-bound: "npm:^1.0.3" - checksum: 10c0/8e0a9c07b0c780949a100e2cab2b5560a48ecd4c61726923c1a9b77b6ab0aa0046c9e7fb2206042296817045376dee2c8ab1dabe08c7c3dfbf195b01275a085b + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-pnp-resolver: "npm:^1.2.2" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + resolve: "npm:^1.20.0" + resolve.exports: "npm:^2.0.0" + slash: "npm:^3.0.0" + checksum: 10c0/59da5c9c5b50563e959a45e09e2eace783d7f9ac0b5dcc6375dea4c0db938d2ebda97124c8161310082760e8ebbeff9f6b177c15ca2f57fb424f637a5d2adb47 languageName: node linkType: hard -"is-weakset@npm:^2.0.3": - version: 2.0.4 - resolution: "is-weakset@npm:2.0.4" +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" dependencies: - call-bound: "npm:^1.0.3" - get-intrinsic: "npm:^1.2.6" - checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 + "@jest/console": "npm:^29.7.0" + "@jest/environment": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + graceful-fs: "npm:^4.2.9" + jest-docblock: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-leak-detector: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-resolve: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: 10c0/2194b4531068d939f14c8d3274fe5938b77fa73126aedf9c09ec9dec57d13f22c72a3b5af01ac04f5c1cf2e28d0ac0b4a54212a61b05f10b5d6b47f2a1097bb4 + languageName: node + linkType: hard + +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/globals": "npm:^29.7.0" + "@jest/source-map": "npm:^29.6.3" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + cjs-module-lexer: "npm:^1.0.0" + collect-v8-coverage: "npm:^1.0.0" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-bom: "npm:^4.0.0" + checksum: 10c0/7cd89a1deda0bda7d0941835434e44f9d6b7bd50b5c5d9b0fc9a6c990b2d4d2cab59685ab3cb2850ed4cc37059f6de903af5a50565d7f7f1192a77d3fd6dd2a6 languageName: node linkType: hard -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@babel/generator": "npm:^7.7.2" + "@babel/plugin-syntax-jsx": "npm:^7.7.2" + "@babel/plugin-syntax-typescript": "npm:^7.7.2" + "@babel/types": "npm:^7.3.3" + "@jest/expect-utils": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + chalk: "npm:^4.0.0" + expect: "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + natural-compare: "npm:^1.4.0" + pretty-format: "npm:^29.7.0" + semver: "npm:^7.5.3" + checksum: 10c0/6e9003c94ec58172b4a62864a91c0146513207bedf4e0a06e1e2ac70a4484088a2683e3a0538d8ea913bcfd53dc54a9b98a98cdfa562e7fe1d1339aeae1da570 languageName: node linkType: hard -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: 10c0/bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150 languageName: node linkType: hard -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + leven: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + checksum: 10c0/a20b930480c1ed68778c739f4739dce39423131bc070cd2505ddede762a5570a256212e9c2401b7ae9ba4d7b7c0803f03c5b8f1561c62348213aba18d9dbece2 languageName: node linkType: hard -"isows@npm:1.0.6": - version: 1.0.6 - resolution: "isows@npm:1.0.6" - peerDependencies: - ws: "*" - checksum: 10c0/f89338f63ce2f497d6cd0f86e42c634209328ebb43b3bdfdc85d8f1589ee75f02b7e6d9e1ba274101d0f6f513b1b8cbe6985e6542b4aaa1f0c5fd50d9c1be95c +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + jest-util: "npm:^29.7.0" + string-length: "npm:^4.0.1" + checksum: 10c0/ec6c75030562fc8f8c727cb8f3b94e75d831fc718785abfc196e1f2a2ebc9a2e38744a15147170039628a853d77a3b695561ce850375ede3a4ee6037a2574567 languageName: node linkType: hard -"iterator.prototype@npm:^1.1.4": - version: 1.1.5 - resolution: "iterator.prototype@npm:1.1.5" +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" dependencies: - define-data-property: "npm:^1.1.4" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.6" - get-proto: "npm:^1.0.0" - has-symbols: "npm:^1.1.0" - set-function-name: "npm:^2.0.2" - checksum: 10c0/f7a262808e1b41049ab55f1e9c29af7ec1025a000d243b83edf34ce2416eedd56079b117fa59376bb4a724110690f13aa8427f2ee29a09eec63a7e72367626d0 + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/5570a3a005b16f46c131968b8a5b56d291f9bbb85ff4217e31c80bd8a02e7de799e59a54b95ca28d5c302f248b54cbffde2d177c2f0f52ffcee7504c6eabf660 languageName: node linkType: hard -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" +"jest@npm:^29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": + "@jest/core": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + import-local: "npm:^3.0.2" + jest-cli: "npm:^29.7.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + bin: + jest: bin/jest.js + checksum: 10c0/f40eb8171cf147c617cc6ada49d062fbb03b4da666cb8d39cdbfb739a7d75eea4c3ca150fb072d0d273dce0c753db4d0467d54906ad0293f59c54f9db4a09d8b languageName: node linkType: hard @@ -4126,6 +7236,18 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -4144,6 +7266,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -4190,6 +7321,15 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + "jsonparse@npm:^1.2.0": version: 1.3.1 resolution: "jsonparse@npm:1.3.1" @@ -4209,6 +7349,25 @@ __metadata: languageName: node linkType: hard +"just-extend@npm:^6.2.0": + version: 6.2.0 + resolution: "just-extend@npm:6.2.0" + checksum: 10c0/d41cbdb6d85b986d4deaf2144d81d4f7266cd408fc95189d046d63f610c2dc486b141aeb6ef319c2d76fe904d45a6bb31f19b098ff0427c35688e0c383fc0511 + languageName: node + linkType: hard + +"keccak@npm:^3.0.4": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: "npm:^2.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.2.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/153525c1c1f770beadb8f8897dec2f1d2dcbee11d063fe5f61957a5b236bfd3d2a111ae2727e443aa6a848df5edb98b9ef237c78d56df49087b0ca8a232ca9cd + languageName: node + linkType: hard + "keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -4218,6 +7377,20 @@ __metadata: languageName: node linkType: hard +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: 10c0/cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df + languageName: node + linkType: hard + "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -4243,8 +7416,8 @@ __metadata: linkType: hard "lint-staged@npm:^15.2.2": - version: 15.4.3 - resolution: "lint-staged@npm:15.4.3" + version: 15.5.2 + resolution: "lint-staged@npm:15.5.2" dependencies: chalk: "npm:^5.4.1" commander: "npm:^13.1.0" @@ -4258,13 +7431,13 @@ __metadata: yaml: "npm:^2.7.0" bin: lint-staged: bin/lint-staged.js - checksum: 10c0/c1f71f2273bcbd992af929620f5acc6b9f6899da4b395e780e0b3ab33a0d725c239eb961873067c8c842e057c585c71dd4d44c0dc8b25539d3c2e97a3bdd6f30 + checksum: 10c0/618386254600ada3af3672486a9d082250108245e7c0863d9dfe0a21e7764e3b2eb6416b0f8970e548f4e9d368637331598b27df5a1306925feabbaf16a667e1 languageName: node linkType: hard "listr2@npm:^8.2.5": - version: 8.2.5 - resolution: "listr2@npm:8.2.5" + version: 8.3.3 + resolution: "listr2@npm:8.3.3" dependencies: cli-truncate: "npm:^4.0.0" colorette: "npm:^2.0.20" @@ -4272,7 +7445,16 @@ __metadata: log-update: "npm:^6.1.0" rfdc: "npm:^1.4.1" wrap-ansi: "npm:^9.0.0" - checksum: 10c0/f5a9599514b00c27d7eb32d1117c83c61394b2a985ec20e542c798bf91cf42b19340215701522736f5b7b42f557e544afeadec47866e35e5d4f268f552729671 + checksum: 10c0/0792f8a7fd482fa516e21689e012e07081cab3653172ca606090622cfa0024c784a1eba8095a17948a0e9a4aa98a80f7c9c90f78a0dd35173d6802f9cc123a82 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 languageName: node linkType: hard @@ -4301,6 +7483,13 @@ __metadata: languageName: node linkType: hard +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: 10c0/48f40d471a1654397ed41685495acb31498d5ed696185ac8973daef424a749ca0c7871bf7b665d5c14f5cc479394479e0307e781f61d5573831769593411be6e + languageName: node + linkType: hard + "lodash.isplainobject@npm:^4.0.6": version: 4.0.6 resolution: "lodash.isplainobject@npm:4.0.6" @@ -4315,6 +7504,13 @@ __metadata: languageName: node linkType: hard +"lodash.memoize@npm:^4.1.2": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -4381,7 +7577,7 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^3.1.0, loupe@npm:^3.1.2": +"loupe@npm:^3.1.0, loupe@npm:^3.1.2, loupe@npm:^3.1.3": version: 3.1.3 resolution: "loupe@npm:3.1.3" checksum: 10c0/f5dab4144254677de83a35285be1b8aba58b3861439ce4ba65875d0d5f3445a4a496daef63100ccf02b2dbc25bf58c6db84c9cb0b96d6435331e9d0a33b48541 @@ -4395,6 +7591,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + "magic-string@npm:^0.30.12": version: 0.30.17 resolution: "magic-string@npm:0.30.17" @@ -4404,6 +7609,22 @@ __metadata: languageName: node linkType: hard +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 + languageName: node + linkType: hard + +"make-error@npm:^1.1.1, make-error@npm:^1.3.6": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f + languageName: node + linkType: hard + "make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" @@ -4423,6 +7644,15 @@ __metadata: languageName: node linkType: hard +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: "npm:1.0.5" + checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c + languageName: node + linkType: hard + "math-intrinsics@npm:^1.1.0": version: 1.1.0 resolution: "math-intrinsics@npm:1.1.0" @@ -4451,7 +7681,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.8": +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -4461,6 +7691,29 @@ __metadata: languageName: node linkType: hard +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + "mimic-fn@npm:^4.0.0": version: 4.0.0 resolution: "mimic-fn@npm:4.0.0" @@ -4484,7 +7737,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -4493,6 +7746,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + "minimatch@npm:^9.0.4": version: 9.0.5 resolution: "minimatch@npm:9.0.5" @@ -4577,12 +7839,11 @@ __metadata: linkType: hard "minizlib@npm:^3.0.1": - version: 3.0.1 - resolution: "minizlib@npm:3.0.1" + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" dependencies: - minipass: "npm:^7.0.4" - rimraf: "npm:^5.0.5" - checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 + minipass: "npm:^7.1.2" + checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 languageName: node linkType: hard @@ -4595,6 +7856,15 @@ __metadata: languageName: node linkType: hard +"mnemonist@npm:0.38.3": + version: 0.38.3 + resolution: "mnemonist@npm:0.38.3" + dependencies: + obliterator: "npm:^1.6.1" + checksum: 10c0/064aa1ee1a89fce2754423b3617c598fd65bc34311eb3c01dc063976f6b819b073bd23532415cf8c92240157b4c8fbb7ec5d79d717f2bd4fcd95d8131cb23acb + languageName: node + linkType: hard + "ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -4603,8 +7873,8 @@ __metadata: linkType: hard "msw@npm:^2.2.2": - version: 2.7.3 - resolution: "msw@npm:2.7.3" + version: 2.8.2 + resolution: "msw@npm:2.8.2" dependencies: "@bundled-es-modules/cookie": "npm:^2.0.1" "@bundled-es-modules/statuses": "npm:^1.0.1" @@ -4631,7 +7901,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 10c0/47cad1c4b4615b312477c8977fddfda3e90becd8efc2d81d73be8fb860e45ad0d3f7bca6d4f70ae7ed21894e93975bda66d609aafc3a1c99cb923c5ef67f8686 + checksum: 10c0/8b5156f6082c87de9c06a8a341dfd8a462446cc95291294129d76f89bee689e1e56fe6495e80496ca278e5e1451935a2677b61e2eedd658159b110ef5b3e73b0 languageName: node linkType: hard @@ -4643,20 +7913,29 @@ __metadata: linkType: hard "nanoid@npm:^3.3.8": - version: 3.3.8 - resolution: "nanoid@npm:3.3.8" + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" bin: nanoid: bin/nanoid.cjs - checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b languageName: node linkType: hard "nanoid@npm:^5.0.9": - version: 5.1.2 - resolution: "nanoid@npm:5.1.2" + version: 5.1.5 + resolution: "nanoid@npm:5.1.5" bin: nanoid: bin/nanoid.js - checksum: 10c0/60b3d30d1629704f4b156f79e53a454d10440a38f4ab14cda1c9aa08091389212d03afb35fbc09c11f4619f83bcf5076abc4719295e3b79c57abad0e40297177 + checksum: 10c0/e6004f1ad6c7123eeb037062c4441d44982037dc043aabb162457ef6986e99964ba98c63c975f96c547403beb0bf95bc537bd7bf9a09baf381656acdc2975c3c + languageName: node + linkType: hard + +"napi-postinstall@npm:^0.2.2": + version: 0.2.4 + resolution: "napi-postinstall@npm:0.2.4" + bin: + napi-postinstall: lib/cli.js + checksum: 10c0/e8c357d7e27848c4af7becf2796afff245a2fc8ba176e1b133410bb1c9934a66d4bc542d0c9f04c73b0ba34ee0486b30b6cd1c62ed3aa36797d394200c9a2a8b languageName: node linkType: hard @@ -4674,23 +7953,70 @@ __metadata: languageName: node linkType: hard +"nise@npm:^6.0.0": + version: 6.1.1 + resolution: "nise@npm:6.1.1" + dependencies: + "@sinonjs/commons": "npm:^3.0.1" + "@sinonjs/fake-timers": "npm:^13.0.1" + "@sinonjs/text-encoding": "npm:^0.7.3" + just-extend: "npm:^6.2.0" + path-to-regexp: "npm:^8.1.0" + checksum: 10c0/09471adb738dc3be2981cc7815c90879ed6a5a3e162202ca66e12f9a5a0956bea718d0ec2f0c07acc26e3f958481b8fb30c30da76c13620e922f3b9dcd249c50 + languageName: node + linkType: hard + +"node-addon-api@npm:^2.0.0": + version: 2.0.2 + resolution: "node-addon-api@npm:2.0.2" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/ade6c097ba829fa4aee1ca340117bb7f8f29fdae7b777e343a9d5cbd548481d1f0894b7b907d23ce615c70d932e8f96154caed95c3fa935cfe8cf87546510f64 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.0": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 + languageName: node + linkType: hard + "node-gyp@npm:latest": - version: 11.1.0 - resolution: "node-gyp@npm:11.1.0" + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" graceful-fs: "npm:^4.2.6" make-fetch-happen: "npm:^14.0.3" nopt: "npm:^8.0.0" proc-log: "npm:^5.0.0" semver: "npm:^7.3.5" tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" which: "npm:^5.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/c38977ce502f1ea41ba2b8721bd5b49bc3d5b3f813eabfac8414082faf0620ccb5211e15c4daecc23ed9f5e3e9cc4da00e575a0bcfc2a95a069294f2afa1e0cd + checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa languageName: node linkType: hard @@ -4705,6 +8031,22 @@ __metadata: languageName: node linkType: hard +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + "npm-run-path@npm:^5.1.0": version: 5.3.0 resolution: "npm-run-path@npm:5.3.0" @@ -4749,14 +8091,15 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.8": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" +"object.entries@npm:^1.1.9": + version: 1.1.9 + resolution: "object.entries@npm:1.1.9" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3 + es-object-atoms: "npm:^1.1.1" + checksum: 10c0/d4b8c1e586650407da03370845f029aa14076caca4e4d4afadbc69cfb5b78035fd3ee7be417141abdb0258fa142e59b11923b4c44d8b1255b28f5ffcc50da7db languageName: node linkType: hard @@ -4795,6 +8138,13 @@ __metadata: languageName: node linkType: hard +"obliterator@npm:^1.6.1": + version: 1.6.1 + resolution: "obliterator@npm:1.6.1" + checksum: 10c0/5fad57319aae0ef6e34efa640541d41c2dd9790a7ab808f17dcb66c83a81333963fc2dfcfa6e1b62158e5cef6291cdcf15c503ad6c3de54b2227dd4c3d7e1b55 + languageName: node + linkType: hard + "on-exit-leak-free@npm:^2.1.0": version: 2.1.2 resolution: "on-exit-leak-free@npm:2.1.2" @@ -4811,6 +8161,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + "onetime@npm:^6.0.0": version: 6.0.0 resolution: "onetime@npm:6.0.0" @@ -4861,9 +8220,9 @@ __metadata: languageName: node linkType: hard -"ox@npm:0.6.7": - version: 0.6.7 - resolution: "ox@npm:0.6.7" +"ox@npm:0.6.9": + version: 0.6.9 + resolution: "ox@npm:0.6.9" dependencies: "@adraffy/ens-normalize": "npm:^1.10.1" "@noble/curves": "npm:^1.6.0" @@ -4877,11 +8236,27 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/f556804e7246cc8aa56e43c6bb91302a792649638afe086a86ed3a71a5a583c05d3ad4318b212835cb8167fe561024db1625253c118018380393e161af3c3edf + checksum: 10c0/02a7ea9795eaac0a7a672e983094f62ae6f19b7d0c786e6d7ef4584683faf535b5b133e42452dd3abb77115382e16b2cb5c0f629d5a0f2b80832c47756e0ecd1 + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 languageName: node linkType: hard -"p-limit@npm:^3.0.2": +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -4899,28 +8274,73 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" dependencies: - p-limit: "npm:^3.0.2" - checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"p-queue@npm:^6": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: "npm:^4.0.4" + p-timeout: "npm:^3.2.0" + checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e + languageName: node + linkType: hard + +"p-retry@npm:^4": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": "npm:0.12.0" + retry: "npm:^0.13.1" + checksum: 10c0/d58512f120f1590cfedb4c2e0c42cb3fa66f3cea8a4646632fcb834c56055bb7a6f138aa57b20cc236fb207c9d694e362e0b5c2b14d9b062f67e8925580c73b0 languageName: node linkType: hard -"p-locate@npm:^6.0.0": - version: 6.0.0 - resolution: "p-locate@npm:6.0.0" +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" dependencies: - p-limit: "npm:^4.0.0" - checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + p-finally: "npm:^1.0.0" + checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 languageName: node linkType: hard -"p-map@npm:^7.0.2": - version: 7.0.3 - resolution: "p-map@npm:7.0.3" - checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f languageName: node linkType: hard @@ -4973,7 +8393,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.1.0": +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c @@ -5011,6 +8431,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:^8.1.0": + version: 8.2.0 + resolution: "path-to-regexp@npm:8.2.0" + checksum: 10c0/ef7d0a887b603c0a142fad16ccebdcdc42910f0b14830517c724466ad676107476bba2fe9fffd28fd4c141391ccd42ea426f32bb44c2c82ecaefe10c37b90f5a + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -5032,14 +8459,14 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": +"picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 languageName: node linkType: hard -"picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -5122,6 +8549,22 @@ __metadata: languageName: node linkType: hard +"pirates@npm:^4.0.4": + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.1.0 resolution: "possible-typed-array-names@npm:1.1.0" @@ -5156,6 +8599,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f + languageName: node + linkType: hard + "proc-log@npm:^5.0.0": version: 5.0.0 resolution: "proc-log@npm:5.0.0" @@ -5180,6 +8634,16 @@ __metadata: languageName: node linkType: hard +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: "npm:^3.0.3" + sisteransi: "npm:^1.0.5" + checksum: 10c0/16f1ac2977b19fe2cf53f8411cc98db7a3c8b115c479b2ca5c82b5527cd937aa405fa04f9a5960abeb9daef53191b53b4d13e35c1f5d50e8718c76917c5f1ea4 + languageName: node + linkType: hard + "prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -5191,6 +8655,13 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + "psl@npm:^1.1.33": version: 1.15.0 resolution: "psl@npm:1.15.0" @@ -5217,6 +8688,13 @@ __metadata: languageName: node linkType: hard +"pure-rand@npm:^6.0.0": + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 10c0/1abe217897bf74dcb3a0c9aba3555fe975023147b48db540aa2faf507aee91c03bf54f6aef0eb2bf59cc259a16d06b28eca37f0dc426d94f4692aeff02fb0e65 + languageName: node + linkType: hard + "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -5245,6 +8723,24 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^18.0.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + +"readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + "real-require@npm:^0.2.0": version: 0.2.0 resolution: "real-require@npm:0.2.0" @@ -5282,6 +8778,13 @@ __metadata: languageName: node linkType: hard +"regexparam@npm:^3.0.0": + version: 3.0.0 + resolution: "regexparam@npm:3.0.0" + checksum: 10c0/a6430d7b97d5a7d5518f37a850b6b73aab479029d02f46af4fa0e8e4a1d7aad05b7a0d2d10c86ded21a14d5f0fa4c68525f873a5fca2efeefcccd93c36627459 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -5303,6 +8806,15 @@ __metadata: languageName: node linkType: hard +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -5324,7 +8836,14 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.22.4": +"resolve.exports@npm:^2.0.0": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d + languageName: node + linkType: hard + +"resolve@npm:^1.20.0, resolve@npm:^1.22.4": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -5350,7 +8869,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": +"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -5393,6 +8912,13 @@ __metadata: languageName: node linkType: hard +"retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 10c0/9ae822ee19db2163497e074ea919780b1efa00431d197c7afdb950e42bf109196774b92a49fc9821f0b8b328a98eea6017410bfc5e8a0fc19c85c6d11adb3772 + languageName: node + linkType: hard + "reusify@npm:^1.0.4": version: 1.1.0 resolution: "reusify@npm:1.1.0" @@ -5418,41 +8944,31 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^5.0.5": - version: 5.0.10 - resolution: "rimraf@npm:5.0.10" - dependencies: - glob: "npm:^10.3.7" - bin: - rimraf: dist/esm/bin.mjs - checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc - languageName: node - linkType: hard - "rollup@npm:^4.20.0": - version: 4.34.9 - resolution: "rollup@npm:4.34.9" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.34.9" - "@rollup/rollup-android-arm64": "npm:4.34.9" - "@rollup/rollup-darwin-arm64": "npm:4.34.9" - "@rollup/rollup-darwin-x64": "npm:4.34.9" - "@rollup/rollup-freebsd-arm64": "npm:4.34.9" - "@rollup/rollup-freebsd-x64": "npm:4.34.9" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.34.9" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.34.9" - "@rollup/rollup-linux-arm64-gnu": "npm:4.34.9" - "@rollup/rollup-linux-arm64-musl": "npm:4.34.9" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.34.9" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.34.9" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.34.9" - "@rollup/rollup-linux-s390x-gnu": "npm:4.34.9" - "@rollup/rollup-linux-x64-gnu": "npm:4.34.9" - "@rollup/rollup-linux-x64-musl": "npm:4.34.9" - "@rollup/rollup-win32-arm64-msvc": "npm:4.34.9" - "@rollup/rollup-win32-ia32-msvc": "npm:4.34.9" - "@rollup/rollup-win32-x64-msvc": "npm:4.34.9" - "@types/estree": "npm:1.0.6" + version: 4.40.2 + resolution: "rollup@npm:4.40.2" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.40.2" + "@rollup/rollup-android-arm64": "npm:4.40.2" + "@rollup/rollup-darwin-arm64": "npm:4.40.2" + "@rollup/rollup-darwin-x64": "npm:4.40.2" + "@rollup/rollup-freebsd-arm64": "npm:4.40.2" + "@rollup/rollup-freebsd-x64": "npm:4.40.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.40.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.40.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.40.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.40.2" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.40.2" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.40.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.40.2" + "@rollup/rollup-linux-riscv64-musl": "npm:4.40.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.40.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.40.2" + "@rollup/rollup-linux-x64-musl": "npm:4.40.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.40.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.40.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.40.2" + "@types/estree": "npm:1.0.7" fsevents: "npm:~2.3.2" dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -5481,6 +8997,8 @@ __metadata: optional: true "@rollup/rollup-linux-riscv64-gnu": optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true "@rollup/rollup-linux-s390x-gnu": optional: true "@rollup/rollup-linux-x64-gnu": @@ -5497,7 +9015,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/dd0be1f7c4f8a93040026be13ecc39259fb55313db0dac7eafd97a3ac01ab4584e6b1a8afd86b0259dcf391699d5560a678abe6c0729af0aa4f2d5df70f05c8c + checksum: 10c0/cbe9b766891da74fbf7c3b50420bb75102e5c59afc0ea45751f7e43a581d2cd93367763f521f820b72e341cf1f6b9951fbdcd3be67a1b0aa774b754525a8b9c7 languageName: node linkType: hard @@ -5523,6 +9041,13 @@ __metadata: languageName: node linkType: hard +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + "safe-push-apply@npm:^1.0.0": version: 1.0.0 resolution: "safe-push-apply@npm:1.0.0" @@ -5565,7 +9090,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.3.1": +"semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -5574,12 +9099,12 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": - version: 7.7.1 - resolution: "semver@npm:7.7.1" +"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.1": + version: 7.7.2 + resolution: "semver@npm:7.7.2" bin: semver: bin/semver.js - checksum: 10c0/fd603a6fb9c399c6054015433051bdbe7b99a940a8fb44b85c2b524c4004b023d7928d47cb22154f8d054ea7ee8597f586605e05b52047f048278e4ac56ae958 + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea languageName: node linkType: hard @@ -5691,6 +9216,13 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + "signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" @@ -5698,6 +9230,27 @@ __metadata: languageName: node linkType: hard +"sinon@npm:^18.0.1": + version: 18.0.1 + resolution: "sinon@npm:18.0.1" + dependencies: + "@sinonjs/commons": "npm:^3.0.1" + "@sinonjs/fake-timers": "npm:11.2.2" + "@sinonjs/samsam": "npm:^8.0.0" + diff: "npm:^5.2.0" + nise: "npm:^6.0.0" + supports-color: "npm:^7" + checksum: 10c0/c4554b8d9654d42fc4baefecd3b5ac42bcce73ad926d58521233d9c355dc2c1a0d73c55e5b2c929b6814e528cd9b54bc61096b9288579f9b284edd6e3d2da3df + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: 10c0/230ac975cca485b7f6fe2b96a711aa62a6a26ead3e6fb8ba17c5a00d61b8bed0d7adc21f5626b70d7c33c62ff4e63933017a6462942c719d1980bb0b1207ad46 + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -5769,6 +9322,23 @@ __metadata: languageName: node linkType: hard +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + "split2@npm:^4.0.0": version: 4.2.0 resolution: "split2@npm:4.2.0" @@ -5783,6 +9353,13 @@ __metadata: languageName: node linkType: hard +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + "ssri@npm:^12.0.0": version: 12.0.0 resolution: "ssri@npm:12.0.0" @@ -5792,10 +9369,19 @@ __metadata: languageName: node linkType: hard -"stable-hash@npm:^0.0.4": - version: 0.0.4 - resolution: "stable-hash@npm:0.0.4" - checksum: 10c0/53d010d2a1b014fb60d398c095f43912c353b7b44774e55222bb26fd428bc75b73d7bdfcae509ce927c23ca9c5aff2dc1bc82f191d30e57a879550bc2952bdb0 +"stable-hash@npm:^0.0.5": + version: 0.0.5 + resolution: "stable-hash@npm:0.0.5" + checksum: 10c0/ca670cb6d172f1c834950e4ec661e2055885df32fee3ebf3647c5df94993b7c2666a5dbc1c9a62ee11fc5c24928579ec5e81bb5ad31971d355d5a341aab493b3 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a languageName: node linkType: hard @@ -5814,9 +9400,9 @@ __metadata: linkType: hard "std-env@npm:^3.8.0": - version: 3.8.1 - resolution: "std-env@npm:3.8.1" - checksum: 10c0/e9b19cca6bc6f06f91607db5b636662914ca8ec9efc525a99da6ec7e493afec109d3b017d21d9782b4369fcfb2891c7c4b4e3c60d495fdadf6861ce434e07bf8 + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 languageName: node linkType: hard @@ -5834,6 +9420,16 @@ __metadata: languageName: node linkType: hard +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: "npm:^1.0.2" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c + languageName: node + linkType: hard + "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -5936,6 +9532,15 @@ __metadata: languageName: node linkType: hard +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -5961,6 +9566,20 @@ __metadata: languageName: node linkType: hard +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + "strip-final-newline@npm:^3.0.0": version: 3.0.0 resolution: "strip-final-newline@npm:3.0.0" @@ -5975,7 +9594,14 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.1.0": +"strnum@npm:^1.0.5": + version: 1.1.2 + resolution: "strnum@npm:1.1.2" + checksum: 10c0/a0fce2498fa3c64ce64a40dada41beb91cabe3caefa910e467dc0518ef2ebd7e4d10f8c2202a6104f1410254cae245066c0e94e2521fb4061a5cb41831952392 + languageName: node + linkType: hard + +"supports-color@npm:^7, supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -5984,6 +9610,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -5991,13 +9626,6 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 - languageName: node - linkType: hard - "tar@npm:^7.4.3": version: 7.4.3 resolution: "tar@npm:7.4.3" @@ -6012,6 +9640,17 @@ __metadata: languageName: node linkType: hard +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^7.1.4" + minimatch: "npm:^3.0.4" + checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 + languageName: node + linkType: hard + "text-extensions@npm:^2.0.0": version: 2.4.0 resolution: "text-extensions@npm:2.4.0" @@ -6049,20 +9688,27 @@ __metadata: languageName: node linkType: hard -"tinyexec@npm:^0.3.0, tinyexec@npm:^0.3.1": +"tinyexec@npm:^0.3.1": version: 0.3.2 resolution: "tinyexec@npm:0.3.2" checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 languageName: node linkType: hard -"tinyglobby@npm:^0.2.12": - version: 0.2.12 - resolution: "tinyglobby@npm:0.2.12" +"tinyexec@npm:^1.0.0": + version: 1.0.1 + resolution: "tinyexec@npm:1.0.1" + checksum: 10c0/e1ec3c8194a0427ce001ba69fd933d0c957e2b8994808189ed8020d3e0c01299aea8ecf0083cc514ecbf90754695895f2b5c0eac07eb2d0c406f7d4fbb8feade + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13": + version: 0.2.13 + resolution: "tinyglobby@npm:0.2.13" dependencies: - fdir: "npm:^6.4.3" + fdir: "npm:^6.4.4" picomatch: "npm:^4.0.2" - checksum: 10c0/7c9be4fd3625630e262dcb19015302aad3b4ba7fc620f269313e688f2161ea8724d6cb4444baab5ef2826eb6bed72647b169a33ec8eea37501832a2526ff540f + checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c languageName: node linkType: hard @@ -6080,6 +9726,13 @@ __metadata: languageName: node linkType: hard +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f + languageName: node + linkType: hard + "tinyspy@npm:^3.0.2": version: 3.0.2 resolution: "tinyspy@npm:3.0.2" @@ -6087,6 +9740,20 @@ __metadata: languageName: node linkType: hard +"tmp@npm:^0.2.3": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -6117,6 +9784,82 @@ __metadata: languageName: node linkType: hard +"ts-jest@npm:^29.3.2": + version: 29.3.2 + resolution: "ts-jest@npm:29.3.2" + dependencies: + bs-logger: "npm:^0.2.6" + ejs: "npm:^3.1.10" + fast-json-stable-stringify: "npm:^2.1.0" + jest-util: "npm:^29.0.0" + json5: "npm:^2.2.3" + lodash.memoize: "npm:^4.1.2" + make-error: "npm:^1.3.6" + semver: "npm:^7.7.1" + type-fest: "npm:^4.39.1" + yargs-parser: "npm:^21.1.1" + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/transform": ^29.0.0 + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/transform": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: 10c0/84762720dbef45c1644348d67d0dcb8b7ad6369a16628c4752aceeb47f0ccdad63ae14485048b641c20ce096337a160ab816881361ef5517325bac6a5b3756e0 + languageName: node + linkType: hard + +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + 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 + checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0" @@ -6129,9 +9872,16 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + "tsx@npm:^4.7.1": - version: 4.19.3 - resolution: "tsx@npm:4.19.3" + version: 4.19.4 + resolution: "tsx@npm:4.19.4" dependencies: esbuild: "npm:~0.25.0" fsevents: "npm:~2.3.3" @@ -6141,7 +9891,7 @@ __metadata: optional: true bin: tsx: dist/cli.mjs - checksum: 10c0/cacfb4cf1392ae10e8e4fe032ad26ccb07cd8a3b32e5a0da270d9c48d06ee74f743e4a84686cbc9d89b48032d59bbc56cd911e076f53cebe61dc24fa525ff790 + checksum: 10c0/f7b8d44362343fbde1f2ecc9832d243a450e1168dd09702a545ebe5f699aa6912e45b431a54b885466db414cceda48e5067b36d182027c43b2c02a4f99d8721e languageName: node linkType: hard @@ -6154,6 +9904,20 @@ __metadata: languageName: node linkType: hard +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd + languageName: node + linkType: hard + +"type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 10c0/df8157ca3f5d311edc22885abc134e18ff8ffbc93d6a9848af5b682730ca6a5a44499259750197250479c5331a8a75b5537529df5ec410622041650a7f293e2a + languageName: node + linkType: hard + "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -6168,10 +9932,10 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^4.26.1": - version: 4.37.0 - resolution: "type-fest@npm:4.37.0" - checksum: 10c0/5bad189f66fbe3431e5d36befa08cab6010e56be68b7467530b7ef94c3cf81ef775a8ac3047c8bbda4dd3159929285870357498d7bc1df062714f9c5c3a84926 +"type-fest@npm:^4.26.1, type-fest@npm:^4.39.1": + version: 4.41.0 + resolution: "type-fest@npm:4.41.0" + checksum: 10c0/f5ca697797ed5e88d33ac8f1fec21921839871f808dc59345c9cf67345bfb958ce41bd821165dbf3ae591cedec2bf6fe8882098dfdd8dc54320b859711a2c1e4 languageName: node linkType: hard @@ -6229,22 +9993,22 @@ __metadata: linkType: hard "typescript@npm:^5.3.3": - version: 5.8.2 - resolution: "typescript@npm:5.8.2" + version: 5.8.3 + resolution: "typescript@npm:5.8.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/5c4f6fbf1c6389b6928fe7b8fcd5dc73bb2d58cd4e3883f1d774ed5bd83b151cbac6b7ecf11723de56d4676daeba8713894b1e9af56174f2f9780ae7848ec3c6 + checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 languageName: node linkType: hard "typescript@patch:typescript@npm%3A^5.3.3#optional!builtin": - version: 5.8.2 - resolution: "typescript@patch:typescript@npm%3A5.8.2#optional!builtin::version=5.8.2&hash=5786d5" + version: 5.8.3 + resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/5448a08e595cc558ab321e49d4cac64fb43d1fa106584f6ff9a8d8e592111b373a995a1d5c7f3046211c8a37201eb6d0f1566f15cdb7a62a5e3be01d087848e2 + checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb languageName: node linkType: hard @@ -6260,10 +10024,10 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~6.20.0": - version: 6.20.0 - resolution: "undici-types@npm:6.20.0" - checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 languageName: node linkType: hard @@ -6299,6 +10063,81 @@ __metadata: languageName: node linkType: hard +"unrs-resolver@npm:^1.6.2": + version: 1.7.2 + resolution: "unrs-resolver@npm:1.7.2" + dependencies: + "@unrs/resolver-binding-darwin-arm64": "npm:1.7.2" + "@unrs/resolver-binding-darwin-x64": "npm:1.7.2" + "@unrs/resolver-binding-freebsd-x64": "npm:1.7.2" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.7.2" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.7.2" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.7.2" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.7.2" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.7.2" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.7.2" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.7.2" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.7.2" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.7.2" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.7.2" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.7.2" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.7.2" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.7.2" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.7.2" + napi-postinstall: "npm:^0.2.2" + dependenciesMeta: + "@unrs/resolver-binding-darwin-arm64": + optional: true + "@unrs/resolver-binding-darwin-x64": + optional: true + "@unrs/resolver-binding-freebsd-x64": + optional: true + "@unrs/resolver-binding-linux-arm-gnueabihf": + optional: true + "@unrs/resolver-binding-linux-arm-musleabihf": + optional: true + "@unrs/resolver-binding-linux-arm64-gnu": + optional: true + "@unrs/resolver-binding-linux-arm64-musl": + optional: true + "@unrs/resolver-binding-linux-ppc64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-musl": + optional: true + "@unrs/resolver-binding-linux-s390x-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-musl": + optional: true + "@unrs/resolver-binding-wasm32-wasi": + optional: true + "@unrs/resolver-binding-win32-arm64-msvc": + optional: true + "@unrs/resolver-binding-win32-ia32-msvc": + optional: true + "@unrs/resolver-binding-win32-x64-msvc": + optional: true + checksum: 10c0/c293db95c59b08e33f3bfb00042120fb90fd5448bd1790cd2dc779a13eb6062dddf04a91b72c73d3635b0c539552435675ce816fa52e66bb0cd7b7e5a2f6399c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.3": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -6318,24 +10157,58 @@ __metadata: languageName: node linkType: hard +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.3.0 + resolution: "v8-to-istanbul@npm:9.3.0" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.12" + "@types/istanbul-lib-coverage": "npm:^2.0.1" + convert-source-map: "npm:^2.0.0" + checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23 + languageName: node + linkType: hard + "viem@npm:^2.21.55": - version: 2.23.6 - resolution: "viem@npm:2.23.6" + version: 2.29.2 + resolution: "viem@npm:2.29.2" dependencies: - "@noble/curves": "npm:1.8.1" - "@noble/hashes": "npm:1.7.1" + "@noble/curves": "npm:1.8.2" + "@noble/hashes": "npm:1.7.2" "@scure/bip32": "npm:1.6.2" "@scure/bip39": "npm:1.5.4" abitype: "npm:1.0.8" isows: "npm:1.0.6" - ox: "npm:0.6.7" - ws: "npm:8.18.0" + ox: "npm:0.6.9" + ws: "npm:8.18.1" peerDependencies: typescript: ">=5.0.4" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/6879cc5c69c9fd2087eb7ca1818c7a4585d57b4d4791827a4390b7f6b5593dfe98fa524e3a4461c50420cd498930c5fe5f3cef8b01c0f22682f58f1c2c0a7d8c + checksum: 10c0/ec29c7a0f17426fa9197ad2a8c15998496d658196386903b909745eca36864f6b42b236fbc6a120ced7e91127a664e75cc50839147c781924d63058a4fa58464 languageName: node linkType: hard @@ -6355,8 +10228,8 @@ __metadata: linkType: hard "vite@npm:^5.0.0": - version: 5.4.14 - resolution: "vite@npm:5.4.14" + version: 5.4.19 + resolution: "vite@npm:5.4.19" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" @@ -6393,7 +10266,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/8842933bd70ca6a98489a0bb9c8464bec373de00f9a97c8c7a4e64b24d15c88bfaa8c1acb38a68c3e5eb49072ffbccb146842c2d4edcdd036a9802964cffe3d1 + checksum: 10c0/c97601234dba482cea5290f2a2ea0fcd65e1fab3df06718ea48adc8ceb14bc3129508216c4989329c618f6a0470b42f439677a207aef62b0c76f445091c2d89e languageName: node linkType: hard @@ -6447,6 +10320,15 @@ __metadata: languageName: node linkType: hard +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: "npm:1.0.12" + checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -6494,16 +10376,17 @@ __metadata: linkType: hard "which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18": - version: 1.1.18 - resolution: "which-typed-array@npm:1.1.18" + version: 1.1.19 + resolution: "which-typed-array@npm:1.1.19" dependencies: available-typed-arrays: "npm:^1.0.7" call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - for-each: "npm:^0.3.3" + call-bound: "npm:^1.0.4" + for-each: "npm:^0.3.5" + get-proto: "npm:^1.0.1" gopd: "npm:^1.2.0" has-tostringtag: "npm:^1.0.2" - checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c + checksum: 10c0/702b5dc878addafe6c6300c3d0af5983b175c75fcb4f2a72dfc3dd38d93cf9e89581e4b29c854b16ea37e50a7d7fca5ae42ece5c273d8060dcd603b2404bbb3f languageName: node linkType: hard @@ -6599,9 +10482,19 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.18.0": - version: 8.18.0 - resolution: "ws@npm:8.18.0" +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^3.0.7" + checksum: 10c0/a2c282c95ef5d8e1c27b335ae897b5eca00e85590d92a3fd69a437919b7b93ff36a69ea04145da55829d2164e724bc62202cdb5f4b208b425aba0807889375c7 + languageName: node + linkType: hard + +"ws@npm:8.18.1": + version: 8.18.1 + resolution: "ws@npm:8.18.1" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -6610,7 +10503,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10c0/25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 + checksum: 10c0/e498965d6938c63058c4310ffb6967f07d4fa06789d3364829028af380d299fe05762961742971c764973dce3d1f6a2633fe8b2d9410c9b52e534b4b882a99fa languageName: node linkType: hard @@ -6621,6 +10514,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" @@ -6636,11 +10536,11 @@ __metadata: linkType: hard "yaml@npm:^2.7.0": - version: 2.7.0 - resolution: "yaml@npm:2.7.0" + version: 2.7.1 + resolution: "yaml@npm:2.7.1" bin: yaml: bin.mjs - checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 + checksum: 10c0/ee2126398ab7d1fdde566b4013b68e36930b9e6d8e68b6db356875c99614c10d678b6f45597a145ff6d63814961221fc305bf9242af8bf7450177f8a68537590 languageName: node linkType: hard @@ -6651,7 +10551,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.7.2": +"yargs@npm:^17.0.0, yargs@npm:^17.3.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -6666,6 +10566,13 @@ __metadata: languageName: node linkType: hard +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" @@ -6674,9 +10581,9 @@ __metadata: linkType: hard "yocto-queue@npm:^1.0.0": - version: 1.1.1 - resolution: "yocto-queue@npm:1.1.1" - checksum: 10c0/cb287fe5e6acfa82690acb43c283de34e945c571a78a939774f6eaba7c285bacdf6c90fbc16ce530060863984c906d2b4c6ceb069c94d1e0a06d5f2b458e2a92 + version: 1.2.1 + resolution: "yocto-queue@npm:1.2.1" + checksum: 10c0/5762caa3d0b421f4bdb7a1926b2ae2189fc6e4a14469258f183600028eb16db3e9e0306f46e8ebf5a52ff4b81a881f22637afefbef5399d6ad440824e9b27f9f languageName: node linkType: hard @@ -6688,10 +10595,11 @@ __metadata: linkType: hard "zod-config@npm:^0.1.3": - version: 0.1.3 - resolution: "zod-config@npm:0.1.3" + version: 0.1.4 + resolution: "zod-config@npm:0.1.4" peerDependencies: dotenv: ">=15" + smol-toml: ^1.x yaml: ^2.x zod: ^3.x peerDependenciesMeta: @@ -6701,13 +10609,13 @@ __metadata: optional: true yaml: optional: true - checksum: 10c0/8da15450760ae5cb581669575316a7bdb5cfec82dcbb6293409db69066cdfc96ac1e3fe985f4ee147c9b5dcc114b9bc483c1b4281ef2e78b67de72cf7a916e15 + checksum: 10c0/9f0f0ca9bfc39684b0e00085df6643cd2730e30c628f4c4c9212c5a3ea975bf9d75cbd9c58398a3b07d1fe2ec22c310811928c1dc476ca4220b75a42d843693a languageName: node linkType: hard "zod@npm:^3.24.2": - version: 3.24.2 - resolution: "zod@npm:3.24.2" - checksum: 10c0/c638c7220150847f13ad90635b3e7d0321b36cce36f3fc6050ed960689594c949c326dfe2c6fa87c14b126ee5d370ccdebd6efb304f41ef5557a4aaca2824565 + version: 3.24.4 + resolution: "zod@npm:3.24.4" + checksum: 10c0/ab3112f017562180a41a0f83d870b333677f7d6b77f106696c56894567051b91154714a088149d8387a4f50806a2520efcb666f108cd384a35c236a191186d91 languageName: node linkType: hard