From 8d152bb7fb11d233fe0cfc92d684e57955af0bf4 Mon Sep 17 00:00:00 2001 From: Hayden Shively Date: Wed, 5 Aug 2026 08:41:02 -0400 Subject: [PATCH 1/5] chore(repo): migrate from bun to pnpm pnpm 11.1.1 takes over installs, workspace resolution, the version catalog, and script running; bun 1.3.12 remains the runtime and test runner. pnpm's default-deny on dependency lifecycle scripts is the point of the migration, per the team supply-chain decision in #curators. Three settings the original migration branch omitted are set explicitly: strictDepBuilds makes an un-opted-in build script a hard install failure rather than a warning (proven: an esbuild probe exits 1 with ERR_PNPM_IGNORED_BUILDS); enablePrePostScripts keeps prestart alive, which builds @repo/contracts' gitignored dist/; and allowBuilds starts empty because nothing in the tree declares an install script. Catalog entries that a fresh resolution would have bumped are pinned to what bun.lock had resolved, so the migration rides no dependency upgrades. solc is pinned exactly because it fixes the compiled bytecode of the soltag lens templates and the Executor. The bot images move to a Node base carrying a copied bun binary: pnpm is activated through corepack, which oven/bun does not ship, and both runtimes must stay on PATH because start fires prestart. Test suite is untouched and byte-identical to main: 1412 pass, 3 skip, 3 fail, 1 error across 136 files on both (the failures are a pre-existing missing RPC_URL_8453 for the fork suites). CRTR-2822 Co-Authored-By: Claude Opus 5 (1M context) --- .agents/skills/build-jsdoc/SKILL.md | 13 +- .claude/commands/babysit-pr.md | 6 +- .../check-dependency-vulnerability.md | 45 +- .claude/commands/execute-issue.md | 2 +- .claude/commands/railway.md | 2 +- .claude/commands/retro.md | 2 +- .claude/commands/review.md | 8 +- .cursor/worktrees.json | 2 +- .github/actions/setup/action.yml | 20 +- .github/workflows/checks.yml | 8 +- .github/workflows/deploy-bot.yml | 2 +- .husky/pre-commit | 4 +- .oxfmtrc.json | 2 +- .oxlintrc.json | 2 +- CLAUDE.md | 23 +- README.md | 20 +- bots/blue-liquidation/Dockerfile | 25 +- bots/blue-liquidation/README.md | 12 +- bots/blue-liquidation/docker-compose.yml | 2 +- bots/blue-liquidation/package.json | 2 +- .../scripts/deploy-railway.ts | 4 +- bots/blue-liquidation/src/index.ts | 2 +- bots/market-making/README.md | 44 +- bots/market-making/docs/architecture.md | 6 +- bots/market-making/package.json | 2 +- bots/midnight-crossed-books/Dockerfile | 22 +- bots/midnight-crossed-books/README.md | 12 +- bots/midnight-crossed-books/package.json | 4 +- bots/midnight-crossed-books/src/bootstrap.ts | 2 +- bots/midnight-liquidation/Dockerfile | 25 +- bots/midnight-liquidation/README.md | 15 +- bots/midnight-liquidation/docker-compose.yml | 2 +- bots/midnight-liquidation/package.json | 2 +- .../scripts/deploy-railway.ts | 2 +- bots/midnight-liquidation/src/index.ts | 2 +- bun.lock | 932 ------ bunfig.toml | 3 +- .../TIB-2026-07-20-migrate-to-pnpm.md | 218 ++ package.json | 4 +- packages/contracts/package.json | 4 +- packages/contracts/scripts/codegen.ts | 4 +- packages/contracts/scripts/deploy-executor.ts | 2 +- packages/contracts/src/abis.ts | 2 +- packages/contracts/src/contracts.ts | 2 +- pnpm-lock.yaml | 2630 +++++++++++++++++ pnpm-workspace.yaml | 59 + 46 files changed, 3121 insertions(+), 1087 deletions(-) delete mode 100644 bun.lock create mode 100644 docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml diff --git a/.agents/skills/build-jsdoc/SKILL.md b/.agents/skills/build-jsdoc/SKILL.md index 7f82ca05..07f48b85 100644 --- a/.agents/skills/build-jsdoc/SKILL.md +++ b/.agents/skills/build-jsdoc/SKILL.md @@ -49,12 +49,13 @@ the canonical tree, and `AGENTS.md` resolves to `CLAUDE.md`. ## Install and Build -Use the repository-pinned Bun version from `packageManager` (`bun@1.3.12`): +Use the repository-pinned pnpm version from `packageManager` (`pnpm@11.1.1`), activated through +corepack: ```sh -bun install --frozen-lockfile -bun run --filter @morpho-org/market-making-bot jsdoc:check -bun run --filter @morpho-org/market-making-bot jsdoc:build +pnpm install --frozen-lockfile +pnpm --filter @morpho-org/market-making-bot run jsdoc:check +pnpm --filter @morpho-org/market-making-bot run jsdoc:build ``` - Coverage command: `jsdoc:check` @@ -134,13 +135,13 @@ URL, default runtime environment, raw provider response, or generated source-map explicit documented return type. Do not disable warnings-as-errors. 3. If TypeDoc warns about a private implementation alias, keep the alias private and avoid exposing it through an inferred public signature; prefer an explicit exported boundary type. -4. If installation changes unrelated lockfile entries, restore them and reinstall with Bun 1.3.12. +4. If installation changes unrelated lockfile entries, restore them and reinstall with pnpm 11.1.1. 5. If generated HTML is staged, unstage and delete it; only source, config, script, dependency, and lockfile changes belong in the PR. ## Verification Checklist -- [ ] Pinned Bun install succeeds with the lockfile frozen. +- [ ] Pinned pnpm install succeeds with the lockfile frozen. - [ ] AST coverage prints the exhaustive public declaration inventory and exits zero. - [ ] TypeDoc exits zero with warnings-as-errors enabled. - [ ] `bots/market-making/build/jsdoc/index.html` exists and is non-empty. diff --git a/.claude/commands/babysit-pr.md b/.claude/commands/babysit-pr.md index 97d8b34c..82239eaa 100644 --- a/.claude/commands/babysit-pr.md +++ b/.claude/commands/babysit-pr.md @@ -438,10 +438,10 @@ For **CI failures**: After all comments are addressed, run validation on affected packages: ```bash -bun run --filter typecheck -bun lint +pnpm --filter run typecheck +pnpm lint bun test -bun format +pnpm format ``` Fix any issues found. diff --git a/.claude/commands/check-dependency-vulnerability.md b/.claude/commands/check-dependency-vulnerability.md index f3840d88..2a40ad8e 100644 --- a/.claude/commands/check-dependency-vulnerability.md +++ b/.claude/commands/check-dependency-vulnerability.md @@ -109,17 +109,26 @@ DO NOT just check package.json specifiers. Semver ranges like `^15.0.5` can reso compatible version. Use deterministic package manager commands to find the ACTUAL installed version for EACH package in -your checklist. This repo uses bun as its package manager — `bun.lock` is the authoritative source -of installed versions. +your checklist. This repo uses pnpm as its package manager — `pnpm-lock.yaml` is the authoritative +source of installed versions. ```bash -# bun pm ls — show installed packages and their resolved versions across the workspace -bun pm ls --all | grep +# pnpm why — show which workspace projects pull a package, and at which resolved version. +# This is the most direct answer for "is in this repo, and at what version?" +pnpm why -r --depth 0 -# Inspect bun.lock directly for the resolved version entries -grep -A 2 "\"@" bun.lock +# pnpm list — the full resolved tree across every workspace project +pnpm list -r --depth Infinity | grep + +# Inspect pnpm-lock.yaml directly. Entries in the `packages:` section are keyed `name@version`, +# so anchoring on two leading spaces matches the resolved version and not a dependency mention. +grep -n "^ @" pnpm-lock.yaml ``` +Note that pnpm records peer-dependency variations, so one package can legitimately appear at the +same version several times with different peer suffixes (for example +`viem@2.47.17(typescript@6.0.2)(zod@3.25.76)`). Those are the same install, not a version conflict. + If the project also has `node_modules` populated, you can confirm by reading the package's own `package.json`: @@ -132,9 +141,10 @@ cat node_modules//package.json | grep '"version"' You MUST show the exact command output used to determine the installed version. For example: ``` -Command: bun pm ls --all | grep next +Command: pnpm why next -r --depth 0 Output: -└── next@15.5.5 +next@15.5.5 +└── @morpho-org/some-bot@0.1.0 (dependencies) Installed version determined: 15.5.5 ``` @@ -194,38 +204,37 @@ If `grep` or direct file search was used, you MUST also include: - The exact line numbers where vulnerable versions were found - The raw line content from those locations -If `bun pm ls`, lockfile inspection, or similar package manager commands were used, you MUST +If `pnpm why`, `pnpm list`, lockfile inspection, or similar package manager commands were used, you MUST provide: - The exact commands executed (copy-pasteable) - A note that the user can run these commands themselves to verify -Example (using `bun pm ls`): +Example (using `pnpm why`): ``` Package: viem -Command: bun pm ls --all | grep viem +Command: pnpm why viem -r --depth 0 Evidence: └── viem@2.20.0 Version line: 2.20.x Safe version for 2.20.x: 2.21.0 Comparison: 2.20.0 < 2.21.0 Result: VULNERABLE -To verify, run: bun pm ls --all | grep viem +To verify, run: pnpm why viem -r --depth 0 ``` -Example (using grep on `bun.lock`): +Example (using grep on `pnpm-lock.yaml`): ``` Package: viem -Command: grep -n "\"viem@" bun.lock +Command: grep -n "^ viem@" pnpm-lock.yaml Files searched: -- /path/to/project/bun.lock +- /path/to/project/pnpm-lock.yaml Evidence found: -- bun.lock:1542: "viem@2.20.0": -- bun.lock:1543: resolution: ... -- bun.lock:1544: version: 2.20.0 +- pnpm-lock.yaml:1547: viem@2.20.0: +- pnpm-lock.yaml:1548: resolution: {integrity: sha512-...} Version determined from line 1544: 2.20.0 Version line: 2.20.x diff --git a/.claude/commands/execute-issue.md b/.claude/commands/execute-issue.md index 356f0791..beb8d2b8 100644 --- a/.claude/commands/execute-issue.md +++ b/.claude/commands/execute-issue.md @@ -71,7 +71,7 @@ Execute the implementation plan for Linear issue {{issue_id}}: - **Post-implementation agents:** After implementing, review the agent team (`.claude/agents/`) and invoke any agents whose trigger conditions match the changes (e.g., `documentor` for architectural changes). - - Run `bun lint` and `bun run --filter typecheck` to ensure code quality + - Run `pnpm lint` and `pnpm --filter run typecheck` to ensure code quality - **Pre-push review:** After lint and typecheck pass, invoke the `reviewer` agent to validate all changes against `docs/CONVENTIONS.md`. If the reviewer reports must-fix issues, address them before pushing. If only suggestions are reported, note them but proceed with the push. diff --git a/.claude/commands/railway.md b/.claude/commands/railway.md index c9ab4dfd..65aeaa40 100644 --- a/.claude/commands/railway.md +++ b/.claude/commands/railway.md @@ -24,7 +24,7 @@ and redeploys that bot's services. Secrets come from the bot's `.env.local`. ```bash set -a; source bots//.env.local; set +a - bun run --filter @morpho-org/ deploy:railway + pnpm --filter @morpho-org/ run deploy:railway ``` 3. Success = the script prints `SUCCESS` for each service. Then verify with `logs`. diff --git a/.claude/commands/retro.md b/.claude/commands/retro.md index cde3efcf..d4889b82 100644 --- a/.claude/commands/retro.md +++ b/.claude/commands/retro.md @@ -191,7 +191,7 @@ Use reference-style markdown links for all PR and TIB references (at the bottom 3. Run formatting: ```bash - bun format + pnpm format ``` 4. Verify the document: diff --git a/.claude/commands/review.md b/.claude/commands/review.md index f79b4776..8761e668 100644 --- a/.claude/commands/review.md +++ b/.claude/commands/review.md @@ -1,6 +1,6 @@ # review -Reviews a GitHub Pull Request with expertise in TypeScript, viem, bun workspaces, and Morpho +Reviews a GitHub Pull Request with expertise in TypeScript, viem, pnpm workspaces, and Morpho protocol best practices. ## Usage @@ -18,7 +18,7 @@ protocol best practices. ## Prompt You are an expert code reviewer specializing in TypeScript, viem (no wagmi — bots have no React -surface), bun-based monorepos, and Morpho protocol code paths. +surface), pnpm-based monorepos, and Morpho protocol code paths. Review the provided PR thoroughly and interactively guide the user through each finding. @@ -116,7 +116,7 @@ Review the provided PR thoroughly and interactively guide the user through each 5. **Use Context7 MCP**: When reviewing implementation details, use the Context7 MCP tools to verify against official documentation for: - viem (contract interactions, encoding, decoding, transports) - - bun (workspaces, test runner, lockfile semantics) + - pnpm (workspaces, catalog, lockfile semantics) and bun (test runner, runtime) 6. **TIB Consideration**: Check if the PR introduces changes that warrant a Technical Intent Brief (TIB) (see `docs/GUIDANCE.md`). Flag as "Minor" severity if the PR: @@ -194,7 +194,7 @@ Review the provided PR thoroughly and interactively guide the user through each `--sandbox danger-full-access`, `git push --force`)? Flag any escalation of tool access or sandbox permissions. - **Evaluation completeness**: For review-type commands or checklists, are there gaps in - coverage given the codebase's stack (viem, multi-chain, bun, oxlint)? + coverage given the codebase's stack (viem, multi-chain, pnpm, bun, oxlint)? - **Cross-reference accuracy**: If the file references other files (TIBs, CONVENTIONS.md sections, other commands), verify those references are valid and up to date. diff --git a/.cursor/worktrees.json b/.cursor/worktrees.json index d1789a64..bf9e730d 100644 --- a/.cursor/worktrees.json +++ b/.cursor/worktrees.json @@ -1,3 +1,3 @@ { - "setup-worktree": ["bun install"] + "setup-worktree": ["pnpm install"] } diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index bcd5c76f..f0131487 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -1,5 +1,5 @@ name: 'Setup' -description: 'Sets up the repository (Bun + Node) and builds dist-emitting workspace packages' +description: 'Sets up the repository (pnpm + Node + Bun) and builds dist-emitting workspace packages' inputs: install: description: 'Whether to install dependencies' @@ -16,23 +16,29 @@ inputs: runs: using: 'composite' steps: - - name: Set up Bun - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 - with: - bun-version: 1.3.12 + # pnpm owns installs, workspace resolution, and script running. The version comes from + # package.json#packageManager, so it is not repeated here. + - name: Set up pnpm + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 - name: Install Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: .nvmrc + # bun remains the runtime and the test runner; pnpm only manages dependencies and tasks. + - name: Set up Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version: 1.3.12 + - name: Install dependencies if: ${{ inputs.install == 'true' }} shell: bash run: | - bun install ${{ inputs.frozen-lockfile == 'true' && '--frozen-lockfile' || '' }} + pnpm install ${{ inputs.frozen-lockfile == 'true' && '--frozen-lockfile' || '' }} - name: Build @repo/contracts if: ${{ inputs.build-contracts == 'true' }} shell: bash - run: bun run --filter @repo/contracts build + run: pnpm --filter @repo/contracts run build diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index e0b92771..7434207e 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -19,10 +19,10 @@ jobs: uses: ./.github/actions/setup - name: Run lint - run: bun lint + run: pnpm lint - name: Run format check - run: bun format:check + run: pnpm format:check Typecheck: runs-on: ubuntu-latest @@ -32,7 +32,7 @@ jobs: uses: ./.github/actions/setup - name: Run typecheck - run: bun run --filter '*' typecheck + run: pnpm -r run typecheck Test: runs-on: ubuntu-latest @@ -69,4 +69,4 @@ jobs: uses: ./.github/actions/setup - name: Check for unused code and dependencies - run: bun knip + run: pnpm knip diff --git a/.github/workflows/deploy-bot.yml b/.github/workflows/deploy-bot.yml index 3f37d762..17453f90 100644 --- a/.github/workflows/deploy-bot.yml +++ b/.github/workflows/deploy-bot.yml @@ -73,4 +73,4 @@ jobs: crossed-books) pkg='@morpho-org/midnight-crossed-books' ;; *) echo "Unknown bot: $BOT" >&2; exit 1 ;; esac - bun run --filter "$pkg" deploy:railway + pnpm --filter "$pkg" run deploy:railway diff --git a/.husky/pre-commit b/.husky/pre-commit index c354c84f..dc569cf7 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,5 +1,5 @@ #!/usr/bin/env sh set -e -bun lint-staged -bun knip +pnpm lint-staged +pnpm knip diff --git a/.oxfmtrc.json b/.oxfmtrc.json index 020434cb..f12ee9e6 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -18,7 +18,7 @@ ] }, "ignorePatterns": [ - "bun.lock", + "pnpm-lock.yaml", "**/dist/**", "**/build/**", "**/coverage/**", diff --git a/.oxlintrc.json b/.oxlintrc.json index 19a7f47c..35306732 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -30,7 +30,7 @@ "**/build", "**/coverage", "**/generated", - "bun.lock", + "pnpm-lock.yaml", "**/*.cjs", "**/*.mjs", "**/*.js" diff --git a/CLAUDE.md b/CLAUDE.md index f5c1d773..baea86c0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -27,12 +27,12 @@ Agent conventions: - **Test verification**: After writing or modifying tests, run them, then temporarily break one assertion to confirm the test actually fails. Revert after confirming. This guards against tests that pass vacuously. -- **Format**: Run `bun format` directly in the validation suite (see Self-Verification) — do not - run `bun format:check` first, just auto-format. +- **Format**: Run `pnpm format` directly in the validation suite (see Self-Verification) — do not + run `pnpm format:check` first, just auto-format. - **JSDoc public surface**: Every externally facing function and public method changed in TypeScript requires substantive JSDoc covering its applicable parameters, return value, failures, and side effects. Before completion, follow `.agents/skills/build-jsdoc/SKILL.md` and run - `bun run --filter @morpho-org/market-making-bot jsdoc:build`; `.claude/skills` must be the real + `pnpm --filter @morpho-org/market-making-bot run jsdoc:build`; `.claude/skills` must be the real symlink `../.agents/skills`, and independent checks must continue to run concurrently through `Promise.all` where possible. - **Utility isolation**: Utility functions must live in a different file from every file containing @@ -76,7 +76,7 @@ your expectation, THEN claim success. ### During development Running lint or typecheck mid-implementation is fine — use your judgment. For tricky changes, a -quick `bun run --filter typecheck` or `bun lint` can help you course-correct early. But +quick `pnpm --filter run typecheck` or `pnpm lint` can help you course-correct early. But **do not force the full validation suite after every change**. Focus on writing code. ### Before committing or when the user says "validate" @@ -84,10 +84,10 @@ quick `bun run --filter typecheck` or `bun lint` can help you course-corre Run the full suite once the user confirms they're happy with the code (or when preparing to commit/push): -1. **Type safety**: Run `bun run --filter typecheck` — zero errors required. -2. **Lint**: Run `bun lint` from the repo root — zero warnings policy. Lint is a workspace-level +1. **Type safety**: Run `pnpm --filter run typecheck` — zero errors required. +2. **Lint**: Run `pnpm lint` from the repo root — zero warnings policy. Lint is a workspace-level concern; oxlint walks the whole tree and per-package `lint` scripts are deliberately omitted. -3. **Format**: Run `bun format` — auto-fixes formatting in place. +3. **Format**: Run `pnpm format` — auto-fixes formatting in place. 4. **Existing tests**: Run `bun test` — all must pass. **Escalation rule**: After 3 failed fix attempts for the same issue, STOP. Tell the user what you @@ -147,7 +147,7 @@ These files provide important background information about dependencies and rela ## Architecture Overview -This is a **bun workspaces monorepo** housing off-chain Morpho curator bots: +This is a **pnpm workspaces monorepo** housing off-chain Morpho curator bots: - `/bots/` — individual bot apps, one per bot. Each is a **standalone long-running TypeScript program**: `main()` in `src/index.ts` loads config from the environment (fail-loud). The @@ -185,9 +185,10 @@ transparent JSON-Lines wire contract) was tried for ~a week and reverted — see which supersedes the now-historical [TIB-2026-07-13-bot-architecture](./docs/decisions/TIB-2026-07-13-bot-architecture.md). -**Key technologies**: bun 1.3.12 (runtime + package manager + workspace task runner), Node.js -24.14.1, TypeScript 6.0, viem for Web3, oxlint + oxfmt for lint/format, knip for dead-code -detection, bun's built-in test runner. +**Key technologies**: pnpm 11.1.1 (package manager + workspace resolution + version catalog + task +runner; lifecycle scripts are default-denied via `allowBuilds` in `pnpm-workspace.yaml`), bun 1.3.12 +(runtime + test runner), Node.js 24.14.1, TypeScript 6.0, viem for Web3, oxlint + oxfmt for +lint/format, knip for dead-code detection. **Node.js requirement**: `24.14.1` (see `.nvmrc`). diff --git a/README.md b/README.md index d99243e6..b9d03420 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Off-chain Morpho curator bots — reallocators, liquidation monitors, and similar — and the shared packages they consume. -This is a [bun workspaces](https://bun.com/docs/install/workspaces) monorepo: +This is a [pnpm workspaces](https://pnpm.io/workspaces) monorepo: - `bots/` — individual bot apps (one per bot); each keeps its own `docs/` - `packages/` — shared libraries (`@repo/bot-kit`, `@repo/swaps`, `@repo/contracts`, @@ -12,18 +12,22 @@ This is a [bun workspaces](https://bun.com/docs/install/workspaces) monorepo: ## Getting started ```sh -nvm use # Node 24.14.1 (see .nvmrc) -bun install +nvm use # Node 24.14.1 (see .nvmrc) +corepack enable pnpm # pnpm 11.1.1, pinned by package.json#packageManager +pnpm install ``` +`pnpm` denies dependency lifecycle scripts by default — see `allowBuilds` in +`pnpm-workspace.yaml`. An install that needs a new one fails loudly rather than running it. + ## Daily commands ```sh -bun run lint # oxlint, repo-wide -bun run lint:fix # oxlint with --fix -bun format # oxfmt, repo-wide -bun run knip # dead-code detection -bun test # bun's built-in test runner +pnpm run lint # oxlint, repo-wide +pnpm run lint:fix # oxlint with --fix +pnpm format # oxfmt, repo-wide +pnpm run knip # dead-code detection +bun test # bun's built-in test runner ``` ## Pointers diff --git a/bots/blue-liquidation/Dockerfile b/bots/blue-liquidation/Dockerfile index 1d7bdd80..4ce3682a 100644 --- a/bots/blue-liquidation/Dockerfile +++ b/bots/blue-liquidation/Dockerfile @@ -1,18 +1,29 @@ # syntax=docker/dockerfile:1 -# Bun-workspace image for the blue-liquidation bot. The build context MUST be the repo root so the +# pnpm-workspace image for the blue-liquidation bot. The build context MUST be the repo root so the # workspace packages (packages/*) resolve — docker-compose.yml sets `context: ../..` and the Railway # deploy runs `railway up` from the repo root. Borrower discovery polls the Morpho GraphQL API, so # there is no indexer/database sidecar to build. -FROM oven/bun:1.3.12-slim +# +# pnpm owns installs, but bun is still the runtime, so this image carries both. The base is Node +# because pnpm is activated through corepack, which the oven/bun images do not provide; bun comes in +# as a single copied binary. Both pnpm and bun must stay on PATH in the FINAL image: `start` fires +# `prestart`, which shells out to `pnpm -r run build` to compile @repo/contracts' gitignored dist/. +FROM node:24.14.1-slim +COPY --from=oven/bun:1.3.12-slim /usr/local/bin/bun /usr/local/bin/bun +ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 WORKDIR /repo -# Manifests + workspace members first, so `bun install` is layer-cached. All members' package.json are -# needed for bun to resolve the `workspace:*` links. -COPY package.json bun.lock bunfig.toml ./ +# Manifests first, so the install layer is cached. `corepack install` pre-fetches the pnpm version +# pinned in package.json#packageManager, so no download happens at container start. +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml bunfig.toml ./ +RUN corepack enable pnpm && corepack install + +# All members' package.json are needed for pnpm to resolve the `workspace:*` links. COPY packages ./packages COPY bots ./bots -RUN bun install --frozen-lockfile +RUN pnpm install --frozen-lockfile -# Run the bot from its package dir (`start` builds workspaces via `prestart`, then runs src/index.ts). +# Run the bot from its package dir (`start` builds workspaces via `prestart`, then runs src/index.ts; +# the bot's own bunfig.toml preload compiles its soltag `sol``` lens templates at startup). WORKDIR /repo/bots/blue-liquidation CMD ["bun", "run", "start"] diff --git a/bots/blue-liquidation/README.md b/bots/blue-liquidation/README.md index 6bc19130..9a0e788e 100644 --- a/bots/blue-liquidation/README.md +++ b/bots/blue-liquidation/README.md @@ -19,12 +19,12 @@ position (none exist while the market is healthy), `RPC_URL_8453`, and ## Prerequisites -- **bun** `1.3.12`, **Node** `24.14.1` (`.nvmrc`). +- **pnpm** `11.1.1` (via corepack), **bun** `1.3.12`, **Node** `24.14.1` (`.nvmrc`). - A chain RPC that both reads and _relays_ transactions — **not** `rpc.morpho.dev/realtime`, which acknowledges sends but never broadcasts them. - A **funded EOA** (native gas) — the liquidator and the recipient of the end-of-exec token sweeps. - The generic **Executor** singleton deployed on each chain the bot runs on - (`bun run --filter @repo/contracts deploy:executor`). The bot derives its CREATE2 address and + (`pnpm --filter @repo/contracts run deploy:executor`). The bot derives its CREATE2 address and refuses to start if it holds no code. - At least one enabled **swap venue** — a `ZEROX_API_KEY` / `ONEINCH_API_KEY` / `LIFI_API_KEY`, or `ENABLE_LIFI=true` (LiFi routes keyless; its key only raises rate limits). A venue-less deployment @@ -86,7 +86,7 @@ export CHAIN_ID=8453 export RPC_URL=https://… export LIQUIDATOR_PRIVATE_KEY=0x… export ZEROX_API_KEY=… # or ENABLE_LIFI=true, or ALLOW_DETECTION_ONLY=true -bun run --filter @morpho-org/blue-liquidation start +pnpm --filter @morpho-org/blue-liquidation run start ``` `prestart` builds the workspace packages (soltag-compiles `@repo/contracts` and materializes the ABI). @@ -106,7 +106,7 @@ Brings up one bot per chain (`bot-base`, `bot-robinhood`) — nothing else. `RPC locally because Compose defaults Robinhood to its public RPC. Robinhood defaults to detection-only (`ALLOW_DETECTION_ONLY_4663` defaults true) and takes chainId-suffixed venue inputs (`ZEROX_API_KEY_4663` etc.) so arming Base never silently arms it. The build context is the repo -root so the bun workspace resolves. +root so the pnpm workspace resolves. ## Deploying to Railway @@ -121,7 +121,7 @@ export RPC_URL_4663=https://… export LIQUIDATOR_PRIVATE_KEY=0x… export ZEROX_API_KEY=… # venue inputs; per-chain via ZEROX_API_KEY_ etc. export ALLOW_DETECTION_ONLY_4663=true # required while Robinhood has no venue -bun run --filter @morpho-org/blue-liquidation deploy:railway +pnpm --filter @morpho-org/blue-liquidation run deploy:railway # Optional: ENABLE_LIFI[_], ONEINCH_API_KEY[_] / LIFI_API_KEY[_], # RAILWAY_ENVIRONMENT (defaults to production). ``` @@ -258,7 +258,7 @@ the nonce from `getTransactionCount('pending')`. - `bun test` — unit tests for the math, LIF, seize-exact planner (incl. the underflow-safety sweep), the id derivation, GraphQL discovery (parsing, pagination, retry semantics), config (incl. venue inference and the zero-venue gate), eligibility, quoting, venues, the queue, and the exec encoder. -- **Live read-path probe** — `bun run --filter @morpho-org/blue-liquidation probe:lens` (needs +- **Live read-path probe** — `pnpm --filter @morpho-org/blue-liquidation run probe:lens` (needs `RPC_URL`, no anvil) runs the deployless lens against a sample of real Base borrowers, prints a valid/hasDebt/healthy/liquidatable breakdown + a decoded sample, and — if it finds a live-liquidatable position — emits a ready-to-paste `FIXTURE` for the fork suite. Run it any time to confirm the read diff --git a/bots/blue-liquidation/docker-compose.yml b/bots/blue-liquidation/docker-compose.yml index 3f527cc4..018333d0 100644 --- a/bots/blue-liquidation/docker-compose.yml +++ b/bots/blue-liquidation/docker-compose.yml @@ -1,6 +1,6 @@ # Runs the per-chain blue-liquidation bots. Borrower candidates come from the Morpho GraphQL API # (MORPHO_API_URL, public by default), so there is no indexer or database to run. The bots' build -# context is the repo root so the bun workspace (packages/*) resolves — see Dockerfile. Set the +# context is the repo root so the pnpm workspace (packages/*) resolves — see Dockerfile. Set the # chainId-suffixed RPCs (RPC_URL_8453, RPC_URL_4663) and a LIQUIDATOR_PRIVATE_KEY. services: bot-base: diff --git a/bots/blue-liquidation/package.json b/bots/blue-liquidation/package.json index 15f9c8d3..a13fe1b1 100644 --- a/bots/blue-liquidation/package.json +++ b/bots/blue-liquidation/package.json @@ -7,7 +7,7 @@ "scripts": { "deploy:railway": "bun run scripts/deploy-railway.ts", "probe:lens": "bun run scripts/probe-live-lens.ts", - "prestart": "bun run --parallel --workspaces --if-present build", + "prestart": "pnpm -r --parallel --if-present run build", "start": "bun src/index.ts", "typecheck": "soltag && tsc --noEmit" }, diff --git a/bots/blue-liquidation/scripts/deploy-railway.ts b/bots/blue-liquidation/scripts/deploy-railway.ts index 02f2e6c4..ea488e64 100644 --- a/bots/blue-liquidation/scripts/deploy-railway.ts +++ b/bots/blue-liquidation/scripts/deploy-railway.ts @@ -19,7 +19,7 @@ * fails loud at startup otherwise. Remove it (rerun with venues) once the chain should route. * * RAILWAY_PROJECT_ID=… RPC_URL_8453=… RPC_URL_4663=… LIQUIDATOR_PRIVATE_KEY=0x… \ - * ALLOW_DETECTION_ONLY_4663=true bun run --filter @morpho-org/blue-liquidation deploy:railway + * ALLOW_DETECTION_ONLY_4663=true pnpm --filter @morpho-org/blue-liquidation run deploy:railway * * The build context MUST be the repo root so the bun workspace (packages/*) resolves — the script * runs `railway up` with cwd set to the repo root (mirrors the Dockerfile header + compose context). @@ -433,7 +433,7 @@ console.log(' ENABLE_LIFI=true keyless). A detection-only chain (ALLOW_DETEC console.log(' discovers + logs liquidatable positions but skips every liquidation — rerun this') console.log(' script with venue inputs once it should route.') console.log(' 2. Each bot needs a funded key + a real RPC before it can broadcast; Robinhood also') -console.log(' needs the Executor deployed (bun run --filter @repo/contracts deploy:executor).') +console.log(' needs the Executor deployed (pnpm --filter @repo/contracts run deploy:executor).') console.log( ' 3. One-time after this migration: delete the legacy Postgres + rindexer services (and' ) diff --git a/bots/blue-liquidation/src/index.ts b/bots/blue-liquidation/src/index.ts index d60eb276..c4f98f24 100644 --- a/bots/blue-liquidation/src/index.ts +++ b/bots/blue-liquidation/src/index.ts @@ -86,7 +86,7 @@ async function main() { client, config.executooorAddress, 'EXECUTOOOR_ADDRESS', - 'deploy it with `bun run --filter @repo/contracts deploy:executor`' + 'deploy it with `pnpm --filter @repo/contracts run deploy:executor`' ) await assertContractDeployed(client, config.morpho, 'Morpho singleton') diff --git a/bots/market-making/README.md b/bots/market-making/README.md index e846bb57..7d44b273 100644 --- a/bots/market-making/README.md +++ b/bots/market-making/README.md @@ -37,10 +37,10 @@ its `github-pages` environment for deployment status. ## Run ```sh -bun run --filter @morpho-org/market-making-bot start -- setup-check +pnpm --filter @morpho-org/market-making-bot run start -- setup-check # Address-only setup inspection: MAKER_PRIVATE_KEY may be omitted. -bun run --filter @morpho-org/market-making-bot start -- --readonly setup-check +pnpm --filter @morpho-org/market-making-bot run start -- --readonly setup-check # Explicit signer sources (root options precede the command). bun run --filter @morpho-org/market-making-bot start -- --private-key '' setup-check @@ -62,49 +62,49 @@ place secrets in argv, where process listings and shell history may expose them. ```sh # Repeat read-only readiness checks every minute until SIGINT/SIGTERM. -bun run --filter @morpho-org/market-making-bot start -- setup-check --monitor +pnpm --filter @morpho-org/market-making-bot run start -- setup-check --monitor # Emit compact JSON Lines for automation instead of the default human-readable output. -bun run --filter @morpho-org/market-making-bot start -- --json setup-check +pnpm --filter @morpho-org/market-making-bot run start -- --json setup-check # One live position-bootstrap cycle. -bun run --filter @morpho-org/market-making-bot start -- bootstrap +pnpm --filter @morpho-org/market-making-bot run start -- bootstrap # One address-only cycle that logs desired make operations without submitting them. -bun run --filter @morpho-org/market-making-bot start -- --readonly bootstrap +pnpm --filter @morpho-org/market-making-bot run start -- --readonly bootstrap # Repeat bootstrap every minute; SIGINT/SIGTERM drains the current cycle and removes owned offers. -bun run --filter @morpho-org/market-making-bot start -- bootstrap --monitor +pnpm --filter @morpho-org/market-making-bot run start -- bootstrap --monitor # Stream full safe diagnostics and emit publication/cancellation hashes as soon as submitted. -bun run --filter @morpho-org/market-making-bot start -- bootstrap --monitor --verbose +pnpm --filter @morpho-org/market-making-bot run start -- bootstrap --monitor --verbose # Exercise the complete monitor and cleanup lifecycle without signing or submitting. -bun run --filter @morpho-org/market-making-bot start -- --readonly bootstrap --monitor +pnpm --filter @morpho-org/market-making-bot run start -- --readonly bootstrap --monitor # Validate and continuously render ladder decisions without loading a private key or submitting. -bun run --filter @morpho-org/market-making-bot start -- ladder --monitor --verbose --readonly +pnpm --filter @morpho-org/market-making-bot run start -- ladder --monitor --verbose --readonly # Sign, broadcast, and confirm one ladder reconciliation cycle. -bun run --filter @morpho-org/market-making-bot start -- ladder +pnpm --filter @morpho-org/market-making-bot run start -- ladder # Continuously reconcile the live ladder and remove owned offers on SIGINT/SIGTERM. -bun run --filter @morpho-org/market-making-bot start -- ladder --monitor --verbose +pnpm --filter @morpho-org/market-making-bot run start -- ladder --monitor --verbose # Run setup checks, bootstrap, and ladder monitoring together until SIGINT/SIGTERM. -bun run --filter @morpho-org/market-making-bot start -- start --verbose +pnpm --filter @morpho-org/market-making-bot run start -- start --verbose # Exercise the same combined lifecycle without signing or submitting transactions. -bun run --filter @morpho-org/market-making-bot start -- --readonly start --verbose +pnpm --filter @morpho-org/market-making-bot run start -- --readonly start --verbose # Cancel every active offer group for the configured maker. -bun run --filter @morpho-org/market-making-bot start -- invalidate +pnpm --filter @morpho-org/market-making-bot run start -- invalidate # Cancel one explicit offer group, even when it has not been indexed by the API. -bun run --filter @morpho-org/market-making-bot start -- invalidate 0x<64-hex-characters> +pnpm --filter @morpho-org/market-making-bot run start -- invalidate 0x<64-hex-characters> # Preview the active groups that maker-wide invalidation would cancel. -bun run --filter @morpho-org/market-making-bot start -- invalidate --readonly +pnpm --filter @morpho-org/market-making-bot run start -- invalidate --readonly ``` Success exits zero and writes human-readable output to standard output. Add the root `--json` flag for @@ -235,13 +235,13 @@ Run the exact read-only monitor command first to inspect whether current cash/cr produces a lower side, a higher side, or both: ```sh -bun run --filter @morpho-org/market-making-bot start -- ladder --monitor --verbose --readonly +pnpm --filter @morpho-org/market-making-bot run start -- ladder --monitor --verbose --readonly ``` Version output remains available: ```sh -bun run --filter @morpho-org/market-making-bot start -- --version +pnpm --filter @morpho-org/market-making-bot run start -- --version ``` ## Deploy @@ -318,13 +318,13 @@ example filename. ```sh # Explicit file; relative paths resolve from the invocation working directory. -bun run --filter @morpho-org/market-making-bot start -- --config ./market-making.yml setup-check +pnpm --filter @morpho-org/market-making-bot run start -- --config ./market-making.yml setup-check # Default discovery in the current working directory. -bun run --filter @morpho-org/market-making-bot start -- setup-check +pnpm --filter @morpho-org/market-making-bot run start -- setup-check # Address-only mode works with either configuration source. -bun run --filter @morpho-org/market-making-bot start -- --readonly setup-check +pnpm --filter @morpho-org/market-making-bot run start -- --readonly setup-check ``` ### Environment variables diff --git a/bots/market-making/docs/architecture.md b/bots/market-making/docs/architecture.md index dfabe178..4b0c8e95 100644 --- a/bots/market-making/docs/architecture.md +++ b/bots/market-making/docs/architecture.md @@ -150,9 +150,9 @@ Run package-focused checks with: ```sh bun test bots/market-making/test -bun run --filter @morpho-org/market-making-bot test:e2e -bun run --filter @morpho-org/market-making-bot typecheck -bun run --filter @morpho-org/market-making-bot jsdoc:build +pnpm --filter @morpho-org/market-making-bot run test:e2e +pnpm --filter @morpho-org/market-making-bot run typecheck +pnpm --filter @morpho-org/market-making-bot run jsdoc:build ``` Before committing or when performing full validation, follow the repository-level validation suite diff --git a/bots/market-making/package.json b/bots/market-making/package.json index b2ef1433..b2f9a03e 100644 --- a/bots/market-making/package.json +++ b/bots/market-making/package.json @@ -20,7 +20,7 @@ "test:e2e": "bun test test/e2e", "typecheck": "tsc --noEmit", "jsdoc:check": "bun scripts/check-jsdoc.ts", - "jsdoc:build": "bun run jsdoc:check && typedoc --options typedoc.json" + "jsdoc:build": "pnpm run jsdoc:check && typedoc --options typedoc.json" }, "dependencies": { "@aws-sdk/client-kms": "3.1101.0", diff --git a/bots/midnight-crossed-books/Dockerfile b/bots/midnight-crossed-books/Dockerfile index 3fe01072..e50669d9 100644 --- a/bots/midnight-crossed-books/Dockerfile +++ b/bots/midnight-crossed-books/Dockerfile @@ -1,9 +1,25 @@ # syntax=docker/dockerfile:1 -FROM oven/bun:1.3.12-slim +# pnpm-workspace image for the midnight-crossed-books bot. The build context MUST be the repo root so +# the workspace packages (packages/*) resolve — docker-compose.yml sets `context: ../..`. +# +# pnpm owns installs, but bun is still the runtime, so this image carries both. The base is Node +# because pnpm is activated through corepack, which the oven/bun images do not provide; bun comes in +# as a single copied binary. Both pnpm and bun must stay on PATH in the FINAL image: `start` fires +# `prestart`, which runs `generate:api` and then `pnpm -r run build` for @repo/contracts' dist/. +FROM node:24.14.1-slim +COPY --from=oven/bun:1.3.12-slim /usr/local/bin/bun /usr/local/bin/bun +ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 WORKDIR /repo -COPY package.json bun.lock bunfig.toml ./ + +# Manifests first, so the install layer is cached. `corepack install` pre-fetches the pnpm version +# pinned in package.json#packageManager, so no download happens at container start. +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml bunfig.toml ./ +RUN corepack enable pnpm && corepack install + +# All members' package.json are needed for pnpm to resolve the `workspace:*` links. COPY packages ./packages COPY bots ./bots -RUN bun install --frozen-lockfile +RUN pnpm install --frozen-lockfile + WORKDIR /repo/bots/midnight-crossed-books CMD ["bun", "run", "start"] diff --git a/bots/midnight-crossed-books/README.md b/bots/midnight-crossed-books/README.md index 2fb2773f..d0253a12 100644 --- a/bots/midnight-crossed-books/README.md +++ b/bots/midnight-crossed-books/README.md @@ -27,9 +27,9 @@ The upstream schemas are checked in so builds never depend on network access: Regenerate types after updating either schema: ```sh -bun run --filter @morpho-org/midnight-crossed-books generate:api -bun format -bun run --filter @morpho-org/midnight-crossed-books typecheck +pnpm --filter @morpho-org/midnight-crossed-books run generate:api +pnpm format +pnpm --filter @morpho-org/midnight-crossed-books run typecheck ``` The generated files live under each infrastructure adapter's `generated/` directory and are not edited by hand. @@ -52,14 +52,14 @@ The generated files live under each infrastructure adapter's `generated/` direct ```sh RPC_URL=https://… DEPLOYER_PRIVATE_KEY=0x… \ MIDNIGHT_ADDRESS=0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A \ -bun run --filter @repo/contracts deploy:crossed-books-resolver +pnpm --filter @repo/contracts run deploy:crossed-books-resolver ``` ## Run ```sh CHAIN_ID=8453 RPC_URL=https://… RESOLVER_PRIVATE_KEY=0x… \ -bun run --filter @morpho-org/midnight-crossed-books start +pnpm --filter @morpho-org/midnight-crossed-books run start ``` The signer policy pins chain, resolver, `resolve` selector, zero ETH value, calldata, gas, and fee ceilings. The pending queue manages nonces and replacement. Every transaction is simulated byte-for-byte before submission. @@ -72,7 +72,7 @@ Railway: ```sh RAILWAY_PROJECT_ID=… RAILWAY_ENVIRONMENT=staging \ RPC_URL=https://… RESOLVER_PRIVATE_KEY=0x… \ -bun run --filter @morpho-org/midnight-crossed-books deploy:railway +pnpm --filter @morpho-org/midnight-crossed-books run deploy:railway ``` CI subsequently runs the same command with `DEPLOY_ONLY=true`, so GitHub holds only a diff --git a/bots/midnight-crossed-books/package.json b/bots/midnight-crossed-books/package.json index d296814f..d9d47745 100644 --- a/bots/midnight-crossed-books/package.json +++ b/bots/midnight-crossed-books/package.json @@ -5,9 +5,9 @@ "license": "Apache-2.0", "type": "module", "scripts": { - "prestart": "bun run generate:api && bun run --parallel --workspaces --if-present build", + "prestart": "pnpm run generate:api && pnpm -r --parallel --if-present run build", "start": "bun src/index.ts", - "typecheck": "bun run generate:api && tsc --noEmit", + "typecheck": "pnpm run generate:api && tsc --noEmit", "deploy:railway": "bun run scripts/deploy-railway.ts", "generate:api": "openapi-typescript morpho-api.json -o src/infrastructure/morpho-api/generated/morpho-api.types.ts && openapi-typescript router-api.json -o src/infrastructure/router-api/generated/router-api.types.ts" }, diff --git a/bots/midnight-crossed-books/src/bootstrap.ts b/bots/midnight-crossed-books/src/bootstrap.ts index 60eb26bc..017579d3 100644 --- a/bots/midnight-crossed-books/src/bootstrap.ts +++ b/bots/midnight-crossed-books/src/bootstrap.ts @@ -64,7 +64,7 @@ export async function createApplication(environment: Record=16.8", "react-dom": ">=16.8" } }, "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww=="], - - "@tanstack/store": ["@tanstack/store@0.7.7", "", {}, "sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ=="], - - "@tanstack/table-core": ["@tanstack/table-core@8.21.3", "", {}, "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg=="], - - "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], - - "@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="], - - "@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], - - "@types/lodash": ["@types/lodash@4.17.24", "", {}, "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ=="], - - "@types/lodash-es": ["@types/lodash-es@4.17.12", "", { "dependencies": { "@types/lodash": "*" } }, "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ=="], - - "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], - - "@types/react": ["@types/react@19.2.18", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w=="], - - "@types/react-dom": ["@types/react-dom@19.2.4", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw=="], - - "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - - "abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], - - "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - - "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], - - "ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="], - - "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - - "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "asn1js": ["asn1js@3.0.6", "", { "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA=="], - - "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - - "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], - - "brace-expansion": ["brace-expansion@5.0.8", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg=="], - - "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - - "bun-types": ["bun-types@1.3.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA=="], - - "change-case": ["change-case@5.4.4", "", {}, "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w=="], - - "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], - - "cli-truncate": ["cli-truncate@5.2.0", "", { "dependencies": { "slice-ansi": "^8.0.0", "string-width": "^8.2.0" } }, "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw=="], - - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], - - "command-exists": ["command-exists@1.2.9", "", {}, "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="], - - "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], - - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - - "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], - - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "decode-formdata": ["decode-formdata@0.9.0", "", {}, "sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw=="], - - "devalue": ["devalue@5.9.0", "", {}, "sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A=="], - - "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - - "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], - - "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], - - "ethereum-cryptography": ["ethereum-cryptography@3.2.0", "", { "dependencies": { "@noble/ciphers": "1.3.0", "@noble/curves": "1.9.0", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0" } }, "sha512-Urr5YVsalH+Jo0sYkTkv1MyI9bLYZwW8BENZCeE1QYaTHETEYx0Nv/SVsWkSqpYrzweg6d8KMY1wTjH/1m/BIg=="], - - "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], - - "evm-maths": ["evm-maths@7.0.1", "", {}, "sha512-rMFIq/xfsNpR1JGkXPnLP1iXLBCtVr1N4tErzdEcKJoqREpKOZswCwNSljN/Sf1QZjv+KGCamh4E4FQcVaJekA=="], - - "executooor-viem": ["executooor-viem@1.3.3", "", { "peerDependencies": { "evm-maths": "^7.0.0", "viem": "^2.0.0" } }, "sha512-8npMgRIDerwxeyWonqsTSrw28CIU4EDUz2JSXRz5hEIF6pxNbRls6uS2wR2lf74J2fxAgtF6+Ltin5/bMlFiyw=="], - - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - - "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], - - "fd-package-json": ["fd-package-json@2.0.0", "", { "dependencies": { "walk-up-path": "^4.0.0" } }, "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ=="], - - "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - - "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], - - "formatly": ["formatly@0.3.0", "", { "dependencies": { "fd-package-json": "^2.0.0" }, "bin": { "formatly": "bin/index.mjs" } }, "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w=="], - - "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], - - "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - - "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - - "husky": ["husky@9.1.7", "", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="], - - "index-to-position": ["index-to-position@1.2.0", "", {}, "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="], - - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], - - "is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], - - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - - "isows": ["isows@1.0.7", "", { "peerDependencies": { "ws": "*" } }, "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg=="], - - "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - - "js-levenshtein": ["js-levenshtein@1.1.6", "", {}, "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g=="], - - "js-md5": ["js-md5@0.8.3", "", {}, "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ=="], - - "js-sha3": ["js-sha3@0.8.0", "", {}, "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="], - - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - - "js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], - - "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "knip": ["knip@5.88.1", "", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "jiti": "^2.6.0", "minimist": "^1.2.8", "oxc-resolver": "^11.19.1", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.5.2", "strip-json-comments": "5.0.3", "unbash": "^2.2.0", "yaml": "^2.8.2", "zod": "^4.1.11" }, "peerDependencies": { "@types/node": ">=18", "typescript": ">=5.0.4 <7" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-tpy5o7zu1MjawVkLPuahymVJekYY3kYjvzcoInhIchgePxTlo+api90tBv2KfhAIe5uXh+mez1tAfmbv8/TiZg=="], - - "linkify-it": ["linkify-it@5.0.2", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q=="], - - "lint-staged": ["lint-staged@16.4.0", "", { "dependencies": { "commander": "^14.0.3", "listr2": "^9.0.5", "picomatch": "^4.0.3", "string-argv": "^0.3.2", "tinyexec": "^1.0.4", "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw=="], - - "listr2": ["listr2@9.0.5", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g=="], - - "lodash-es": ["lodash-es@4.18.1", "", {}, "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="], - - "log-update": ["log-update@6.1.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="], - - "loglayer": ["loglayer@9.3.0", "", { "dependencies": { "@loglayer/context-manager": "2.2.0", "@loglayer/log-level-manager": "2.2.0", "@loglayer/plugin": "3.2.0", "@loglayer/shared": "4.3.0", "@loglayer/transport": "3.2.0" } }, "sha512-xiZFMbUCcy8mC+/uV0EzkZV6nbo3qweQjKKQSGkcrug2VpOHudzcoWR0DOl9edr8oS+BwyEjimpG3sF2CW8sww=="], - - "lunr": ["lunr@2.3.9", "", {}, "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="], - - "markdown-it": ["markdown-it@14.3.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.5.0", "linkify-it": "^5.0.2", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw=="], - - "mdurl": ["mdurl@2.1.0", "", {}, "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg=="], - - "memorystream": ["memorystream@0.3.1", "", {}, "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw=="], - - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - - "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], - - "minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - - "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - - "openapi-fetch": ["openapi-fetch@0.17.0", "", { "dependencies": { "openapi-typescript-helpers": "^0.1.0" } }, "sha512-PsbZR1wAPcG91eEthKhN+Zn92FMHxv+/faECIwjXdxfTODGSGegYv0sc1Olz+HYPvKOuoXfp+0pA2XVt2cI0Ig=="], - - "openapi-typescript": ["openapi-typescript@7.13.0", "", { "dependencies": { "@redocly/openapi-core": "^1.34.6", "ansi-colors": "^4.1.3", "change-case": "^5.4.4", "parse-json": "^8.3.0", "supports-color": "^10.2.2", "yargs-parser": "^21.1.1" }, "peerDependencies": { "typescript": "^5.x" }, "bin": { "openapi-typescript": "bin/cli.js" } }, "sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ=="], - - "openapi-typescript-helpers": ["openapi-typescript-helpers@0.1.0", "", {}, "sha512-OKTGPthhivLw/fHz6c3OPtg72vi86qaMlqbJuVJ23qOvQ+53uw1n7HdmkJFibloF7QEjDrDkzJiOJuockM/ljw=="], - - "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], - - "ox": ["ox@0.14.15", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-3TubCmbKen/cuZQzX0qDbOS5lojjdSZ90lqKxWIDWd5siuJ0IJBaTXMYs8eMPLcraqnOwGZazz3apHPGiRCkGQ=="], - - "oxc-resolver": ["oxc-resolver@11.19.1", "", { "optionalDependencies": { "@oxc-resolver/binding-android-arm-eabi": "11.19.1", "@oxc-resolver/binding-android-arm64": "11.19.1", "@oxc-resolver/binding-darwin-arm64": "11.19.1", "@oxc-resolver/binding-darwin-x64": "11.19.1", "@oxc-resolver/binding-freebsd-x64": "11.19.1", "@oxc-resolver/binding-linux-arm-gnueabihf": "11.19.1", "@oxc-resolver/binding-linux-arm-musleabihf": "11.19.1", "@oxc-resolver/binding-linux-arm64-gnu": "11.19.1", "@oxc-resolver/binding-linux-arm64-musl": "11.19.1", "@oxc-resolver/binding-linux-ppc64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-gnu": "11.19.1", "@oxc-resolver/binding-linux-riscv64-musl": "11.19.1", "@oxc-resolver/binding-linux-s390x-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-gnu": "11.19.1", "@oxc-resolver/binding-linux-x64-musl": "11.19.1", "@oxc-resolver/binding-openharmony-arm64": "11.19.1", "@oxc-resolver/binding-wasm32-wasi": "11.19.1", "@oxc-resolver/binding-win32-arm64-msvc": "11.19.1", "@oxc-resolver/binding-win32-ia32-msvc": "11.19.1", "@oxc-resolver/binding-win32-x64-msvc": "11.19.1" } }, "sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg=="], - - "oxfmt": ["oxfmt@0.36.0", "", { "dependencies": { "tinypool": "2.1.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.36.0", "@oxfmt/binding-android-arm64": "0.36.0", "@oxfmt/binding-darwin-arm64": "0.36.0", "@oxfmt/binding-darwin-x64": "0.36.0", "@oxfmt/binding-freebsd-x64": "0.36.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.36.0", "@oxfmt/binding-linux-arm-musleabihf": "0.36.0", "@oxfmt/binding-linux-arm64-gnu": "0.36.0", "@oxfmt/binding-linux-arm64-musl": "0.36.0", "@oxfmt/binding-linux-ppc64-gnu": "0.36.0", "@oxfmt/binding-linux-riscv64-gnu": "0.36.0", "@oxfmt/binding-linux-riscv64-musl": "0.36.0", "@oxfmt/binding-linux-s390x-gnu": "0.36.0", "@oxfmt/binding-linux-x64-gnu": "0.36.0", "@oxfmt/binding-linux-x64-musl": "0.36.0", "@oxfmt/binding-openharmony-arm64": "0.36.0", "@oxfmt/binding-win32-arm64-msvc": "0.36.0", "@oxfmt/binding-win32-ia32-msvc": "0.36.0", "@oxfmt/binding-win32-x64-msvc": "0.36.0" }, "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-/ejJ+KoSW6J9bcNT9a9UtJSJNWhJ3yOLSBLbkoFHJs/8CZjmaZVZAJe4YgO1KMJlKpNQasrn/G9JQUEZI3p0EQ=="], - - "oxlint": ["oxlint@1.61.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.61.0", "@oxlint/binding-android-arm64": "1.61.0", "@oxlint/binding-darwin-arm64": "1.61.0", "@oxlint/binding-darwin-x64": "1.61.0", "@oxlint/binding-freebsd-x64": "1.61.0", "@oxlint/binding-linux-arm-gnueabihf": "1.61.0", "@oxlint/binding-linux-arm-musleabihf": "1.61.0", "@oxlint/binding-linux-arm64-gnu": "1.61.0", "@oxlint/binding-linux-arm64-musl": "1.61.0", "@oxlint/binding-linux-ppc64-gnu": "1.61.0", "@oxlint/binding-linux-riscv64-gnu": "1.61.0", "@oxlint/binding-linux-riscv64-musl": "1.61.0", "@oxlint/binding-linux-s390x-gnu": "1.61.0", "@oxlint/binding-linux-x64-gnu": "1.61.0", "@oxlint/binding-linux-x64-musl": "1.61.0", "@oxlint/binding-openharmony-arm64": "1.61.0", "@oxlint/binding-win32-arm64-msvc": "1.61.0", "@oxlint/binding-win32-ia32-msvc": "1.61.0", "@oxlint/binding-win32-x64-msvc": "1.61.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.18.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-ZC0ALuhDZ6ivOFG+sy0D0pEDN49EvsId98zVlmYdkcXHsEM14m/qTNUEsUpiFiCVbpIxYtVBmmLE87nsbUHohQ=="], - - "oxlint-tsgolint": ["oxlint-tsgolint@0.22.1", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.22.1", "@oxlint-tsgolint/darwin-x64": "0.22.1", "@oxlint-tsgolint/linux-arm64": "0.22.1", "@oxlint-tsgolint/linux-x64": "0.22.1", "@oxlint-tsgolint/win32-arm64": "0.22.1", "@oxlint-tsgolint/win32-x64": "0.22.1" }, "bin": { "tsgolint": "bin/tsgolint.js" } }, "sha512-YUSGSLUnoolsu8gxISEDio3q1rtsCozwfOzASUn3DT2mR2EeQ93uEEnen7s+6LpF+lyTQFln1pQfqwBh/fsVEg=="], - - "parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="], - - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], - - "pluralize": ["pluralize@8.0.0", "", {}, "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="], - - "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], - - "pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="], - - "pvutils": ["pvutils@1.1.5", "", {}, "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA=="], - - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], - - "react": ["react@19.2.8", "", {}, "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw=="], - - "react-dom": ["react-dom@19.2.8", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.8" } }, "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ=="], - - "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - - "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], - - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - - "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], - - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - - "semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - - "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "slice-ansi": ["slice-ansi@8.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "is-fullwidth-code-point": "^5.1.0" } }, "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg=="], - - "smol-toml": ["smol-toml@1.6.1", "", {}, "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg=="], - - "solc": ["solc@0.8.35", "", { "dependencies": { "command-exists": "^1.2.8", "commander": "^8.1.0", "follow-redirects": "^1.12.1", "js-sha3": "0.8.0", "memorystream": "^0.3.1", "semver": "^5.5.0", "tmp": "0.0.33" }, "bin": { "solcjs": "solc.js" } }, "sha512-OaP/4zyoKRo2CjqZDxbtkeRlEo6MxP4FLCxntw1Agf9OSoecmwYKoFBSB34UcSKBFBucrTh3Mb0nRoJou62ibw=="], - - "soltag": ["soltag@0.0.17", "", { "dependencies": { "unplugin": "^3.0.0" }, "peerDependencies": { "solc": "^0.8.0", "typescript": ">=5.0", "viem": "^2.0.0" }, "optionalPeers": ["typescript"], "bin": { "soltag": "dist/cli.js" } }, "sha512-CX7kxblz4O4cac/610lascNMIgakgXIBJNBecVxBPgeaa2l97YV5uHP1kdLzR1dI3BL8dr3BeEykY+RiX6ZgEg=="], - - "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], - - "string-width": ["string-width@8.2.1", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA=="], - - "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - - "strip-json-comments": ["strip-json-comments@5.0.3", "", {}, "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw=="], - - "supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], - - "tinyexec": ["tinyexec@1.1.1", "", {}, "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg=="], - - "tinypool": ["tinypool@2.1.0", "", {}, "sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw=="], - - "tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], - - "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], - - "typedoc": ["typedoc@0.28.20", "", { "dependencies": { "@gerrit0/mini-shiki": "^3.23.0", "lunr": "^2.3.9", "markdown-it": "^14.3.0", "minimatch": "^10.2.5", "yaml": "^2.9.0" }, "peerDependencies": { "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x" }, "bin": { "typedoc": "bin/typedoc" } }, "sha512-uSKqkh8Cr48vllnEy+jdaAgOeR6Y+QCBW7usgUsKj7gJEfR7stw9U/fE49LBnj2tPRKPY0c0EBJSWe9Appmplg=="], - - "typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], - - "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], - - "unbash": ["unbash@2.2.0", "", {}, "sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w=="], - - "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], - - "unplugin": ["unplugin@3.0.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg=="], - - "uri-js-replace": ["uri-js-replace@1.0.1", "", {}, "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g=="], - - "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], - - "uuid": ["uuid@11.1.1", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ=="], - - "valibot": ["valibot@1.4.1", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g=="], - - "viem": ["viem@2.47.17", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.14.15", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-yNUKw6b1nd1i96GcJPqp096w5VVjUky/6PLT8UeUsEArzhD9YRrC0QJ50o8YEF7xA6M0FK8e6u5tAMyBLLl7tw=="], - - "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="], - - "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], - - "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], - - "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], - - "yaml": ["yaml@2.8.3", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg=="], - - "yaml-ast-parser": ["yaml-ast-parser@0.0.43", "", {}, "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A=="], - - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - - "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - - "@ethereumjs/util/@noble/curves": ["@noble/curves@2.2.0", "", { "dependencies": { "@noble/hashes": "2.2.0" } }, "sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ=="], - - "@ethereumjs/util/@noble/hashes": ["@noble/hashes@2.2.0", "", {}, "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg=="], - - "@morpho-org/blue-sdk/@noble/hashes": ["@noble/hashes@2.2.0", "", {}, "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg=="], - - "@morpho-org/morpho-sdk/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - - "@redocly/openapi-core/colorette": ["colorette@1.4.0", "", {}, "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g=="], - - "@redocly/openapi-core/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], - - "ethereum-cryptography/@noble/curves": ["@noble/curves@1.9.0", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg=="], - - "knip/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], - - "log-update/slice-ansi": ["slice-ansi@7.1.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w=="], - - "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], - - "ox/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], - - "solc/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], - - "typedoc/yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], - - "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - - "@redocly/openapi-core/minimatch/brace-expansion": ["brace-expansion@2.1.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA=="], - - "@redocly/openapi-core/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - } -} diff --git a/bunfig.toml b/bunfig.toml index 8114b12d..d7a00e63 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -1,5 +1,4 @@ -[install] -minimumReleaseAge = 259200 +# bun remains the runtime + test runner; pnpm owns installs (see pnpm-workspace.yaml). # Compile the liquidation bots' soltag `sol``` lens templates during `bun test` (each plugin # self-scopes to its own bot's files, so both can be preloaded — other workspaces are untouched). diff --git a/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md b/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md new file mode 100644 index 00000000..e3f73ea6 --- /dev/null +++ b/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md @@ -0,0 +1,218 @@ +# TIB-2026-07-20: Migrate to pnpm and remove bun from the toolchain + +| Field | Value | +| ---------- | ---------- | +| **Status** | Proposed | +| **Date** | 2026-07-20 | +| **Author** | @cashd | +| **Scope** | Repo-wide | + +--- + +## Context + +A recent npm supply-chain attack prompted a team-wide decision (Slack, `#curators`, 2026-07-17) to +standardize package management on pnpm across repos. The deciding property is pnpm's +"no by default" policy on dependency lifecycle scripts (pnpm v11 `strictDepBuilds`): a compromised +transitive dependency cannot run arbitrary code at install time unless explicitly allowed. bun has +no equivalent default-deny posture. The migration began as a package-manager swap with bun retained +as runtime and test runner, but the split toolchain (pnpm installs, bun everything else) left the +bun binary in every image and CI job for marginal benefit — so the scope expanded, in the same +branch, to remove bun entirely. The `morpho-apps` monorepo already runs pnpm + vitest, so mirroring +it also removes cross-repo tooling divergence. + +## Goals / Non-Goals + +**Goals** + +- Move installs, workspace resolution, the version catalog, and script running to **pnpm 11.1.1**, + mirroring the `morpho-apps` setup. +- Default-deny dependency lifecycle scripts and carry over the existing install-hardening posture + (minimum release age, exact saves, store integrity). +- Remove bun entirely: tests run on **vitest**, production bots run bundled JS on **Node**, and no + image or CI job carries the bun binary. +- Keep CI, Dockerfiles, and deploy flows producing the same artifacts and behavior. + +**Non-Goals** + +- Upgrading dependencies as part of the migration (beyond what the toolchain swap itself requires). + Versions are pinned to what the old `bun.lock` resolved; bumps are separate, deliberate changes. +- Changing bot behavior, architecture, or the soltag `sol\`\`` authoring pattern — only how it is + transformed at build/test time changes. + +## Current Solution + +bun 1.3.12 was package manager, workspace resolver, task runner, test runner, and runtime: +`bun install` against `bun.lock`, the version catalog in `package.json#workspaces.catalog`, +install hardening (`minimumReleaseAge` 259200 s etc.) in `bunfig.toml`, `bun test` with soltag +transform preloads (`bunfig.toml` `[test]`/`preload`), automatic `.env` loading, and bots running +TypeScript directly via `bun src/index.ts` from `oven/bun` base images. bun runs dependency +lifecycle scripts by default. + +## Proposed Solution + +Adopt pnpm 11.1.1 (pinned via `package.json#packageManager`, activated through corepack) for +everything install- and workspace-shaped, and replace bun's remaining roles with vitest (tests), +esbuild (bundling), and Node (runtime): + +### Package management + +- **Workspace + catalog**: the version catalog moves from `package.json#workspaces.catalog` to + `pnpm-workspace.yaml`, alongside install hardening: `engineStrict`, `saveExact`, + `verifyStoreIntegrity`, `preferOffline`, `minimumReleaseAge: 4320` minutes (carried over from + bunfig's 259200 s), `minimumReleaseAgeExclude: @morpho-org/*`, and `allowBuilds` opting in + **esbuild only** — the sole dependency that needs a lifecycle script; any future allowance is a + deliberate, reviewable addition. +- **Lockfile**: `bun.lock` deleted; `pnpm-lock.yaml` generated. `bunfig.toml` deleted. +- **Pinned oxlint**: `oxlint` is pinned to `1.61.0` in the catalog — the version the old + `bun.lock` had resolved. Fresh resolution of `^1.46.0` pulled `1.74.0`, which introduced new + lint failures and requires `oxlint-tsgolint >= 0.24`; both get bumped together deliberately + later. +- **Script idiom**: `bun run --filter X cmd` becomes `pnpm --filter X run cmd` across package + scripts, docs, and agent commands. + +### Tests: `bun:test` → vitest 4.1.2 + +- All 79 test files move from `bun:test` to vitest — a drop-in for `describe`/`it`/`expect`, with + mechanical renames: `mock()` → `vi.fn()`, `spyOn` → `vi.spyOn`, + `mock.restore()` → `vi.restoreAllMocks()`. +- The bun test preloads for the soltag `sol\`\``transform are deleted; tests use soltag's`/vite`adapter in per-bot`vitest.config.ts`, and a root `vitest.config.ts` lists the five test-bearing + workspace projects. +- bun auto-loaded `.env` files; the fork suite's env (`RPC_URL_8453` from `.env.test.local`) now + loads explicitly via vite's `loadEnv` in the bot config. +- The port surfaced one real bug class: `expect(...).rejects` assertions were floating promises + under bun's typings — 9 sites are now `await`ed, caught by oxlint's `no-floating-promises` once + vitest's typings applied. + +### Runtime: direct TS execution → esbuild bundle + Node + +- Bots no longer run TypeScript directly. Each bot gains `scripts/build.ts` — an esbuild bundle + with the soltag esbuild `onLoad` transform, the same pattern `@repo/contracts` already used — + producing `dist/`; production is plain `node dist/src/index.js`. +- Operator scripts that import `sol\`\`` sources (`probe-live-lens`, +`seed-liquidatable-positions`) are bundled as extra entrypoints and run from `dist/`; pure-CLI + scripts run via tsx. +- `@repo/contracts` `scripts/build.ts` moves from `Bun.build` to esbuild with the same plugin. +- **Bun API shims**: `Bun.env` → `process.env` (42 sites); `Bun.spawn`/`Bun.sleep` in fork + harnesses → `node:child_process` `spawn` + `node:timers/promises`; bun's `$` shell in + `deploy-railway` scripts → execa's `$` (quiet + throw by default; stdin secrets via + `$({ input })`); bun's global `confirm()` → a `node:readline/promises` prompt; + `import.meta.dir` → `dirname(fileURLToPath(import.meta.url))`. + +### Dependencies, Docker, CI + +- **Deps**: +vitest 4.1.2, +vite 7.3.6, +tsx 4.21.0, +esbuild 0.28.1, +execa 9.6.0, + +@types/node 24.7.0; −@types/bun. tsconfig `types` changes `["bun"]` → `["node"]`. +- **Docker**: bot images build from `node:24.14.1-slim` only — no bun binary. All dists are built + at image build (`pnpm -r --if-present run build`) and `CMD` is `node dist/src/index.js`; no + runtime transform or container-start build. +- **CI**: the setup action becomes `pnpm/action-setup` (version read from `packageManager`) + + `setup-node`, installing with `pnpm install --frozen-lockfile`; `setup-bun` is removed and unit + tests run `pnpm test`. + +## Considered Alternatives + +### Alternative 1: Stay on bun and mitigate lifecycle-script risk manually + +bun 1.3.x has no default-deny lifecycle-script mechanism, so mitigation would rest on release-age +delay alone. + +**Why rejected:** Leaves the install-time code-execution vector open, and diverges from the +team-wide standard decided in `#curators`. + +### Alternative 2: pnpm for installs, bun retained as runtime + test runner + +The migration's original scope: pnpm covers the install-time attack surface while `bun test`, +`bun src/index.ts`, and the soltag preloads stay untouched. + +**Why rejected:** A split toolchain keeps the bun binary in every image and CI job, keeps +`bunfig.toml` alive solely for test preloads, and diverges from `morpho-apps`' vitest stack. The +bun-only surfaces (test API, `Bun.*` APIs, direct TS execution) all had straightforward Node +equivalents, so removing bun completes the single-toolchain decision at modest porting cost. + +## Assumptions & Constraints + +- pnpm's `allowBuilds` stays minimal (esbuild only); any addition must be an explicit, reviewed + entry. +- The oxlint pin at `1.61.0` is temporary; the coordinated `oxlint` + `oxlint-tsgolint` bump is a + known follow-up. +- Docker images and `.nvmrc` stay in sync on Node 24.14.1. +- soltag's `/vite` adapter and its esbuild `onLoad` transform produce equivalent output — the fork + suite and bundled operator scripts exercise this. + +## Security + +This migration is itself a security measure: pnpm v11's default-deny on dependency lifecycle +scripts (`strictDepBuilds` + a one-entry `allowBuilds` for esbuild) closes the install-time +arbitrary-code vector exploited in the recent npm supply-chain attack. `minimumReleaseAge` +(4320 min, excluding `@morpho-org/*`) adds a publication-delay buffer against freshly compromised +releases, and `verifyStoreIntegrity` + `saveExact` harden resolution. Removing bun entirely also +shrinks the shipped image surface to a single runtime (Node) with no second toolchain to patch. + +## Future Considerations + +- Bump `oxlint` to 1.74.x together with `oxlint-tsgolint >= 0.24` and fix the new lint findings. + +## Addendum A (2026-08-05) — landing the migration against a grown repo + +The decision is unchanged. This records how it is applied, since the original branch sat unmerged +for two weeks and the repo moved ~190 commits underneath it. + +**Landed as two PRs, not one.** PR 1 does the package-manager swap only, leaving bun as runtime and +test runner, so it touches no test file and closes the install-time vector on its own. PR 2 removes +bun. This mirrors the original branch's own commit split. + +**Four workspaces did not exist when this TIB was drafted**: `bots/market-making`, +`bots/midnight-crossed-books`, `bots/kill-switch`, and `@repo/{offers,monitoring,logging,observability}`. +Test files grew 79 -> 136 and `Bun.env` sites 42 -> 59. PR 2 must also port bun surfaces the original +branch never encountered: `Bun.serve`, `Bun.which`, `Bun.file`, `Bun.argv`, `import.meta.main`, and +`import type { Subprocess | Server } from 'bun'`. + +**`strictDepBuilds: true` was missing from the original `pnpm-workspace.yaml`.** Without it an +un-opted-in lifecycle script is a warning, not an install failure — which would have left the +deciding security property of this TIB advisory only. It is now set explicitly. + +**`allowBuilds` starts empty, not `{esbuild: true}`.** Evidence: no package in the current dependency +tree declares `preinstall`, `install`, or `postinstall`, and `esbuild` is absent from the tree +entirely. esbuild becomes the first and only entry in PR 2, where it is introduced. + +**`enablePrePostScripts: true` is required and was never mentioned.** pnpm does not run npm-style +pre/post scripts by default. `prestart` is load-bearing: it builds `@repo/contracts`' gitignored +`dist/` for the liquidators and runs `generate:api` for `midnight-crossed-books`. Without this +setting the bots cannot resolve their own workspace dependency at container start. + +**PR 1's Docker intermediate state uses a Node base with a copied bun binary.** Keeping +`FROM oven/bun` was not viable: pnpm is activated through corepack, which those images do not +provide, and `bun install --frozen-lockfile` is not a fallback once `bun.lock` is deleted. Both pnpm +and bun must remain on PATH in the _final_ image for PR 1, because `start` fires `prestart`, which +shells out to pnpm. PR 2 drops the bun binary and switches `CMD` to `node dist/src/index.js`. + +**Catalog entries are pinned to what `bun.lock` had resolved.** Regenerating the lockfile re-resolves +every caret range, which contradicts this TIB's non-goal of riding dependency upgrades along. +`@internationalized/date`, `@types/bun`, `date-fns`, and — most importantly — `solc` all drifted +upward and are now pinned exactly. `solc` matters beyond parity: it determines the compiled bytecode +of the soltag `sol```lens templates and the Executor, so a silent bump would invalidate the recorded +explorer-verification settings (0.8.35, optimizer runs=200). Remaining drift is confined to +dev-tooling transitives within their declared ranges; the only runtime-reachable one is `valibot`1.4.1 -> 1.4.2 (patch, via`@morpho-org/viem-dlc`). + +**pnpm settings live in `pnpm-workspace.yaml`, not `.npmrc`.** The tracked `.npmrc` stays empty so +configuration does not drift across two files. + +**`Bun.env` -> `process.env` retires a documented convention** (`docs/CONVENTIONS.md`), so that edit +lands in PR 2 alongside the code change rather than ahead of it. + +## References + +- Slack `#curators` decision thread, 2026-07-17 — team-wide pnpm standardization. +- `morpho-apps` monorepo — the pnpm + vitest setup this mirrors. +- [TIB-2026-04-16-bootstrap-curator-bots](./TIB-2026-04-16-bootstrap-curator-bots.md) — the + original bun-first tooling stack this amends. + + diff --git a/package.json b/package.json index 1e122b0f..b7790ae3 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ } }, "scripts": { - "build": "bun run --filter @repo/contracts build", + "build": "pnpm --filter @repo/contracts run build", "format": "oxfmt", "format:check": "oxfmt --check", "knip": "knip", @@ -66,5 +66,5 @@ "engines": { "node": "^24.14.1" }, - "packageManager": "bun@1.3.12" + "packageManager": "pnpm@11.1.1" } diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 6bf07657..3ac49b31 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -13,11 +13,11 @@ "scripts": { "generate": "bun run scripts/codegen.ts && oxfmt src/abis.ts src/contracts.ts", "build": "soltag && bun run scripts/build.ts && tsc -p tsconfig.build.json --emitDeclarationOnly", - "deploy:executor": "bun run build && bun run scripts/deploy-executor.ts", + "deploy:executor": "pnpm run build && bun run scripts/deploy-executor.ts", "typecheck": "soltag && tsc --noEmit", "format:sol": "forge fmt", "format:sol:check": "forge fmt --check", - "deploy:crossed-books-resolver": "bun run build && bun run scripts/deploy-crossed-books-resolver.ts" + "deploy:crossed-books-resolver": "pnpm run build && bun run scripts/deploy-crossed-books-resolver.ts" }, "devDependencies": { "@repo/typescript-config": "workspace:*", diff --git a/packages/contracts/scripts/codegen.ts b/packages/contracts/scripts/codegen.ts index 961e030b..25461c73 100644 --- a/packages/contracts/scripts/codegen.ts +++ b/packages/contracts/scripts/codegen.ts @@ -7,7 +7,7 @@ * Interfaces export only `.abi` (they have no bytecode). Top-level contracts export the WHOLE * soltag object (abi + bytecode + deployless factory), since a caller may want more than the ABI. * - * Run via `bun run --filter @repo/contracts generate` after adding/renaming/removing a `.sol` file. + * Run via `pnpm --filter @repo/contracts run generate` after adding/renaming/removing a `.sol` file. * The output is checked in — we don't run codegen on every build. */ import { readdirSync, writeFileSync } from 'node:fs' @@ -21,7 +21,7 @@ const INTERFACES_DIR = resolve(SOLIDITY_DIR, 'interfaces') /** Renders a generated `src/*.ts` module (header + soltag import + body). */ function render(sourceGlob: string, body: string): string { return `// AUTO-GENERATED by scripts/codegen.ts from solidity/${sourceGlob}. -// Run \`bun run --filter @repo/contracts generate\` after adding, renaming, or removing a .sol file. +// Run \`pnpm --filter @repo/contracts run generate\` after adding, renaming, or removing a .sol file. // Do not edit by hand — your changes will be overwritten. import { sol, solFile } from 'soltag' diff --git a/packages/contracts/scripts/deploy-executor.ts b/packages/contracts/scripts/deploy-executor.ts index 0c4545bd..5bba2475 100644 --- a/packages/contracts/scripts/deploy-executor.ts +++ b/packages/contracts/scripts/deploy-executor.ts @@ -7,7 +7,7 @@ * * Run once per chain: * - * RPC_URL=… DEPLOYER_PRIVATE_KEY=… bun run --filter @repo/contracts deploy:executor + * RPC_URL=… DEPLOYER_PRIVATE_KEY=… pnpm --filter @repo/contracts run deploy:executor * * Idempotent: a no-op (exit 0) if the deterministic address already holds code. */ diff --git a/packages/contracts/src/abis.ts b/packages/contracts/src/abis.ts index 64812509..0af4e308 100644 --- a/packages/contracts/src/abis.ts +++ b/packages/contracts/src/abis.ts @@ -1,5 +1,5 @@ // AUTO-GENERATED by scripts/codegen.ts from solidity/interfaces/*.sol. -// Run `bun run --filter @repo/contracts generate` after adding, renaming, or removing a .sol file. +// Run `pnpm --filter @repo/contracts run generate` after adding, renaming, or removing a .sol file. // Do not edit by hand — your changes will be overwritten. import { sol, solFile } from 'soltag' diff --git a/packages/contracts/src/contracts.ts b/packages/contracts/src/contracts.ts index 692c7989..77de2e4b 100644 --- a/packages/contracts/src/contracts.ts +++ b/packages/contracts/src/contracts.ts @@ -1,5 +1,5 @@ // AUTO-GENERATED by scripts/codegen.ts from solidity/*.sol. -// Run `bun run --filter @repo/contracts generate` after adding, renaming, or removing a .sol file. +// Run `pnpm --filter @repo/contracts run generate` after adding, renaming, or removing a .sol file. // Do not edit by hand — your changes will be overwritten. import { sol, solFile } from 'soltag' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..848f5367 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2630 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +catalogs: + default: + '@internationalized/date': + specifier: 3.12.1 + version: 3.12.1 + '@loglayer/transport-betterstack': + specifier: 2.2.0 + version: 2.2.0 + '@morpho-org/midnight-sdk': + specifier: 1.3.0 + version: 1.3.0 + '@morpho-org/morpho-ts': + specifier: 2.8.0 + version: 2.8.0 + '@morpho-org/viem-dlc': + specifier: 0.0.11 + version: 0.0.11 + '@types/bun': + specifier: 1.3.13 + version: 1.3.13 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 + date-fns: + specifier: 4.1.0 + version: 4.1.0 + executooor-viem: + specifier: ^1.3.3 + version: 1.3.3 + husky: + specifier: ^9.1.5 + version: 9.1.7 + knip: + specifier: ^5.86.0 + version: 5.88.1 + lint-staged: + specifier: ^16.1.2 + version: 16.4.0 + lodash-es: + specifier: ^4.18.0 + version: 4.18.1 + loglayer: + specifier: 9.3.0 + version: 9.3.0 + openapi-fetch: + specifier: 0.17.0 + version: 0.17.0 + openapi-typescript: + specifier: ^7.13.0 + version: 7.13.0 + oxfmt: + specifier: ^0.36.0 + version: 0.36.0 + oxlint: + specifier: 1.61.0 + version: 1.61.0 + oxlint-tsgolint: + specifier: ^0.22.1 + version: 0.22.1 + solc: + specifier: 0.8.35 + version: 0.8.35 + soltag: + specifier: ^0.0.17 + version: 0.0.17 + typescript: + specifier: 6.0.2 + version: 6.0.2 + viem: + specifier: 2.47.17 + version: 2.47.17 + zod: + specifier: 3.25.76 + version: 3.25.76 + +importers: + + .: + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:packages/typescript-config + husky: + specifier: 'catalog:' + version: 9.1.7 + knip: + specifier: 'catalog:' + version: 5.88.1(@types/node@25.8.0)(typescript@6.0.2) + lint-staged: + specifier: 'catalog:' + version: 16.4.0 + oxfmt: + specifier: 'catalog:' + version: 0.36.0 + oxlint: + specifier: 'catalog:' + version: 1.61.0(oxlint-tsgolint@0.22.1) + oxlint-tsgolint: + specifier: 'catalog:' + version: 0.22.1 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + bots/blue-liquidation: + dependencies: + '@repo/bot-kit': + specifier: workspace:* + version: link:../../packages/bot-kit + '@repo/contracts': + specifier: workspace:* + version: link:../../packages/contracts + '@repo/swaps': + specifier: workspace:* + version: link:../../packages/swaps + '@repo/utils': + specifier: workspace:* + version: link:../../packages/utils + executooor-viem: + specifier: 'catalog:' + version: 1.3.3(evm-maths@7.0.1)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + solc: + specifier: 'catalog:' + version: 0.8.35 + soltag: + specifier: 'catalog:' + version: 0.0.17(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@4.4.3) + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../../packages/typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + bots/market-making: + dependencies: + '@morpho-org/midnight-sdk': + specifier: 'catalog:' + version: 1.3.0(@morpho-org/morpho-ts@2.8.0)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + '@morpho-org/morpho-sdk': + specifier: 5.4.1 + version: 5.4.1(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + '@morpho-org/morpho-ts': + specifier: 'catalog:' + version: 2.8.0 + '@repo/logging': + specifier: workspace:* + version: link:../../packages/logging + '@repo/monitoring': + specifier: workspace:* + version: link:../../packages/monitoring + '@repo/observability': + specifier: workspace:* + version: link:../../packages/observability + '@repo/offers': + specifier: workspace:* + version: link:../../packages/offers + '@repo/utils': + specifier: workspace:* + version: link:../../packages/utils + commander: + specifier: ^14.0.3 + version: 14.0.3 + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@4.4.3) + yaml: + specifier: 2.8.3 + version: 2.8.3 + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../../packages/typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typedoc: + specifier: 0.28.20 + version: 0.28.20(typescript@6.0.2) + typescript: + specifier: 'catalog:' + version: 6.0.2 + + bots/midnight-crossed-books: + dependencies: + '@repo/bot-kit': + specifier: workspace:* + version: link:../../packages/bot-kit + '@repo/contracts': + specifier: workspace:* + version: link:../../packages/contracts + '@repo/utils': + specifier: workspace:* + version: link:../../packages/utils + openapi-fetch: + specifier: 'catalog:' + version: 0.17.0 + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@4.4.3) + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../../packages/typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + openapi-typescript: + specifier: 'catalog:' + version: 7.13.0(typescript@6.0.2) + typescript: + specifier: 'catalog:' + version: 6.0.2 + + bots/midnight-liquidation: + dependencies: + '@repo/bot-kit': + specifier: workspace:* + version: link:../../packages/bot-kit + '@repo/contracts': + specifier: workspace:* + version: link:../../packages/contracts + '@repo/swaps': + specifier: workspace:* + version: link:../../packages/swaps + '@repo/utils': + specifier: workspace:* + version: link:../../packages/utils + executooor-viem: + specifier: 'catalog:' + version: 1.3.3(evm-maths@7.0.1)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + openapi-fetch: + specifier: 'catalog:' + version: 0.17.0 + solc: + specifier: 'catalog:' + version: 0.8.35 + soltag: + specifier: 'catalog:' + version: 0.0.17(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@4.4.3) + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../../packages/typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + packages/bot-kit: + dependencies: + '@loglayer/transport-betterstack': + specifier: 'catalog:' + version: 2.2.0 + '@morpho-org/viem-dlc': + specifier: 'catalog:' + version: 0.0.11(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + '@repo/utils': + specifier: workspace:* + version: link:../utils + loglayer: + specifier: 'catalog:' + version: 9.3.0 + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@4.4.3) + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + packages/contracts: + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + solc: + specifier: 'catalog:' + version: 0.8.35 + soltag: + specifier: 'catalog:' + version: 0.0.17(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + typescript: + specifier: 'catalog:' + version: 6.0.2 + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@4.4.3) + + packages/logging: + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + packages/monitoring: + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + packages/observability: + dependencies: + '@repo/bot-kit': + specifier: workspace:* + version: link:../bot-kit + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + packages/offers: + dependencies: + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@4.4.3) + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + packages/swaps: + dependencies: + '@repo/utils': + specifier: workspace:* + version: link:../utils + executooor-viem: + specifier: 'catalog:' + version: 1.3.3(evm-maths@7.0.1)(viem@2.47.17(typescript@6.0.2)(zod@3.25.76)) + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@3.25.76) + zod: + specifier: 'catalog:' + version: 3.25.76 + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + typescript: + specifier: 'catalog:' + version: 6.0.2 + + packages/typescript-config: {} + + packages/utils: + dependencies: + '@internationalized/date': + specifier: 'catalog:' + version: 3.12.1 + '@morpho-org/morpho-ts': + specifier: 'catalog:' + version: 2.8.0 + '@morpho-org/viem-dlc': + specifier: 'catalog:' + version: 0.0.11(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@3.25.76)) + date-fns: + specifier: 'catalog:' + version: 4.1.0 + lodash-es: + specifier: 'catalog:' + version: 4.18.1 + viem: + specifier: 'catalog:' + version: 2.47.17(typescript@6.0.2)(zod@3.25.76) + zod: + specifier: 'catalog:' + version: 3.25.76 + devDependencies: + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/bun': + specifier: 'catalog:' + version: 1.3.13 + '@types/lodash-es': + specifier: 'catalog:' + version: 4.17.12 + typescript: + specifier: 'catalog:' + version: 6.0.2 + +packages: + + '@adraffy/ens-normalize@1.11.1': + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@gerrit0/mini-shiki@3.23.0': + resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} + + '@internationalized/date@3.12.1': + resolution: {integrity: sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@loglayer/context-manager@2.2.0': + resolution: {integrity: sha512-rnAXJIMRCUFuMtWNDK1F9vyh29SQQA659LVHHVv6AxvyQ/5DJpIkM7VhfuPVFV2EfnZXv343zbxDr29La5SOyA==} + engines: {node: '>=18'} + + '@loglayer/log-level-manager@2.2.0': + resolution: {integrity: sha512-ifJ6i2Tc0vwNhPS8Ugr/Y5iabNmcX+QnXnPzjz2aKxgNQQGYZ6qWlAI7WI75tINRr9S+4xxbvim9hNjQ42z7Lw==} + engines: {node: '>=18'} + + '@loglayer/plugin@3.2.0': + resolution: {integrity: sha512-yBqmZeY0+5uFzbUkSrH82tzDfo1YhzCyBx+ZEvikkYAkOlAlQHEFda4Ue+il4Km2FrCCCG0qPgMEd3Mz8kIITg==} + engines: {node: '>=18'} + + '@loglayer/shared@4.3.0': + resolution: {integrity: sha512-jlNeh0+uOGlKMhKk1Sx9Qdk7ni+I3hHZz2LB7Lp8BmUnqHD0TGRhsp2rV/zMiszSYUwI8XGvNrZttpxBL05U5A==} + engines: {node: '>=18'} + + '@loglayer/transport-betterstack@2.2.0': + resolution: {integrity: sha512-NSEFAYsjHTfmJmte4vyTZzAP85fSjO2CaGC6Y3kV2quGy3LkSyEEMAHPCwd3AW7YaGap5eJSS9AhY00DIeCiFQ==} + engines: {node: '>=18'} + + '@loglayer/transport-http@2.3.0': + resolution: {integrity: sha512-VkEqfMWAPffQf3VmKxGO7y48acBnsNxZCwOrt2FcbsnrYsxo0ske+cGkRC2yAUri4I2mKvB9mOy6bxn/Ez+Ztw==} + engines: {node: '>=18'} + + '@loglayer/transport@3.2.0': + resolution: {integrity: sha512-UMnlJggWIAYzZv8PN9dR3v7qMDG7vKVyPJjyfypBa8Y2yLk/4XzDp2fAvSd1OJKWQh03lO7GfGpo87SSYoIANg==} + engines: {node: '>=18'} + + '@morpho-org/blue-sdk-viem@5.2.1': + resolution: {integrity: sha512-3XFxpnKcoglzYm+Ph9BCLScqafWSBlmDyjQcUgEQ0z2VFOiUSpyWb+aF5NawdpCwMz/TyZBc4LedAf2ahm4f8A==} + peerDependencies: + '@morpho-org/blue-sdk': ^6.4.0 + '@morpho-org/morpho-ts': ^2.7.0 + viem: ^2.0.0 + + '@morpho-org/blue-sdk@6.4.0': + resolution: {integrity: sha512-k0GvaelRU0/ngaKLunQamh32Wl4T100WZ3lwz0NW2L3YYfcvjCxkOYpgQ5o+cViKRNLUXgQAWS1AUC2QFZrZQQ==} + peerDependencies: + '@morpho-org/morpho-ts': ^2.7.0 + + '@morpho-org/midnight-sdk@1.3.0': + resolution: {integrity: sha512-O96+FFzku6m2eZPL1vUjyUS+U+I+HLP9w/dOYLMzNiRo76/79glh+ThprKMqDeNVvk2AXB7ZefnKP3JFaDIj2A==} + peerDependencies: + '@morpho-org/morpho-ts': ^2.8.0 + viem: ^2.0.0 + + '@morpho-org/morpho-sdk@5.4.1': + resolution: {integrity: sha512-sUyoaXjCBDkm/lB6lvXBu6UDuUQkmk1HWj4Ov6g0N8l6LgEfGXMa2uuenmS3pTErlwzlQCESEbNDZBPY4+kjTQ==} + peerDependencies: + viem: ^2.0.0 + + '@morpho-org/morpho-ts@2.8.0': + resolution: {integrity: sha512-I+fSrYjx8VYHgzaTGUdGmxKM7qDrOWNBM4Yz/6hgum2tlCcgb5MN1sJVgztbO4nOk5C9Ly9I752CiyyYr2oeOg==} + + '@morpho-org/viem-dlc@0.0.11': + resolution: {integrity: sha512-aIam52kaN/Lt2eQuZpcDWPqKKyv/ltH7Di/HoNjdzlWN4ccuk4Keuw63RuP1pXtGAowmxNGblyPnHwja8QohsA==} + peerDependencies: + '@upstash/redis': ^1.0.0 + '@vercel/blob': ^2.3.0 + viem: ^2.0.0 + peerDependenciesMeta: + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + + '@napi-rs/wasm-runtime@1.2.2': + resolution: {integrity: sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.3 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.3 + + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.9.1': + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@2.2.0': + resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + engines: {node: '>= 20.19.0'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} + cpu: [x64] + os: [win32] + + '@oxfmt/binding-android-arm-eabi@0.36.0': + resolution: {integrity: sha512-Z4yVHJWx/swHHjtr0dXrBZb6LxS+qNz1qdza222mWwPTUK4L790+5i3LTgjx3KYGBzcYpjaiZBw4vOx94dH7MQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.36.0': + resolution: {integrity: sha512-3ElCJRFNPQl7jexf2CAa9XmAm8eC5JPrIDSjc9jSchkVSFTEqyL0NtZinBB2h1a4i4JgP1oGl/5G5n8YR4FN8Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.36.0': + resolution: {integrity: sha512-nak4znWCqIExKhYSY/mz/lWsqWIpdsS7o0+SRzXR1Q0m7GrMcG1UrF1pS7TLGZhhkf7nTfEF7q6oZzJiodRDuw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.36.0': + resolution: {integrity: sha512-V4GP96thDnpKx6ADnMDnhIXNdtV+Ql9D4HUU+a37VTeVbs5qQSF/s6hhUP1b3xUqU7iRcwh72jUU2Y12rtGHAw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.36.0': + resolution: {integrity: sha512-/xapWCADfI5wrhxpEUjhI9fnw7MV5BUZizVa8e24n3VSK6A3Y1TB/ClOP1tfxNspykFKXp4NBWl6NtDJP3osqQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.36.0': + resolution: {integrity: sha512-1lOmv61XMFIH5uNm27620kRRzWt/RK6tdn250BRDoG9W7OXGOQ5UyI1HVT+SFkoOoKztBiinWgi68+NA1MjBVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.36.0': + resolution: {integrity: sha512-vMH23AskdR1ujUS9sPck2Df9rBVoZUnCVY86jisILzIQ/QQ/yKUTi7tgnIvydPx7TyB/48wsQ5QMr5Knq5p/aw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.36.0': + resolution: {integrity: sha512-Hy1V+zOBHpBiENRx77qrUTt5aPDHeCASRc8K5KwwAHkX2AKP0nV89eL17hsZrE9GmnXFjsNmd80lyf7aRTXsbw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.36.0': + resolution: {integrity: sha512-SPGLJkOIHSIC6ABUQ5V8NqJpvYhMJueJv26NYqfCnwi/Mn6A61amkpJJ9Suy0Nmvs+OWESJpcebrBUbXPGZyQQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.36.0': + resolution: {integrity: sha512-3EuoyB8x9x8ysYJjbEO/M9fkSk72zQKnXCvpZMDHXlnY36/1qMp55Nm0PrCwjGO/1pen5hdOVkz9WmP3nAp2IQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.36.0': + resolution: {integrity: sha512-MpY3itLwpGh8dnywtrZtaZ604T1m715SydCKy0+qTxetv+IHzuA+aO/AGzrlzUNYZZmtWtmDBrChZGibvZxbRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.36.0': + resolution: {integrity: sha512-mmDhe4Vtx+XwQPRPn/V25+APnkApYgZ23q+6GVsNYY98pf3aU0aI3Me96pbRs/AfJ1jIiGC+/6q71FEu8dHcHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.36.0': + resolution: {integrity: sha512-AYXhU+DmNWLSnvVwkHM92fuYhogtVHab7UQrPNaDf1sxadugg9gWVmcgJDlIwxJdpk5CVW/TFvwUKwI432zhhA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.36.0': + resolution: {integrity: sha512-H16QhhQ3usoakMleiAAQ2mg0NsBDAdyE9agUgfC8IHHh3jZEbr0rIKwjEqwbOHK5M0EmfhJmr+aGO/MgZPsneA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.36.0': + resolution: {integrity: sha512-EFFGkixA39BcmHiCe2ECdrq02D6FCve5ka6ObbvrheXl4V+R0U/E+/uLyVx1X65LW8TA8QQHdnbdDallRekohw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.36.0': + resolution: {integrity: sha512-zr/t369wZWFOj1qf06Z5gGNjFymfUNDrxKMmr7FKiDRVI1sNsdKRCuRL4XVjtcptKQ+ao3FfxLN1vrynivmCYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.36.0': + resolution: {integrity: sha512-FxO7UksTv8h4olzACgrqAXNF6BP329+H322323iDrMB5V/+a1kcAw07fsOsUmqNrb9iJBsCQgH/zqcqp5903ag==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.36.0': + resolution: {integrity: sha512-OjoMQ89H01M0oLMfr/CPNH1zi48ZIwxAKObUl57oh7ssUBNDp/2Vjf7E1TQ8M4oj4VFQ/byxl2SmcPNaI2YNDg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.36.0': + resolution: {integrity: sha512-MoyeQ9S36ZTz/4bDhOKJgOBIDROd4dQ5AkT9iezhEaUBxAPdNX9Oq0jD8OSnCj3G4wam/XNxVWKMA52kmzmPtQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint-tsgolint/darwin-arm64@0.22.1': + resolution: {integrity: sha512-4150Lpgc1YM09GcjA6GSrra1JoPjC7aOpfywLjWEY4vW0Sd1qKzqHF1WRaiw0/qUZ40OATYdv3aRd7ipPkWQbw==} + cpu: [arm64] + os: [darwin] + + '@oxlint-tsgolint/darwin-x64@0.22.1': + resolution: {integrity: sha512-vFWcPWYOgZs4HWcgS1EjUZg33NLcNfEYU49KGImmCfZWkflENrmBYV4HN/C0YeAPum6ZZ/goPSvQrB/cOD+NfA==} + cpu: [x64] + os: [darwin] + + '@oxlint-tsgolint/linux-arm64@0.22.1': + resolution: {integrity: sha512-6LiUpP0Zir3+29FvBm7Y28q/dBjSHqTZ5MhG1Ckw4fGhI4cAvbcwXaKvbjx1TP7rRmBNOoq/M5xdpHjTb+GAew==} + cpu: [arm64] + os: [linux] + + '@oxlint-tsgolint/linux-x64@0.22.1': + resolution: {integrity: sha512-fuX1hEQfpHauUbXADsfqVhRzrUrGabzGXbj5wsp2vKhV5uk/Rze8Mba9GdjFGECzvXudMGqHqxB4r6jGRdhxVA==} + cpu: [x64] + os: [linux] + + '@oxlint-tsgolint/win32-arm64@0.22.1': + resolution: {integrity: sha512-8SZidAj+jrbZf9ZjBEYW0tiNZ+KasqB2zgW26qdiPpQSF/DzURnPmXz651IeA9YsmbVdHGIooEHUmev6QJdquA==} + cpu: [arm64] + os: [win32] + + '@oxlint-tsgolint/win32-x64@0.22.1': + resolution: {integrity: sha512-QweSk9H5lFh5Y+WUf2Kq/OAN88V6+62ZwGhP38gqdRotI90luXSMkruFTj7Q2rYrzH4ZVNaSqx7NY8JpSfIzqg==} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.61.0': + resolution: {integrity: sha512-6eZBPgiigK5txqoVgRqxbaxiom4lM8AP8CyKPPvpzKnQ3iFRFOIDc+0AapF+qsUSwjOzr5SGk4SxQDpQhkSJMQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.61.0': + resolution: {integrity: sha512-CkwLR69MUnyv5wjzebvbbtTSUwqLxM35CXE79bHqDIK+NtKmPEUpStTcLQRZMCo4MP0qRT6TXIQVpK0ZVScnMA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.61.0': + resolution: {integrity: sha512-8JbefTkbmvqkqWjmQrHke+MdpgT2UghhD/ktM4FOQSpGeCgbMToJEKdl9zwhr/YWTl92i4QI1KiTwVExpcUN8A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.61.0': + resolution: {integrity: sha512-uWpoxDT47hTnDLcdEh5jVbso8rlTTu5o0zuqa9J8E0JAKmIWn7kGFEIB03Pycn2hd2vKxybPGLhjURy/9We5FQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.61.0': + resolution: {integrity: sha512-K/o4hEyW7flfMel0iBVznmMBt7VIMHGdjADocHKpK1DUF9erpWnJ+BSSWd2W0c8K3mPtpph+CuHzRU6CI3l9jQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.61.0': + resolution: {integrity: sha512-P6040ZkcyweJ0Po9yEFqJCdvZnf3VNCGs1SIHgXDf8AAQNC6ID/heXQs9iSgo2FH7gKaKq32VWc59XZwL34C5Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.61.0': + resolution: {integrity: sha512-bwxrGCzTZkuB+THv2TQ1aTkVEfv5oz8sl+0XZZCpoYzErJD8OhPQOTA0ENPd1zJz8QsVdSzSrS2umKtPq4/JXg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.61.0': + resolution: {integrity: sha512-vkhb9/wKguMkLlrm3FoJW/Xmdv31GgYAE+x8lxxQ+7HeOxXUySI0q36a3NTVIuQUdLzxCI1zzMGsk1o37FOe3w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.61.0': + resolution: {integrity: sha512-bl1dQh8LnVqsj6oOQAcxwbuOmNJkwc4p6o//HTBZhNTzJy21TLDwAviMqUFNUxDHkPGpmdKTSN4tWTjLryP8xg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.61.0': + resolution: {integrity: sha512-QoOX6KB2IiEpyOj/HKqaxi+NQHPnOgNgnr22n9N4ANJCzXkUlj1UmeAbFb4PpqdlHIzvGDM5xZ0OKtcLq9RhiQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.61.0': + resolution: {integrity: sha512-1TGcTerjY6p152wCof3oKElccq3xHljS/Mucp04gV/4ATpP6nO7YNnp7opEg6SHkv2a57/b4b8Ndm9znJ1/qAw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.61.0': + resolution: {integrity: sha512-65wXEmZIrX2ADwC8i/qFL4EWLSbeuBpAm3suuX1vu4IQkKd+wLT/HU/BOl84kp91u2SxPkPDyQgu4yrqp8vwVA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.61.0': + resolution: {integrity: sha512-TVvhgMvor7Qa6COeXxCJ7ENOM+lcAOGsQ0iUdPSCv2hxb9qSHLQ4XF1h50S6RE1gBOJ0WV3rNukg4JJJP1LWRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.61.0': + resolution: {integrity: sha512-SjpS5uYuFoDnDdZPwZE59ndF95AsY47R5MliuneTWR1pDm2CxGJaYXbKULI71t5TVfLQUWmrHEGRL9xvuq6dnA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.61.0': + resolution: {integrity: sha512-gGfAeGD4sNJGILZbc/yKcIimO9wQnPMoYp9swAaKeEtwsSQAbU+rsdQze5SBtIP6j0QDzeYd4XSSUCRCF+LIeQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.61.0': + resolution: {integrity: sha512-OlVT0LrG/ct33EVtWRyR+B/othwmDWeRxfi13wUdPeb3lAT5TgTcFDcfLfarZtzB4W1nWF/zICMgYdkggX2WmQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.61.0': + resolution: {integrity: sha512-vI//NZPJk6DToiovPtaiwD4iQ7kO1r5ReWQD0sOOyKRtP3E2f6jxin4uvwi3OvDzHA2EFfd7DcZl5dtkQh7g1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.61.0': + resolution: {integrity: sha512-0ySj4/4zd2XjePs3XAQq7IigIstN4LPQZgCyigX5/ERMLjdWAJfnxcTsrtxZxuij8guJW8foXuHmhGxW0H4dDA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.61.0': + resolution: {integrity: sha512-0xgSiyeqDLDZxXoe9CVJrOx3TUVsfyoOY7cNi03JbItNcC9WCZqrSNdrAbHONxhSPaVh/lzfnDcON1RqSUMhHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/config@0.22.0': + resolution: {integrity: sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==} + + '@redocly/openapi-core@1.34.18': + resolution: {integrity: sha512-UyKIm0wTPw5BcY7Z2PkbK1Ma260um96LSBWXHrdSMe+ZV0EPMyDfAcUcjjm3qEiGST9OK/1TriekdPCZkn4Q3A==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + + '@scure/bip32@1.7.0': + resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} + + '@scure/bip39@1.6.0': + resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + + '@types/bun@1.3.13': + resolution: {integrity: sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw==} + + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.25': + resolution: {integrity: sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==} + + '@types/node@25.8.0': + resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + abitype@1.2.3: + resolution: {integrity: sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + brace-expansion@2.1.4: + resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==} + + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + bun-types@1.3.13: + resolution: {integrity: sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA==} + + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} + + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + evm-maths@7.0.1: + resolution: {integrity: sha512-rMFIq/xfsNpR1JGkXPnLP1iXLBCtVr1N4tErzdEcKJoqREpKOZswCwNSljN/Sf1QZjv+KGCamh4E4FQcVaJekA==} + engines: {node: '>=12.0'} + + executooor-viem@1.3.3: + resolution: {integrity: sha512-8npMgRIDerwxeyWonqsTSrw28CIU4EDUz2JSXRz5hEIF6pxNbRls6uS2wR2lf74J2fxAgtF6+Ltin5/bMlFiyw==} + peerDependencies: + evm-maths: ^7.0.0 + viem: ^2.0.0 + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fd-package-json@2.0.0: + resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + formatly@0.3.0: + resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} + engines: {node: '>=18.3.0'} + hasBin: true + + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isows@1.0.7: + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: '*' + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + knip@5.88.1: + resolution: {integrity: sha512-tpy5o7zu1MjawVkLPuahymVJekYY3kYjvzcoInhIchgePxTlo+api90tBv2KfhAIe5uXh+mez1tAfmbv8/TiZg==} + engines: {node: '>=18.18.0'} + hasBin: true + peerDependencies: + '@types/node': '>=18' + typescript: '>=5.0.4 <7' + + linkify-it@5.0.2: + resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} + + lint-staged@16.4.0: + resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==} + engines: {node: '>=20.17'} + hasBin: true + + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} + engines: {node: '>=20.0.0'} + + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + loglayer@9.3.0: + resolution: {integrity: sha512-xiZFMbUCcy8mC+/uV0EzkZV6nbo3qweQjKKQSGkcrug2VpOHudzcoWR0DOl9edr8oS+BwyEjimpG3sF2CW8sww==} + engines: {node: '>=18'} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + markdown-it@14.3.0: + resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} + hasBin: true + + mdurl@2.1.0: + resolution: {integrity: sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + openapi-fetch@0.17.0: + resolution: {integrity: sha512-PsbZR1wAPcG91eEthKhN+Zn92FMHxv+/faECIwjXdxfTODGSGegYv0sc1Olz+HYPvKOuoXfp+0pA2XVt2cI0Ig==} + + openapi-typescript-helpers@0.1.0: + resolution: {integrity: sha512-OKTGPthhivLw/fHz6c3OPtg72vi86qaMlqbJuVJ23qOvQ+53uw1n7HdmkJFibloF7QEjDrDkzJiOJuockM/ljw==} + + openapi-typescript@7.13.0: + resolution: {integrity: sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==} + hasBin: true + peerDependencies: + typescript: ^5.x + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + ox@0.14.15: + resolution: {integrity: sha512-3TubCmbKen/cuZQzX0qDbOS5lojjdSZ90lqKxWIDWd5siuJ0IJBaTXMYs8eMPLcraqnOwGZazz3apHPGiRCkGQ==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} + + oxfmt@0.36.0: + resolution: {integrity: sha512-/ejJ+KoSW6J9bcNT9a9UtJSJNWhJ3yOLSBLbkoFHJs/8CZjmaZVZAJe4YgO1KMJlKpNQasrn/G9JQUEZI3p0EQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + oxlint-tsgolint@0.22.1: + resolution: {integrity: sha512-YUSGSLUnoolsu8gxISEDio3q1rtsCozwfOzASUn3DT2mR2EeQ93uEEnen7s+6LpF+lyTQFln1pQfqwBh/fsVEg==} + hasBin: true + + oxlint@1.61.0: + resolution: {integrity: sha512-ZC0ALuhDZ6ivOFG+sy0D0pEDN49EvsId98zVlmYdkcXHsEM14m/qTNUEsUpiFiCVbpIxYtVBmmLE87nsbUHohQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.18.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} + + smol-toml@1.7.1: + resolution: {integrity: sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==} + engines: {node: '>= 18'} + + solc@0.8.35: + resolution: {integrity: sha512-OaP/4zyoKRo2CjqZDxbtkeRlEo6MxP4FLCxntw1Agf9OSoecmwYKoFBSB34UcSKBFBucrTh3Mb0nRoJou62ibw==} + engines: {node: '>=12.0.0'} + hasBin: true + + soltag@0.0.17: + resolution: {integrity: sha512-CX7kxblz4O4cac/610lascNMIgakgXIBJNBecVxBPgeaa2l97YV5uHP1kdLzR1dI3BL8dr3BeEykY+RiX6ZgEg==} + hasBin: true + peerDependencies: + solc: ^0.8.0 + typescript: '>=5.0' + viem: ^2.0.0 + peerDependenciesMeta: + typescript: + optional: true + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.2.2: + resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} + engines: {node: '>=20'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + tinyexec@1.3.0: + resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} + engines: {node: '>=18'} + + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typedoc@0.28.20: + resolution: {integrity: sha512-uSKqkh8Cr48vllnEy+jdaAgOeR6Y+QCBW7usgUsKj7gJEfR7stw9U/fE49LBnj2tPRKPY0c0EBJSWe9Appmplg==} + engines: {node: '>= 18', pnpm: '>= 10'} + hasBin: true + peerDependencies: + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x + + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + unbash@2.2.0: + resolution: {integrity: sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w==} + engines: {node: '>=14'} + + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + + unplugin@3.3.0: + resolution: {integrity: sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@farmfe/core': '*' + '@rspack/core': '*' + bun-types-no-globals: '*' + esbuild: '*' + rolldown: '*' + rollup: '*' + unloader: '*' + vite: '*' + webpack: '*' + peerDependenciesMeta: + '@farmfe/core': + optional: true + '@rspack/core': + optional: true + bun-types-no-globals: + optional: true + esbuild: + optional: true + rolldown: + optional: true + rollup: + optional: true + unloader: + optional: true + vite: + optional: true + webpack: + optional: true + + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + + valibot@1.4.2: + resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + viem@2.47.17: + resolution: {integrity: sha512-yNUKw6b1nd1i96GcJPqp096w5VVjUky/6PLT8UeUsEArzhD9YRrC0QJ50o8YEF7xA6M0FK8e6u5tAMyBLLl7tw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + walk-up-path@4.0.0: + resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} + engines: {node: 20 || >=22} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} + hasBin: true + + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + +snapshots: + + '@adraffy/ens-normalize@1.11.1': {} + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.29.7': {} + + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@gerrit0/mini-shiki@3.23.0': + dependencies: + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@internationalized/date@3.12.1': + dependencies: + '@swc/helpers': 0.5.23 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@loglayer/context-manager@2.2.0': + dependencies: + '@loglayer/shared': 4.3.0 + + '@loglayer/log-level-manager@2.2.0': + dependencies: + '@loglayer/shared': 4.3.0 + + '@loglayer/plugin@3.2.0': + dependencies: + '@loglayer/shared': 4.3.0 + + '@loglayer/shared@4.3.0': {} + + '@loglayer/transport-betterstack@2.2.0': + dependencies: + '@loglayer/transport': 3.2.0 + '@loglayer/transport-http': 2.3.0 + + '@loglayer/transport-http@2.3.0': + dependencies: + '@loglayer/transport': 3.2.0 + + '@loglayer/transport@3.2.0': + dependencies: + '@loglayer/shared': 4.3.0 + + '@morpho-org/blue-sdk-viem@5.2.1(@morpho-org/blue-sdk@6.4.0(@morpho-org/morpho-ts@2.8.0))(@morpho-org/morpho-ts@2.8.0)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3))': + dependencies: + '@morpho-org/blue-sdk': 6.4.0(@morpho-org/morpho-ts@2.8.0) + '@morpho-org/morpho-ts': 2.8.0 + viem: 2.47.17(typescript@6.0.2)(zod@4.4.3) + + '@morpho-org/blue-sdk@6.4.0(@morpho-org/morpho-ts@2.8.0)': + dependencies: + '@morpho-org/morpho-ts': 2.8.0 + '@noble/hashes': 2.2.0 + + '@morpho-org/midnight-sdk@1.3.0(@morpho-org/morpho-ts@2.8.0)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3))': + dependencies: + '@morpho-org/morpho-ts': 2.8.0 + viem: 2.47.17(typescript@6.0.2)(zod@4.4.3) + + '@morpho-org/morpho-sdk@5.4.1(viem@2.47.17(typescript@6.0.2)(zod@4.4.3))': + dependencies: + '@morpho-org/blue-sdk': 6.4.0(@morpho-org/morpho-ts@2.8.0) + '@morpho-org/blue-sdk-viem': 5.2.1(@morpho-org/blue-sdk@6.4.0(@morpho-org/morpho-ts@2.8.0))(@morpho-org/morpho-ts@2.8.0)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + '@morpho-org/midnight-sdk': 1.3.0(@morpho-org/morpho-ts@2.8.0)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + '@morpho-org/morpho-ts': 2.8.0 + viem: 2.47.17(typescript@6.0.2)(zod@4.4.3) + zod: 4.4.3 + + '@morpho-org/morpho-ts@2.8.0': {} + + '@morpho-org/viem-dlc@0.0.11(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@3.25.76))': + dependencies: + valibot: 1.4.2(typescript@6.0.2) + viem: 2.47.17(typescript@6.0.2)(zod@3.25.76) + transitivePeerDependencies: + - typescript + + '@morpho-org/viem-dlc@0.0.11(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3))': + dependencies: + valibot: 1.4.2(typescript@6.0.2) + viem: 2.47.17(typescript@6.0.2)(zod@4.4.3) + transitivePeerDependencies: + - typescript + + '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@noble/ciphers@1.3.0': {} + + '@noble/curves@1.9.1': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.8.0': {} + + '@noble/hashes@2.2.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + optional: true + + '@oxc-resolver/binding-android-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.24.2': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + optional: true + + '@oxfmt/binding-android-arm-eabi@0.36.0': + optional: true + + '@oxfmt/binding-android-arm64@0.36.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.36.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.36.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.36.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.36.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.36.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.36.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.36.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.36.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.36.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.36.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.36.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.36.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.36.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.36.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.36.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.36.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.36.0': + optional: true + + '@oxlint-tsgolint/darwin-arm64@0.22.1': + optional: true + + '@oxlint-tsgolint/darwin-x64@0.22.1': + optional: true + + '@oxlint-tsgolint/linux-arm64@0.22.1': + optional: true + + '@oxlint-tsgolint/linux-x64@0.22.1': + optional: true + + '@oxlint-tsgolint/win32-arm64@0.22.1': + optional: true + + '@oxlint-tsgolint/win32-x64@0.22.1': + optional: true + + '@oxlint/binding-android-arm-eabi@1.61.0': + optional: true + + '@oxlint/binding-android-arm64@1.61.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.61.0': + optional: true + + '@oxlint/binding-darwin-x64@1.61.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.61.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.61.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.61.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.61.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.61.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.61.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.61.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.61.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.61.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.61.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.61.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.61.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.61.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.61.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.61.0': + optional: true + + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/config@0.22.0': {} + + '@redocly/openapi-core@1.34.18(supports-color@10.2.2)': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.22.0 + colorette: 1.4.0 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + js-levenshtein: 1.1.6 + js-yaml: 4.3.0 + minimatch: 5.1.9 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + + '@scure/base@1.2.6': {} + + '@scure/bip32@1.7.0': + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + + '@scure/bip39@1.6.0': + dependencies: + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + + '@shikijs/engine-oniguruma@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/themes@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@swc/helpers@0.5.23': + dependencies: + tslib: 2.8.1 + + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/bun@1.3.13': + dependencies: + bun-types: 1.3.13 + + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.25 + + '@types/lodash@4.17.25': {} + + '@types/node@25.8.0': + dependencies: + undici-types: 7.24.6 + + '@types/unist@3.0.3': {} + + abitype@1.2.3(typescript@6.0.2)(zod@3.25.76): + optionalDependencies: + typescript: 6.0.2 + zod: 3.25.76 + + abitype@1.2.3(typescript@6.0.2)(zod@4.4.3): + optionalDependencies: + typescript: 6.0.2 + zod: 4.4.3 + + agent-base@7.1.4: {} + + ansi-colors@4.1.3: {} + + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + + ansi-regex@6.2.2: {} + + ansi-styles@6.2.3: {} + + argparse@2.0.1: {} + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + brace-expansion@2.1.4: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.9: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + bun-types@1.3.13: + dependencies: + '@types/node': 25.8.0 + + change-case@5.4.4: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@5.2.0: + dependencies: + slice-ansi: 8.0.0 + string-width: 8.2.2 + + colorette@1.4.0: {} + + colorette@2.0.20: {} + + command-exists@1.2.9: {} + + commander@14.0.3: {} + + commander@8.3.0: {} + + date-fns@4.1.0: {} + + debug@4.4.3(supports-color@10.2.2): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 + + emoji-regex@10.6.0: {} + + entities@4.5.0: {} + + environment@1.1.0: {} + + eventemitter3@5.0.1: {} + + eventemitter3@5.0.4: {} + + evm-maths@7.0.1: {} + + executooor-viem@1.3.3(evm-maths@7.0.1)(viem@2.47.17(typescript@6.0.2)(zod@3.25.76)): + dependencies: + evm-maths: 7.0.1 + viem: 2.47.17(typescript@6.0.2)(zod@3.25.76) + + executooor-viem@1.3.3(evm-maths@7.0.1)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)): + dependencies: + evm-maths: 7.0.1 + viem: 2.47.17(typescript@6.0.2)(zod@4.4.3) + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fd-package-json@2.0.0: + dependencies: + walk-up-path: 4.0.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + follow-redirects@1.16.0: {} + + formatly@0.3.0: + dependencies: + fd-package-json: 2.0.0 + + get-east-asian-width@1.6.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + https-proxy-agent@7.0.6(supports-color@10.2.2): + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + husky@9.1.7: {} + + index-to-position@1.2.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.6.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isows@1.0.7(ws@8.18.3): + dependencies: + ws: 8.18.3 + + jiti@2.7.0: {} + + js-levenshtein@1.1.6: {} + + js-sha3@0.8.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.3.0: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@1.0.0: {} + + knip@5.88.1(@types/node@25.8.0)(typescript@6.0.2): + dependencies: + '@nodelib/fs.walk': 1.2.8 + '@types/node': 25.8.0 + fast-glob: 3.3.3 + formatly: 0.3.0 + jiti: 2.7.0 + minimist: 1.2.8 + oxc-resolver: 11.24.2 + picocolors: 1.1.1 + picomatch: 4.0.5 + smol-toml: 1.7.1 + strip-json-comments: 5.0.3 + typescript: 6.0.2 + unbash: 2.2.0 + yaml: 2.8.3 + zod: 4.4.3 + + linkify-it@5.0.2: + dependencies: + uc.micro: 2.1.0 + + lint-staged@16.4.0: + dependencies: + commander: 14.0.3 + listr2: 9.0.5 + picomatch: 4.0.5 + string-argv: 0.3.2 + tinyexec: 1.3.0 + yaml: 2.8.3 + + listr2@9.0.5: + dependencies: + cli-truncate: 5.2.0 + colorette: 2.0.20 + eventemitter3: 5.0.4 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.2 + + lodash-es@4.18.1: {} + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.3.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + + loglayer@9.3.0: + dependencies: + '@loglayer/context-manager': 2.2.0 + '@loglayer/log-level-manager': 2.2.0 + '@loglayer/plugin': 3.2.0 + '@loglayer/shared': 4.3.0 + '@loglayer/transport': 3.2.0 + + lunr@2.3.9: {} + + markdown-it@14.3.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.2 + mdurl: 2.1.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + mdurl@2.1.0: {} + + memorystream@0.3.1: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + mimic-function@5.0.1: {} + + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.9 + + minimatch@5.1.9: + dependencies: + brace-expansion: 2.1.4 + + minimist@1.2.8: {} + + ms@2.1.3: {} + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + openapi-fetch@0.17.0: + dependencies: + openapi-typescript-helpers: 0.1.0 + + openapi-typescript-helpers@0.1.0: {} + + openapi-typescript@7.13.0(typescript@6.0.2): + dependencies: + '@redocly/openapi-core': 1.34.18(supports-color@10.2.2) + ansi-colors: 4.1.3 + change-case: 5.4.4 + parse-json: 8.3.0 + supports-color: 10.2.2 + typescript: 6.0.2 + yargs-parser: 21.1.1 + + os-tmpdir@1.0.2: {} + + ox@0.14.15(typescript@6.0.2)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@6.0.2)(zod@3.25.76) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 6.0.2 + transitivePeerDependencies: + - zod + + ox@0.14.15(typescript@6.0.2)(zod@4.4.3): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@6.0.2)(zod@4.4.3) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 6.0.2 + transitivePeerDependencies: + - zod + + oxc-resolver@11.24.2: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 + + oxfmt@0.36.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.36.0 + '@oxfmt/binding-android-arm64': 0.36.0 + '@oxfmt/binding-darwin-arm64': 0.36.0 + '@oxfmt/binding-darwin-x64': 0.36.0 + '@oxfmt/binding-freebsd-x64': 0.36.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.36.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.36.0 + '@oxfmt/binding-linux-arm64-gnu': 0.36.0 + '@oxfmt/binding-linux-arm64-musl': 0.36.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.36.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.36.0 + '@oxfmt/binding-linux-riscv64-musl': 0.36.0 + '@oxfmt/binding-linux-s390x-gnu': 0.36.0 + '@oxfmt/binding-linux-x64-gnu': 0.36.0 + '@oxfmt/binding-linux-x64-musl': 0.36.0 + '@oxfmt/binding-openharmony-arm64': 0.36.0 + '@oxfmt/binding-win32-arm64-msvc': 0.36.0 + '@oxfmt/binding-win32-ia32-msvc': 0.36.0 + '@oxfmt/binding-win32-x64-msvc': 0.36.0 + + oxlint-tsgolint@0.22.1: + optionalDependencies: + '@oxlint-tsgolint/darwin-arm64': 0.22.1 + '@oxlint-tsgolint/darwin-x64': 0.22.1 + '@oxlint-tsgolint/linux-arm64': 0.22.1 + '@oxlint-tsgolint/linux-x64': 0.22.1 + '@oxlint-tsgolint/win32-arm64': 0.22.1 + '@oxlint-tsgolint/win32-x64': 0.22.1 + + oxlint@1.61.0(oxlint-tsgolint@0.22.1): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.61.0 + '@oxlint/binding-android-arm64': 1.61.0 + '@oxlint/binding-darwin-arm64': 1.61.0 + '@oxlint/binding-darwin-x64': 1.61.0 + '@oxlint/binding-freebsd-x64': 1.61.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.61.0 + '@oxlint/binding-linux-arm-musleabihf': 1.61.0 + '@oxlint/binding-linux-arm64-gnu': 1.61.0 + '@oxlint/binding-linux-arm64-musl': 1.61.0 + '@oxlint/binding-linux-ppc64-gnu': 1.61.0 + '@oxlint/binding-linux-riscv64-gnu': 1.61.0 + '@oxlint/binding-linux-riscv64-musl': 1.61.0 + '@oxlint/binding-linux-s390x-gnu': 1.61.0 + '@oxlint/binding-linux-x64-gnu': 1.61.0 + '@oxlint/binding-linux-x64-musl': 1.61.0 + '@oxlint/binding-openharmony-arm64': 1.61.0 + '@oxlint/binding-win32-arm64-msvc': 1.61.0 + '@oxlint/binding-win32-ia32-msvc': 1.61.0 + '@oxlint/binding-win32-x64-msvc': 1.61.0 + oxlint-tsgolint: 0.22.1 + + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.7 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.5: {} + + pluralize@8.0.0: {} + + punycode.js@2.3.1: {} + + queue-microtask@1.2.3: {} + + require-from-string@2.0.2: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + semver@5.7.2: {} + + signal-exit@4.1.0: {} + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + slice-ansi@8.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + smol-toml@1.7.1: {} + + solc@0.8.35: + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.16.0 + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + + soltag@0.0.17(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)): + dependencies: + solc: 0.8.35 + unplugin: 3.3.0 + viem: 2.47.17(typescript@6.0.2)(zod@4.4.3) + optionalDependencies: + typescript: 6.0.2 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - vite + - webpack + + string-argv@0.3.2: {} + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + + string-width@8.2.2: + dependencies: + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + strip-json-comments@5.0.3: {} + + supports-color@10.2.2: {} + + tinyexec@1.3.0: {} + + tinypool@2.1.0: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tslib@2.8.1: {} + + type-fest@4.41.0: {} + + typedoc@0.28.20(typescript@6.0.2): + dependencies: + '@gerrit0/mini-shiki': 3.23.0 + lunr: 2.3.9 + markdown-it: 14.3.0 + minimatch: 10.2.6 + typescript: 6.0.2 + yaml: 2.9.0 + + typescript@6.0.2: {} + + uc.micro@2.1.0: {} + + unbash@2.2.0: {} + + undici-types@7.24.6: {} + + unplugin@3.3.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.5 + webpack-virtual-modules: 0.6.2 + + uri-js-replace@1.0.1: {} + + valibot@1.4.2(typescript@6.0.2): + optionalDependencies: + typescript: 6.0.2 + + viem@2.47.17(typescript@6.0.2)(zod@3.25.76): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@6.0.2)(zod@3.25.76) + isows: 1.0.7(ws@8.18.3) + ox: 0.14.15(typescript@6.0.2)(zod@3.25.76) + ws: 8.18.3 + optionalDependencies: + typescript: 6.0.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + viem@2.47.17(typescript@6.0.2)(zod@4.4.3): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@6.0.2)(zod@4.4.3) + isows: 1.0.7(ws@8.18.3) + ox: 0.14.15(typescript@6.0.2)(zod@4.4.3) + ws: 8.18.3 + optionalDependencies: + typescript: 6.0.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + walk-up-path@4.0.0: {} + + webpack-virtual-modules@0.6.2: {} + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + + ws@8.18.3: {} + + yaml-ast-parser@0.0.43: {} + + yaml@2.8.3: {} + + yaml@2.9.0: {} + + yargs-parser@21.1.1: {} + + zod@3.25.76: {} + + zod@4.4.3: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..200637ce --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,59 @@ +packages: + - bots/* + - packages/* + +engineStrict: true +saveExact: true +verifyStoreIntegrity: true +preferOffline: true + +# 3 days — carried over from bunfig.toml's `minimumReleaseAge = 259200` (seconds; this is minutes). +minimumReleaseAge: 4320 +minimumReleaseAgeExclude: + - '@morpho-org/*' + +# No dependency lifecycle script runs unless opted in here — add entries deliberately. Empty today: +# nothing in the tree declares preinstall/install/postinstall. +allowBuilds: {} +# Make an un-opted-in build script a hard install failure, not a warning. Without this the +# default-deny above is advisory, which defeats the point of the migration. +strictDepBuilds: true + +# pnpm does not run npm-style pre/post scripts by default. `prestart` is load-bearing here: it +# builds @repo/contracts' gitignored dist/ (and runs generate:api for midnight-crossed-books), so +# the bots cannot resolve their own dependency without it. +enablePrePostScripts: true + +# Migrating the lockfile re-resolves every caret range, so entries that bun.lock had already +# resolved to a lower version are pinned exactly here. This keeps the migration a no-op on +# dependency versions, per the TIB's non-goal; relaxing any of these is a separate, deliberate bump. +catalog: + '@internationalized/date': 3.12.1 + '@loglayer/transport-betterstack': 2.2.0 + '@morpho-org/midnight-sdk': 1.3.0 + '@morpho-org/morpho-ts': 2.8.0 + '@morpho-org/viem-dlc': 0.0.11 + '@types/bun': 1.3.13 + '@types/lodash-es': ^4.17.12 + date-fns: 4.1.0 + executooor-viem: ^1.3.3 + husky: ^9.1.5 + knip: ^5.86.0 + lint-staged: ^16.1.2 + lodash-es: ^4.18.0 + loglayer: 9.3.0 + openapi-fetch: 0.17.0 + openapi-typescript: ^7.13.0 + oxfmt: ^0.36.0 + # Pinned to what bun.lock resolved for `^1.46.0`. Newer minors change rule behavior and want + # oxlint-tsgolint >= 0.24 — bump both together, deliberately, in a separate change. + oxlint: 1.61.0 + oxlint-tsgolint: ^0.22.1 + # Pinned exactly: solc determines the compiled bytecode of the soltag `sol``` lens templates and + # the Executor. A silent compiler bump would invalidate the recorded explorer-verification + # settings (0.8.35, optimizer runs=200). + solc: 0.8.35 + soltag: ^0.0.17 + typescript: 6.0.2 + viem: 2.47.17 + zod: 3.25.76 From dff8dca7b6a162aa391bbc37631296bfe5c32f93 Mon Sep 17 00:00:00 2001 From: Hayden Shively Date: Wed, 5 Aug 2026 13:16:42 -0400 Subject: [PATCH 2/5] chore(repo): run bot images as node user and use pnpm/setup in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses review on #129. - All three images dropped to the unprivileged `node` user. The oven/bun base ended with `USER bun`; node-slim defines `node` (uid 1000) but does not switch to it, so the base swap would have run a process holding a funded EOA key as root. `corepack enable` stays root (its shim lands in /usr/local/bin), then /repo is chowned and every later layer, install, and CMD runs as `node`. - CI installs pnpm with `pnpm/setup` v2 instead of `pnpm/action-setup`, which upstream now scopes to pnpm v10 and older. v2 also fetches pnpm's self-contained release binary against GitHub's published SHA-256 digest rather than bootstrapping through an `npm ci` of `@pnpm/exe` — one fewer npm artifact on the path this migration exists to shorten. Verified: all three images build; `docker run` reports uid=1000(node); the blue-liquidation container runs `prestart` (writing the gitignored @repo/contracts dist as non-root) and reaches its fail-loud config check. Co-Authored-By: Claude Opus 5 (1M context) --- .github/actions/setup/action.yml | 10 +++++++++- bots/blue-liquidation/Dockerfile | 16 ++++++++++++---- bots/midnight-crossed-books/Dockerfile | 16 ++++++++++++---- bots/midnight-liquidation/Dockerfile | 16 ++++++++++++---- docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md | 16 +++++++++++++++- 5 files changed, 60 insertions(+), 14 deletions(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index f0131487..ecfd4d7c 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -18,8 +18,16 @@ runs: steps: # pnpm owns installs, workspace resolution, and script running. The version comes from # package.json#packageManager, so it is not repeated here. + # + # `pnpm/setup` — not the older `pnpm/action-setup`, which upstream now scopes to pnpm v10 and + # older. It downloads pnpm's self-contained release binary and verifies it against the SHA-256 + # digest GitHub publishes for the asset, instead of bootstrapping through `npm ci` of + # `@pnpm/exe` — one fewer npm-registry artifact on the path that this migration exists to + # shorten. `install: false` because the install step below is conditional on an input. - name: Set up pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 + uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 + with: + install: false - name: Install Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 diff --git a/bots/blue-liquidation/Dockerfile b/bots/blue-liquidation/Dockerfile index 4ce3682a..6d969723 100644 --- a/bots/blue-liquidation/Dockerfile +++ b/bots/blue-liquidation/Dockerfile @@ -11,16 +11,24 @@ FROM node:24.14.1-slim COPY --from=oven/bun:1.3.12-slim /usr/local/bin/bun /usr/local/bin/bun ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 + +# The container's environment holds a funded liquidator EOA key, so nothing here may run as root — +# the previous oven/bun base ended with `USER bun`, and the node images define `node` (uid 1000) but +# do not switch to it. Corepack's pnpm shim lands in /usr/local/bin, which only root may write, so +# enable it before dropping privileges; every layer after `USER node` is unprivileged. +RUN corepack enable pnpm +RUN mkdir -p /repo && chown node:node /repo WORKDIR /repo +USER node # Manifests first, so the install layer is cached. `corepack install` pre-fetches the pnpm version # pinned in package.json#packageManager, so no download happens at container start. -COPY package.json pnpm-workspace.yaml pnpm-lock.yaml bunfig.toml ./ -RUN corepack enable pnpm && corepack install +COPY --chown=node:node package.json pnpm-workspace.yaml pnpm-lock.yaml bunfig.toml ./ +RUN corepack install # All members' package.json are needed for pnpm to resolve the `workspace:*` links. -COPY packages ./packages -COPY bots ./bots +COPY --chown=node:node packages ./packages +COPY --chown=node:node bots ./bots RUN pnpm install --frozen-lockfile # Run the bot from its package dir (`start` builds workspaces via `prestart`, then runs src/index.ts; diff --git a/bots/midnight-crossed-books/Dockerfile b/bots/midnight-crossed-books/Dockerfile index e50669d9..bf0bce41 100644 --- a/bots/midnight-crossed-books/Dockerfile +++ b/bots/midnight-crossed-books/Dockerfile @@ -9,16 +9,24 @@ FROM node:24.14.1-slim COPY --from=oven/bun:1.3.12-slim /usr/local/bin/bun /usr/local/bin/bun ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 + +# The container's environment holds a funded EOA key, so nothing here may run as root — the previous +# oven/bun base ended with `USER bun`, and the node images define `node` (uid 1000) but do not switch +# to it. Corepack's pnpm shim lands in /usr/local/bin, which only root may write, so enable it before +# dropping privileges; every layer after `USER node` is unprivileged. +RUN corepack enable pnpm +RUN mkdir -p /repo && chown node:node /repo WORKDIR /repo +USER node # Manifests first, so the install layer is cached. `corepack install` pre-fetches the pnpm version # pinned in package.json#packageManager, so no download happens at container start. -COPY package.json pnpm-workspace.yaml pnpm-lock.yaml bunfig.toml ./ -RUN corepack enable pnpm && corepack install +COPY --chown=node:node package.json pnpm-workspace.yaml pnpm-lock.yaml bunfig.toml ./ +RUN corepack install # All members' package.json are needed for pnpm to resolve the `workspace:*` links. -COPY packages ./packages -COPY bots ./bots +COPY --chown=node:node packages ./packages +COPY --chown=node:node bots ./bots RUN pnpm install --frozen-lockfile WORKDIR /repo/bots/midnight-crossed-books diff --git a/bots/midnight-liquidation/Dockerfile b/bots/midnight-liquidation/Dockerfile index 1598da15..cbec722d 100644 --- a/bots/midnight-liquidation/Dockerfile +++ b/bots/midnight-liquidation/Dockerfile @@ -11,16 +11,24 @@ FROM node:24.14.1-slim COPY --from=oven/bun:1.3.12-slim /usr/local/bin/bun /usr/local/bin/bun ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 + +# The container's environment holds a funded liquidator EOA key, so nothing here may run as root — +# the previous oven/bun base ended with `USER bun`, and the node images define `node` (uid 1000) but +# do not switch to it. Corepack's pnpm shim lands in /usr/local/bin, which only root may write, so +# enable it before dropping privileges; every layer after `USER node` is unprivileged. +RUN corepack enable pnpm +RUN mkdir -p /repo && chown node:node /repo WORKDIR /repo +USER node # Manifests first, so the install layer is cached. `corepack install` pre-fetches the pnpm version # pinned in package.json#packageManager, so no download happens at container start. -COPY package.json pnpm-workspace.yaml pnpm-lock.yaml bunfig.toml ./ -RUN corepack enable pnpm && corepack install +COPY --chown=node:node package.json pnpm-workspace.yaml pnpm-lock.yaml bunfig.toml ./ +RUN corepack install # All members' package.json are needed for pnpm to resolve the `workspace:*` links. -COPY packages ./packages -COPY bots ./bots +COPY --chown=node:node packages ./packages +COPY --chown=node:node bots ./bots RUN pnpm install --frozen-lockfile # Run the bot from its package dir (`start` builds workspaces via `prestart`, then runs src/index.ts; diff --git a/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md b/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md index e3f73ea6..c4908e64 100644 --- a/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md +++ b/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md @@ -106,7 +106,7 @@ esbuild (bundling), and Node (runtime): - **Docker**: bot images build from `node:24.14.1-slim` only — no bun binary. All dists are built at image build (`pnpm -r --if-present run build`) and `CMD` is `node dist/src/index.js`; no runtime transform or container-start build. -- **CI**: the setup action becomes `pnpm/action-setup` (version read from `packageManager`) + +- **CI**: the setup action becomes `pnpm/setup` (version read from `packageManager`) + `setup-node`, installing with `pnpm install --frozen-lockfile`; `setup-bun` is removed and unit tests run `pnpm test`. @@ -198,6 +198,20 @@ dev-tooling transitives within their declared ranges; the only runtime-reachable **pnpm settings live in `pnpm-workspace.yaml`, not `.npmrc`.** The tracked `.npmrc` stays empty so configuration does not drift across two files. +**CI installs pnpm with `pnpm/setup`, not `pnpm/action-setup`.** Upstream now scopes `action-setup` +to pnpm v10 and older; `packageManager` pins `pnpm@11.1.1`. Beyond being the supported path, `pnpm/setup` +v2 downloads pnpm's self-contained release binary and verifies it against the SHA-256 digest GitHub +publishes for the asset, where `action-setup` bootstraps through an `npm ci` of `@pnpm/exe`. Removing +an npm-registry artifact from the path that installs the package manager is the same threat model this +TIB is written against, so the newer action is the better fit and not merely the un-deprecated one. +`install: false` is set because the composite's own install step is conditional on an input. + +**The images must not run as root.** `oven/bun` ends with `USER bun`, so the pre-migration images ran +every layer and the bot process unprivileged. The official `node` images define a `node` user (uid 1000) but do not switch to it, so the base swap would silently have promoted a process holding a +funded EOA key to root. Each Dockerfile now runs `corepack enable` as root — its shim lands in +`/usr/local/bin` — then `chown`s `/repo`, drops to `USER node`, and does every install, build, and +`CMD` from there. + **`Bun.env` -> `process.env` retires a documented convention** (`docs/CONVENTIONS.md`), so that edit lands in PR 2 alongside the code change rather than ahead of it. From 1b7deea8e32c8d5b03af72785da8b18d31057a89 Mon Sep 17 00:00:00 2001 From: Hayden Shively Date: Wed, 5 Aug 2026 13:43:11 -0400 Subject: [PATCH 3/5] ci(checks): stay on pnpm/action-setup until the org allowlists pnpm/setup The switch to pnpm/setup failed every job at the Setup step: morpho-org's GitHub Actions allowlist permits `pnpm/action-setup@*` and not `pnpm/setup@*`. action-setup installs pnpm 11.1.1 correctly, so this reverts to it and records the constraint plus the follow-up (an org admin allowlisting the successor) in the action and the TIB. Co-Authored-By: Claude Opus 5 (1M context) --- .github/actions/setup/action.yml | 16 +- .../TIB-2026-07-20-migrate-to-pnpm.md | 19 +- package.json | 38 - pnpm-lock.yaml | 825 +++++++++++++++++- pnpm-workspace.yaml | 6 + 5 files changed, 844 insertions(+), 60 deletions(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index ecfd4d7c..a94c9966 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -19,15 +19,15 @@ runs: # pnpm owns installs, workspace resolution, and script running. The version comes from # package.json#packageManager, so it is not repeated here. # - # `pnpm/setup` — not the older `pnpm/action-setup`, which upstream now scopes to pnpm v10 and - # older. It downloads pnpm's self-contained release binary and verifies it against the SHA-256 - # digest GitHub publishes for the asset, instead of bootstrapping through `npm ci` of - # `@pnpm/exe` — one fewer npm-registry artifact on the path that this migration exists to - # shorten. `install: false` because the install step below is conditional on an input. + # Upstream now scopes `action-setup` to pnpm v10 and older and points v11+ at its successor, + # `pnpm/setup`. We stay on `action-setup` regardless: the org's GitHub Actions allowlist permits + # `pnpm/action-setup@*` and not `pnpm/setup@*`, so the successor fails every job at the Setup + # step with "is not allowed in morpho-org/morpho-bots". `action-setup` installs pnpm 11.1.1 here + # correctly. Moving to `pnpm/setup` — worth doing, since it verifies pnpm's release binary + # against GitHub's published digest rather than bootstrapping through an `npm ci` of `@pnpm/exe` + # — needs an org admin to allowlist it first. - name: Set up pnpm - uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 - with: - install: false + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 - name: Install Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 diff --git a/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md b/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md index c4908e64..df94597f 100644 --- a/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md +++ b/docs/decisions/TIB-2026-07-20-migrate-to-pnpm.md @@ -106,7 +106,7 @@ esbuild (bundling), and Node (runtime): - **Docker**: bot images build from `node:24.14.1-slim` only — no bun binary. All dists are built at image build (`pnpm -r --if-present run build`) and `CMD` is `node dist/src/index.js`; no runtime transform or container-start build. -- **CI**: the setup action becomes `pnpm/setup` (version read from `packageManager`) + +- **CI**: the setup action becomes `pnpm/action-setup` (version read from `packageManager`) + `setup-node`, installing with `pnpm install --frozen-lockfile`; `setup-bun` is removed and unit tests run `pnpm test`. @@ -198,13 +198,16 @@ dev-tooling transitives within their declared ranges; the only runtime-reachable **pnpm settings live in `pnpm-workspace.yaml`, not `.npmrc`.** The tracked `.npmrc` stays empty so configuration does not drift across two files. -**CI installs pnpm with `pnpm/setup`, not `pnpm/action-setup`.** Upstream now scopes `action-setup` -to pnpm v10 and older; `packageManager` pins `pnpm@11.1.1`. Beyond being the supported path, `pnpm/setup` -v2 downloads pnpm's self-contained release binary and verifies it against the SHA-256 digest GitHub -publishes for the asset, where `action-setup` bootstraps through an `npm ci` of `@pnpm/exe`. Removing -an npm-registry artifact from the path that installs the package manager is the same threat model this -TIB is written against, so the newer action is the better fit and not merely the un-deprecated one. -`install: false` is set because the composite's own install step is conditional on an input. +**CI stays on `pnpm/action-setup`, blocked from its successor by the org allowlist.** Upstream now +scopes `action-setup` to pnpm v10 and older and points v11+ at `pnpm/setup`; `packageManager` pins +`pnpm@11.1.1`. The successor is the better fit on this TIB's own terms — v2 downloads pnpm's +self-contained release binary and verifies it against the SHA-256 digest GitHub publishes for the +asset, where `action-setup` bootstraps through an `npm ci` of `@pnpm/exe`, and removing an +npm-registry artifact from the path that installs the package manager is exactly the threat model +here. It cannot be adopted yet: `morpho-org`'s Actions allowlist permits `pnpm/action-setup@*` and +not `pnpm/setup@*`, so switching fails every job at the Setup step. `action-setup` installs pnpm +11.1.1 correctly in the meantime, and CI is green on it. **Follow-up:** have an org admin add +`pnpm/setup@*` to the allowlist, then switch. **The images must not run as root.** `oven/bun` ends with `USER bun`, so the pre-migration images ran every layer and the bot process unprivileged. The official `node` images define a `node` user (uid 1000) but do not switch to it, so the base swap would silently have promoted a process holding a diff --git a/package.json b/package.json index b7790ae3..d2411dc7 100644 --- a/package.json +++ b/package.json @@ -1,44 +1,6 @@ { "name": "@morpho-org/morpho-bots", "private": true, - "workspaces": { - "packages": [ - "bots/*", - "packages/*" - ], - "catalog": { - "@internationalized/date": "^3.11.0", - "@tanstack/react-form": "1.20.0", - "@tanstack/react-table": "8.21.3", - "@morpho-org/midnight-sdk": "1.3.0", - "@morpho-org/morpho-ts": "2.8.0", - "@morpho-org/viem-dlc": "0.0.11", - "@types/bun": "^1.3.0", - "@types/lodash-es": "^4.17.12", - "@types/react": "19.2.18", - "@types/react-dom": "19.2.4", - "date-fns": "^4.1.0", - "executooor-viem": "^1.3.3", - "husky": "^9.1.5", - "knip": "^5.86.0", - "lint-staged": "^16.1.2", - "lodash-es": "^4.18.0", - "loglayer": "9.3.0", - "@loglayer/transport-betterstack": "2.2.0", - "openapi-fetch": "0.17.0", - "openapi-typescript": "^7.13.0", - "react": "19.2.8", - "react-dom": "19.2.8", - "oxfmt": "^0.36.0", - "oxlint": "^1.46.0", - "oxlint-tsgolint": "^0.22.1", - "solc": "^0.8.35", - "soltag": "^0.0.17", - "typescript": "6.0.2", - "viem": "2.47.17", - "zod": "3.25.76" - } - }, "scripts": { "build": "pnpm --filter @repo/contracts run build", "format": "oxfmt", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 848f5367..ec1fcc80 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,12 +21,24 @@ catalogs: '@morpho-org/viem-dlc': specifier: 0.0.11 version: 0.0.11 + '@tanstack/react-form': + specifier: 1.20.0 + version: 1.20.0 + '@tanstack/react-table': + specifier: 8.21.3 + version: 8.21.3 '@types/bun': specifier: 1.3.13 version: 1.3.13 '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 + '@types/react': + specifier: 19.2.18 + version: 19.2.18 + '@types/react-dom': + specifier: 19.2.4 + version: 19.2.4 date-fns: specifier: 4.1.0 version: 4.1.0 @@ -63,6 +75,12 @@ catalogs: oxlint-tsgolint: specifier: ^0.22.1 version: 0.22.1 + react: + specifier: 19.2.8 + version: 19.2.8 + react-dom: + specifier: 19.2.8 + version: 19.2.8 solc: specifier: 0.8.35 version: 0.8.35 @@ -86,6 +104,9 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:packages/typescript-config + esbuild: + specifier: 0.25.12 + version: 0.25.12 husky: specifier: 'catalog:' version: 9.1.7 @@ -130,7 +151,7 @@ importers: version: 0.8.35 soltag: specifier: 'catalog:' - version: 0.0.17(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + version: 0.0.17(esbuild@0.25.12)(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) viem: specifier: 'catalog:' version: 2.47.17(typescript@6.0.2)(zod@4.4.3) @@ -147,6 +168,12 @@ importers: bots/market-making: dependencies: + '@aws-sdk/client-kms': + specifier: 3.1101.0 + version: 3.1101.0 + '@ethereumjs/wallet': + specifier: ^10.0.0 + version: 10.0.0 '@morpho-org/midnight-sdk': specifier: 'catalog:' version: 1.3.0(@morpho-org/morpho-ts@2.8.0)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) @@ -156,6 +183,12 @@ importers: '@morpho-org/morpho-ts': specifier: 'catalog:' version: 2.8.0 + '@noble/curves': + specifier: 1.9.1 + version: 1.9.1 + '@repo/bot-kit': + specifier: workspace:* + version: link:../../packages/bot-kit '@repo/logging': specifier: workspace:* version: link:../../packages/logging @@ -171,9 +204,24 @@ importers: '@repo/utils': specifier: workspace:* version: link:../../packages/utils + '@tanstack/react-form': + specifier: 'catalog:' + version: 1.20.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@tanstack/react-table': + specifier: 'catalog:' + version: 8.21.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + asn1js: + specifier: 3.0.6 + version: 3.0.6 commander: specifier: ^14.0.3 version: 14.0.3 + react: + specifier: 'catalog:' + version: 19.2.8 + react-dom: + specifier: 'catalog:' + version: 19.2.8(react@19.2.8) viem: specifier: 'catalog:' version: 2.47.17(typescript@6.0.2)(zod@4.4.3) @@ -187,6 +235,12 @@ importers: '@types/bun': specifier: 'catalog:' version: 1.3.13 + '@types/react': + specifier: 'catalog:' + version: 19.2.18 + '@types/react-dom': + specifier: 'catalog:' + version: 19.2.4(@types/react@19.2.18) typedoc: specifier: 0.28.20 version: 0.28.20(typescript@6.0.2) @@ -250,7 +304,7 @@ importers: version: 0.8.35 soltag: specifier: 'catalog:' - version: 0.0.17(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + version: 0.0.17(esbuild@0.25.12)(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) viem: specifier: 'catalog:' version: 2.47.17(typescript@6.0.2)(zod@4.4.3) @@ -306,7 +360,7 @@ importers: version: 0.8.35 soltag: specifier: 'catalog:' - version: 0.0.17(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) + version: 0.0.17(esbuild@0.25.12)(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)) typescript: specifier: 'catalog:' version: 6.0.2 @@ -439,6 +493,73 @@ packages: '@adraffy/ens-normalize@1.11.1': resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + '@aws-sdk/client-kms@3.1101.0': + resolution: {integrity: sha512-qczxakJlFYG9E6nE2yWIJ2nXq0HbMzHxMSWIsyubPZqx1TANHd2CSJWDTkg+IsNKq+94tG+e+EJo3uADwZ6cdw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/core@3.977.5': + resolution: {integrity: sha512-O5otOc1c6UZh5HsHAaPdYBcUUR9HL6mtnKqvc8nxN/CKDGUBUpsdh0q8K04Uz/dd1i0TaGyIQuQNqoO7+ad2TQ==} + engines: {node: '>=20.0.0'} + deprecated: |- + Deprecated due to Document number parsing bug in JSON, see + https://github.com/aws/aws-sdk-js-v3/issues/8246. Newer version available. + + '@aws-sdk/credential-provider-env@3.972.66': + resolution: {integrity: sha512-bOzP2+zdJ0XrghywB4FaJXtGZCx9yS0AGps+VJ5yEgg30wVyHNmVDBwVDXcRypzQY5iLGCS3NSn0nsuISqjFCQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-http@3.972.68': + resolution: {integrity: sha512-lkunS8X+H6V76WE+t/uGQm/U8v0JXK5mLfNFTUAMlE1kqaCjwlmqKJrgCVtqjK/vqnlrSWsLK4Lr4NANBWlfTQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-ini@3.973.11': + resolution: {integrity: sha512-KoDEolYtLHG/8C+IiZpXbJWyBOMkrHV+j66Kb9PBXmLv5euGb7aELvuCmLenoGAV6gBW2wM7TsG/1e5iulH4kA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-login@3.972.73': + resolution: {integrity: sha512-tjsxMkTAFkmiV9ycmymapb9nLECWVOwFs0bZMQ9gB9bnbY8/HwfukHZlWbXZZp7qkPU6EXAfOcMm3DioFFEywA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-node@3.972.77': + resolution: {integrity: sha512-l4nitYCN/Ls57vtUfdextCjTjW41JD7lQiAnuR0RTbdByFc/6OmEAzwGd+lrp6CUtiXGQL1FCaYiamfHASrwBw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-process@3.972.66': + resolution: {integrity: sha512-YOnX6bIhdjx0QfaENu2PB0eFm5MEc9ft8XNGQ+NxMfeLSq9aE+XjWCwDupEnV4UWv5ZFpBLJbTREIx7KNOoqpQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-sso@3.973.10': + resolution: {integrity: sha512-IsXnQ35j5VE+3ZK6aIhT5ypB+Jim3zRwVz0nYuVwyBKZyu/SYx+O2/LQpng8c2EiuwyqceabsDlYrICHDlJPsA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.972.72': + resolution: {integrity: sha512-nj9Zlsy7ya+fy+jhWTJwgfr7YdtDM4xHyZvgKuftuny0UgROVx9lxwvsWJSLvpKk4lig0m0tHng3k1fEnt0LeA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/nested-clients@3.997.40': + resolution: {integrity: sha512-hEdHT0PBR4fkGxWhwKG5EtEYKnAM7HKkp0vD10ufk4YcXejH4r4q6G/XhPzjUc6Yxo5kBS2vHg7llj4ViR9VTQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.996.43': + resolution: {integrity: sha512-lKekx8bLBXSv4O+cslk9Zfnw2XKSkWBs3uWL5QGhH2ZAQfNS7FE0vcSSN2vD/AhxX54ZTywWxR4STThoeOXlBA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/token-providers@3.1102.0': + resolution: {integrity: sha512-Ua700vVvM1q105yABSUQWkCK6FeTrNfU6ORGetJe5BzkZWY7QhkF7SVTOlmDGWRDNd6jbyY0Dv5e+E4bMBEmLg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/types@3.974.2': + resolution: {integrity: sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/xml-builder@3.972.37': + resolution: {integrity: sha512-zKq4HQum8JwDyEuyfuI4bbiAcU0KxP6qy+9PR/IsR92IyE/DaBAikzAS50tjxip4bqIIANpCcG+Yyj6CVhXupg==} + engines: {node: '>=20.0.0'} + + '@aws/lambda-invoke-store@0.3.0': + resolution: {integrity: sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==} + engines: {node: '>=18.0.0'} + '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -456,6 +577,175 @@ packages: '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@ethereumjs/rlp@10.1.2': + resolution: {integrity: sha512-T5Zt6C2pd02Wd88Q9A5/UX+He1Q2Y1LntHxz/038tfbUMiqby4fYSSTLEDx+TEfJqw1BsJSBY/TSu6goUzlk+w==} + engines: {node: '>=20'} + hasBin: true + + '@ethereumjs/util@10.1.2': + resolution: {integrity: sha512-UPBgXtHHfQugoXOSAoeG3jdmPbl37cwV9y3XqTPAnw8tJj8np14TPV2uc5lOs7C2LMF9Ubn66zyaiYxgwGppng==} + engines: {node: '>=20'} + + '@ethereumjs/wallet@10.0.0': + resolution: {integrity: sha512-ayRmV8uL1YEaRxUacr5fcy/Z/03K8NtVP7NIq3X4y5wDaNx7e+6hk40sa7cbkBhzOEK4j3JPpGohVhrOw5I03A==} + engines: {node: '>=18'} + '@gerrit0/mini-shiki@3.23.0': resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} @@ -555,10 +845,18 @@ packages: resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.9.0': + resolution: {integrity: sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg==} + engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.9.1': resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} engines: {node: ^14.21.3 || >=16} + '@noble/curves@2.2.0': + resolution: {integrity: sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ==} + engines: {node: '>= 20.19.0'} + '@noble/hashes@1.8.0': resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} @@ -990,9 +1288,65 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@smithy/core@3.31.1': + resolution: {integrity: sha512-CyogUINxvi7C7LDsh8Syo6hVJOT9ckz4rG8dRZfTJ8r91HkMY59PnNooaj7WcHyxEkxPfBAmbgztZU+xTo76lg==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.4.16': + resolution: {integrity: sha512-QfuLWAkLzptffFW980AFeHZFdqds2B64rpEd3uJ6lgs3xVn9QegGMUgUcj+4d7dRrAsya3r58ZKpku97WcFb4w==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.6.13': + resolution: {integrity: sha512-4fW86pEUOMbrD5nkbyl/tTvPHHWJFbuB2odl6ps9lWfHoXf9HWh3Q/Smh59qH1g7+c/BSZghX6bbUk4gsiMs8A==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.9.13': + resolution: {integrity: sha512-Nmd/Nl35zfYrd+a6OO2cDJb3GPh9bgTjIUhcM+JFfjpp8/osCgboDV5nCT1I01Pv6R13eSKDKLSoVa5ZB6Zsfw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.6.12': + resolution: {integrity: sha512-I6KLtq3H0qqSuV9vLglfi8puHqzygzWHOnI4z/Rdoo+q50vvo18vBRdPAvvEtcaKROz7Zn6qnPa14kRfPH6PcQ==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.16.1': + resolution: {integrity: sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==} + engines: {node: '>=18.0.0'} + '@swc/helpers@0.5.23': resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + '@tanstack/form-core@1.20.0': + resolution: {integrity: sha512-FGlKvcsusOf4756vtN1EoDI4h50r4/11eTcpF3NcnE04N/bSn2gP7cdhG6tYA0lJWzM9H1pNIzZ86uZ4MHB9eA==} + + '@tanstack/react-form@1.20.0': + resolution: {integrity: sha512-1UfWqEYRnHr4cooGbHiTQqoqus8soNUH+RLD6UyhIQEvomOSQMX0JgX+zGSl08tIugrnWcAnh50n5T9IIs/Evw==} + peerDependencies: + '@tanstack/react-start': ^1.130.10 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@tanstack/react-start': + optional: true + + '@tanstack/react-store@0.7.7': + resolution: {integrity: sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tanstack/react-table@8.21.3': + resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + '@tanstack/store@0.7.7': + resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} + + '@tanstack/table-core@8.21.3': + resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} + engines: {node: '>=12'} + '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} @@ -1011,6 +1365,14 @@ packages: '@types/node@25.8.0': resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} + '@types/react-dom@19.2.4': + resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} + '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -1048,6 +1410,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + asn1js@3.0.6: + resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==} + engines: {node: '>=12.0.0'} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1055,6 +1421,9 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} + brace-expansion@2.1.4: resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==} @@ -1097,6 +1466,9 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} @@ -1109,6 +1481,12 @@ packages: supports-color: optional: true + decode-formdata@0.9.0: + resolution: {integrity: sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw==} + + devalue@5.9.0: + resolution: {integrity: sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==} + emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -1120,6 +1498,15 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + ethereum-cryptography@3.2.0: + resolution: {integrity: sha512-Urr5YVsalH+Jo0sYkTkv1MyI9bLYZwW8BENZCeE1QYaTHETEYx0Nv/SVsWkSqpYrzweg6d8KMY1wTjH/1m/BIg==} + engines: {node: ^14.21.3 || >=16, npm: '>=9'} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -1217,6 +1604,9 @@ packages: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} + js-md5@0.8.3: + resolution: {integrity: sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==} + js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} @@ -1374,9 +1764,25 @@ packages: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} + peerDependencies: + react: ^19.2.8 + + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} + engines: {node: '>=0.10.0'} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -1395,6 +1801,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -1536,6 +1945,15 @@ packages: uri-js-replace@1.0.1: resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + uuid@11.1.1: + resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} + hasBin: true + valibot@1.4.2: resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} peerDependencies: @@ -1602,6 +2020,151 @@ snapshots: '@adraffy/ens-normalize@1.11.1': {} + '@aws-sdk/client-kms@3.1101.0': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/credential-provider-node': 3.972.77 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/core@3.977.5': + dependencies: + '@aws-sdk/types': 3.974.2 + '@aws-sdk/xml-builder': 3.972.37 + '@aws/lambda-invoke-store': 0.3.0 + '@smithy/core': 3.31.1 + '@smithy/signature-v4': 5.6.12 + '@smithy/types': 4.16.1 + bowser: 2.14.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.972.66': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.972.68': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.973.11': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/credential-provider-env': 3.972.66 + '@aws-sdk/credential-provider-http': 3.972.68 + '@aws-sdk/credential-provider-login': 3.972.73 + '@aws-sdk/credential-provider-process': 3.972.66 + '@aws-sdk/credential-provider-sso': 3.973.10 + '@aws-sdk/credential-provider-web-identity': 3.972.72 + '@aws-sdk/nested-clients': 3.997.40 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/credential-provider-imds': 4.4.16 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-login@3.972.73': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/nested-clients': 3.997.40 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-node@3.972.77': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.66 + '@aws-sdk/credential-provider-http': 3.972.68 + '@aws-sdk/credential-provider-ini': 3.973.11 + '@aws-sdk/credential-provider-process': 3.972.66 + '@aws-sdk/credential-provider-sso': 3.973.10 + '@aws-sdk/credential-provider-web-identity': 3.972.72 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/credential-provider-imds': 4.4.16 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-process@3.972.66': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.973.10': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/nested-clients': 3.997.40 + '@aws-sdk/token-providers': 3.1102.0 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.972.72': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/nested-clients': 3.997.40 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.997.40': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/signature-v4-multi-region': 3.996.43 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.996.43': + dependencies: + '@aws-sdk/types': 3.974.2 + '@smithy/signature-v4': 5.6.12 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.1102.0': + dependencies: + '@aws-sdk/core': 3.977.5 + '@aws-sdk/nested-clients': 3.997.40 + '@aws-sdk/types': 3.974.2 + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/types@3.974.2': + dependencies: + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.972.37': + dependencies: + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.3.0': {} + '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -1626,6 +2189,100 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@ethereumjs/rlp@10.1.2': {} + + '@ethereumjs/util@10.1.2': + dependencies: + '@ethereumjs/rlp': 10.1.2 + '@noble/curves': 2.2.0 + '@noble/hashes': 2.2.0 + + '@ethereumjs/wallet@10.0.0': + dependencies: + '@ethereumjs/util': 10.1.2 + '@scure/base': 1.2.6 + ethereum-cryptography: 3.2.0 + js-md5: 0.8.3 + uuid: 11.1.1 + '@gerrit0/mini-shiki@3.23.0': dependencies: '@shikijs/engine-oniguruma': 3.23.0 @@ -1734,10 +2391,18 @@ snapshots: '@noble/ciphers@1.3.0': {} + '@noble/curves@1.9.0': + dependencies: + '@noble/hashes': 1.8.0 + '@noble/curves@1.9.1': dependencies: '@noble/hashes': 1.8.0 + '@noble/curves@2.2.0': + dependencies: + '@noble/hashes': 2.2.0 + '@noble/hashes@1.8.0': {} '@noble/hashes@2.2.0': {} @@ -2003,10 +2668,74 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@smithy/core@3.31.1': + dependencies: + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.4.16': + dependencies: + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.6.13': + dependencies: + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.9.13': + dependencies: + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@smithy/signature-v4@5.6.12': + dependencies: + '@smithy/core': 3.31.1 + '@smithy/types': 4.16.1 + tslib: 2.8.1 + + '@smithy/types@4.16.1': + dependencies: + tslib: 2.8.1 + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 + '@tanstack/form-core@1.20.0': + dependencies: + '@tanstack/store': 0.7.7 + + '@tanstack/react-form@1.20.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@tanstack/form-core': 1.20.0 + '@tanstack/react-store': 0.7.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + decode-formdata: 0.9.0 + devalue: 5.9.0 + react: 19.2.8 + transitivePeerDependencies: + - react-dom + + '@tanstack/react-store@0.7.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@tanstack/store': 0.7.7 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + use-sync-external-store: 1.6.0(react@19.2.8) + + '@tanstack/react-table@8.21.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@tanstack/table-core': 8.21.3 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@tanstack/store@0.7.7': {} + + '@tanstack/table-core@8.21.3': {} + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 @@ -2030,6 +2759,14 @@ snapshots: dependencies: undici-types: 7.24.6 + '@types/react-dom@19.2.4(@types/react@19.2.18)': + dependencies: + '@types/react': 19.2.18 + + '@types/react@19.2.18': + dependencies: + csstype: 3.2.3 + '@types/unist@3.0.3': {} abitype@1.2.3(typescript@6.0.2)(zod@3.25.76): @@ -2056,10 +2793,18 @@ snapshots: argparse@2.0.1: {} + asn1js@3.0.6: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + balanced-match@1.0.2: {} balanced-match@4.0.4: {} + bowser@2.14.1: {} + brace-expansion@2.1.4: dependencies: balanced-match: 1.0.2 @@ -2097,6 +2842,8 @@ snapshots: commander@8.3.0: {} + csstype@3.2.3: {} + date-fns@4.1.0: {} debug@4.4.3(supports-color@10.2.2): @@ -2105,12 +2852,53 @@ snapshots: optionalDependencies: supports-color: 10.2.2 + decode-formdata@0.9.0: {} + + devalue@5.9.0: {} + emoji-regex@10.6.0: {} entities@4.5.0: {} environment@1.1.0: {} + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + ethereum-cryptography@3.2.0: + dependencies: + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.0 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + eventemitter3@5.0.1: {} eventemitter3@5.0.4: {} @@ -2192,6 +2980,8 @@ snapshots: js-levenshtein@1.1.6: {} + js-md5@0.8.3: {} + js-sha3@0.8.0: {} js-tokens@4.0.0: {} @@ -2442,8 +3232,21 @@ snapshots: punycode.js@2.3.1: {} + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + queue-microtask@1.2.3: {} + react-dom@19.2.8(react@19.2.8): + dependencies: + react: 19.2.8 + scheduler: 0.27.0 + + react@19.2.8: {} + require-from-string@2.0.2: {} restore-cursor@5.1.0: @@ -2459,6 +3262,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + scheduler@0.27.0: {} + semver@5.7.2: {} signal-exit@4.1.0: {} @@ -2487,10 +3292,10 @@ snapshots: transitivePeerDependencies: - debug - soltag@0.0.17(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)): + soltag@0.0.17(esbuild@0.25.12)(solc@0.8.35)(typescript@6.0.2)(viem@2.47.17(typescript@6.0.2)(zod@4.4.3)): dependencies: solc: 0.8.35 - unplugin: 3.3.0 + unplugin: 3.3.0(esbuild@0.25.12) viem: 2.47.17(typescript@6.0.2)(zod@4.4.3) optionalDependencies: typescript: 6.0.2 @@ -2559,14 +3364,22 @@ snapshots: undici-types@7.24.6: {} - unplugin@3.3.0: + unplugin@3.3.0(esbuild@0.25.12): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 + optionalDependencies: + esbuild: 0.25.12 uri-js-replace@1.0.1: {} + use-sync-external-store@1.6.0(react@19.2.8): + dependencies: + react: 19.2.8 + + uuid@11.1.1: {} + valibot@1.4.2(typescript@6.0.2): optionalDependencies: typescript: 6.0.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 200637ce..6544762e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -29,12 +29,16 @@ enablePrePostScripts: true # dependency versions, per the TIB's non-goal; relaxing any of these is a separate, deliberate bump. catalog: '@internationalized/date': 3.12.1 + '@tanstack/react-form': 1.20.0 + '@tanstack/react-table': 8.21.3 '@loglayer/transport-betterstack': 2.2.0 '@morpho-org/midnight-sdk': 1.3.0 '@morpho-org/morpho-ts': 2.8.0 '@morpho-org/viem-dlc': 0.0.11 '@types/bun': 1.3.13 '@types/lodash-es': ^4.17.12 + '@types/react': 19.2.18 + '@types/react-dom': 19.2.4 date-fns: 4.1.0 executooor-viem: ^1.3.3 husky: ^9.1.5 @@ -44,6 +48,8 @@ catalog: loglayer: 9.3.0 openapi-fetch: 0.17.0 openapi-typescript: ^7.13.0 + react: 19.2.8 + react-dom: 19.2.8 oxfmt: ^0.36.0 # Pinned to what bun.lock resolved for `^1.46.0`. Newer minors change rule behavior and want # oxlint-tsgolint >= 0.24 — bump both together, deliberately, in a separate change. From 0b85b871350f6ac0e32f7e52b7d9519a39d14456 Mon Sep 17 00:00:00 2001 From: Hayden Shively Date: Fri, 7 Aug 2026 11:13:44 -0500 Subject: [PATCH 4/5] fix(repo): allow esbuild lifecycle build --- pnpm-workspace.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6544762e..270fcb01 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -12,9 +12,10 @@ minimumReleaseAge: 4320 minimumReleaseAgeExclude: - '@morpho-org/*' -# No dependency lifecycle script runs unless opted in here — add entries deliberately. Empty today: -# nothing in the tree declares preinstall/install/postinstall. -allowBuilds: {} +# No dependency lifecycle script runs unless opted in here — add entries deliberately. esbuild's +# platform binary is required by the root build dependency introduced on main. +allowBuilds: + esbuild: true # Make an un-opted-in build script a hard install failure, not a warning. Without this the # default-deny above is advisory, which defeats the point of the migration. strictDepBuilds: true From 32f83ae5922d77203d0fd6339833e8542cd4c141 Mon Sep 17 00:00:00 2001 From: Hayden Shively Date: Fri, 7 Aug 2026 11:18:20 -0500 Subject: [PATCH 5/5] fix(repo): hoist pnpm dependencies for bun --- bots/market-making/scripts/playground-smoke-suite.test.mjs | 2 +- pnpm-workspace.yaml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/bots/market-making/scripts/playground-smoke-suite.test.mjs b/bots/market-making/scripts/playground-smoke-suite.test.mjs index 09783211..613cde4b 100644 --- a/bots/market-making/scripts/playground-smoke-suite.test.mjs +++ b/bots/market-making/scripts/playground-smoke-suite.test.mjs @@ -126,7 +126,7 @@ test('the declared root lint path effectively checks only the playground smoke m 'oxlint --config bots/market-making/scripts/playground-smoke.oxlintrc.json bots/market-making/scripts/playground-smoke*.mjs' ) assert.match(rootPackage.scripts.lint, /bun run lint:playground-smoke/) - assert.match(workflow, /- name: Run lint\n run: bun lint/) + assert.match(workflow, /- name: Run lint\n run: pnpm lint/) }) test('the scoped playground smoke lint config accepts clean source and rejects an injected unused import', async () => { diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 270fcb01..868a2bfc 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,6 +6,10 @@ engineStrict: true saveExact: true verifyStoreIntegrity: true preferOffline: true +# Bun's resolver does not reliably follow pnpm's isolated workspace dependency links for soltag's +# TypeScript imports. Hoisting preserves the pnpm lockfile and lifecycle policy while supporting the +# intermediate migration state where Bun remains the test runner. +nodeLinker: hoisted # 3 days — carried over from bunfig.toml's `minimumReleaseAge = 259200` (seconds; this is minutes). minimumReleaseAge: 4320