diff --git a/.claude/skills/spin-up-e2e-stack/SKILL.md b/.claude/skills/spin-up-e2e-stack/SKILL.md index 57dda34..1c967ca 100644 --- a/.claude/skills/spin-up-e2e-stack/SKILL.md +++ b/.claude/skills/spin-up-e2e-stack/SKILL.md @@ -26,6 +26,11 @@ Three services, three terminals. Run in this order so each service is ready befo > **Use testnet, not mainnet, for this whole flow.** This skill assumes a dev wallet funded from the testnet faucet. Every "Create a group" / "Send a message" in the smoke test below mints real on-chain state on whichever network your relayer + chat-app are pointed at. Mainnet group/message creation costs real SUI, persists permanently, and may be visible to real users if your chat-app's group-discovery surface exposes it. Keep `GROUPS_PACKAGE_ID` (relayer) + `VITE_*` package configs (chat-app) on testnet for development. +> **Want fully-local (localnet with your own contracts)?** This skill is testnet-first. On a localnet + testnet-Seal hybrid, **message decryption does not work** (Seal key servers run against testnet and can't authorize localnet group objects), GraphQL must be locally enabled for group discovery, and Walrus is testnet-only. If you need an all-local stack with working encryption, see [`spin-up-local-devstack`](../spin-up-local-devstack/SKILL.md), which runs a **local Seal key server** via `@mysten-incubation/devstack`. For a manual localnet bring-up without devstack, note these gotchas surfaced in practice: +> - **Relayer gRPC on localnet is the fullnode RPC port `:9000`**, not `:9124` (the Consistent Store, which 404s on `subscribe_checkpoints`). +> - **Publishing the canonical package to localnet** needs the suins MVR dep patched to git + `sui client test-publish --publish-unpublished-deps` (mirror `ts-sdks/packages/sui-stack-messaging/test/helpers/localnet/localnet-setup.ts`). +> - **The chat-app must pass `packageConfig.permissionedGroups`** (the localnet `sui_groups` IDs) or group ops auto-detect testnet and fail. The code reads `VITE_MESSAGING_*` (not the stale `VITE_MESSAGING_GROUPS_*` in `.env.example`). + ## Recommended path: Docker for the two backend services **Prefer Docker for the relayer and the walrus-indexer.** Both ship Dockerfiles; containers avoid host-toolchain friction. Steps 1–3 below are the no-Docker (host) alternative. The chat-app is a Vite dev server with no Dockerfile, so it always runs on the host (Step 3). diff --git a/.claude/skills/spin-up-local-devstack/SKILL.md b/.claude/skills/spin-up-local-devstack/SKILL.md new file mode 100644 index 0000000..67c7045 --- /dev/null +++ b/.claude/skills/spin-up-local-devstack/SKILL.md @@ -0,0 +1,105 @@ +--- +name: spin-up-local-devstack +description: Use when the user wants a FULLY-LOCAL stack (no testnet dependency) for Sui Stack Messaging — including a LOCAL Seal key server so message decryption works on localnet. Uses @mysten-incubation/devstack to compose a local Sui node + local-keygen Seal + (optional) local Walrus + published Move packages + the chat-app from one config file. The localnet counterpart to spin-up-e2e-stack (which is testnet-first and cannot decrypt on localnet). Requires Docker + Node >= 24. Trigger phrases - "fully local stack", "localnet with working Seal", "local seal key server", "devstack", "no testnet dependency", "local encryption", "decrypt on localnet", "all-local messaging stack". +--- + +# Spin up a fully-local stack with devstack (incl. local Seal) + +A one-command, all-local Sui Stack Messaging stack via `@mysten-incubation/devstack`: local Sui node + +a **local Seal key server** + the messaging Move package + a browser dev-wallet + the chat-app. The +payoff is that message **decryption works fully locally** — the testnet-first +[`spin-up-e2e-stack`](../spin-up-e2e-stack/SKILL.md) can't decrypt on localnet (Seal has no localnet; +the canonical key servers can't authorize localnet group objects). + +This was validated end-to-end (`create → send → DECRYPT`). The chat-app-side integration is documented +in [`chat-app/docs/DEVSTACK.md`](../../../chat-app/docs/DEVSTACK.md); the friction log + upstream doc +links are in [`reference/NOTES.md`](./reference/NOTES.md). + +## Requirements + +- **Docker, running.** sui / seal run as containers; first boot pulls images (slow). +- **Node >= 24** (devstack `engines`). With nvm: `nvm install 24 && nvm use 24`. +- **pnpm 10.x for installs.** On pnpm v11 a fresh install trips the esbuild build gate and the + `minimumReleaseAge` floor on devstack's fresh transitive deps. Use `npx pnpm@10 install`. See + [`docs/pnpm-v11-troubleshooting.md`](../../../docs/pnpm-v11-troubleshooting.md). +- **No native localnet on `:9000`.** Stop any `sui start` first. +- The incubation deps stay **chat-app devDependencies only** (never the canonical SDK). + +## Run + +```bash +cd chat-app +npx pnpm@10 install # devDeps: @mysten-incubation/devstack@0.1.1, @mysten-incubation/dev-wallet@0.3.0, @mysten/signers@1.0.5 +pnpm devstack up # sui + local Seal + publish + codegen + serve (add --renderer plain for clean logs) +# offline sanity check (no Docker): pnpm devstack config +``` + +Open the printed `http://dev.chat-app-local.chat-app.localhost:5175`, connect the **Dev Wallet** +(funded `publisher`/`alice`/`bob`), create a group, send, refresh → it decrypts. Send/decrypt also need +the relayer (below). + +## How it fits together + +`devstack up` brings up: Sui node → publisher account → messaging package publish → local-keygen Seal → +dev-wallet server → chat-app (Vite), writing typed config to `chat-app/src/generated/` (gitignored). +The chat-app consumes it through `vite.config.ts` (`devstackVitePlugin()` aliases `@generated`; a +`virtual:devstack-app-config` shim keeps it dev-only) and `src/lib/devstack-config.ts`. Full walkthrough: +[`chat-app/docs/DEVSTACK.md`](../../../chat-app/docs/DEVSTACK.md). + +The load-bearing, non-obvious bits (all handled in `chat-app/devstack.config.ts` + `devstack-config.ts`): + +- **Publishing the package.** devstack does one `Transaction.publish({ modules })`, which *merges* + bundled unpublished deps into one package. `sui_groups` ships a committed `Published.toml`, so the + `-e testnet` build links its testnet id (absent on localnet) instead of bundling. Fix: materialize a + gitignored copy of `sui_groups` with `Published.toml`/`Move.lock` stripped + a local Move dep, patch + `suins` MVR→git, strip messaging's `Published.toml`. Net: messaging + sui_groups merge into one local + package id (so `messaging` and `permissionedGroups` configs share it). The app recovers the + namespace/version singletons + the groups id from the publish tx via GraphQL at bootstrap. +- **Seal: one server, `sealThreshold: 1`.** Two local-keygen servers collide in codegen in 0.1.1. +- **Dev-wallet: register it yourself.** `devstackVitePlugin()` only aliases `@generated` — it does NOT + inject a wallet. devstack runs the wallet *server* (funded accounts); the app builds a + `DevstackSignerAdapter` from `@generated/dapp-kit/config`, `register()`s a `DevWallet`, and + `mountDevWallet()`s the panel. Serialize sign calls (the DevWallet allows one pending sign). + +## Relayer + +devstack does not run the reference relayer; send/fetch go through it. Run it separately +([`spin-up-relayer`](../spin-up-relayer/SKILL.md)) on the host, pointed at the **direct host-published +validator port** (not the Traefik-routed `:9000`, which 400s on gRPC): + +```bash +docker port 9000 # e.g. 127.0.0.1:51000 +# relayer/.env: SUI_RPC_URL=http://127.0.0.1:51000 ; GROUPS_PACKAGE_ID= +cd relayer && cargo run # :3000 ; the chat-app reads VITE_RELAYER_URL (default localhost:3000) +``` + +## Walrus (optional) + +Walrus is **off the critical path for the create → send → decrypt loop**: decryption never touches +it (delivery = relayer store + on-chain refs; Walrus is recovery / attachments only), so leaving it +out doesn't compromise local decryption. Only message **attachments** need it. + +The seam that stays non-local is **archival** — the reference relayer archives to its default +**testnet** Walrus. Making *that* local is a tracked follow-up (not done here): devstack offers +`walrus({ local: { nodeCount, shards } })` + `walCoin`, but the relayer + chat-app talk **HTTP** to a +publisher/aggregator gateway (not the Walrus SDK) — whether devstack's local Walrus exposes those is +the open question — and it also needs repointing the relayer's `WALRUS_PUBLISHER_URL`/`AGGREGATOR_URL`, +enabling attachments (off in devstack mode), and wiring the indexer + SDK `RecoveryTransport`. To +experiment now, add `walrus({ local })` + `walCoin` to `devstack.config.ts` and wire `VITE_WALRUS_*`. + +## Gotchas (full list in `reference/NOTES.md`) + +- **First boot is slow** (image pulls). `.devstack/` + `src/generated/` are gitignored (regenerated each `up`). +- **Reset:** `devstack wipe --yes`; hard Docker reset `docker rm -f $(docker ps -aq --filter name=devstack)` + (`devstack prune` only removes idle groups). Re-emit codegen: `devstack apply`. +- **"A signing request is already pending"** = concurrent signs vs the DevWallet's one-pending model → serialize app-side. +- **Connect hangs at "Confirm connection in the wallet"** = no `mountDevWallet()`. +- **Relayer "grpc-status header missing, HTTP 400"** = gRPC through Traefik → use the host-published port. + +## Cross-links + +- Testnet-first / manual localnet path: [`spin-up-e2e-stack`](../spin-up-e2e-stack/SKILL.md). +- Run the relayer: [`spin-up-relayer`](../spin-up-relayer/SKILL.md). +- Why Seal can't work on a localnet + testnet-Seal hybrid: [`debug-encryption-flow`](../debug-encryption-flow/SKILL.md) (Stage 3). +- devstack docs: + · dev-wallet docs: diff --git a/.claude/skills/spin-up-local-devstack/reference/NOTES.md b/.claude/skills/spin-up-local-devstack/reference/NOTES.md new file mode 100644 index 0000000..ae834fc --- /dev/null +++ b/.claude/skills/spin-up-local-devstack/reference/NOTES.md @@ -0,0 +1,155 @@ +# devstack + dev-wallet notes for the sui-stack-messaging chat-app + +What we learned wiring `@mysten-incubation/devstack@0.1.1` + `@mysten-incubation/dev-wallet@0.3.0` +into the chat-app for a **fully-local, end-to-end-encrypted** stack (local Sui + local-keygen Seal + +published package + dev-wallet), verified `create → send → DECRYPT` locally. + +**Upstream docs (not vendored — read on GitHub):** + +- devstack: + (rendered: ) +- dev-wallet: + (rendered: ) + +The integration itself (config + app wiring) is documented in +[`chat-app/docs/DEVSTACK.md`](../../../../chat-app/docs/DEVSTACK.md). This file is the friction log. + +--- + +## 1. Publishing `sui_stack_messaging` (which depends on published `sui_groups`) — the hard one + +`localPackage()` builds **offline** with a hardcoded env +(`sui move build -e testnet … --with-unpublished-dependencies`, in +`devstack/dist/substrate/runtime/sui-move-build/index.mjs`) then a **single** +`Transaction.publish({ modules, dependencies })`. + +- `--with-unpublished-dependencies` is the `--publish-unpublished-deps` equivalent: **unpublished** + transitive deps get their bytecode bundled. `suins` (the pinned rev ships no `Published.toml`) + bundles cleanly. +- `sui_groups` ships a committed `Published.toml` with `[published.testnet]`, so the `-e testnet` + build resolves it to that on-chain **testnet** id and *links* against it instead of bundling → + publish to localnet fails: `PublishError`/`publish-tx` "Dependent package not found on-chain: + 0xba8a…". `-e testnet` is harmless for normal local packages (nothing resolves); it only bites a + dep genuinely published on testnet. +- **Single `Transaction.publish({ modules })` MERGES all bundled modules into ONE package.** So on + localnet, messaging + sui_groups + suins land at **one shared package id** — i.e. + `permissionedGroups` id == messaging id. The SDK works because `permissioned_group`, + `messaging`, `version` all live in that one package. + +The localnet test path (`ts-sdks/.../test/helpers/localnet`) avoids the linking problem because +`sui client test-publish` reconciles published-status against the **live localnet chain-id** (where +sui_groups is unpublished → bundled). devstack's offline `-e testnet` build can't, and there's no +build-env option. `knownPackage(...)` is for deps already on-chain on the target network — not our +fresh-local-publish case. + +**Our fix** (`chat-app/devstack.config.ts`): materialize gitignored copies under `chat-app/.devstack/` +(canonical package untouched) that look **unpublished** to the `-e testnet` build — + +- clone `sui_groups` at the pinned rev, **strip its `Published.toml` + `Move.lock`**, point + messaging's `Move.toml` at it via `{ local = … }` (devstack copies local deps into its build + scratch; git deps keep their `Published.toml`); +- patch messaging's `suins` MVR dep → git (MVR doesn't resolve on localnet); +- strip messaging's own `Published.toml` so it publishes fresh. + +`config.packages` only carries the merged messaging id; namespace/version singletons and the +`sui_groups`/`permissioned_group` id are **not** surfaced. The app recovers them from the publish tx +at bootstrap via GraphQL (see §5) — `chat-app/src/lib/devstack-config.ts`. + +## 2. Seal — one local key server, threshold 1 + +The docs only ever show one `seal({ mode: 'local-keygen', signer })`. Trying **two** local-keygen +servers: + +- **boots** only if each uses a **distinct signer** (two registrations on one signer race that + account's gas coin → `SealError`/`register` "object … unavailable for consumption"); +- then **fails codegen** — both publish a Seal Move package, codegen emits a package binding per + package, the two "seal" packages collide → `CodegenEmitterCollision`, supervisor aborts. Structural + in 0.1.1; no `excludeFromCodegen` on `seal()`. + +**Our fix:** one local-keygen Seal server (its own signer, off `publisher`, so it never races the +messaging publish), and the app sets `encryption.sealThreshold: 1` (SDK default is 2 = testnet +two-server topology). `serverConfigs` comes from `@generated/seal/local.ts`. + +## 3. Dev-wallet — devstack does NOT register it; the app must + +`devstackVitePlugin()` in 0.1.1 does exactly **one** thing: alias `@generated` to the codegen dir +(`devstack/dist/build-integrations/vite/index.mjs`). It does **not** inject a wallet. devstack's +`wallet({ accounts })` runs a server (`http://…:6173`, funded accounts, keys stay server-side; signs +over `/api/v1/devstack/*`) and emits `@generated/dapp-kit/config.ts` (`walletUrl`, `pairUrl#token`, +`chain: sui:local` — sensitive, gitignored). The browser app wires it up itself: + +```ts +import { DevWallet } from '@mysten-incubation/dev-wallet'; +import { DevstackSignerAdapter, parseDevstackToken } from '@mysten-incubation/dev-wallet/adapters'; +import { mountDevWallet } from '@mysten-incubation/dev-wallet/ui'; +const a = new DevstackSignerAdapter({ serverOrigin: dappKitConfig.walletUrl, token: parseDevstackToken(dappKitConfig.pairUrl) }); +await a.initialize(); // fetch the funded accounts from the server +const w = new DevWallet({ adapters: [a], networks: { localnet: suiNetwork.rpcUrl } }); +w.register(); // wallet-standard -> dapp-kit's ConnectButton lists it +mountDevWallet(w); // floating panel = where connect/sign approvals happen +``` + +Gotchas hit: +- **`DevWalletClient` (popup) is the wrong client** — that's for a standalone served wallet UI; the + devstack server is an HTTP signing API, consumed via `DevstackSignerAdapter`. +- **`createDevstackAdapterFromManifest` wants the nested runtime `Manifest`**, not the flat generated + `dappKitConfig` — use `DevstackSignerAdapter` + `parseDevstackToken` directly. +- **Without `mountDevWallet`, connect hangs** at "Confirm connection in the wallet" — no UI to confirm in. +- **The DevWallet allows only one pending sign** → concurrent session-key + tx signs throw "a signing + request is already pending" (`dev-wallet/dist/wallet/dev-wallet.mjs`). Real wallets queue; the + DevWallet doesn't. Fix: serialize sign calls app-side (a promise chain around `signPersonalMessage` + in `MessagingClientContext.tsx`). React StrictMode double-render makes the race more likely. + +## 4. Relayer on devstack — use the host-published port, not the routed one + +devstack does not run the reference relayer. Run it separately (host process / `cargo run`, so it can +reach the node), with `GROUPS_PACKAGE_ID` = the **merged** package id and `SUI_RPC_URL` = the +**direct, host-published validator port**, NOT the Traefik-routed `:9000`. The router fronts `:9000` +as HTTP/1 (JSON-RPC works), but the relayer's gRPC checkpoint subscription gets `HTTP 400` +("grpc-status header missing") through it. The validator host-publishes its `:9000` on a dynamic high +port — find it with `docker port 9000` (e.g. `127.0.0.1:51000`) and point the +relayer there. Then `Subscribed to checkpoint stream` succeeds and membership sync works. +(Docker-Compose relayer instead → `host.docker.internal:` or join the devstack network.) + +## 5. GraphQL is the newer schema + +The devstack local GraphQL is a newer Sui GraphQL than testnet: endpoint is **`/graphql`** (the +generated `graphqlUrl` has no path — append it), and it uses **`transaction(digest:)`** / +**`object{ previousTransaction }`** (not `transactionBlock` / `previousTransactionBlock`). The +bootstrap recovery (`devstack-config.ts`) reads the messaging publish tx's `effects.objectChanges`: +created MoveObjects matched by type (`MessagingNamespace`, `::version::Version`) and the MovePackage +exposing the `permissioned_group` module (= the merged messaging id). Group discovery (testnet-shaped +queries) may need the same schema port if exercised on localnet. + +## 6. Errors → fixes (quick index) + +| Tag / symptom | Cause | Fix | +|---|---|---| +| `PublishError`/`publish-tx` "Dependent package not found" | sui_groups linked at its testnet id | strip `Published.toml`, bundle as local (§1) | +| `PublishError`/`publish-tx` "fetch failed" (both publishes) | localnet RPC wedged after many reconciles | `devstack wipe --yes` + `docker rm -f $(docker ps -aq --filter name=devstack)`, fresh `up` | +| `SealError`/`register` "object … unavailable" | two seal servers on one signer | one server, dedicated signer (§2) | +| `CodegenEmitterCollision` | two Seal package bindings | one Seal server (§2) | +| `HostServiceAcquireError`/`exit` (`ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY`) | `pnpm exec vite` hit pnpm-v11 deps-purge in a non-TTY child | run vite via `node_modules/.bin/vite` in the host-service `script` | +| connect hangs "Confirm connection in the wallet" | no wallet UI mounted | `mountDevWallet(wallet)` (§3) | +| "A signing request is already pending" | DevWallet one-pending-sign + concurrent signs | serialize signs app-side (§3) | +| relayer "grpc-status header missing, HTTP 400" | gRPC through Traefik | point at the host-published validator port (§4) | + +## 7. Operational + +- **Node >= 24** (devstack `engines`; `nvm install 24`). **Docker** running. First boot pulls images (slow). +- **pnpm v11** purges node_modules on a v10 lockfile/config mismatch (same root cause as the + host-service crash). Install with `npx pnpm@10 install`, or move pnpm settings into + `pnpm-workspace.yaml` and `CI=true pnpm install`. The chat-app's `minimumReleaseAge` policy (enforced + by pnpm v11) blocks devstack's <2-day-old transitive deps — a separate supply-chain gate that keeps + the chat-app on a pnpm-10 lockfile for now. +- Logs: `devstack up --renderer plain`. Reset: `devstack wipe --yes`. `devstack prune --yes` only + removes *idle* groups (a live validator isn't idle). Re-emit codegen: `devstack apply`. + +## 8. Follow-up: migrate the chat-app to `@mysten/dapp-kit-react` + +The chat-app is on the **deprecated** `@mysten/dapp-kit` (JSON-RPC-only, never gets gRPC/GraphQL). +`@mysten/dapp-kit-react` (sui-2.0) is the path forward and is gRPC-native. Browser-gRPC-on-localnet is +**proven working** here (the messaging base client is already `SuiGrpcClient`), so the migration's main +unknown is retired. The dev-wallet wiring is identical on both stacks (same `DevstackSignerAdapter`), +so migration is a separate, deliberate PR — see the cost-benefit (workaround-now / migrate-next). +Guide: . diff --git a/AGENTS.md b/AGENTS.md index da89ebc..555ca00 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -108,7 +108,8 @@ Per-component: - `develop-on-sui-stack-messaging/SKILL.md` — orientation; canonical vs reference. - `spin-up-relayer/SKILL.md` — run the reference relayer locally. -- `spin-up-e2e-stack/SKILL.md` — relayer + indexer + chat-app together. +- `spin-up-e2e-stack/SKILL.md` — relayer + indexer + chat-app together (testnet-first; Seal decryption does not work on localnet). +- `spin-up-local-devstack/SKILL.md` — fully-local stack via `@mysten-incubation/devstack`, including a **local Seal key server** (`seal({ mode: 'local-keygen' })`) so decryption works on localnet (validated end-to-end: create → send → decrypt). The localnet counterpart to `spin-up-e2e-stack`. - `develop-relayer/SKILL.md` — fork-and-extend the Rust relayer. - `develop-walrus-indexer/SKILL.md` — fork-and-extend the TS indexer. - `extend-smart-contracts/SKILL.md` — add custom Move modules on top of `sui_stack_messaging`. diff --git a/chat-app/.gitignore b/chat-app/.gitignore new file mode 100644 index 0000000..037ebaa --- /dev/null +++ b/chat-app/.gitignore @@ -0,0 +1,5 @@ +# devstack (local-only dev stack via @mysten-incubation/devstack) +# Patched Move-package scratch copy that devstack builds+publishes from, and the +# typed config devstack codegen writes. Both are regenerated on every `devstack up`. +.devstack/ +src/generated/ diff --git a/chat-app/AGENTS.md b/chat-app/AGENTS.md index 6635b59..ed7b67a 100644 --- a/chat-app/AGENTS.md +++ b/chat-app/AGENTS.md @@ -61,9 +61,14 @@ This means: ## Skills -- `.claude/skills/spin-up-e2e-stack/SKILL.md` — full local stack with this app on top. +- `.claude/skills/spin-up-e2e-stack/SKILL.md` — full local stack with this app on top (testnet-first). +- `.claude/skills/spin-up-local-devstack/SKILL.md` — fully-local stack (incl. local Seal so decryption works on localnet) via `@mysten-incubation/devstack`, validated end-to-end. The integration lives in `devstack.config.ts` + `vite.config.ts` + `src/lib/devstack-config.ts`; see [`docs/DEVSTACK.md`](./docs/DEVSTACK.md). - `.claude/skills/integrate-sui-stack-messaging/SKILL.md` (builder-facing) — describes the SDK integration patterns this app exemplifies. +## Localnet wiring note + +`src/contexts/MessagingClientContext.tsx`'s `parsePackageConfig()` wires both `messaging` and `permissionedGroups` package configs from env. For localnet, set `VITE_PERMISSIONED_GROUPS_ORIGINAL_PACKAGE_ID` / `_LATEST_PACKAGE_ID` alongside `VITE_MESSAGING_*` — otherwise the SDK factory auto-detects the *testnet* groups package and group operations fail. (The code reads `VITE_MESSAGING_*`; the older `VITE_MESSAGING_GROUPS_*` names in some `.env.example` comments are stale.) + ## Pre-commit checks ```bash diff --git a/chat-app/devstack.config.ts b/chat-app/devstack.config.ts new file mode 100644 index 0000000..47644eb --- /dev/null +++ b/chat-app/devstack.config.ts @@ -0,0 +1,219 @@ +// All-local dev stack for the chat-app via @mysten-incubation/devstack. +// +// Composes a local Sui node + a LOCAL Seal key server (`seal({ mode: +// 'local-keygen' })`) + the messaging Move package + a browser dev wallet + the +// Vite dev server, and writes typed config to `src/generated/`. The local Seal +// key server is the point: it BLS-keygens a master key, publishes the Seal Move +// package to the in-stack node, registers an on-chain KeyServer bound to the +// in-stack RPC, and serves it — so message decryption works fully locally +// (the testnet key servers cannot authorize localnet group objects). +// +// Requirements: Docker, Node >= 24 (devstack `engines`). The Seal key-server +// image is fetched on first boot. Keep `@mysten-incubation/devstack` a chat-app +// devDependency only — never a dependency of the canonical SDK. +// +// Run: +// pnpm devstack up # attached supervisor: sui + local Seal + publish + serve +// pnpm devstack apply # reconcile through a live supervisor, or one-shot + +import { execFileSync } from 'node:child_process'; +import { cpSync, existsSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { + account, + defineDevstack, + HOST_SERVICE_PORT_TOKEN, + hostService, + localPackage, + seal, + sui, + wallet, + // walrus, walCoin, // uncomment for a local Walrus cluster (attachments only); see note below +} from '@mysten-incubation/devstack'; + +const HERE = dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = resolve(HERE, '..'); +const DEV_PORT = 5173; + +// --- Patched build sources (the one risky bit) ------------------------------ +// `localPackage()` builds from `sourcePath` with `sui move build -e testnet … +// --with-unpublished-dependencies` (the `-e testnet` is hardcoded in devstack +// 0.1.1), then `Transaction.publish`. `--with-unpublished-dependencies` is the +// `--publish-unpublished-deps` equivalent: it bundles *unpublished* transitive +// deps into the one publish tx. The catch: a dep that ships a committed +// `Published.toml` with a `[published.testnet]` entry (here, `sui_groups`) is +// resolved by the `-e testnet` build to its on-chain testnet id and *linked* +// rather than bundled — and that id doesn't exist on localnet, so the publish +// fails ("Dependent package not found on-chain"). devstack does NOT patch +// Move.toml or scrub `Published.toml`, so we pre-stage COPIES (canonical package +// untouched), mirroring the localnet test path's end-state +// (`sui client test-publish` against the live chain, where sui_groups is +// unpublished and gets bundled): +// - `suins = { r.mvr = "@suins/core" }` -> a LOCAL copy with `Published.toml`/ +// `Move.lock` stripped (MVR doesn't resolve on localnet; and although this suins +// rev ships no `Published.toml`, its committed `Move.lock` carries `[env]` +// published-ids that the `-e testnet` build would otherwise link to instead of +// bundling — so it gets the same local-copy + strip treatment as sui_groups). +// - `sui_groups` -> a LOCAL copy with `Published.toml`/`Move.lock` stripped, so +// the `-e testnet` build treats it as unpublished and bundles it. devstack copies +// local deps into its build scratch; git deps would keep their published addresses. +// - drop messaging's own `Published.toml`/`Move.lock` so it publishes fresh on localnet. +const CANONICAL_MESSAGING = resolve(REPO_ROOT, 'move/packages/sui_stack_messaging'); +const PATCHED_ROOT = resolve(HERE, '.devstack'); +const PATCHED_MESSAGING = resolve(PATCHED_ROOT, 'sui_stack_messaging'); +const PATCHED_GROUPS = resolve(PATCHED_ROOT, 'sui_groups'); // git checkout root +const PATCHED_GROUPS_PKG = resolve(PATCHED_GROUPS, 'move/packages/sui_groups'); +const PATCHED_SUINS = resolve(PATCHED_ROOT, 'suins'); // git checkout root +const PATCHED_SUINS_PKG = resolve(PATCHED_SUINS, 'packages/suins'); + +// Matches the `sui_groups` git rev pinned in the canonical messaging Move.toml. +const SUI_GROUPS_GIT = 'https://github.com/MystenLabs/sui-groups.git'; +const SUI_GROUPS_REV = 'ea766818b90e162341e885a855718388edcc8e99'; +// suins ships no Published.toml at this rev, but its committed Move.lock carries +// `[env]` published-ids (testnet 0x40eee27b…). As a git dep those leak through and +// the `-e testnet` build LINKS to that id instead of bundling — and it isn't on +// localnet. So materialize a LOCAL copy with Published.toml/Move.lock stripped, +// same as sui_groups, so the build treats suins as unpublished and bundles it. +const SUINS_GIT = 'https://github.com/MystenLabs/suins-contracts.git'; +const SUINS_REV = '2b75990bdc31472405a6bf47b40152627a1fa6c0'; +const SUINS_DEP = 'suins = { local = "../suins/packages/suins" }'; + +// Strip committed published addresses + lockfile so the `-e testnet` build treats a +// package as UNPUBLISHED on localnet and bundles it. +function stripPublished(pkgDir: string) { + rmSync(resolve(pkgDir, 'Published.toml'), { force: true }); + rmSync(resolve(pkgDir, 'Move.lock'), { force: true }); +} + +function materializeSuiGroups() { + if (!existsSync(resolve(PATCHED_GROUPS_PKG, 'Move.toml'))) { + rmSync(PATCHED_GROUPS, { recursive: true, force: true }); + execFileSync('git', ['clone', '--quiet', SUI_GROUPS_GIT, PATCHED_GROUPS], { stdio: 'inherit' }); + execFileSync('git', ['-C', PATCHED_GROUPS, 'checkout', '--quiet', SUI_GROUPS_REV], { + stdio: 'inherit', + }); + } + stripPublished(PATCHED_GROUPS_PKG); +} + +function materializeSuins() { + if (!existsSync(resolve(PATCHED_SUINS_PKG, 'Move.toml'))) { + rmSync(PATCHED_SUINS, { recursive: true, force: true }); + execFileSync('git', ['clone', '--quiet', SUINS_GIT, PATCHED_SUINS], { stdio: 'inherit' }); + execFileSync('git', ['-C', PATCHED_SUINS, 'checkout', '--quiet', SUINS_REV], { + stdio: 'inherit', + }); + } + stripPublished(PATCHED_SUINS_PKG); +} + +function materializeMessaging() { + rmSync(PATCHED_MESSAGING, { recursive: true, force: true }); + cpSync(CANONICAL_MESSAGING, PATCHED_MESSAGING, { + recursive: true, + // Skip build artifacts and the pinned lockfile — sui move build regenerates them. + filter: (src) => !/[/\\]build([/\\]|$)/.test(src) && !/[/\\]Move\.lock$/.test(src), + }); + const tomlPath = resolve(PATCHED_MESSAGING, 'Move.toml'); + const toml = readFileSync(tomlPath, 'utf8') + .replace('suins = { r.mvr = "@suins/core" }', SUINS_DEP) + .replace( + /^sui_groups = \{ git =.*$/m, + 'sui_groups = { local = "../sui_groups/move/packages/sui_groups" }', + ); + writeFileSync(tomlPath, toml); + stripPublished(PATCHED_MESSAGING); +} + +materializeSuiGroups(); +materializeSuins(); +materializeMessaging(); + +// --- Network + accounts ----------------------------------------------------- +export const localnet = sui(); // in-stack Sui validator + faucet + GraphQL (Docker) +export const publisher = account('publisher'); // publishes Move packages +// Dedicated signer for the Seal key server (kept off `publisher` so the seal +// registration never races the messaging publish on the same gas coin). +export const sealSigner = account('seal_keygen'); +export const alice = account('alice'); +export const bob = account('bob'); + +// --- Local Seal key server (the whole point) -------------------------------- +// One local-keygen key server: it BLS-keygens a master key, publishes the Seal Move +// package, registers an on-chain KeyServer bound to the in-stack RPC, and serves it. +// (devstack 0.1.1 can boot two local-keygen servers, but its codegen collides on the +// two duplicate Seal-package bindings — so one server, with the app using +// `sealThreshold: 1` to match.) Codegen emits `src/generated/seal/local.ts`: +// export const sealBindings = { name, objectId, keyServerUrl, serverConfigs, mode } +// where `serverConfigs` (`[{ objectId, weight }]`) is SDK-ready for `new SealClient`. +export const keyServer = seal({ mode: 'local-keygen', signer: sealSigner, name: 'local' }); + +// --- Move packages ---------------------------------------------------------- +// One bundled publish (sui_groups + suins + messaging in a single tx). The two +// shared singletons the SDK needs for `packageConfig.messaging` (MessagingNamespace +// + Version) and the bundled `sui_groups` package id are not surfaced by codegen, +// so the chat-app recovers all three from chain at bootstrap — see +// `src/lib/devstack-config.ts`. +export const messaging = localPackage('sui_stack_messaging', { + sourcePath: PATCHED_MESSAGING, + publisher, +}); + +// --- Dev wallet (browser) --------------------------------------------------- +// `devstackVitePlugin()` auto-injects this into the app; dapp-kit's ConnectButton +// then lists it (pre-funded accounts, no extension, no faucet step). +export const devWallet = wallet({ accounts: [publisher, alice, bob] }); + +// --- The chat-app dev server ------------------------------------------------ +export const app = hostService({ + name: 'chat-app', + // Run vite via the local bin (not `pnpm exec`) so the host-service child never + // triggers pnpm's pre-exec deps-status check, which on pnpm v11 tries to purge + // node_modules in a non-TTY child and kills the service. + script: `node_modules/.bin/vite --host 127.0.0.1 --strictPort --port ${HOST_SERVICE_PORT_TOKEN}`, + cwd: HERE, + port: DEV_PORT, + ready: { kind: 'http' }, + // Wait for chain, key server, package publish, and wallet before serving. + after: [messaging, keyServer, devWallet] as const, +}); + +export default defineDevstack({ + members: [localnet, keyServer, messaging, devWallet, app], + stackName: 'chat-app-local', + codegen: { outputDir: 'src/generated' }, +}); + +// --- Optional: local Walrus cluster (attachments only) ---------------------- +// Walrus is OPTIONAL — only message ATTACHMENTS need it; messaging and +// decryption do not. The local-cluster factory is `walrus({ local: { nodeCount, shards } })` +// (a heavy container boot). To enable: import `{ walrus, walCoin }` above, then e.g. +// export const blobs = walrus({ local: { nodeCount: 1, shards: 4 } }); +// add `blobs` to `members`, and fund WAL via `walCoin(blobs)`. + +// --- Relayer ---------------------------------------------------------------- +// devstack does NOT run the reference relayer, but the SDK send/fetch path goes +// through it. Run it separately (host process) pointed at the DIRECT host-published +// validator port — `docker port 9000` — NOT the Traefik-routed :9000 +// (the relayer's gRPC checkpoint subscription 400s through the router). `GROUPS_PACKAGE_ID` +// = the merged package id (src/generated/packages.ts), `SUI_RPC_URL` = that host-published +// port. The chat-app reads `VITE_RELAYER_URL` (default http://localhost:3000). + +// --- How the app consumes the generated output ------------------------------ +// `devstackVitePlugin()` (added in vite.config.ts, dev-only) ONLY aliases `@generated` +// to this `outputDir` — it does NOT inject a wallet. The app reads the generated modules +// through a `virtual:devstack-app-config` shim (so non-devstack builds never import +// `@generated`) + `src/lib/devstack-config.ts`. It maps: +// @generated/seal/local (sealBindings.serverConfigs) -> SealClient serverConfigs (threshold 1) +// @generated/packages (packages.sui_stack_messaging.packageId) -> packageConfig.messaging +// @generated/sui/network (suiNetwork.{rpcUrl,graphqlUrl}) -> base gRPC client + GraphQL +// @generated/dapp-kit/config (walletUrl,pairUrl,chain) -> dev-wallet registration + network +// The shim also REGISTERS the dev-wallet (DevstackSignerAdapter + DevWallet + mountDevWallet) — +// devstack runs the wallet server, but the app must register it. MessagingNamespace + Version + +// the merged sui_groups id are recovered from the publish tx at bootstrap (not surfaced by codegen); +// mvr overrides `@local-pkg/sui-stack-messaging` / `@local-pkg/sui-groups` are set on the base client. +// +// Node tooling (not the browser) can read the runtime manifest via +// `@mysten-incubation/devstack/runtime` (`readStackContext`); the browser path is the generated imports. diff --git a/chat-app/docs/DEVSTACK.md b/chat-app/docs/DEVSTACK.md new file mode 100644 index 0000000..1330872 --- /dev/null +++ b/chat-app/docs/DEVSTACK.md @@ -0,0 +1,113 @@ +# Local devstack integration + +How the chat-app runs **fully locally** — local Sui node + a **local Seal key server** + the messaging +Move package + a browser dev-wallet — via `@mysten-incubation/devstack`, so message **decryption works +on localnet** with no testnet dependency. + +> Why this exists: Seal has no localnet. The canonical testnet key servers can't authorize localnet +> group objects, so a localnet-Sui + testnet-Seal hybrid **can't decrypt**. devstack's +> `seal({ mode: 'local-keygen' })` runs a real Seal key server against the in-stack node, closing that +> gap. This is the localnet counterpart to the testnet-first `spin-up-e2e-stack`. + +It's a **dev-only** path: `@mysten-incubation/devstack` + `@mysten-incubation/dev-wallet` are +`chat-app` devDependencies, and every devstack code path is gated so a normal `pnpm dev` / `pnpm build` +(testnet) never imports them. + +## Run it + +```bash +cd chat-app +npx pnpm@10 install # see "pnpm" below +pnpm devstack up # local Sui + local Seal + publish + codegen + serve +``` + +Open the printed `http://dev.chat-app-local.chat-app.localhost:5175`, connect the **Dev Wallet** +(funded `publisher`/`alice`/`bob`), create a group, send, and it decrypts locally. For send/decrypt you +also need the **relayer** running (devstack doesn't supervise it) — see "Relayer" below. + +Requires **Docker** running and **Node >= 24** (`nvm install 24`). First boot pulls images (slow). + +## What `devstack up` does + +Brings up, from one config (`devstack.config.ts`): the Sui node → a publisher account → publishes the +messaging Move package → the local-keygen Seal key server → the dev-wallet server (funded accounts) → +this Vite app. It writes typed config to `src/generated/` (gitignored). + +## The pieces (what we added and why) + +| File | What it does | +|---|---| +| `devstack.config.ts` | The stack definition. Also **materializes patched build sources** under `.devstack/` (see "Publishing" below) — the canonical Move package is never touched. | +| `vite.config.ts` | Adds `devstackVitePlugin()` (dev-only; aliases `@generated`) and a `virtual:devstack-app-config` **shim**. The shim composes the generated config into one `devstack` object AND registers the dev-wallet — both only in the active branch, so committed code never statically imports `@generated` or the incubation packages. | +| `src/lib/devstack-config.ts` | The loader. Reads the shim, derives the local network, builds a **gRPC base client** with MVR overrides, and recovers on-chain ids (see "Recovery"). `isDevstack` is the on/off switch the rest of the app branches on. | +| `src/contexts/MessagingClientContext.tsx` | In devstack mode, builds the messaging client from the loader (local RPC + seal serverConfigs + package ids) instead of env; sets `sealThreshold: 1`; **serializes wallet signs**. | +| `src/lib/network-config.ts`, `src/main.tsx` | Add a `localnet` dapp-kit network (so the dev-wallet's `sui:localnet` chain matches) and default to it under devstack. | +| `.gitignore` | Ignores `.devstack/` (patched Move sources) and `src/generated/` (regenerated every `up`). | + +## Publishing the Move package (the tricky bit) + +`localPackage()` builds offline with `-e testnet` and does a single `Transaction.publish({ modules })`, +which **merges** all bundled unpublished deps into **one** package. Two problems for us: + +1. `sui_groups` ships a committed `Published.toml` (`[published.testnet]`), so `-e testnet` *links* + against its testnet id (which doesn't exist on localnet) instead of bundling it. +2. `suins` is an MVR dep that doesn't resolve on localnet. + +`devstack.config.ts` fixes both by materializing gitignored copies under `.devstack/`: it clones +`sui_groups` at the pinned rev and **strips its `Published.toml`/`Move.lock`** (so it bundles as a +local, unpublished dep), patches messaging's `suins` MVR → git, and strips messaging's own +`Published.toml`. Net result on localnet: messaging + sui_groups + suins are **one merged package**, so +`packageConfig.messaging` and `packageConfig.permissionedGroups` share that single id. + +## Recovery (what codegen doesn't surface) + +The merged publish means `config.packages` only has the messaging id — not the `MessagingNamespace`/ +`Version` singletons or the `permissioned_group` (groups) id the SDK needs. `devstack-config.ts` +recovers them from the publish tx at bootstrap via the local GraphQL (newer schema: `/graphql` path, +`transaction(digest:)`, `object{ previousTransaction }`). + +## Dev-wallet + +devstack runs the wallet **server** (funded accounts; keys stay server-side) but does **not** register +a wallet in the app. The shim builds a `DevstackSignerAdapter` from the generated `dappKitConfig`, +wraps it in a `DevWallet`, `register()`s it (wallet-standard → dapp-kit's `ConnectButton` lists it), +and `mountDevWallet()`s the approval panel. Because the DevWallet allows only one pending sign, the +context **serializes** sign requests (session-key + tx signing can otherwise overlap, especially under +React StrictMode) to avoid "a signing request is already pending". + +## Seal — one key server + +We run a single local-keygen Seal server (two collide in codegen in devstack 0.1.1) and set +`encryption.sealThreshold: 1` to match. + +## Relayer + +devstack covers Sui / Seal / packages / wallet / app; send & fetch still go through the reference +relayer. Run it separately (host process) pointed at the **direct, host-published validator port**, not +the Traefik-routed `:9000` (gRPC fails through the router): + +```bash +docker port 9000 # e.g. 127.0.0.1:51000 +# relayer/.env: SUI_RPC_URL=http://127.0.0.1:51000 +# GROUPS_PACKAGE_ID= +cd ../relayer && cargo run +``` + +## SDK dependency + +The chat-app depends on the **published** `@mysten/sui-stack-messaging` (Mode A — no `link:` / no +`build:deps`). Forks ship the published SDK; that's the intended reference posture. + +## pnpm + +This repo targets pnpm 10.x. On pnpm v11 a fresh install trips the esbuild build gate and (for the +incubation deps) the `minimumReleaseAge` supply-chain floor — use `npx pnpm@10 install`. The +host-service runs `node_modules/.bin/vite` directly (not `pnpm exec vite`) so the dev server never +triggers pnpm's deps-purge in its non-TTY child. + +## More + +- Friction log + upstream doc links: [`.claude/skills/spin-up-local-devstack/reference/NOTES.md`](../../.claude/skills/spin-up-local-devstack/reference/NOTES.md) +- Runbook: the `spin-up-local-devstack` skill. +- Follow-up: migrating off the deprecated `@mysten/dapp-kit` to `@mysten/dapp-kit-react` (gRPC-native) — + tracked as a separate PR. diff --git a/chat-app/package.json b/chat-app/package.json index e58aecd..3efde9e 100644 --- a/chat-app/package.json +++ b/chat-app/package.json @@ -5,14 +5,15 @@ "type": "module", "scripts": { "dev": "vite", - "build:deps": "cd ../ts-sdks && pnpm install --frozen-lockfile && pnpm --filter @mysten/sui-stack-messaging build", - "build": "pnpm build:deps && tsc -b && vite build", - "preview": "vite preview" + "build": "tsc -b && vite build", + "preview": "vite preview", + "devstack": "devstack", + "devstack:up": "devstack up" }, "dependencies": { "@mysten/bcs": "^2.0.3", "@mysten/dapp-kit": "^1.0.4", - "@mysten/sui-stack-messaging": "link:../ts-sdks/packages/sui-stack-messaging", + "@mysten/sui-stack-messaging": "0.0.2", "@mysten/sui-groups": "^0.0.1", "@mysten/seal": "^1.1.1", "@mysten/sui": "^2.13.2", @@ -23,18 +24,13 @@ "tailwindcss": "^4.2.1" }, "devDependencies": { + "@mysten-incubation/dev-wallet": "0.3.0", + "@mysten-incubation/devstack": "0.1.1", + "@mysten/signers": "1.0.5", "@types/react": "^19.1.0", "@types/react-dom": "^19.1.0", "@vitejs/plugin-react": "^4.5.2", "typescript": "~5.8.3", "vite": "^6.3.5" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "esbuild" - ], - "overrides": { - "picomatch@>=4.0.0 <4.0.4": "^4.0.4" - } } } diff --git a/chat-app/pnpm-lock.yaml b/chat-app/pnpm-lock.yaml index cd634b9..5480a3e 100644 --- a/chat-app/pnpm-lock.yaml +++ b/chat-app/pnpm-lock.yaml @@ -27,11 +27,11 @@ importers: specifier: ^0.0.1 version: 0.0.1(@mysten/bcs@2.0.3)(@mysten/sui@2.13.2(typescript@5.8.3)) '@mysten/sui-stack-messaging': - specifier: link:../ts-sdks/packages/sui-stack-messaging - version: link:../ts-sdks/packages/sui-stack-messaging + specifier: 0.0.2 + version: 0.0.2(@mysten/bcs@2.0.3)(@mysten/seal@1.1.1(@mysten/sui@2.13.2(typescript@5.8.3)))(@mysten/sui-groups@0.0.1(@mysten/bcs@2.0.3)(@mysten/sui@2.13.2(typescript@5.8.3)))(@mysten/sui@2.13.2(typescript@5.8.3)) '@tailwindcss/vite': specifier: ^4.2.1 - version: 4.2.1(vite@6.4.1(jiti@2.6.1)(lightningcss@1.31.1)) + version: 4.2.1(vite@6.4.1(@types/node@25.9.2)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.9.0)) '@tanstack/react-query': specifier: ^5.90.21 version: 5.90.21(react@19.2.4) @@ -45,6 +45,15 @@ importers: specifier: ^4.2.1 version: 4.2.1 devDependencies: + '@mysten-incubation/dev-wallet': + specifier: 0.3.0 + version: 0.3.0(@mysten/signers@1.0.5(@mysten/sui@2.13.2(typescript@5.8.3)))(@mysten/sui@2.13.2(typescript@5.8.3))(@types/react@19.2.14)(react@19.2.4)(typescript@5.8.3) + '@mysten-incubation/devstack': + specifier: 0.1.1 + version: 0.1.1(@types/react@19.2.14)(ioredis@5.11.1)(typescript@5.8.3) + '@mysten/signers': + specifier: 1.0.5 + version: 1.0.5(@mysten/sui@2.13.2(typescript@5.8.3)) '@types/react': specifier: ^19.1.0 version: 19.2.14 @@ -53,13 +62,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.5.2 - version: 4.7.0(vite@6.4.1(jiti@2.6.1)(lightningcss@1.31.1)) + version: 4.7.0(vite@6.4.1(@types/node@25.9.2)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.9.0)) typescript: specifier: ~5.8.3 version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.4.1(jiti@2.6.1)(lightningcss@1.31.1) + version: 6.4.1(@types/node@25.9.2)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.9.0) packages: @@ -77,6 +86,10 @@ packages: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 + '@alcalzone/ansi-tokenize@0.3.0': + resolution: {integrity: sha512-p+CMKJ93HFmLkjXKlXiVGlMQEuRb6H0MokBSwUsX+S6BRX8eV5naFZpQJFfJHjRZY0Hmnqy1/r6UWl3x+19zYA==} + engines: {node: '>=18'} + '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -164,9 +177,34 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@effect/platform-node-shared@4.0.0-beta.78': + resolution: {integrity: sha512-mo0ddTPATyCMyqzQasYDL7+NI29vozoMplom+qu9f/onDTd4xG5hvEEfGxfL0Ljygui6keG/YE/E9OZVf2z5WA==} + engines: {node: '>=18.0.0'} + peerDependencies: + effect: ^4.0.0-beta.78 + + '@effect/platform-node@4.0.0-beta.65': + resolution: {integrity: sha512-QQy3KRcMwP0TngQdfQGl2u1zp03B7k7DuF5SNS8aZhD0dDBpKZpCwFad1ODY5qdY3ycPgMwBwKRRK7y/aw0C9w==} + engines: {node: '>=18.0.0'} + peerDependencies: + effect: ^4.0.0-beta.65 + ioredis: ^5.7.0 + '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + '@envelop/core@5.5.1': + resolution: {integrity: sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==} + engines: {node: '>=18.0.0'} + + '@envelop/instrumentation@1.0.0': + resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} + engines: {node: '>=18.0.0'} + + '@envelop/types@5.2.1': + resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} + engines: {node: '>=18.0.0'} + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -323,6 +361,9 @@ packages: cpu: [x64] os: [win32] + '@fastify/busboy@3.2.0': + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + '@floating-ui/core@1.7.5': resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} @@ -338,6 +379,10 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@google-cloud/kms@5.5.1': + resolution: {integrity: sha512-7O3mnspIlotzToIsSrv+YfnGhGdncOyZmjI0gG/r+jcsYN0t8WCa8v9YGuZ0F1VRa+49p/hUT/6ZQh9/s79PfA==} + engines: {node: '>=18'} + '@gql.tada/cli-utils@1.7.2': resolution: {integrity: sha512-Qbc7hbLvCz6IliIJpJuKJa9p05b2Jona7ov7+qofCsMRxHRZE1kpAmZMvL8JCI4c0IagpIlWNaMizXEQUe8XjQ==} peerDependencies: @@ -358,11 +403,75 @@ packages: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 + '@graphql-tools/executor@1.5.3': + resolution: {integrity: sha512-mgBFC0bsrZPZLu9EnydpMnAuQ8Iiq0CEbUcsmvXsm2/iYektGHDN/+bmb7hicA6dWZtdPfklYJmr21WD0GnOfA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/merge@9.1.9': + resolution: {integrity: sha512-iHUWNjRHeQRYdgIMIuChThOwoKzA9vrzYeslgfBo5eUYEyHGZCoDPjAavssoYXLwstYt1dZj2J22jSzc2DrN0Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/schema@10.0.33': + resolution: {integrity: sha512-O6P3RIftO0jafnSsFAqpjurUuUxJ43s/AdPVLQsBkI6y4Ic/tKm4C1Qm1KKQsCDTOxXPJClh/v3g7k7yLKCFBQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@10.11.0': + resolution: {integrity: sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@11.1.0': + resolution: {integrity: sha512-PtFVG4r8Z2LEBSaPYQMusBiB3o6kjLVJyjCLbnWem/SpSuM21v6LTmgpkXfYU1qpBV2UGsFyuEnSJInl8fR1Ag==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-typed-document-node/core@3.2.0': resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-yoga/logger@2.0.1': + resolution: {integrity: sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==} + engines: {node: '>=18.0.0'} + + '@graphql-yoga/subscription@5.0.5': + resolution: {integrity: sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==} + engines: {node: '>=18.0.0'} + + '@graphql-yoga/typed-event-target@3.0.2': + resolution: {integrity: sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==} + engines: {node: '>=18.0.0'} + + '@grpc/grpc-js@1.14.4': + resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.8.1': + resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} + engines: {node: '>=6'} + hasBin: true + + '@hono/node-server@1.19.14': + resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + + '@ioredis/commands@1.10.0': + resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -379,9 +488,117 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@ledgerhq/devices@8.15.0': + resolution: {integrity: sha512-pHrjZzC81ER6BDKjIzTzubLynFzS15CQ7EQeEfrbrSisc3BFLGrnC7+cXdGWK7eTRAkwH7Uw3M2QM/mbjfhwlw==} + + '@ledgerhq/errors@6.35.0': + resolution: {integrity: sha512-qk9PbqIvze7NXGogVxNCsz60rNo5FrGj8gKqs7pcyDk+em5L6s70G7cRxR+1HTXdam4WoPfntUq+WX9zQUynkg==} + + '@ledgerhq/hw-bolos@6.36.3': + resolution: {integrity: sha512-rzViqllsB/KaxkKGCYpaso8D+flkB7bqq4CZC/Q8Z8psFgyAyGw3fZgMH5OeikeFsCdN56RFZyNNYq6QaXlqTA==} + + '@ledgerhq/hw-transport@6.35.3': + resolution: {integrity: sha512-FLR4/2mV6srMaic3cr/kweD9RQhpv4+8Q6T6P4PPOyScuz84siH+8NXLgREIeh328W/FxEGG2norjS+tOQW0vA==} + + '@ledgerhq/ledger-cal-service@1.17.0': + resolution: {integrity: sha512-lVbNAF/SLZd0KTGqfHU8yY/6J6nBnPtlEm3WAtaOBIy5kKWtGFiYaDfDlXwoZ47lZ8PpBDXO6EuC8Oi5IRgzaQ==} + + '@ledgerhq/live-env@2.37.0': + resolution: {integrity: sha512-OGOtHPTbQiE0d52jpQ1gISDsoI9dJOxDL8moTarVofspa/veLRmz2e7Vv6t7g1ygxsRwrZvB1Cih0U7xDw/Q0w==} + + '@ledgerhq/live-network@2.6.3': + resolution: {integrity: sha512-LlKaurML28/zuAcgZiEeDGrqWtzm6G/U0n+pXS2U4su/KLHv70rA13LHGQYY/1Jxz7fP/XtzGWXl5jstYu8EXQ==} + + '@ledgerhq/live-promise@0.2.3': + resolution: {integrity: sha512-f673XOCKL/foDCbsqx2AWYfI1ehc5rGKLh3gObfTQSu3+MDJzhdd/pvyuVLJ0e6iUzUQlwLW27qEyvA7sNKvVQ==} + + '@ledgerhq/logs@6.17.0': + resolution: {integrity: sha512-yra33g5q/AU7+PwAws+GaVpQGUuxnDREjVBnviJjcaJLVKuLzI4pnj8Bd3nY3fypM5k1yZEYKEXfUuGFUjP2+w==} + + '@lit-labs/ssr-dom-shim@1.6.0': + resolution: {integrity: sha512-VHb0ALPMTlgKjM6yIxxoQNnpKyUKLD04VzeQdsiXkMqkvYlAHxq9glGLmgbb889/1GsohSOAjvQYoiBppXFqrQ==} + + '@lit/reactive-element@2.1.2': + resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': + resolution: {integrity: sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': + resolution: {integrity: sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': + resolution: {integrity: sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': + resolution: {integrity: sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': + resolution: {integrity: sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': + resolution: {integrity: sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==} + cpu: [x64] + os: [win32] + + '@mysten-incubation/dev-wallet@0.3.0': + resolution: {integrity: sha512-aLvm6QyQzjHCXSVTc3uBw6Nezk3DEzNSYGF7z4jpbT/h8X1UoWL7UOZ6AcdQA9Q2pQDasNPA2+G6weRqH6Juqw==} + hasBin: true + peerDependencies: + '@lit/react': ^1.0.8 + '@mysten/signers': ^1.0.1 + '@mysten/sui': ^2.17.0 + '@types/react': '>=17.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@lit/react': + optional: true + '@mysten/signers': + optional: true + '@types/react': + optional: true + react: + optional: true + + '@mysten-incubation/devstack@0.1.1': + resolution: {integrity: sha512-4VARAz5e0eqfiIKgDXBu2VB87we5zEB6MmcJyCjR1uKzy0CGX3WhF0eVk1M1xT29U1TEc86xkIjnvz1w/SaF9w==} + engines: {node: '>=24.0.0'} + hasBin: true + peerDependencies: + vitest: ^4.1.6 + peerDependenciesMeta: + vitest: + optional: true + + '@mysten/aws-kms-signer@0.1.2': + resolution: {integrity: sha512-WAVsEp911zmgG8AB0bbjG0bQHAdljsEus8y5yj/wJ0VM/MNpKIv55qKcWeptHuXdiQQbb+WMaDZztkgq7DjSoA==} + engines: {node: '>=22'} + peerDependencies: + '@mysten/sui': ^2.16.2 + '@mysten/bcs@2.0.3': resolution: {integrity: sha512-dwcaL4HNAsEGpU3hKUAsXgCZp9l6++e2A3THpzoYZ8e7bsy4XH1V0dXD5dIzgNcVZiZfb6ZnDMG+gdF6+1WOQA==} + '@mysten/bcs@2.0.5': + resolution: {integrity: sha512-Dop9Xq36DPLlsmIDQZvUg4uJeBBxIGirgp2OXGaEff+mtLKFBoW2HnE3aSTSSpiMQH9XRhjwtiM16zFJhFqz0Q==} + + '@mysten/codegen@0.10.6': + resolution: {integrity: sha512-4t1/V/vQLNoZ4XvGP/Aab5dk6zD63uhk2b9/5aMTZl5njswAEm2q57+eTNoq2fn2WKn9HnEK1DqAsSyr8NDn7w==} + hasBin: true + '@mysten/dapp-kit@1.0.4': resolution: {integrity: sha512-RybvMIT3R+GNWNH7tOWXnsLk0gKLtpY/GOefp/Mzsqb78JD3QzKzlQmrm/Bc5bEisI/SuykU3qYzKDLQivZy0Q==} peerDependencies: @@ -389,11 +606,38 @@ packages: '@tanstack/react-query': ^5.0.0 react: '*' + '@mysten/deepbook-v3@1.4.1': + resolution: {integrity: sha512-OLJ9jYNIetg+aXOR2QpIL5eBHeyF8hm3zbv5s6s/jqmDbzqhpGmxvwOodG1X82cML7kKh4IgyQX193+fvndQYA==} + engines: {node: '>=22'} + peerDependencies: + '@mysten/sui': ^2.17.0 + + '@mysten/gcp-kms-signer@0.1.2': + resolution: {integrity: sha512-8c1qWoHmBgZ59zal4Cju1Dl8tf7F2NkCJNkYZvTvBZ6zsq07TrhwG33rQH404PA7xjJ34nLYadcFdPjWkvV7sA==} + engines: {node: '>=22'} + peerDependencies: + '@mysten/sui': ^2.16.2 + + '@mysten/ledger-signer@0.1.2': + resolution: {integrity: sha512-O9L6p2bqPEM354t9sgTx2FWbMEkc+nQid6D7noKpTnznexl3PTffL2HTziRkzNhlrVSdVaB/tcmAzIh2RuvASw==} + engines: {node: '>=22'} + peerDependencies: + '@mysten/sui': ^2.16.2 + + '@mysten/ledgerjs-hw-app-sui@0.8.3': + resolution: {integrity: sha512-1WEkRWv0EjhtMKg/nxQNqXNdnLXbeclDXwiZkyPfGR70edygtVT0m2offmVL0TKOZsg+bNWsHWUYZpXt2/Vpuw==} + '@mysten/seal@1.1.1': resolution: {integrity: sha512-OGxEDmEuXQAzxJKz3ap1dkRSf5fD/iKpz/J8+wZlPbeSok2fVt3KPaCZngjrvqqVRn5lmQomNpzXQCKo929A3w==} peerDependencies: '@mysten/sui': ^2.8.0 + '@mysten/signers@1.0.5': + resolution: {integrity: sha512-ft93MVT/AC353LtV5Wsnhavt5YOLBCTkFd46FXBL12pno/ESu/QyRUdXAbbCLF6llRW2FyOK2n+8I5DRzZKOBw==} + engines: {node: '>=22'} + peerDependencies: + '@mysten/sui': ^2.16.2 + '@mysten/slush-wallet@1.0.3': resolution: {integrity: sha512-TF1CXXug5VPaV4KImKxZ7nyR0XY//KJVzOFxFXaajBHewLBinCO7s6GS9EYbtQMaNvnjrYQn1cpGhYfwGkzvtQ==} peerDependencies: @@ -405,18 +649,44 @@ packages: '@mysten/bcs': ^2.0.3 '@mysten/sui': ^2.13.0 + '@mysten/sui-stack-messaging@0.0.2': + resolution: {integrity: sha512-ySixVl4p0kXABDEk8EFVGQT+mQzZhamTBw1Rv8/ckwtqYFRZT1Xklf5w0m6GqyqW2LBzhp6prTiLzpt7CUqfTg==} + peerDependencies: + '@mysten/bcs': ^2.0.3 + '@mysten/seal': ^1.1.1 + '@mysten/sui': ^2.13.2 + '@mysten/sui-groups': ^0.0.1 + '@mysten/sui@2.13.2': resolution: {integrity: sha512-M/H2CZJQyLyi0vvCJZ6rRzItJCsnh66v1OTI2VoBad2lau/BTuUKOEPjRpfU4YlVJcGR4h+RLCjDXV4ACuRKSA==} engines: {node: '>=22'} + '@mysten/sui@2.17.0': + resolution: {integrity: sha512-TrS1BCPm4V6rC69MBejmcqnKIyJ5t1iksax4XA9jWarZxAAp9LMmdxEBebejyDT/yAJxYIf3fNm5WBkHE2qnIw==} + engines: {node: '>=22'} + '@mysten/utils@0.3.1': resolution: {integrity: sha512-36KhxG284uhDdSnlkyNaS6fzKTX9FpP2WQWOwUKIRsqQFFIm2ooCf2TP1IuqrtMpkairwpiWkAS0eg7cpemVzg==} + '@mysten/utils@0.3.3': + resolution: {integrity: sha512-gVHn5toh24eXXLEyBknwwM2F/tbDgqPX0yj77KtHjuoYUallcQ9vSwGfGsAy39IcTB259Yprt/ZOEwdup+zrpA==} + + '@mysten/wallet-sdk@0.1.1': + resolution: {integrity: sha512-YfRJbA7+TRsbQHPOpKzN6lm1x+6HtUpq/8wH4pzJxoUYSlefk4gu2OtupWfVKcx1tgLXuMunWL3KXAAmxqXQXw==} + peerDependencies: + '@mysten/sui': '*' + '@mysten/wallet-standard@0.20.1': resolution: {integrity: sha512-Q2GoXO1SPLayqunNIWI3VT8cyOVGTFAPUvaCzx7jYIEoZBfyCR5RCUS4/ehgAlApF88Y/1c/OfjBvEoeRi76jw==} peerDependencies: '@mysten/sui': '*' + '@mysten/webcrypto-signer@0.1.2': + resolution: {integrity: sha512-MFI64BrUoyI05zZ1GXskZc8ohqCS9fM6StS/RO71YtX9pi7ZLTLdhUM7FEfgCYoSNsJHahG23JxvG0cfgiX/DQ==} + engines: {node: '>=22'} + peerDependencies: + '@mysten/sui': ^2.16.2 + '@mysten/window-wallet-core@0.1.4': resolution: {integrity: sha512-LK1t5dJQZUJv0fF/Cj8HS8N9HHaa7cAOcdWfPAFuYvgVJMEr9K/p33ldqiflcn6p1d53uTtUH9kA5/lQlTmZ2A==} @@ -428,6 +698,33 @@ packages: resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} engines: {node: '>= 20.19.0'} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pothos/core@4.12.0': + resolution: {integrity: sha512-PeiODrj3GjQ7Nbs/5p65DEyBWZTSGGjgGO/BgaMEqS1jBNX/2zJTEQJA9zM5uPmCHUCDjE7Qn2U7lOi0ALp/8A==} + peerDependencies: + graphql: ^16.10.0 + + '@pothos/plugin-relay@4.7.0': + resolution: {integrity: sha512-IQ7f7WLu7uXxiZBcJgUTdspjIVzX3bgvd8XjnzxGJUbn/uE5HlVyCFmvhJffHIIS2OKSHhOOJRMwIwVwauwnSg==} + peerDependencies: + '@pothos/core': '*' + graphql: ^16.10.0 + + '@pothos/plugin-simple-objects@4.1.3': + resolution: {integrity: sha512-D2JFecUY9a8VwplsNidEYlws2nYGjABIk8WNykHYuBoTPK6mngQfgY5Og8VL+a3sU/Z3pof5qz+Eg+6GJ4j7lw==} + peerDependencies: + '@pothos/core': '*' + graphql: ^16.10.0 + + '@pothos/plugin-with-input@4.1.4': + resolution: {integrity: sha512-ov8Ufga6lU1PmE0lHt50jpt3G3ypJvHJ0YF2PmjcgWEvJMi/cDhRRKoU2IoB13juBBRE2yo9rS3QhSRUR35iAQ==} + peerDependencies: + '@pothos/core': '*' + graphql: ^16.10.0 + '@protobuf-ts/grpcweb-transport@2.11.1': resolution: {integrity: sha512-1W4utDdvOB+RHMFQ0soL4JdnxjXV+ddeGIUg08DvZrA8Ms6k5NN6GBFU2oHZdTOcJVpPrDJ02RJlqtaoCMNBtw==} @@ -437,6 +734,36 @@ packages: '@protobuf-ts/runtime@2.11.1': resolution: {integrity: sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.5': + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} + + '@protobufjs/eventemitter@1.1.1': + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} + + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.2': + resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.1': + resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} + '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} @@ -725,6 +1052,9 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@repeaterjs/repeater@3.0.6': + resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} @@ -875,6 +1205,16 @@ packages: '@scure/bip39@2.0.1': resolution: {integrity: sha512-PsxdFj/d2AcJcZDX1FXN3dDgitDDTmwf78rKZq1a6c1P1Nan1X/Sxc7667zU3U+AN60g7SxxP0YCVw2H/hBycg==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@stricli/auto-complete@1.2.7': + resolution: {integrity: sha512-i7tuoYJvBLRVxvjVhzmZJjPPq1f6jVHU118EgVNW82rkbRuSOjTlUH6DY/d8BXfrDg9DemuDtaGmiL1OvPwcPA==} + hasBin: true + + '@stricli/core@1.2.7': + resolution: {integrity: sha512-a0HxA/cSWjqHj/9GM+cfc/zGNmBdxVTQQpHIEvY1AbDEgo4ZU84cTCbtywYEQOHw2wIc6Vu+PKv+ZQoqZwkHnQ==} + '@tailwindcss/node@4.2.1': resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} @@ -992,6 +1332,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/node@25.9.2': + resolution: {integrity: sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==} + '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: @@ -1000,6 +1343,12 @@ packages: '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@vanilla-extract/css@1.18.0': resolution: {integrity: sha512-/p0dwOjr0o8gE5BRQ5O9P0u/2DjUd6Zfga2JGmE4KaY7ZITWMszTzk4x4CPlM5cKkRr2ZGzbE6XkuPNfp9shSQ==} @@ -1045,20 +1394,119 @@ packages: resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} engines: {node: '>=16'} + '@whatwg-node/disposablestack@0.0.6': + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/events@0.1.2': + resolution: {integrity: sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/fetch@0.10.13': + resolution: {integrity: sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/node-fetch@0.8.6': + resolution: {integrity: sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/promise-helpers@1.3.2': + resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} + engines: {node: '>=16.0.0'} + + '@whatwg-node/server@0.11.0': + resolution: {integrity: sha512-VSdkwnJRr8Yv9UgB2aXB3VUPWwd6Oqnn0hycFwhg9pZgWxJXb7JmhsiXe9tmpMwjHFxli12PGcz9aI63YYloGQ==} + engines: {node: '>=18.0.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + 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==} + aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + asn1-ts@11.1.0: + resolution: {integrity: sha512-CpmMTBhSn3c9uCyT7GAui+VhplZLLvVAPWwcHgZKaeGDqx8R4OJfJGTenJZ0ZpGg70Q/OTd9TWUT8zDuBzb78w==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + auto-bind@5.0.1: + resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + axios-retry@4.5.0: + resolution: {integrity: sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==} + peerDependencies: + axios: 0.x || 1.x + + axios@1.13.5: + resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==} + + axios@1.17.0: + resolution: {integrity: sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.0: resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} engines: {node: '>=6.0.0'} hasBin: true + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + caniuse-lite@1.0.30001777: resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==} @@ -1066,10 +1514,45 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + cli-boxes@4.0.1: + resolution: {integrity: sha512-5IOn+jcCEHEraYolBPs/sT4BxYCe2nHg374OPiItB1O96KZFseS2gthU4twyYzeDcFew4DaUM/xwc5BQf08JJw==} + engines: {node: '>=18.20 <19 || >=20.10'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-truncate@6.0.0: + resolution: {integrity: sha512-3+YKIUFsohD9MIoOFPFBldjAlnfCmCDcqe6aYGFqlDTRKg80p4wg35L+j83QQ63iOlKRccEkbn8IuM++HsgEjA==} + engines: {node: '>=22'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cluster-key-slot@1.1.1: + resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} + engines: {node: '>=0.10.0'} + + code-excerpt@4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -1077,6 +1560,27 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + convert-to-spaces@2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cosmiconfig@9.0.2: + resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-inspect@1.0.1: + resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} + engines: {node: '>=16.0.0'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + css-what@6.2.2: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} @@ -1089,6 +1593,10 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1113,6 +1621,14 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -1120,13 +1636,68 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + effect@4.0.0-beta.65: + resolution: {integrity: sha512-QYKvQPAj3CmtsvWkHQww15wX4KG2gNsszDWEcOO5sZCMknp66u6Si/Opmt3wwWCwsyvRmDAdIg+JIz5qzbbFIw==} + electron-to-chromium@1.5.307: resolution: {integrity: sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + enhanced-resolve@5.20.0: resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} engines: {node: '>=10.13.0'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-toolkit@1.47.0: + resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} + esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} @@ -1136,6 +1707,24 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-check@4.8.0: + resolution: {integrity: sha512-GOJ158CUMnN6cSahsv4+ExARvIDuzzinFjkp0E9WtiBa5zcVeLozVkWaE4IzFcc+Y48Wp1EDlUZsXRyAztQcSg==} + engines: {node: '>=12.17.0'} + + fast-sha256@1.3.0: + resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -1145,19 +1734,99 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + find-my-way-ts@0.1.6: + resolution: {integrity: sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==} + + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gaxios@7.1.3: + resolution: {integrity: sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==} + engines: {node: '>=18'} + + gaxios@7.1.5: + resolution: {integrity: sha512-5FZy72Rh8LhtjmvDrKkI+lVhrsQrVKVsItxMoDm5mNQE+xR0WVIIs+jzPSJgBvKVsLi24fZhXJIsNI0bihDzFg==} + engines: {node: '>=18'} + + gcp-metadata@8.1.3: + resolution: {integrity: sha512-ziTrzUhhpL9Zk5k0HHzgP/KIpWDJT0VMBC/ynt/QIBvTW+UUcSivQRl6VlwTf/EilDxtSWklHoRsKy1c4k+59w==} + engines: {node: '>=18'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + + google-auth-library@10.5.0: + resolution: {integrity: sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==} + engines: {node: '>=18'} + + google-gax@5.0.7: + resolution: {integrity: sha512-EhiqaWWJ+9h7sCcKJTsoo6tMcjokVHhWsbSuWCnZJT4vIBP3y4mAoFLnt9SzgkVZeq24ZsFaArr06nnYYku2yA==} + engines: {node: '>=18'} + + google-logging-utils@1.1.3: + resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} + engines: {node: '>=14'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + gql.tada@1.9.0: resolution: {integrity: sha512-1LMiA46dRs5oF7Qev6vMU32gmiNvM3+3nHoQZA9K9j2xQzH8xOAWnnJrLSbZOFHTSdFxqn86TL6beo1/7ja/aA==} hasBin: true @@ -1167,30 +1836,145 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphql-yoga@5.21.1: + resolution: {integrity: sha512-NlACyYkLh7MBp3Mb2pTB2LG//5MyuHgSs7tWwkgCTuX98Aler7Djeb06ruuLBBa7gaT2cHpv7LwKayruLnXD0g==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + graphql@16.13.1: resolution: {integrity: sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true + gtoken@8.0.0: + resolution: {integrity: sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==} + engines: {node: '>=18'} - jose@6.2.1: + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + hono@4.12.24: + resolution: {integrity: sha512-I36D1s+HgQc55KbhEr4iybfxv/9o1zdpw+XEM6dJa91LqQD0HCoSGdxpRJCZE+aavs87j4V3Ls2OJzq8C/U4iw==} + engines: {node: '>=16.9.0'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + + ink@7.0.5: + resolution: {integrity: sha512-zWNjGHQPxSeiSAmDUOq+QPQ6CfmMhmNi85vrJIuy4prafKKUSoZlXEy4wbM7LuLuF1pDURk7qvF4fxrQlLxv3w==} + engines: {node: '>=22'} + peerDependencies: + '@types/react': '>=19.2.0' + react: '>=19.2.0' + react-devtools-core: '>=6.1.2' + peerDependenciesMeta: + '@types/react': + optional: true + react-devtools-core: + optional: true + + ioredis@5.11.1: + resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==} + engines: {node: '>=12.22.0'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-in-ci@2.0.0: + resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==} + engines: {node: '>=20'} + hasBin: true + + is-retry-allowed@2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + jose@6.2.1: resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + + kubernetes-types@1.30.0: + resolution: {integrity: sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==} + lightningcss-android-arm64@1.31.1: resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} engines: {node: '>= 12.0.0'} @@ -1265,32 +2049,140 @@ packages: resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} engines: {node: '>= 12.0.0'} + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lit-element@4.2.2: + resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==} + + lit-html@3.3.3: + resolution: {integrity: sha512-el8M6jK2o3RXBnrSHX3ZKrsN8zEV63pSExTO1wYJz7QndGYZ8353e2a5PPX+qHe2aGayfnchQmkAojaWAREOIA==} + + lit@3.3.3: + resolution: {integrity: sha512-fycuvZg/hkpozL00lm1pEJH5nN/lr9ZXd6mJI2HSN4+Bzc+LDNdEApJ6HFbPkdFNHLvOplIIuJvxkS4XUxqirw==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + media-query-parser@2.0.2: resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@4.1.0: + resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} + engines: {node: '>=16'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + modern-ahocorasick@1.1.0: resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msgpackr-extract@3.0.4: + resolution: {integrity: sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==} + hasBin: true + + msgpackr@1.11.14: + resolution: {integrity: sha512-suPZQcjFtPGp0cksn70ICfLuxsO9F2/sRrbJzeNepojZ+OPwGzA0lNdLyU4SJUKAd5ZgvUWWPojzzdlVuOYcrQ==} + + multipasta@0.2.7: + resolution: {integrity: sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + node-releases@2.0.36: resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + patch-console@2.0.0: + resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1305,11 +2197,40 @@ packages: resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + engines: {node: '>=14'} + hasBin: true + + proto3-json-serializer@3.0.4: + resolution: {integrity: sha512-E1sbAYg3aEbXrq0n1ojJkRHQJGE1kaE/O6GLA94y8rnJBfgvOPTOd1b9hOceQK1FFZI9qMh1vBERCyO2ifubcw==} + engines: {node: '>=18'} + + protobufjs@7.6.2: + resolution: {integrity: sha512-N9EiLovGEQOJSPF26Ij7qUGvahfEnq0eeYZ02aigIedkmz1qZSwjnP9SBITHJuF/6MYbIW4HDN8zdYjsjqJKXQ==} + engines: {node: '>=12.0.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + + pure-rand@8.4.0: + resolution: {integrity: sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A==} + react-dom@19.2.4: resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: react: ^19.2.4 + react-reconciler@0.33.0: + resolution: {integrity: sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^19.2.0 + react-refresh@0.17.0: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} @@ -1348,11 +2269,53 @@ packages: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} + engines: {node: '>=0.10.0'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + redis-errors@1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + + redis-parser@3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + retry-request@8.0.3: + resolution: {integrity: sha512-qqoc4kkGgP9cmQDWELlOpAmfgJOg0Yi7MT82ZjiPWu451ayju4itwomjM4/dBEliify8C1b3tSaeCOldugtwPQ==} + engines: {node: '>=18'} + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + rollup@4.59.0: resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -1360,10 +2323,82 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + semver@7.8.2: + resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slice-ansi@9.0.0: + resolution: {integrity: sha512-SO/3iYL5S3W57LLEniscOGPZgOqZUPCx6d3dB+52B80yJ0XstzsC/eV8gnA4tM3MHDrKz+OCFSLNjswdSC+/bA==} + engines: {node: '>=22'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + standard-as-callback@2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + + stream-events@1.0.5: + resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} + engines: {node: '>=20'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + stubs@3.0.0: + resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tailwindcss@4.2.1: resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} @@ -1371,24 +2406,58 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + teeny-request@10.1.3: + resolution: {integrity: sha512-5yDliI1uWkYPo7W+Zvrxg6YmoWuj5iC5EydewqrRTvc68nyMTZhlPPlLg6cptUGfbQAb+N9XDPDPzF6N081lug==} + engines: {node: '>=18'} + + terminal-size@4.0.1: + resolution: {integrity: sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + toml@4.1.1: + resolution: {integrity: sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw==} + engines: {node: '>=20'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-fest@5.7.0: + resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} + engines: {node: '>=20'} + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + + undici@8.4.1: + resolution: {integrity: sha512-RNHlB4fxZK0IrkhBsxhlbx7s8kFWwr7rzzOqj5nvZugw3ig3RsB7KW3zVlV0eu8POl+rx5d1hmL7rRg0z1owow==} + engines: {node: '>=22.19.0'} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' + urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -1409,6 +2478,17 @@ packages: '@types/react': optional: true + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + + uuid@13.0.2: + resolution: {integrity: sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==} + hasBin: true + valibot@1.2.0: resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} peerDependencies: @@ -1457,9 +2537,72 @@ packages: yaml: optional: true + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@6.0.0: + resolution: {integrity: sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==} + engines: {node: '>=20'} + + wrap-ansi@10.0.0: + resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} + engines: {node: '>=20'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + 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 + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + 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'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yoga-layout@3.2.1: + resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + zustand@5.0.11: resolution: {integrity: sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==} engines: {node: '>=12.20.0'} @@ -1490,6 +2633,17 @@ snapshots: graphql: 16.13.1 typescript: 5.8.3 + '@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.9.3)': + dependencies: + '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) + graphql: 16.13.1 + typescript: 5.9.3 + + '@alcalzone/ansi-tokenize@0.3.0': + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -1604,8 +2758,45 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@effect/platform-node-shared@4.0.0-beta.78(effect@4.0.0-beta.65)': + dependencies: + '@types/ws': 8.18.1 + effect: 4.0.0-beta.65 + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@effect/platform-node@4.0.0-beta.65(effect@4.0.0-beta.65)(ioredis@5.11.1)': + dependencies: + '@effect/platform-node-shared': 4.0.0-beta.78(effect@4.0.0-beta.65) + effect: 4.0.0-beta.65 + ioredis: 5.11.1 + mime: 4.1.0 + undici: 8.4.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@emotion/hash@0.9.2': {} + '@envelop/core@5.5.1': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@envelop/types': 5.2.1 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@envelop/instrumentation@1.0.0': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@envelop/types@5.2.1': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + '@esbuild/aix-ppc64@0.25.12': optional: true @@ -1684,6 +2875,8 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true + '@fastify/busboy@3.2.0': {} + '@floating-ui/core@1.7.5': dependencies: '@floating-ui/utils': 0.2.11 @@ -1701,6 +2894,12 @@ snapshots: '@floating-ui/utils@0.2.11': {} + '@google-cloud/kms@5.5.1': + dependencies: + google-gax: 5.0.7 + transitivePeerDependencies: + - supports-color + '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.8.3))(graphql@16.13.1)(typescript@5.8.3)': dependencies: '@0no-co/graphqlsp': 1.15.2(graphql@16.13.1)(typescript@5.8.3) @@ -1708,45 +2907,287 @@ snapshots: graphql: 16.13.1 typescript: 5.8.3 + '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.8.3))(graphql@16.13.1)(typescript@5.9.3)': + dependencies: + '@0no-co/graphqlsp': 1.15.2(graphql@16.13.1)(typescript@5.8.3) + '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) + graphql: 16.13.1 + typescript: 5.9.3 + '@gql.tada/internal@1.0.8(graphql@16.13.1)(typescript@5.8.3)': dependencies: '@0no-co/graphql.web': 1.2.0(graphql@16.13.1) graphql: 16.13.1 typescript: 5.8.3 - '@graphql-typed-document-node/core@3.2.0(graphql@16.13.1)': + '@gql.tada/internal@1.0.8(graphql@16.13.1)(typescript@5.9.3)': dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@16.13.1) graphql: 16.13.1 + typescript: 5.9.3 - '@jridgewell/gen-mapping@0.3.13': + '@graphql-tools/executor@1.5.3(graphql@16.13.1)': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + '@graphql-tools/utils': 11.1.0(graphql@16.13.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.13.1 + tslib: 2.8.1 - '@jridgewell/remapping@2.3.5': + '@graphql-tools/merge@9.1.9(graphql@16.13.1)': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@graphql-tools/utils': 11.1.0(graphql@16.13.1) + graphql: 16.13.1 + tslib: 2.8.1 - '@jridgewell/resolve-uri@3.1.2': {} + '@graphql-tools/schema@10.0.33(graphql@16.13.1)': + dependencies: + '@graphql-tools/merge': 9.1.9(graphql@16.13.1) + '@graphql-tools/utils': 11.1.0(graphql@16.13.1) + graphql: 16.13.1 + tslib: 2.8.1 - '@jridgewell/sourcemap-codec@1.5.5': {} + '@graphql-tools/utils@10.11.0(graphql@16.13.1)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.13.1 + tslib: 2.8.1 - '@jridgewell/trace-mapping@0.3.31': + '@graphql-tools/utils@11.1.0(graphql@16.13.1)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.13.1 + tslib: 2.8.1 - '@mysten/bcs@2.0.3': + '@graphql-typed-document-node/core@3.2.0(graphql@16.13.1)': dependencies: - '@mysten/utils': 0.3.1 - '@scure/base': 2.0.0 + graphql: 16.13.1 - '@mysten/dapp-kit@1.0.4(@mysten/sui@2.13.2(typescript@5.8.3))(@tanstack/react-query@5.90.21(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)': + '@graphql-yoga/logger@2.0.1': dependencies: - '@mysten/slush-wallet': 1.0.3(@mysten/sui@2.13.2(typescript@5.8.3))(typescript@5.8.3) - '@mysten/sui': 2.13.2(typescript@5.8.3) - '@mysten/utils': 0.3.1 + tslib: 2.8.1 + + '@graphql-yoga/subscription@5.0.5': + dependencies: + '@graphql-yoga/typed-event-target': 3.0.2 + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/events': 0.1.2 + tslib: 2.8.1 + + '@graphql-yoga/typed-event-target@3.0.2': + dependencies: + '@repeaterjs/repeater': 3.0.6 + tslib: 2.8.1 + + '@grpc/grpc-js@1.14.4': + dependencies: + '@grpc/proto-loader': 0.8.1 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.8.1': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.6.2 + yargs: 17.7.2 + + '@hono/node-server@1.19.14(hono@4.12.24)': + dependencies: + hono: 4.12.24 + + '@ioredis/commands@1.10.0': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@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 + + '@js-sdsl/ordered-map@4.4.2': {} + + '@ledgerhq/devices@8.15.0': + dependencies: + '@ledgerhq/errors': 6.35.0 + '@ledgerhq/logs': 6.17.0 + rxjs: 7.8.2 + semver: 7.7.3 + + '@ledgerhq/errors@6.35.0': {} + + '@ledgerhq/hw-bolos@6.36.3': + dependencies: + '@ledgerhq/hw-transport': 6.35.3 + + '@ledgerhq/hw-transport@6.35.3': + dependencies: + '@ledgerhq/devices': 8.15.0 + '@ledgerhq/errors': 6.35.0 + '@ledgerhq/logs': 6.17.0 + events: 3.3.0 + + '@ledgerhq/ledger-cal-service@1.17.0': + dependencies: + '@ledgerhq/live-env': 2.37.0 + '@ledgerhq/live-network': 2.6.3 + transitivePeerDependencies: + - debug + + '@ledgerhq/live-env@2.37.0': + dependencies: + rxjs: 7.8.2 + utility-types: 3.11.0 + + '@ledgerhq/live-network@2.6.3': + dependencies: + '@ledgerhq/errors': 6.35.0 + '@ledgerhq/live-env': 2.37.0 + '@ledgerhq/live-promise': 0.2.3 + '@ledgerhq/logs': 6.17.0 + axios: 1.13.5 + lru-cache: 7.18.3 + transitivePeerDependencies: + - debug + + '@ledgerhq/live-promise@0.2.3': + dependencies: + '@ledgerhq/logs': 6.17.0 + + '@ledgerhq/logs@6.17.0': {} + + '@lit-labs/ssr-dom-shim@1.6.0': {} + + '@lit/reactive-element@2.1.2': + dependencies: + '@lit-labs/ssr-dom-shim': 1.6.0 + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': + optional: true + + '@mysten-incubation/dev-wallet@0.3.0(@mysten/signers@1.0.5(@mysten/sui@2.13.2(typescript@5.8.3)))(@mysten/sui@2.13.2(typescript@5.8.3))(@types/react@19.2.14)(react@19.2.4)(typescript@5.8.3)': + dependencies: + '@hono/node-server': 1.19.14(hono@4.12.24) + '@mysten/sui': 2.13.2(typescript@5.8.3) + '@mysten/utils': 0.3.1 + '@mysten/wallet-sdk': 0.1.1(@mysten/sui@2.13.2(typescript@5.8.3))(typescript@5.8.3) + '@mysten/wallet-standard': 0.20.1(@mysten/sui@2.13.2(typescript@5.8.3)) + '@mysten/window-wallet-core': 0.1.4(typescript@5.8.3) + hono: 4.12.24 + lit: 3.3.3 + optionalDependencies: + '@mysten/signers': 1.0.5(@mysten/sui@2.13.2(typescript@5.8.3)) + '@types/react': 19.2.14 + react: 19.2.4 + transitivePeerDependencies: + - typescript + + '@mysten-incubation/devstack@0.1.1(@types/react@19.2.14)(ioredis@5.11.1)(typescript@5.8.3)': + dependencies: + '@effect/platform-node': 4.0.0-beta.65(effect@4.0.0-beta.65)(ioredis@5.11.1) + '@mysten/codegen': 0.10.6 + '@mysten/deepbook-v3': 1.4.1(@mysten/sui@2.17.0(typescript@5.8.3)) + '@mysten/sui': 2.17.0(typescript@5.8.3) + '@pothos/core': 4.12.0(graphql@16.13.1) + '@pothos/plugin-relay': 4.7.0(@pothos/core@4.12.0(graphql@16.13.1))(graphql@16.13.1) + '@pothos/plugin-simple-objects': 4.1.3(@pothos/core@4.12.0(graphql@16.13.1))(graphql@16.13.1) + '@pothos/plugin-with-input': 4.1.4(@pothos/core@4.12.0(graphql@16.13.1))(graphql@16.13.1) + '@stricli/core': 1.2.7 + effect: 4.0.0-beta.65 + graphql: 16.13.1 + graphql-yoga: 5.21.1(graphql@16.13.1) + ink: 7.0.5(@types/react@19.2.14)(react@19.2.7) + react: 19.2.7 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - '@types/react' + - bufferutil + - debug + - ioredis + - react-devtools-core + - supports-color + - typescript + - utf-8-validate + + '@mysten/aws-kms-signer@0.1.2(@mysten/sui@2.13.2(typescript@5.8.3))': + dependencies: + '@mysten/sui': 2.13.2(typescript@5.8.3) + '@noble/curves': 2.0.1 + asn1-ts: 11.1.0 + + '@mysten/bcs@2.0.3': + dependencies: + '@mysten/utils': 0.3.1 + '@scure/base': 2.0.0 + + '@mysten/bcs@2.0.5': + dependencies: + '@mysten/utils': 0.3.3 + '@scure/base': 2.0.0 + + '@mysten/codegen@0.10.6': + dependencies: + '@mysten/bcs': 2.0.5 + '@mysten/sui': 2.17.0(typescript@5.9.3) + '@stricli/auto-complete': 1.2.7 + '@stricli/core': 1.2.7 + '@types/node': 25.9.2 + cosmiconfig: 9.0.2(typescript@5.9.3) + prettier: 3.8.3 + toml: 3.0.0 + typescript: 5.9.3 + zod: 4.4.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + + '@mysten/dapp-kit@1.0.4(@mysten/sui@2.13.2(typescript@5.8.3))(@tanstack/react-query@5.90.21(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)': + dependencies: + '@mysten/slush-wallet': 1.0.3(@mysten/sui@2.13.2(typescript@5.8.3))(typescript@5.8.3) + '@mysten/sui': 2.13.2(typescript@5.8.3) + '@mysten/utils': 0.3.1 '@mysten/wallet-standard': 0.20.1(@mysten/sui@2.13.2(typescript@5.8.3)) '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -1767,6 +3208,45 @@ snapshots: - typescript - use-sync-external-store + '@mysten/deepbook-v3@1.4.1(@mysten/sui@2.17.0(typescript@5.8.3))': + dependencies: + '@mysten/bcs': 2.0.5 + '@mysten/sui': 2.17.0(typescript@5.8.3) + '@noble/hashes': 2.0.1 + axios: 1.17.0 + axios-retry: 4.5.0(axios@1.17.0) + transitivePeerDependencies: + - debug + - supports-color + + '@mysten/gcp-kms-signer@0.1.2(@mysten/sui@2.13.2(typescript@5.8.3))': + dependencies: + '@google-cloud/kms': 5.5.1 + '@mysten/sui': 2.13.2(typescript@5.8.3) + '@noble/curves': 2.0.1 + asn1-ts: 11.1.0 + transitivePeerDependencies: + - supports-color + + '@mysten/ledger-signer@0.1.2(@mysten/sui@2.13.2(typescript@5.8.3))': + dependencies: + '@mysten/ledgerjs-hw-app-sui': 0.8.3 + '@mysten/sui': 2.13.2(typescript@5.8.3) + transitivePeerDependencies: + - debug + + '@mysten/ledgerjs-hw-app-sui@0.8.3': + dependencies: + '@ledgerhq/devices': 8.15.0 + '@ledgerhq/errors': 6.35.0 + '@ledgerhq/hw-bolos': 6.36.3 + '@ledgerhq/hw-transport': 6.35.3 + '@ledgerhq/ledger-cal-service': 1.17.0 + fast-sha256: 1.3.0 + semver: 7.8.2 + transitivePeerDependencies: + - debug + '@mysten/seal@1.1.1(@mysten/sui@2.13.2(typescript@5.8.3))': dependencies: '@mysten/bcs': 2.0.3 @@ -1774,6 +3254,17 @@ snapshots: '@noble/curves': 2.0.1 '@noble/hashes': 2.0.1 + '@mysten/signers@1.0.5(@mysten/sui@2.13.2(typescript@5.8.3))': + dependencies: + '@mysten/aws-kms-signer': 0.1.2(@mysten/sui@2.13.2(typescript@5.8.3)) + '@mysten/gcp-kms-signer': 0.1.2(@mysten/sui@2.13.2(typescript@5.8.3)) + '@mysten/ledger-signer': 0.1.2(@mysten/sui@2.13.2(typescript@5.8.3)) + '@mysten/sui': 2.13.2(typescript@5.8.3) + '@mysten/webcrypto-signer': 0.1.2(@mysten/sui@2.13.2(typescript@5.8.3)) + transitivePeerDependencies: + - debug + - supports-color + '@mysten/slush-wallet@1.0.3(@mysten/sui@2.13.2(typescript@5.8.3))(typescript@5.8.3)': dependencies: '@mysten/sui': 2.13.2(typescript@5.8.3) @@ -1789,6 +3280,13 @@ snapshots: '@mysten/bcs': 2.0.3 '@mysten/sui': 2.13.2(typescript@5.8.3) + '@mysten/sui-stack-messaging@0.0.2(@mysten/bcs@2.0.3)(@mysten/seal@1.1.1(@mysten/sui@2.13.2(typescript@5.8.3)))(@mysten/sui-groups@0.0.1(@mysten/bcs@2.0.3)(@mysten/sui@2.13.2(typescript@5.8.3)))(@mysten/sui@2.13.2(typescript@5.8.3))': + dependencies: + '@mysten/bcs': 2.0.3 + '@mysten/seal': 1.1.1(@mysten/sui@2.13.2(typescript@5.8.3)) + '@mysten/sui': 2.13.2(typescript@5.8.3) + '@mysten/sui-groups': 0.0.1(@mysten/bcs@2.0.3)(@mysten/sui@2.13.2(typescript@5.8.3)) + '@mysten/sui@2.13.2(typescript@5.8.3)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) @@ -1811,15 +3309,77 @@ snapshots: - '@gql.tada/vue-support' - typescript + '@mysten/sui@2.17.0(typescript@5.8.3)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@mysten/bcs': 2.0.5 + '@mysten/utils': 0.3.3 + '@noble/curves': 2.0.1 + '@noble/hashes': 2.0.1 + '@protobuf-ts/grpcweb-transport': 2.11.1 + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + '@scure/base': 2.0.0 + '@scure/bip32': 2.0.1 + '@scure/bip39': 2.0.1 + gql.tada: 1.9.0(graphql@16.13.1)(typescript@5.8.3) + graphql: 16.13.1 + poseidon-lite: 0.2.1 + valibot: 1.2.0(typescript@5.8.3) + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + + '@mysten/sui@2.17.0(typescript@5.9.3)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + '@mysten/bcs': 2.0.5 + '@mysten/utils': 0.3.3 + '@noble/curves': 2.0.1 + '@noble/hashes': 2.0.1 + '@protobuf-ts/grpcweb-transport': 2.11.1 + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + '@scure/base': 2.0.0 + '@scure/bip32': 2.0.1 + '@scure/bip39': 2.0.1 + gql.tada: 1.9.0(graphql@16.13.1)(typescript@5.9.3) + graphql: 16.13.1 + poseidon-lite: 0.2.1 + valibot: 1.2.0(typescript@5.9.3) + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + '@mysten/utils@0.3.1': dependencies: '@scure/base': 2.0.0 + '@mysten/utils@0.3.3': + dependencies: + '@scure/base': 2.0.0 + + '@mysten/wallet-sdk@0.1.1(@mysten/sui@2.13.2(typescript@5.8.3))(typescript@5.8.3)': + dependencies: + '@mysten/bcs': 2.0.3 + '@mysten/sui': 2.13.2(typescript@5.8.3) + '@mysten/wallet-standard': 0.20.1(@mysten/sui@2.13.2(typescript@5.8.3)) + valibot: 1.2.0(typescript@5.8.3) + transitivePeerDependencies: + - typescript + '@mysten/wallet-standard@0.20.1(@mysten/sui@2.13.2(typescript@5.8.3))': dependencies: '@mysten/sui': 2.13.2(typescript@5.8.3) '@wallet-standard/core': 1.1.1 + '@mysten/webcrypto-signer@0.1.2(@mysten/sui@2.13.2(typescript@5.8.3))': + dependencies: + '@mysten/sui': 2.13.2(typescript@5.8.3) + '@noble/curves': 2.0.1 + '@mysten/window-wallet-core@0.1.4(typescript@5.8.3)': dependencies: '@mysten/utils': 0.3.1 @@ -1834,6 +3394,28 @@ snapshots: '@noble/hashes@2.0.1': {} + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pothos/core@4.12.0(graphql@16.13.1)': + dependencies: + graphql: 16.13.1 + + '@pothos/plugin-relay@4.7.0(@pothos/core@4.12.0(graphql@16.13.1))(graphql@16.13.1)': + dependencies: + '@pothos/core': 4.12.0(graphql@16.13.1) + graphql: 16.13.1 + + '@pothos/plugin-simple-objects@4.1.3(@pothos/core@4.12.0(graphql@16.13.1))(graphql@16.13.1)': + dependencies: + '@pothos/core': 4.12.0(graphql@16.13.1) + graphql: 16.13.1 + + '@pothos/plugin-with-input@4.1.4(@pothos/core@4.12.0(graphql@16.13.1))(graphql@16.13.1)': + dependencies: + '@pothos/core': 4.12.0(graphql@16.13.1) + graphql: 16.13.1 + '@protobuf-ts/grpcweb-transport@2.11.1': dependencies: '@protobuf-ts/runtime': 2.11.1 @@ -1845,6 +3427,28 @@ snapshots: '@protobuf-ts/runtime@2.11.1': {} + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.5': {} + + '@protobufjs/eventemitter@1.1.1': {} + + '@protobufjs/fetch@1.1.1': + dependencies: + '@protobufjs/aspromise': 1.1.2 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.2': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.1': {} + '@radix-ui/primitive@1.1.3': {} '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': @@ -2114,6 +3718,8 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@repeaterjs/repeater@3.0.6': {} + '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/rollup-android-arm-eabi@4.59.0': @@ -2204,6 +3810,14 @@ snapshots: '@noble/hashes': 2.0.1 '@scure/base': 2.0.0 + '@standard-schema/spec@1.1.0': {} + + '@stricli/auto-complete@1.2.7': + dependencies: + '@stricli/core': 1.2.7 + + '@stricli/core@1.2.7': {} + '@tailwindcss/node@4.2.1': dependencies: '@jridgewell/remapping': 2.3.5 @@ -2265,12 +3879,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 - '@tailwindcss/vite@4.2.1(vite@6.4.1(jiti@2.6.1)(lightningcss@1.31.1))': + '@tailwindcss/vite@4.2.1(vite@6.4.1(@types/node@25.9.2)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 tailwindcss: 4.2.1 - vite: 6.4.1(jiti@2.6.1)(lightningcss@1.31.1) + vite: 6.4.1(@types/node@25.9.2)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.9.0) '@tanstack/query-core@5.90.20': {} @@ -2302,6 +3916,10 @@ snapshots: '@types/estree@1.0.8': {} + '@types/node@25.9.2': + dependencies: + undici-types: 7.24.6 + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: '@types/react': 19.2.14 @@ -2310,6 +3928,12 @@ snapshots: dependencies: csstype: 3.2.3 + '@types/trusted-types@2.0.7': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 25.9.2 + '@vanilla-extract/css@1.18.0': dependencies: '@emotion/hash': 0.9.2 @@ -2337,7 +3961,7 @@ snapshots: dependencies: '@vanilla-extract/css': 1.18.0 - '@vitejs/plugin-react@4.7.0(vite@6.4.1(jiti@2.6.1)(lightningcss@1.31.1))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@25.9.2)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -2345,7 +3969,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.1(jiti@2.6.1)(lightningcss@1.31.1) + vite: 6.4.1(@types/node@25.9.2)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -2376,39 +4000,200 @@ snapshots: dependencies: '@wallet-standard/base': 1.1.0 - aria-hidden@1.2.6: + '@whatwg-node/disposablestack@0.0.6': dependencies: + '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - baseline-browser-mapping@2.10.0: {} + '@whatwg-node/events@0.1.2': + dependencies: + tslib: 2.8.1 - browserslist@4.28.1: + '@whatwg-node/fetch@0.10.13': dependencies: - baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001777 - electron-to-chromium: 1.5.307 - node-releases: 2.0.36 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + '@whatwg-node/node-fetch': 0.8.6 + urlpattern-polyfill: 10.1.0 - caniuse-lite@1.0.30001777: {} + '@whatwg-node/node-fetch@0.8.6': + dependencies: + '@fastify/busboy': 3.2.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 - chalk@5.6.2: {} + '@whatwg-node/promise-helpers@1.3.2': + dependencies: + tslib: 2.8.1 - clsx@2.1.1: {} + '@whatwg-node/server@0.11.0': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 - commander@13.1.0: {} + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color - convert-source-map@2.0.0: {} + agent-base@7.1.4: {} - css-what@6.2.2: {} + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 - cssesc@3.0.0: {} + ansi-regex@5.0.1: {} - csstype@3.2.3: {} + ansi-regex@6.2.2: {} - debug@4.4.3: + ansi-styles@4.3.0: dependencies: - ms: 2.1.3 + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + asn1-ts@11.1.0: {} + + asynckit@0.4.0: {} + + auto-bind@5.0.1: {} + + axios-retry@4.5.0(axios@1.17.0): + dependencies: + axios: 1.17.0 + is-retry-allowed: 2.2.0 + + axios@1.13.5: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.17.0: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.5 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + baseline-browser-mapping@2.10.0: {} + + bignumber.js@9.3.1: {} + + brace-expansion@2.1.1: + dependencies: + balanced-match: 1.0.2 + + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001777 + electron-to-chromium: 1.5.307 + node-releases: 2.0.36 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + + buffer-equal-constant-time@1.0.1: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001777: {} + + chalk@5.6.2: {} + + cli-boxes@4.0.1: {} + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-truncate@6.0.0: + dependencies: + slice-ansi: 9.0.0 + string-width: 8.2.1 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} + + cluster-key-slot@1.1.1: {} + + code-excerpt@4.0.0: + dependencies: + convert-to-spaces: 2.0.1 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@13.1.0: {} + + convert-source-map@2.0.0: {} + + convert-to-spaces@2.0.1: {} + + cosmiconfig@9.0.2(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.2.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + + cross-inspect@1.0.1: + dependencies: + tslib: 2.8.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-what@6.2.2: {} + + cssesc@3.0.0: {} + + csstype@3.2.3: {} + + data-uri-to-buffer@4.0.1: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 dedent@1.7.2: {} @@ -2416,17 +4201,86 @@ snapshots: deepmerge@4.3.1: {} + delayed-stream@1.0.0: {} + + denque@2.1.0: {} + detect-libc@2.1.2: {} detect-node-es@1.1.0: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.5 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + + eastasianwidth@0.2.0: {} + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + effect@4.0.0-beta.65: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 4.8.0 + find-my-way-ts: 0.1.6 + ini: 6.0.0 + kubernetes-types: 1.30.0 + msgpackr: 1.11.14 + multipasta: 0.2.7 + toml: 4.1.1 + uuid: 13.0.2 + yaml: 2.9.0 + electron-to-chromium@1.5.307: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + enhanced-resolve@5.20.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-toolkit@1.47.0: {} + esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -2458,17 +4312,145 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp@2.0.0: {} + + events@3.3.0: {} + + extend@3.0.2: {} + + fast-check@4.8.0: + dependencies: + pure-rand: 8.4.0 + + fast-sha256@1.3.0: {} + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + find-my-way-ts@0.1.6: {} + + follow-redirects@1.16.0: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + fsevents@2.3.3: optional: true + function-bind@1.1.2: {} + + gaxios@7.1.3: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + rimraf: 5.0.10 + transitivePeerDependencies: + - supports-color + + gaxios@7.1.5: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + transitivePeerDependencies: + - supports-color + + gcp-metadata@8.1.3: + dependencies: + gaxios: 7.1.3 + google-logging-utils: 1.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} + + get-east-asian-width@1.6.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + google-auth-library@10.5.0: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.1.5 + gcp-metadata: 8.1.3 + google-logging-utils: 1.1.3 + gtoken: 8.0.0 + jws: 4.0.1 + transitivePeerDependencies: + - supports-color + + google-gax@5.0.7: + dependencies: + '@grpc/grpc-js': 1.14.4 + '@grpc/proto-loader': 0.8.1 + duplexify: 4.1.3 + google-auth-library: 10.5.0 + google-logging-utils: 1.1.3 + node-fetch: 3.3.2 + object-hash: 3.0.0 + proto3-json-serializer: 3.0.4 + protobufjs: 7.6.2 + retry-request: 8.0.3 + rimraf: 5.0.10 + transitivePeerDependencies: + - supports-color + + google-logging-utils@1.1.3: {} + + gopd@1.2.0: {} + gql.tada@1.9.0(graphql@16.13.1)(typescript@5.8.3): dependencies: '@0no-co/graphql.web': 1.2.0(graphql@16.13.1) @@ -2481,20 +4463,188 @@ snapshots: - '@gql.tada/vue-support' - graphql + gql.tada@1.9.0(graphql@16.13.1)(typescript@5.9.3): + dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@16.13.1) + '@0no-co/graphqlsp': 1.15.2(graphql@16.13.1)(typescript@5.9.3) + '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.8.3))(graphql@16.13.1)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - graphql + graceful-fs@4.2.11: {} + graphql-yoga@5.21.1(graphql@16.13.1): + dependencies: + '@envelop/core': 5.5.1 + '@envelop/instrumentation': 1.0.0 + '@graphql-tools/executor': 1.5.3(graphql@16.13.1) + '@graphql-tools/schema': 10.0.33(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-yoga/logger': 2.0.1 + '@graphql-yoga/subscription': 5.0.5 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + '@whatwg-node/server': 0.11.0 + graphql: 16.13.1 + lru-cache: 10.4.3 + tslib: 2.8.1 + graphql@16.13.1: {} + gtoken@8.0.0: + dependencies: + gaxios: 7.1.5 + jws: 4.0.1 + transitivePeerDependencies: + - supports-color + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hono@4.12.24: {} + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + indent-string@5.0.0: {} + + inherits@2.0.4: {} + + ini@6.0.0: {} + + ink@7.0.5(@types/react@19.2.14)(react@19.2.7): + dependencies: + '@alcalzone/ansi-tokenize': 0.3.0 + ansi-escapes: 7.3.0 + ansi-styles: 6.2.3 + auto-bind: 5.0.1 + chalk: 5.6.2 + cli-boxes: 4.0.1 + cli-cursor: 4.0.0 + cli-truncate: 6.0.0 + code-excerpt: 4.0.0 + es-toolkit: 1.47.0 + indent-string: 5.0.0 + is-in-ci: 2.0.0 + patch-console: 2.0.0 + react: 19.2.7 + react-reconciler: 0.33.0(react@19.2.7) + scheduler: 0.27.0 + signal-exit: 3.0.7 + slice-ansi: 9.0.0 + stack-utils: 2.0.6 + string-width: 8.2.1 + terminal-size: 4.0.1 + type-fest: 5.7.0 + widest-line: 6.0.0 + wrap-ansi: 10.0.0 + ws: 8.21.0 + yoga-layout: 3.2.1 + optionalDependencies: + '@types/react': 19.2.14 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ioredis@5.11.1: + dependencies: + '@ioredis/commands': 1.10.0 + cluster-key-slot: 1.1.1 + debug: 4.4.3 + denque: 2.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + + is-arrayish@0.2.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.6.0 + + is-in-ci@2.0.0: {} + + is-retry-allowed@2.2.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jiti@2.6.1: {} jose@6.2.1: {} js-tokens@4.0.0: {} + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + jsesc@3.1.0: {} + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.1 + + json-parse-even-better-errors@2.3.1: {} + json5@2.2.3: {} + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.1: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + + kubernetes-types@1.30.0: {} + lightningcss-android-arm64@1.31.1: optional: true @@ -2544,28 +4694,133 @@ snapshots: lightningcss-win32-arm64-msvc: 1.31.1 lightningcss-win32-x64-msvc: 1.31.1 + lines-and-columns@1.2.4: {} + + lit-element@4.2.2: + dependencies: + '@lit-labs/ssr-dom-shim': 1.6.0 + '@lit/reactive-element': 2.1.2 + lit-html: 3.3.3 + + lit-html@3.3.3: + dependencies: + '@types/trusted-types': 2.0.7 + + lit@3.3.3: + dependencies: + '@lit/reactive-element': 2.1.2 + lit-element: 4.2.2 + lit-html: 3.3.3 + + lodash.camelcase@4.3.0: {} + + long@5.3.2: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 + lru-cache@7.18.3: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + math-intrinsics@1.1.0: {} + media-query-parser@2.0.2: dependencies: '@babel/runtime': 7.28.6 + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@4.1.0: {} + + mimic-fn@2.1.0: {} + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 + + minipass@7.1.3: {} + modern-ahocorasick@1.1.0: {} ms@2.1.3: {} + msgpackr-extract@3.0.4: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.4 + optional: true + + msgpackr@1.11.14: + optionalDependencies: + msgpackr-extract: 3.0.4 + + multipasta@0.2.7: {} + nanoid@3.3.11: {} + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.1.2 + optional: true + node-releases@2.0.36: {} + object-hash@3.0.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + patch-console@2.0.0: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 + picocolors@1.1.1: {} picomatch@4.0.4: {} @@ -2578,11 +4833,43 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prettier@3.8.3: {} + + proto3-json-serializer@3.0.4: + dependencies: + protobufjs: 7.6.2 + + protobufjs@7.6.2: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.2 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.1 + '@types/node': 25.9.2 + long: 5.3.2 + + proxy-from-env@1.1.0: {} + + proxy-from-env@2.1.0: {} + + pure-rand@8.4.0: {} + react-dom@19.2.4(react@19.2.4): dependencies: react: 19.2.4 scheduler: 0.27.0 + react-reconciler@0.33.0(react@19.2.7): + dependencies: + react: 19.2.7 + scheduler: 0.27.0 + react-refresh@0.17.0: {} react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): @@ -2614,6 +4901,40 @@ snapshots: react@19.2.4: {} + react@19.2.7: {} + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + redis-errors@1.2.0: {} + + redis-parser@3.0.0: + dependencies: + redis-errors: 1.2.0 + + require-directory@2.1.1: {} + + resolve-from@4.0.0: {} + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry-request@8.0.3: + dependencies: + extend: 3.0.2 + teeny-request: 10.1.3 + transitivePeerDependencies: + - supports-color + + rimraf@5.0.10: + dependencies: + glob: 10.5.0 + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 @@ -2645,31 +4966,128 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + scheduler@0.27.0: {} semver@6.3.1: {} + semver@7.7.3: {} + + semver@7.8.2: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + slice-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + source-map-js@1.2.1: {} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + standard-as-callback@2.1.0: {} + + stream-events@1.0.5: + dependencies: + stubs: 3.0.0 + + stream-shift@1.0.3: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + string-width@8.2.1: + dependencies: + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + stubs@3.0.0: {} + + tagged-tag@1.0.0: {} + tailwindcss@4.2.1: {} tapable@2.3.0: {} + teeny-request@10.1.3: + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + stream-events: 1.0.5 + transitivePeerDependencies: + - supports-color + + terminal-size@4.0.1: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + toml@3.0.0: {} + + toml@4.1.1: {} + tslib@2.8.1: {} + type-fest@5.7.0: + dependencies: + tagged-tag: 1.0.0 + typescript@5.8.3: {} + typescript@5.9.3: {} + + undici-types@7.24.6: {} + + undici@8.4.1: {} + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 + urlpattern-polyfill@10.1.0: {} + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): dependencies: react: 19.2.4 @@ -2685,11 +5103,21 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + util-deprecate@1.0.2: {} + + utility-types@3.11.0: {} + + uuid@13.0.2: {} + valibot@1.2.0(typescript@5.8.3): optionalDependencies: typescript: 5.8.3 - vite@6.4.1(jiti@2.6.1)(lightningcss@1.31.1): + valibot@1.2.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + vite@6.4.1(@types/node@25.9.2)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -2698,12 +5126,66 @@ snapshots: rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: + '@types/node': 25.9.2 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 + yaml: 2.9.0 + + web-streams-polyfill@3.3.3: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@6.0.0: + dependencies: + string-width: 8.2.1 + + wrap-ansi@10.0.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 8.2.1 + strip-ansi: 7.2.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + + wrappy@1.0.2: {} + + ws@8.21.0: {} + + y18n@5.0.8: {} yallist@3.1.1: {} + yaml@2.9.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yoga-layout@3.2.1: {} + + zod@4.4.3: {} + zustand@5.0.11(@types/react@19.2.14)(react@19.2.4): optionalDependencies: '@types/react': 19.2.14 diff --git a/chat-app/pnpm-workspace.yaml b/chat-app/pnpm-workspace.yaml index 0ef6ea0..bebed23 100644 --- a/chat-app/pnpm-workspace.yaml +++ b/chat-app/pnpm-workspace.yaml @@ -1 +1,5 @@ -onlyBuiltDependencies: esbuild +# pnpm settings live here (pnpm v11 no longer reads the `pnpm` field in package.json). +onlyBuiltDependencies: + - esbuild +overrides: + picomatch@>=4.0.0 <4.0.4: ^4.0.4 diff --git a/chat-app/src/contexts/MessagingClientContext.tsx b/chat-app/src/contexts/MessagingClientContext.tsx index e3fbbea..06cac55 100644 --- a/chat-app/src/contexts/MessagingClientContext.tsx +++ b/chat-app/src/contexts/MessagingClientContext.tsx @@ -1,4 +1,4 @@ -import { createContext, useContext, useEffect, useMemo, useRef, type ReactNode } from 'react'; +import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'; import { useCurrentAccount, useSignPersonalMessage, @@ -7,6 +7,12 @@ import { import { createSuiStackMessagingClient, WalrusHttpStorageAdapter } from '@mysten/sui-stack-messaging'; import { SuiGraphQLClient } from '@mysten/sui/graphql'; import { DappKitSigner } from '../lib/dapp-kit-signer'; +import { + devstackNetwork, + isDevstack, + loadDevstackClientConfig, + type DevstackClientConfig, +} from '../lib/devstack-config'; import type { Signer } from '@mysten/sui/cryptography'; @@ -27,6 +33,7 @@ const MessagingClientContext = createContext const RELAYER_URL = import.meta.env.VITE_RELAYER_URL || 'http://localhost:3000'; const GRAPHQL_URL = + (isDevstack && devstackNetwork?.graphqlUrl) || import.meta.env.VITE_SUI_GRAPHQL_URL || '/api/graphql'; @@ -92,19 +99,51 @@ export function MessagingClientProvider({ signRef.current = signPersonalMessage; }, [signPersonalMessage]); + // Serialize wallet sign requests. The Seal session-key flow and tx signing can each + // trigger a personal-message sign, and they can overlap (more so under React StrictMode). + // The devstack dev-wallet — and some real wallets — reject a second concurrent sign with + // "a signing request is already pending"; queueing keeps at most one in flight. + const signChain = useRef>(Promise.resolve()); + const queuedSign = useCallback((args: { message: Uint8Array }): Promise<{ signature: string }> => { + const run = signChain.current.then(() => signRef.current(args)); + signChain.current = run.catch(() => undefined); + return run; + }, []); + + // Local devstack: resolve the generated config (local RPC + seal + package ids) + // and recover the bundled sui_groups id once, independent of the wallet. + const [devstackCfg, setDevstackCfg] = useState(null); + useEffect(() => { + if (!isDevstack) return; + let cancelled = false; + loadDevstackClientConfig() + .then((cfg) => { + if (!cancelled) setDevstackCfg(cfg); + }) + .catch((err) => console.error('[devstack] failed to load local config', err)); + return () => { + cancelled = true; + }; + }, []); + const { client, signer } = useMemo(() => { if (!account) return { client: null, signer: null }; + // In devstack mode, wait for the local config before building the client. + if (isDevstack && !devstackCfg) return { client: null, signer: null }; const signer = new DappKitSigner({ address: account.address, publicKeyBytes: account.publicKey ? new Uint8Array(account.publicKey) : undefined, - signPersonalMessage: (args) => - signRef.current({ message: args.message }), + signPersonalMessage: (args) => queuedSign({ message: args.message }), }); - const sealServerConfigs = parseSealServerConfigs(); + // devstack mode sources the base client (local RPC + MVR overrides), seal + // server configs and package ids from the generated config; otherwise env. + const baseClient = devstackCfg?.baseClient ?? suiClient; + const sealServerConfigs = devstackCfg?.sealServerConfigs ?? parseSealServerConfigs(); + const packageConfig = devstackCfg?.packageConfig ?? parsePackageConfig(); // Build optional attachments config when Walrus URLs are provided const attachments = @@ -121,7 +160,7 @@ export function MessagingClientProvider({ } : undefined; - const client = createSuiStackMessagingClient(suiClient, { + const client = createSuiStackMessagingClient(baseClient, { seal: { serverConfigs: sealServerConfigs, }, @@ -129,12 +168,15 @@ export function MessagingClientProvider({ sessionKey: { address: account.address, onSign: async (message: Uint8Array) => { - const { signature } = await signRef.current({ message }); + const { signature } = await queuedSign({ message }); return signature; }, }, + // Local devstack runs a single Seal key server; match the threshold to it + // (the default of 2 assumes the testnet two-server topology). + sealThreshold: devstackCfg ? devstackCfg.sealServerConfigs.length : undefined, }, - packageConfig: parsePackageConfig(), + packageConfig, relayer: { relayerUrl: RELAYER_URL, fetch: (...args: Parameters) => fetch(...args), @@ -143,7 +185,7 @@ export function MessagingClientProvider({ }); return { client, signer }; - }, [account, suiClient]); + }, [account, suiClient, devstackCfg, queuedSign]); const value = useMemo( () => ({ client, signer, graphqlClient }), diff --git a/chat-app/src/lib/devstack-config.ts b/chat-app/src/lib/devstack-config.ts new file mode 100644 index 0000000..b62e0f4 --- /dev/null +++ b/chat-app/src/lib/devstack-config.ts @@ -0,0 +1,243 @@ +// Bridges the @mysten-incubation/devstack generated config into the SDK client, +// for the fully-local stack (local Sui + local Seal key servers). Everything here +// is inert unless launched by `devstack up`: outside a devstack run the +// `virtual:devstack-app-config` shim exports `null` and `isDevstack` is false, so +// the app keeps its normal testnet env path untouched. +// +// See `chat-app/devstack.config.ts` and the `spin-up-local-devstack` skill. + +import { devstack } from 'virtual:devstack-app-config'; +import type { ClientWithCoreApi } from '@mysten/sui/client'; +import { SuiGrpcClient } from '@mysten/sui/grpc'; +import { SuiGraphQLClient } from '@mysten/sui/graphql'; + +const MESSAGING_PACKAGE = 'sui_stack_messaging'; +// MVR named addresses the SDK's generated bindings resolve through. Must be mapped +// to the locally-published ids on the base client (mirrors the test helper +// `test/helpers/create-sui-stack-messaging-client.ts`). +const MVR_MESSAGING = '@local-pkg/sui-stack-messaging'; +const MVR_GROUPS = '@local-pkg/sui-groups'; + +export const isDevstack = devstack != null; + +interface DevstackNetworkInfo { + /** dapp-kit network key, derived from the dev-wallet chain id (e.g. `sui:local` -> `local`). */ + key: string; + rpcUrl: string; + graphqlUrl: string | null; +} + +/** Sync network info from the generated config (available at module load). */ +export const devstackNetwork: DevstackNetworkInfo | null = devstack + ? { + // Use the standard `localnet` dapp-kit key: the dev-wallet client reports + // `sui:localnet` chains, so dapp-kit must be on `localnet` to match it (devstack's + // own chain id is `sui:local`, which the wallet client does not advertise). + key: 'localnet', + rpcUrl: devstack.network.rpcUrl, + // devstack exposes the GraphQL host without a path; the endpoint is `/graphql`. + graphqlUrl: devstack.network.graphqlUrl ? `${devstack.network.graphqlUrl}/graphql` : null, + } + : null; + +interface MessagingPackageConfig { + originalPackageId: string; + latestPackageId: string; + namespaceId: string; + versionId: string; +} + +interface PermissionedGroupsPackageConfig { + originalPackageId: string; + latestPackageId: string; +} + +export interface DevstackClientConfig { + baseClient: ClientWithCoreApi; + sealServerConfigs: { objectId: string; weight: number }[]; + packageConfig: { + messaging: MessagingPackageConfig; + permissionedGroups: PermissionedGroupsPackageConfig; + }; +} + +/** + * Builds the full SDK config for the local devstack: resolves the locally-published + * messaging id + the local Seal server configs from the generated config, recovers + * the shared singletons (MessagingNamespace, Version) and the bundled `sui_groups` + * id from chain, and returns a gRPC base client with the MVR overrides the SDK + * bindings need. Throws if called outside a devstack run. + */ +export async function loadDevstackClientConfig(): Promise { + if (!devstack || !devstackNetwork) { + throw new Error('loadDevstackClientConfig called outside a devstack run'); + } + + const pkg = devstack.packages[MESSAGING_PACKAGE]; + if (!pkg?.packageId) { + throw new Error(`devstack generated config missing packages.${MESSAGING_PACKAGE}.packageId`); + } + const messagingId = pkg.packageId; + + // Both local key servers' configs -> default Seal threshold of 2 holds. + const sealServerConfigs = devstack.seal.flatMap((s) => + s.serverConfigs.map((c) => ({ objectId: c.objectId, weight: c.weight ?? 1 })), + ); + if (sealServerConfigs.length === 0) { + throw new Error('devstack generated seal config has no server configs'); + } + + const { namespaceId, versionId, groupsId } = await recoverPublishedObjects( + messagingId, + devstackNetwork.graphqlUrl, + ); + + const baseClient = new SuiGrpcClient({ + baseUrl: devstackNetwork.rpcUrl, + network: devstackNetwork.key as ConstructorParameters[0]['network'], + mvr: { + overrides: { + packages: { + [MVR_MESSAGING]: messagingId, + [MVR_GROUPS]: groupsId, + }, + }, + }, + }) as unknown as ClientWithCoreApi; + + return { + baseClient, + sealServerConfigs, + packageConfig: { + messaging: { + originalPackageId: messagingId, + latestPackageId: messagingId, + namespaceId, + versionId, + }, + permissionedGroups: { + originalPackageId: groupsId, + latestPackageId: groupsId, + }, + }, + }; +} + +interface RecoveredObjects { + namespaceId: string; + versionId: string; + groupsId: string; +} + +/** + * Recovers the three things devstack codegen doesn't surface for a bundled publish: + * the `MessagingNamespace` + `Version` shared singletons, and the locally-published + * `sui_groups` package id (bundled into the messaging publish tx via + * `--with-unpublished-dependencies`). Reads the messaging package's publish tx via + * GraphQL — namespace/version are created MoveObjects matched by type; sui_groups is + * the created MovePackage exposing the `permissioned_group` module. Retries briefly to + * tolerate indexer lag right after publish. + */ +async function recoverPublishedObjects( + messagingId: string, + graphqlUrl: string | null, +): Promise { + if (!graphqlUrl) { + throw new Error('devstack local GraphQL URL missing — cannot recover published objects'); + } + const gql = new SuiGraphQLClient({ url: graphqlUrl, network: 'localnet' }); + + let lastErr: unknown; + for (let attempt = 0; attempt < 10; attempt++) { + try { + const digest = await fetchPublishDigest(gql, messagingId); + const recovered = await fetchRecovered(gql, digest); + if (recovered.namespaceId && recovered.versionId && recovered.groupsId) { + return recovered as RecoveredObjects; + } + throw new Error( + `publish tx not fully indexed yet (namespace=${!!recovered.namespaceId} ` + + `version=${!!recovered.versionId} groups=${!!recovered.groupsId})`, + ); + } catch (err) { + lastErr = err; + await delay(1000); + } + } + throw new Error( + `Failed to recover published objects from messaging ${messagingId}: ${String(lastErr)}`, + ); +} + +interface DigestResponse { + object?: { previousTransaction?: { digest: string } | null } | null; +} + +async function fetchPublishDigest(gql: SuiGraphQLClient, packageId: string): Promise { + const { data, errors } = await gql.query({ + query: `query Publish($address: SuiAddress!) { + object(address: $address) { previousTransaction { digest } } + }`, + variables: { address: packageId }, + }); + if (errors?.length) throw new Error(errors.map((e) => e.message).join('; ')); + const digest = (data as DigestResponse | null)?.object?.previousTransaction?.digest; + if (!digest) throw new Error('messaging package publish tx not available yet'); + return digest; +} + +interface ChangesResponse { + transaction?: { + effects?: { + objectChanges?: { + nodes: { + address: string; + outputState?: { + asMoveObject?: { contents?: { type?: { repr?: string } | null } | null } | null; + asMovePackage?: { module?: { name: string } | null } | null; + } | null; + }[]; + } | null; + } | null; + } | null; +} + +async function fetchRecovered( + gql: SuiGraphQLClient, + digest: string, +): Promise> { + const { data, errors } = await gql.query({ + query: `query Changes($digest: String!) { + transaction(digest: $digest) { + effects { + objectChanges(first: 60) { + nodes { + address + outputState { + asMoveObject { contents { type { repr } } } + asMovePackage { module(name: "permissioned_group") { name } } + } + } + } + } + } + }`, + variables: { digest }, + }); + if (errors?.length) throw new Error(errors.map((e) => e.message).join('; ')); + const nodes = (data as ChangesResponse | null)?.transaction?.effects?.objectChanges?.nodes; + if (!nodes) throw new Error('publish tx object changes not available yet'); + + const out: Partial = {}; + for (const node of nodes) { + const repr = node.outputState?.asMoveObject?.contents?.type?.repr; + if (repr?.includes('MessagingNamespace')) out.namespaceId = node.address; + else if (repr?.includes('::version::Version')) out.versionId = node.address; + else if (node.outputState?.asMovePackage?.module?.name) out.groupsId = node.address; + } + return out; +} + +function delay(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} diff --git a/chat-app/src/lib/network-config.ts b/chat-app/src/lib/network-config.ts index 47092eb..b122360 100644 --- a/chat-app/src/lib/network-config.ts +++ b/chat-app/src/lib/network-config.ts @@ -1,13 +1,24 @@ import { createNetworkConfig } from '@mysten/dapp-kit'; import { getJsonRpcFullnodeUrl } from '@mysten/sui/jsonRpc'; +import { devstackNetwork, isDevstack } from './devstack-config'; const rpcUrl = import.meta.env.VITE_SUI_RPC_URL; -const { networkConfig, useNetworkVariable } = createNetworkConfig({ - testnet: { - url: rpcUrl || getJsonRpcFullnodeUrl('testnet'), - network: 'testnet', - }, -}); +const testnet = { + url: rpcUrl || getJsonRpcFullnodeUrl('testnet'), + network: 'testnet' as const, +}; + +// Under `devstack up`, add a local network keyed by the devstack chain id and make +// it the default — this is the chain the injected dev wallet reports, so dapp-kit +// connects on the same chain. Outside devstack, testnet-only (unchanged). +const networks = + isDevstack && devstackNetwork + ? { [devstackNetwork.key]: { url: devstackNetwork.rpcUrl, network: 'localnet' as const }, testnet } + : { testnet }; + +export const defaultNetwork = isDevstack && devstackNetwork ? devstackNetwork.key : 'testnet'; + +const { networkConfig, useNetworkVariable } = createNetworkConfig(networks); export { networkConfig, useNetworkVariable }; diff --git a/chat-app/src/main.tsx b/chat-app/src/main.tsx index 06cff71..36b7cf7 100644 --- a/chat-app/src/main.tsx +++ b/chat-app/src/main.tsx @@ -2,7 +2,7 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { SuiClientProvider, WalletProvider } from '@mysten/dapp-kit'; -import { networkConfig } from './lib/network-config'; +import { defaultNetwork, networkConfig } from './lib/network-config'; import { MessagingClientProvider } from './contexts/MessagingClientContext'; import { ErrorBoundary } from './components/ErrorBoundary'; import App from './App'; @@ -14,7 +14,7 @@ const queryClient = new QueryClient(); createRoot(document.getElementById('root')!).render( - + diff --git a/chat-app/src/vite-env.d.ts b/chat-app/src/vite-env.d.ts index 11f02fe..8c8a226 100644 --- a/chat-app/src/vite-env.d.ts +++ b/chat-app/src/vite-env.d.ts @@ -1 +1,42 @@ /// + +// devstack generated-config shape (the subset the chat-app reads), composed by the +// `virtual:devstack-app-config` shim in vite.config.ts from the `@generated/*` modules +// devstack codegen writes. `devstack` is `null` outside a `devstack up` run. +// Consumed by src/lib/devstack-config.ts. +declare module 'virtual:devstack-app-config' { + export interface DevstackSealBindings { + name: string; + objectId: string; + keyServerUrl: string; + mode: string; + serverConfigs: { objectId: string; weight?: number; aggregatorUrl?: string }[]; + } + export interface DevstackPackage { + name: string; + packageId: string; + mvrPlaceholder: string; + sourcePath: string; + excluded: boolean; + } + export interface DevstackSuiNetwork { + chain: string; + mode: string; + rpcUrl: string; + graphqlUrl: string | null; + faucetUrl: string | null; + forkUpstream: string | null; + } + export interface DevstackDappKitConfig { + chain: string; + pairUrl: string; + walletUrl: string; + } + export interface DevstackGenerated { + seal: DevstackSealBindings[]; + packages: Record; + network: DevstackSuiNetwork; + dappKit: DevstackDappKitConfig; + } + export const devstack: DevstackGenerated | null; +} diff --git a/chat-app/vite.config.ts b/chat-app/vite.config.ts index 395c5eb..fdb6060 100644 --- a/chat-app/vite.config.ts +++ b/chat-app/vite.config.ts @@ -1,22 +1,77 @@ -import { defineConfig, loadEnv } from 'vite'; +import { defineConfig, loadEnv, type Plugin, type PluginOption } from 'vite'; import react from '@vitejs/plugin-react'; import tailwindcss from '@tailwindcss/vite'; -export default defineConfig(({ mode }) => { +// True only when launched by `devstack up` — devstack injects these into the +// host-service child process. Keeps the incubation dep + generated config off the +// normal `pnpm dev` / `pnpm build` path entirely. +const DEVSTACK_ACTIVE = !!process.env.DEVSTACK_RUNTIME_ROOT || !!process.env.DEVSTACK_STACK; + +// Resolves `virtual:devstack-app-config` to a single `devstack` object composed from +// the devstack-generated modules under a devstack run, and to `null` otherwise — so +// committed app code can import it unconditionally without ever statically referencing +// `@generated` (which only exists when `devstackVitePlugin()` is active). +const SHIM_ACTIVE_SOURCE = [ + `import { DevWallet } from '@mysten-incubation/dev-wallet';`, + `import { DevstackSignerAdapter, parseDevstackToken } from '@mysten-incubation/dev-wallet/adapters';`, + `import { mountDevWallet } from '@mysten-incubation/dev-wallet/ui';`, + `import { sealBindings as s1 } from '@generated/seal/local';`, + `import { packages } from '@generated/packages';`, + `import { suiNetwork } from '@generated/sui/network';`, + `import { dappKitConfig } from '@generated/dapp-kit/config';`, + // devstack runs the dev-wallet server (funded accounts; keys stay server-side, signing + // goes through /api/v1/devstack/*). Build the server-delegating adapter, load its accounts, + // register the wallet (so the existing /ConnectButton lists it), and mount + // the floating panel (so connect/sign approvals have a UI). Side effect on shim load. + `const __adapter = new DevstackSignerAdapter({ serverOrigin: dappKitConfig.walletUrl, token: parseDevstackToken(dappKitConfig.pairUrl) });`, + `try { await __adapter.initialize(); } catch (e) { console.error('[devstack] dev-wallet adapter init failed', e); }`, + `const __wallet = new DevWallet({ adapters: [__adapter], networks: { localnet: suiNetwork.rpcUrl } });`, + `__wallet.register();`, + `mountDevWallet(__wallet);`, + `export const devstack = { seal: [s1], packages, network: suiNetwork, dappKit: dappKitConfig };`, +].join('\n'); + +function devstackAppConfigShim(active: boolean): Plugin { + const VIRTUAL_ID = 'virtual:devstack-app-config'; + const RESOLVED_ID = '\0' + VIRTUAL_ID; + return { + name: 'devstack-app-config-shim', + enforce: 'pre', + resolveId(id) { + if (id === VIRTUAL_ID) return RESOLVED_ID; + }, + load(id) { + if (id !== RESOLVED_ID) return; + return active ? SHIM_ACTIVE_SOURCE : `export const devstack = null;`; + }, + }; +} + +export default defineConfig(async ({ mode }) => { const env = loadEnv(mode, '.', ''); + + const plugins: PluginOption[] = [tailwindcss(), react()]; + + if (DEVSTACK_ACTIVE) { + // Aliases `@generated` / `@devstack-dev` and auto-injects the dev wallet. + const { devstackVitePlugin } = await import('@mysten-incubation/devstack/vite'); + plugins.push(devstackVitePlugin()); + } + plugins.push(devstackAppConfigShim(DEVSTACK_ACTIVE)); + return { - plugins: [tailwindcss(), react()], + plugins, server: { proxy: { '/api/relayer': { target: env.VITE_RELAYER_BACKEND_URL || 'http://localhost:3000', changeOrigin: true, - rewrite: (path) => path.replace(/^\/api\/relayer/, ''), + rewrite: (path: string) => path.replace(/^\/api\/relayer/, ''), }, '/api/graphql': { target: 'https://graphql.testnet.sui.io', changeOrigin: true, - rewrite: (path) => path.replace(/^\/api\/graphql/, '/graphql'), + rewrite: (path: string) => path.replace(/^\/api\/graphql/, '/graphql'), }, }, },