From 794626299b7066922274e54944d2bf3767a045a1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 1 Sep 2026 13:12:01 +0400 Subject: [PATCH 1/2] chore: import @swapkit/ui and vite-lite playground from swapkit/ui Synced to swapkit/ui@250d92c (develop, 2026-08-28). Replaces the June import: rebuilt on current develop with fresh history so no devops config is carried anywhere in the branch. - packages/ui imported with wallets-repo adaptations: @swapkit/wallets via workspace:*, range-style @swapkit pins, no cjs export entries, and the missing-credentials guard (quote/price fetches disabled plus a warning banner when no API key or widget credentials are set). - playgrounds/vite-lite replaced by the ui repo version (terraform excluded; demo api-key scrubbed - wallets is a public repo). - Infra stays out: no devops/, no terraform, no cloudbuild. That config is hosted in the devops repo. - Workspace dep alignment for sherif: cosmjs 0.39, cosmjs-types 0.11, near-js 2.5.1, ts-pattern 5.9.0, typhonjs 3.1.0. - CI test step scoped to wallet/sdk/tools suites; packages/ui tests need the package-local happy-dom preload and are partly red upstream. Run them with: bun --cwd=packages/ui test. Co-Authored-By: Claude Fable 5 --- .changeset/bump-swapkit-deps-20260821.md | 5 + .changeset/bump-swapkit-deps-20260824.md | 8 + .changeset/bump-swapkit-deps-20260826.md | 12 + .changeset/bump-swapkit-hip1-fix.md | 5 + .changeset/import-swapkit-ui.md | 5 + .changeset/output-picker-swapto-fallback.md | 5 + .changeset/widget-image-url-new-org.md | 5 + .github/workflows/ci.yml | 5 +- .gitignore | 14 + bun.lock | 1079 ++++++++------ lefthook.yml | 8 + package.json | 10 +- packages/sdk/package.json | 19 +- packages/ui/CHANGELOG.md | 401 +++++ packages/ui/README.md | 187 +++ packages/ui/build.ts | 41 + packages/ui/bunfig.toml | 2 + packages/ui/components.json | 20 + packages/ui/package.json | 143 ++ packages/ui/shims/buffer-shim.js | 21 + packages/ui/shims/randomfill.js | 91 ++ packages/ui/src/index.ts | 1 + packages/ui/src/lib/utils.ts | 50 + .../__tests__/sentry-adversarial.test.ts | 474 ++++++ .../__tests__/sentry-error-boundary.test.tsx | 175 +++ .../ui/src/react/__tests__/sentry.test.ts | 259 ++++ packages/ui/src/react/__tests__/setup-dom.ts | 39 + .../assets/swapkit-logo-horizontal-white.tsx | 54 + packages/ui/src/react/assets/swapkit-logo.tsx | 20 + .../composable/chain-filter-popover.tsx | 139 ++ .../composable/chain-filter-sheet.tsx | 150 ++ .../composable/destination-address-input.tsx | 87 ++ .../composable/route-provider-parts.tsx | 285 ++++ .../composable/swap-amount-input.tsx | 38 + .../components/composable/swap-asset-item.tsx | 33 + .../composable/swap-asset-select.tsx | 294 ++++ .../composable/swap-input-chain-selector.tsx | 69 + .../composable/swap-quote-preview.tsx | 224 +++ .../composable/transaction-history-drawer.tsx | 185 +++ packages/ui/src/react/components/config.ts | 215 +++ .../dialogs/approval-confirm-dialog.tsx | 152 ++ .../dialogs/swap-confirm-dialog.tsx | 144 ++ .../swap-quote-route-select-dialog.tsx | 66 + .../components/dialogs/unshield-dialog.tsx | 419 ++++++ .../dialogs/wallet-chain-select-dialog.tsx | 108 ++ .../dialogs/wallet-chains-config.ts | 16 + .../dialogs/wallet-connect-dialog.tsx | 817 +++++++++++ .../dialogs/wallet-derive-address-dialog.tsx | 618 ++++++++ .../wallet-keystore-connect-dialog.tsx | 294 ++++ .../dialogs/wallet-keystore-create-dialog.tsx | 326 +++++ .../dialogs/wallet-keystore-phrase-dialog.tsx | 294 ++++ .../react/components/dialogs/wallet-utils.ts | 98 ++ .../components/sentry-error-boundary.tsx | 80 + .../react/components/simple/asset-icon.tsx | 58 + .../react/components/simple/chain-icon.tsx | 24 + .../simple/quote-refresh-button.tsx | 166 +++ .../components/simple/swap-success-toast.tsx | 59 + .../react/components/simple/token-balance.tsx | 69 + .../components/simple/truncated-address.tsx | 39 + .../react/components/simple/wallet-icon.tsx | 27 + .../ui/src/react/components/ui/accordion.tsx | 64 + .../ui/src/react/components/ui/button.tsx | 92 ++ packages/ui/src/react/components/ui/card.tsx | 69 + .../ui/src/react/components/ui/checkbox.tsx | 34 + packages/ui/src/react/components/ui/chip.tsx | 39 + .../components/ui/collapsible-section.tsx | 31 + .../components/ui/color-picker-field.tsx | 160 ++ .../ui/src/react/components/ui/dialog.tsx | 126 ++ .../react/components/ui/font-family-field.tsx | 118 ++ packages/ui/src/react/components/ui/form.tsx | 169 +++ .../src/react/components/ui/input-field.tsx | 41 + packages/ui/src/react/components/ui/input.tsx | 24 + .../components/ui/json-textarea-field.tsx | 112 ++ packages/ui/src/react/components/ui/label.tsx | 22 + .../src/react/components/ui/radius-field.tsx | 111 ++ .../ui/src/react/components/ui/separator.tsx | 31 + packages/ui/src/react/components/ui/sheet.tsx | 138 ++ .../ui/src/react/components/ui/sidebar.tsx | 704 +++++++++ .../ui/src/react/components/ui/skeleton.tsx | 18 + .../react/components/ui/snippet-generator.tsx | 547 +++++++ .../ui/src/react/components/ui/sonner.tsx | 31 + .../react/components/ui/swapkit-loader.tsx | 48 + packages/ui/src/react/components/ui/tabs.tsx | 72 + .../ui/src/react/components/ui/textarea.tsx | 23 + .../src/react/components/ui/toggle-field.tsx | 56 + .../ui/src/react/components/ui/tooltip.tsx | 38 + .../components/ui/wallet-selection-field.tsx | 229 +++ .../react/controls/build-sdk-config-patch.ts | 89 ++ .../controls/developer-settings-section.tsx | 195 +++ packages/ui/src/react/controls/index.ts | 2 + .../controls/swapkit-widget-controls.tsx | 1221 ++++++++++++++++ .../use-swapkit-widget-controls-form.ts | 647 +++++++++ .../ui/src/react/create-swapkit-store.tsx | 55 + .../__tests__/use-dev-request-params.test.tsx | 187 +++ ...-filtered-sorted-assets-edge-cases.test.ts | 631 ++++++++ .../use-filtered-sorted-assets.test.ts | 394 +++++ .../src/react/hooks/use-debounced-effect.ts | 34 + .../src/react/hooks/use-dev-request-params.ts | 80 + .../react/hooks/use-filtered-sorted-assets.ts | 265 ++++ .../ui/src/react/hooks/use-media-query.ts | 23 + packages/ui/src/react/hooks/use-mobile.tsx | 19 + packages/ui/src/react/hooks/use-modal.tsx | 119 ++ packages/ui/src/react/hooks/use-swap-quote.ts | 431 ++++++ packages/ui/src/react/hooks/use-swap-to.ts | 70 + .../ui/src/react/hooks/use-token-prices.tsx | 68 + .../ui/src/react/hooks/use-token-search.ts | 138 ++ .../react/hooks/use-transaction-tracker.tsx | 176 +++ packages/ui/src/react/index.tsx | 18 + .../__tests__/decode-approve-spender.test.ts | 38 + .../wallet-config-requirements.test.ts | 33 + .../src/react/lib/aleo-shielded-deliveries.ts | 79 + packages/ui/src/react/lib/chain-catalog.ts | 219 +++ .../src/react/lib/decode-approve-spender.ts | 30 + .../ui/src/react/lib/experimental-wallets.ts | 42 + .../ui/src/react/lib/mobile-wallet-support.ts | 49 + packages/ui/src/react/lib/node-env.ts | 33 + .../react/lib/wallet-config-requirements.ts | 173 +++ packages/ui/src/react/minimal-tokens.ts | 131 ++ packages/ui/src/react/sanitize.ts | 117 ++ packages/ui/src/react/sentry.ts | 160 ++ .../react/stores/transaction-history-store.ts | 91 ++ .../ui/src/react/swapkit-config-context.tsx | 244 ++++ packages/ui/src/react/swapkit-context.tsx | 665 +++++++++ .../ui/src/react/swapkit-wallet-drawer.tsx | 393 +++++ .../react/swapkit-widget-web-component.tsx | 295 ++++ packages/ui/src/react/swapkit-widget.tsx | 1292 +++++++++++++++++ packages/ui/src/react/types.ts | 173 +++ packages/ui/src/style.d.ts | 1 + packages/ui/src/swapkit-types.ts | 24 + packages/ui/src/swapkit.css | 139 ++ packages/ui/src/utils.ts | 53 + packages/ui/tailwind.config.ts | 94 ++ packages/ui/tsconfig.json | 5 + packages/ui/vite.widget.config.ts | 124 ++ packages/wallet-extensions/package.json | 37 +- packages/wallet-hardware/package.json | 37 +- packages/wallet-mobile/package.json | 15 +- packages/wallets/package.json | 39 +- playgrounds/vite-lite/.env.example | 5 - playgrounds/vite-lite/.gitignore | 24 + playgrounds/vite-lite/CHANGELOG.md | 225 ++- playgrounds/vite-lite/Dockerfile | 32 + playgrounds/vite-lite/README.md | 14 + playgrounds/vite-lite/eslint.config.js | 20 + playgrounds/vite-lite/index.html | 2 +- playgrounds/vite-lite/nginx.conf | 120 ++ playgrounds/vite-lite/package.json | 34 +- playgrounds/vite-lite/public/widget.html | 27 + playgrounds/vite-lite/shims/randomfill.js | 91 ++ playgrounds/vite-lite/src/App.tsx | 112 +- playgrounds/vite-lite/src/index.css | 9 +- playgrounds/vite-lite/src/main.tsx | 23 +- playgrounds/vite-lite/vite.config.ts | 170 +-- tools/builder/dts.ts | 4 +- tools/builder/tsconfig.json | 1 + 155 files changed, 21669 insertions(+), 829 deletions(-) create mode 100644 .changeset/bump-swapkit-deps-20260821.md create mode 100644 .changeset/bump-swapkit-deps-20260824.md create mode 100644 .changeset/bump-swapkit-deps-20260826.md create mode 100644 .changeset/bump-swapkit-hip1-fix.md create mode 100644 .changeset/import-swapkit-ui.md create mode 100644 .changeset/output-picker-swapto-fallback.md create mode 100644 .changeset/widget-image-url-new-org.md create mode 100644 lefthook.yml create mode 100644 packages/ui/CHANGELOG.md create mode 100644 packages/ui/README.md create mode 100644 packages/ui/build.ts create mode 100644 packages/ui/bunfig.toml create mode 100644 packages/ui/components.json create mode 100644 packages/ui/package.json create mode 100644 packages/ui/shims/buffer-shim.js create mode 100644 packages/ui/shims/randomfill.js create mode 100644 packages/ui/src/index.ts create mode 100644 packages/ui/src/lib/utils.ts create mode 100644 packages/ui/src/react/__tests__/sentry-adversarial.test.ts create mode 100644 packages/ui/src/react/__tests__/sentry-error-boundary.test.tsx create mode 100644 packages/ui/src/react/__tests__/sentry.test.ts create mode 100644 packages/ui/src/react/__tests__/setup-dom.ts create mode 100644 packages/ui/src/react/assets/swapkit-logo-horizontal-white.tsx create mode 100644 packages/ui/src/react/assets/swapkit-logo.tsx create mode 100644 packages/ui/src/react/components/composable/chain-filter-popover.tsx create mode 100644 packages/ui/src/react/components/composable/chain-filter-sheet.tsx create mode 100644 packages/ui/src/react/components/composable/destination-address-input.tsx create mode 100644 packages/ui/src/react/components/composable/route-provider-parts.tsx create mode 100644 packages/ui/src/react/components/composable/swap-amount-input.tsx create mode 100644 packages/ui/src/react/components/composable/swap-asset-item.tsx create mode 100644 packages/ui/src/react/components/composable/swap-asset-select.tsx create mode 100644 packages/ui/src/react/components/composable/swap-input-chain-selector.tsx create mode 100644 packages/ui/src/react/components/composable/swap-quote-preview.tsx create mode 100644 packages/ui/src/react/components/composable/transaction-history-drawer.tsx create mode 100644 packages/ui/src/react/components/config.ts create mode 100644 packages/ui/src/react/components/dialogs/approval-confirm-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/swap-confirm-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/swap-quote-route-select-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/unshield-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/wallet-chain-select-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/wallet-chains-config.ts create mode 100644 packages/ui/src/react/components/dialogs/wallet-connect-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/wallet-derive-address-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/wallet-keystore-connect-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/wallet-keystore-create-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/wallet-keystore-phrase-dialog.tsx create mode 100644 packages/ui/src/react/components/dialogs/wallet-utils.ts create mode 100644 packages/ui/src/react/components/sentry-error-boundary.tsx create mode 100644 packages/ui/src/react/components/simple/asset-icon.tsx create mode 100644 packages/ui/src/react/components/simple/chain-icon.tsx create mode 100644 packages/ui/src/react/components/simple/quote-refresh-button.tsx create mode 100644 packages/ui/src/react/components/simple/swap-success-toast.tsx create mode 100644 packages/ui/src/react/components/simple/token-balance.tsx create mode 100644 packages/ui/src/react/components/simple/truncated-address.tsx create mode 100644 packages/ui/src/react/components/simple/wallet-icon.tsx create mode 100644 packages/ui/src/react/components/ui/accordion.tsx create mode 100644 packages/ui/src/react/components/ui/button.tsx create mode 100644 packages/ui/src/react/components/ui/card.tsx create mode 100644 packages/ui/src/react/components/ui/checkbox.tsx create mode 100644 packages/ui/src/react/components/ui/chip.tsx create mode 100644 packages/ui/src/react/components/ui/collapsible-section.tsx create mode 100644 packages/ui/src/react/components/ui/color-picker-field.tsx create mode 100644 packages/ui/src/react/components/ui/dialog.tsx create mode 100644 packages/ui/src/react/components/ui/font-family-field.tsx create mode 100644 packages/ui/src/react/components/ui/form.tsx create mode 100644 packages/ui/src/react/components/ui/input-field.tsx create mode 100644 packages/ui/src/react/components/ui/input.tsx create mode 100644 packages/ui/src/react/components/ui/json-textarea-field.tsx create mode 100644 packages/ui/src/react/components/ui/label.tsx create mode 100644 packages/ui/src/react/components/ui/radius-field.tsx create mode 100644 packages/ui/src/react/components/ui/separator.tsx create mode 100644 packages/ui/src/react/components/ui/sheet.tsx create mode 100644 packages/ui/src/react/components/ui/sidebar.tsx create mode 100644 packages/ui/src/react/components/ui/skeleton.tsx create mode 100644 packages/ui/src/react/components/ui/snippet-generator.tsx create mode 100644 packages/ui/src/react/components/ui/sonner.tsx create mode 100644 packages/ui/src/react/components/ui/swapkit-loader.tsx create mode 100644 packages/ui/src/react/components/ui/tabs.tsx create mode 100644 packages/ui/src/react/components/ui/textarea.tsx create mode 100644 packages/ui/src/react/components/ui/toggle-field.tsx create mode 100644 packages/ui/src/react/components/ui/tooltip.tsx create mode 100644 packages/ui/src/react/components/ui/wallet-selection-field.tsx create mode 100644 packages/ui/src/react/controls/build-sdk-config-patch.ts create mode 100644 packages/ui/src/react/controls/developer-settings-section.tsx create mode 100644 packages/ui/src/react/controls/index.ts create mode 100644 packages/ui/src/react/controls/swapkit-widget-controls.tsx create mode 100644 packages/ui/src/react/controls/use-swapkit-widget-controls-form.ts create mode 100644 packages/ui/src/react/create-swapkit-store.tsx create mode 100644 packages/ui/src/react/hooks/__tests__/use-dev-request-params.test.tsx create mode 100644 packages/ui/src/react/hooks/__tests__/use-filtered-sorted-assets-edge-cases.test.ts create mode 100644 packages/ui/src/react/hooks/__tests__/use-filtered-sorted-assets.test.ts create mode 100644 packages/ui/src/react/hooks/use-debounced-effect.ts create mode 100644 packages/ui/src/react/hooks/use-dev-request-params.ts create mode 100644 packages/ui/src/react/hooks/use-filtered-sorted-assets.ts create mode 100644 packages/ui/src/react/hooks/use-media-query.ts create mode 100644 packages/ui/src/react/hooks/use-mobile.tsx create mode 100644 packages/ui/src/react/hooks/use-modal.tsx create mode 100644 packages/ui/src/react/hooks/use-swap-quote.ts create mode 100644 packages/ui/src/react/hooks/use-swap-to.ts create mode 100644 packages/ui/src/react/hooks/use-token-prices.tsx create mode 100644 packages/ui/src/react/hooks/use-token-search.ts create mode 100644 packages/ui/src/react/hooks/use-transaction-tracker.tsx create mode 100644 packages/ui/src/react/index.tsx create mode 100644 packages/ui/src/react/lib/__tests__/decode-approve-spender.test.ts create mode 100644 packages/ui/src/react/lib/__tests__/wallet-config-requirements.test.ts create mode 100644 packages/ui/src/react/lib/aleo-shielded-deliveries.ts create mode 100644 packages/ui/src/react/lib/chain-catalog.ts create mode 100644 packages/ui/src/react/lib/decode-approve-spender.ts create mode 100644 packages/ui/src/react/lib/experimental-wallets.ts create mode 100644 packages/ui/src/react/lib/mobile-wallet-support.ts create mode 100644 packages/ui/src/react/lib/node-env.ts create mode 100644 packages/ui/src/react/lib/wallet-config-requirements.ts create mode 100644 packages/ui/src/react/minimal-tokens.ts create mode 100644 packages/ui/src/react/sanitize.ts create mode 100644 packages/ui/src/react/sentry.ts create mode 100644 packages/ui/src/react/stores/transaction-history-store.ts create mode 100644 packages/ui/src/react/swapkit-config-context.tsx create mode 100644 packages/ui/src/react/swapkit-context.tsx create mode 100644 packages/ui/src/react/swapkit-wallet-drawer.tsx create mode 100644 packages/ui/src/react/swapkit-widget-web-component.tsx create mode 100644 packages/ui/src/react/swapkit-widget.tsx create mode 100644 packages/ui/src/react/types.ts create mode 100644 packages/ui/src/style.d.ts create mode 100644 packages/ui/src/swapkit-types.ts create mode 100644 packages/ui/src/swapkit.css create mode 100644 packages/ui/src/utils.ts create mode 100644 packages/ui/tailwind.config.ts create mode 100644 packages/ui/tsconfig.json create mode 100644 packages/ui/vite.widget.config.ts delete mode 100644 playgrounds/vite-lite/.env.example create mode 100644 playgrounds/vite-lite/.gitignore create mode 100644 playgrounds/vite-lite/Dockerfile create mode 100644 playgrounds/vite-lite/README.md create mode 100644 playgrounds/vite-lite/eslint.config.js create mode 100644 playgrounds/vite-lite/nginx.conf create mode 100644 playgrounds/vite-lite/public/widget.html create mode 100644 playgrounds/vite-lite/shims/randomfill.js create mode 100644 tools/builder/tsconfig.json diff --git a/.changeset/bump-swapkit-deps-20260821.md b/.changeset/bump-swapkit-deps-20260821.md new file mode 100644 index 0000000..711fea6 --- /dev/null +++ b/.changeset/bump-swapkit-deps-20260821.md @@ -0,0 +1,5 @@ +--- +"@swapkit/ui": patch +--- + +Bump @swapkit dependencies to the SDK 5.0.0 release line (core/helpers/plugins/toolboxes/wallet-keystore 5.0.0, wallets 4.11.0), enabling Hypercore and HyperEVM end to end — keystore HYPE/HyperEVM derivation needs helpers 5.0.0. Root override pins @swapkit/cosmos-signer to 0.1.0 while the 0.2.0 that toolboxes 5.0.0 peers on is unpublished (sdk release-run npm E404); drop the override once 0.2.0 lands. diff --git a/.changeset/bump-swapkit-deps-20260824.md b/.changeset/bump-swapkit-deps-20260824.md new file mode 100644 index 0000000..1435799 --- /dev/null +++ b/.changeset/bump-swapkit-deps-20260824.md @@ -0,0 +1,8 @@ +--- +"@swapkit/ui": patch +--- + +Bump @swapkit dependencies to the latest releases: wallets 4.11.1 (cosmos-signer +0.2.0 resolution, test hygiene), sdk family 5.0.2 / toolboxes 5.1.1 (API-first +HyperCore getBalance with getBalanceFromChain fallback, corrected HyperEVM / +Hyperliquid chain names, spotMeta weiDecimals balance decimals). diff --git a/.changeset/bump-swapkit-deps-20260826.md b/.changeset/bump-swapkit-deps-20260826.md new file mode 100644 index 0000000..94a1a37 --- /dev/null +++ b/.changeset/bump-swapkit-deps-20260826.md @@ -0,0 +1,12 @@ +--- +"@swapkit/ui": patch +--- + +Bump @swapkit dependencies to the latest releases: wallets 4.12.0 (Noir Wallet +connector for Zcash, TON_CONNECT via the extensible WalletOption registry), +sdk family 5.0.4 / helpers 5.2.0 / toolboxes 5.2.0 / wallet-keystore 5.1.0 +(derivation paths now honour non-zero index and explicit path — index 0 without +a path is unchanged; refreshed token lists). Adapt to the literal-typed +WalletOption registry (explicit WalletOption annotations on wallet collections) +and cast around the stale mutable-tuple derivation-path params still baked into +the published wallet-hardware 4.9.33 typings. diff --git a/.changeset/bump-swapkit-hip1-fix.md b/.changeset/bump-swapkit-hip1-fix.md new file mode 100644 index 0000000..5872c3e --- /dev/null +++ b/.changeset/bump-swapkit-hip1-fix.md @@ -0,0 +1,5 @@ +--- +"@swapkit/ui": patch +--- + +Bump @swapkit packages to the plugins 5.0.5 line — accepts the canonical HyperCore USDC HIP-1 identifier the API emits since 2026-08-27, fixing `plugin_swapkit_invalid_transaction` on every HyperCore USDC payin (core 5.0.5, helpers 5.2.1, toolboxes 5.2.1, wallet-keystore 5.1.1, wallets 4.12.1). diff --git a/.changeset/import-swapkit-ui.md b/.changeset/import-swapkit-ui.md new file mode 100644 index 0000000..933ec7a --- /dev/null +++ b/.changeset/import-swapkit-ui.md @@ -0,0 +1,5 @@ +--- +"@swapkit/ui": patch +--- + +Move `@swapkit/ui` and the vite-lite playground into the `swapkit/wallets` monorepo. `@swapkit/ui` now consumes `@swapkit/wallets` via the workspace instead of the published package; releases of `@swapkit/ui` ship from this repo going forward. Deployment/infra config (terraform, cloudbuild) intentionally stays out of this repo — it lives in the devops repo. diff --git a/.changeset/output-picker-swapto-fallback.md b/.changeset/output-picker-swapto-fallback.md new file mode 100644 index 0000000..715ddda --- /dev/null +++ b/.changeset/output-picker-swapto-fallback.md @@ -0,0 +1,5 @@ +--- +"@swapkit/ui": patch +--- + +Output token picker falls back to the full asset catalog when swap-to pair data is unavailable (request disabled by missing credentials, failed, or not yet run) instead of rendering an empty "No assets found" list. Token search is enabled in the fallback state so the picker behaves like the input picker. [API-2945] diff --git a/.changeset/widget-image-url-new-org.md b/.changeset/widget-image-url-new-org.md new file mode 100644 index 0000000..3019e8e --- /dev/null +++ b/.changeset/widget-image-url-new-org.md @@ -0,0 +1,5 @@ +--- +"@swapkit/ui": patch +--- + +Point widget asset image URLs (tokens, chains, providers, wallets) at the new org buckets — sk-apiv2-token-list-swapkit (prod) and sk-apiv2-dev-token-list-swapkit (dev), matching the logoURI host the api serves. [API-2944] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0af0b9..e04d3dc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,4 +47,7 @@ jobs: - run: bun build:ci - run: bun lint - run: bun type-check:ci - - run: bun test + # packages/ui tests are excluded for now: they need the happy-dom preload + # from packages/ui/bunfig.toml (cwd-dependent) and several suites are + # red upstream in swapkit/ui. Run them locally with `bun --cwd=packages/ui test`. + - run: bun test packages/sdk packages/wallet-extensions packages/wallet-hardware packages/wallet-mobile packages/wallets tools diff --git a/.gitignore b/.gitignore index f7b06c0..355db27 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,17 @@ build/data.json .DS_Store .env .env.local +*.log +*.tmp.json +.aider* +.cursor/mcp.json +.mcp* +.claude +.claude-teams +AGENTS* +claude + +.idea/ +build/ +cache/ +coverage/ diff --git a/bun.lock b/bun.lock index e2d59ee..7fdb53b 100644 --- a/bun.lock +++ b/bun.lock @@ -11,9 +11,9 @@ "@biomejs/biome": "2.4.13", "@changesets/changelog-github": "0.6.0", "@changesets/cli": "2.31.0", - "@cosmjs/amino": "0.37.0", - "@cosmjs/proto-signing": "0.37.0", - "@cosmjs/stargate": "0.37.0", + "@cosmjs/amino": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", + "@cosmjs/stargate": "0.39.0", "@scure/bip32": "2.2.0", "@swapkit/core": "^5.0.5", "@swapkit/helpers": "^5.2.1", @@ -24,6 +24,10 @@ "@swapkit/wallet-keystore": "^5.1.1", "@types/bun": "1.3.13", "@types/node": "25.6.0", + "@types/react": "19.2.14", + "@types/react-dom": "19.2.3", + "caniuse-lite": "1.0.30001776", + "happy-dom": "^20.8.9", "ledger-bitcoin": "0.3.0", "typescript": "6.0.3", "zod": "4.4.3", @@ -31,9 +35,9 @@ }, "packages/sdk": { "name": "@swapkit/sdk", - "version": "4.6.49", + "version": "4.6.50", "dependencies": { - "@stricahq/typhonjs": "~3.0.1", + "@stricahq/typhonjs": "3.1.0", "@swapkit/core": "^5.0.5", "@swapkit/helpers": "^5.2.1", "@swapkit/plugins": "^5.0.5", @@ -42,21 +46,119 @@ "@swapkit/wallet-core": "^5.0.5", "@swapkit/wallet-keystore": "^5.1.1", "@swapkit/wallets": "workspace:*", - "cosmjs-types": "0.10.1", + "cosmjs-types": "0.11.0", + }, + }, + "packages/ui": { + "name": "@swapkit/ui", + "version": "0.23.0", + "dependencies": { + "@aptos-labs/ts-sdk": "1.34.0", + "@cosmjs/amino": "0.39.0", + "@cosmjs/crypto": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", + "@cosmjs/stargate": "0.39.0", + "@hookform/resolvers": "5.2.2", + "@mysten/sui": "1.44.0", + "@near-js/accounts": "2.5.1", + "@near-js/crypto": "2.5.1", + "@near-js/providers": "2.5.1", + "@near-js/signers": "2.5.1", + "@near-js/transactions": "2.5.1", + "@near-js/utils": "2.5.1", + "@noble/curves": "2.2.0", + "@noble/hashes": "2.2.0", + "@orbs-network/ton-access": "2.3.3", + "@polkadot/api": "15.10.2", + "@polkadot/keyring": "13.5.7", + "@polkadot/rpc-provider": "15.10.2", + "@polkadot/util": "13.5.7", + "@polkadot/util-crypto": "13.5.7", + "@radix-ui/react-accordion": "1.2.12", + "@radix-ui/react-alert-dialog": "1.1.15", + "@radix-ui/react-checkbox": "1.3.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-dropdown-menu": "2.1.16", + "@radix-ui/react-hover-card": "1.1.15", + "@radix-ui/react-label": "2.1.8", + "@radix-ui/react-menubar": "1.1.16", + "@radix-ui/react-select": "2.2.6", + "@radix-ui/react-separator": "1.1.8", + "@radix-ui/react-slot": "1.2.4", + "@radix-ui/react-switch": "1.2.6", + "@radix-ui/react-tabs": "1.1.13", + "@radix-ui/react-tooltip": "1.2.8", + "@radixdlt/babylon-gateway-api-sdk": "1.10.1", + "@radixdlt/radix-dapp-toolkit": "2.3.0", + "@scure/base": "2.2.0", + "@scure/bip32": "2.2.0", + "@scure/bip39": "2.2.0", + "@sentry/react": "9.27.0", + "@solana/spl-memo": "0.2.5", + "@solana/spl-token": "0.4.14", + "@solana/web3.js": "1.98.4", + "@stellar/stellar-sdk": "16.1.0", + "@stricahq/bip32ed25519": "1.1.2", + "@stricahq/cbors": "1.0.4", + "@stricahq/typhonjs": "3.1.0", + "@swapkit/core": "^5.0.5", + "@swapkit/helpers": "^5.2.1", + "@swapkit/plugins": "^5.0.5", + "@swapkit/toolboxes": "^5.2.1", + "@swapkit/wallet-keystore": "^5.1.1", + "@swapkit/wallets": "workspace:*", + "@ton/core": "0.63.1", + "@ton/crypto": "3.3.0", + "@ton/ton": "16.2.4", + "bignumber.js": "9.3.1", + "class-variance-authority": "0.7.1", + "clsx": "2.1.1", + "cosmjs-types": "0.11.0", + "crypto-browserify": "3.12.1", + "ethers": "6.16.0", + "highlight.js": "^11.11.1", + "lucide-react": "0.552.0", + "micro-key-producer": "0.8.6", + "micro-packed": "0.9.0", + "near-seed-phrase": "0.2.1", + "nuqs": "2.8.9", + "protobufjs": "8.0.3", + "react": "19.1.1", + "react-dom": "19.1.1", + "react-hook-form": "7.65.0", + "sonner": "2.0.7", + "starknet": "10.0.2", + "tailwind-merge": "2.6.0", + "tailwindcss": "3.4.18", + "tailwindcss-animate": "1.0.7", + "ts-pattern": "5.9.0", + "xrpl": "4.6.0", + "zod": "4.4.3", + "zustand": "5.0.13", + }, + "devDependencies": { + "@sentry/vite-plugin": "3.5.0", + "@vitejs/plugin-react": "5.1.0", + "tailwindcss-scoped-preflight": "3.5.9", + "terser": "5.46.0", + "vite": "7.1.10", + "vite-plugin-node-polyfills": "0.25.0", + "vite-plugin-wasm": "3.5.0", }, }, "packages/wallet-extensions": { "name": "@swapkit/wallet-extensions", - "version": "4.6.0", + "version": "4.6.1", "dependencies": { "@aptos-labs/ts-sdk": "~1.34.0", - "@cosmjs/amino": "~0.37.0", - "@cosmjs/proto-signing": "~0.37.0", - "@cosmjs/stargate": "~0.37.1", + "@cosmjs/amino": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", + "@cosmjs/stargate": "0.39.0", "@keplr-wallet/types": "0.13.24", "@near-js/accounts": "~2.5.1", - "@near-js/crypto": "~2.5.0", - "@near-js/transactions": "~2.5.0", + "@near-js/crypto": "2.5.1", + "@near-js/transactions": "2.5.1", "@scure/base": "~2.2.0", "@solana/web3.js": "~1.98.4", "@swapkit/helpers": "^5.2.1", @@ -64,36 +166,36 @@ "@swapkit/utxo-signer": "^3.0.0", "@swapkit/wallet-core": "^5.0.5", "@wallet-standard/app": "^1.1.1", - "cosmjs-types": "0.10.1", + "cosmjs-types": "0.11.0", "ethers": "^6.14.0", "sats-connect": "~1.0.0", - "ts-pattern": "^5.9.0", + "ts-pattern": "5.9.0", }, "devDependencies": { "@aptos-labs/ts-sdk": "1.34.0", - "@cosmjs/amino": "0.37.0", - "@cosmjs/proto-signing": "0.37.0", - "@cosmjs/stargate": "0.37.0", + "@cosmjs/amino": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", + "@cosmjs/stargate": "0.39.0", "@keplr-wallet/types": "0.13.24", "@near-js/accounts": "2.5.1", - "@near-js/crypto": "2.5.0", - "@near-js/transactions": "2.5.0", + "@near-js/crypto": "2.5.1", + "@near-js/transactions": "2.5.1", "@scure/base": "2.2.0", "@solana/web3.js": "1.98.4", "@wallet-standard/app": "1.1.1", - "cosmjs-types": "0.10.1", + "cosmjs-types": "0.11.0", "ethers": "6.16.0", "sats-connect": "1.0.0", - "ts-pattern": "^5.9.0", + "ts-pattern": "5.9.0", }, }, "packages/wallet-hardware": { "name": "@swapkit/wallet-hardware", - "version": "4.9.33", + "version": "4.9.34", "dependencies": { - "@cosmjs/amino": "~0.37.0", - "@cosmjs/crypto": "0.37.0", - "@cosmjs/proto-signing": "~0.37.0", + "@cosmjs/amino": "0.39.0", + "@cosmjs/crypto": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", "@keepkey/keepkey-sdk": "~0.2.62", "@ledgerhq/devices": "~8.10.0", "@ledgerhq/errors": "~6.29.0", @@ -108,8 +210,8 @@ "@ledgerhq/hw-transport-webhid": "~6.31.0", "@ledgerhq/hw-transport-webusb": "~6.30.0", "@ledgerhq/wallet-api-client": "~1.13.1", - "@near-js/crypto": "~2.5.0", - "@near-js/transactions": "~2.5.0", + "@near-js/crypto": "2.5.1", + "@near-js/transactions": "2.5.1", "@scure/base": "2.2.0", "@scure/bip32": "2.2.0", "@swapkit/helpers": "^5.2.1", @@ -117,17 +219,17 @@ "@swapkit/utxo-signer": "^3.0.0", "@swapkit/wallet-core": "^5.0.5", "@trezor/connect-web": "~9.7.3", - "cosmjs-types": "~0.10.1", + "cosmjs-types": "0.11.0", "ethers": "^6.14.0", "ledger-bitcoin": "~0.3.0", "ripple-binary-codec": "2.7.0", - "ts-pattern": "^5.9.0", + "ts-pattern": "5.9.0", "xrpl": "~4.6.0", }, "devDependencies": { - "@cosmjs/amino": "0.37.0", - "@cosmjs/crypto": "0.37.0", - "@cosmjs/proto-signing": "0.37.0", + "@cosmjs/amino": "0.39.0", + "@cosmjs/crypto": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", "@keepkey/keepkey-sdk": "0.2.62", "@ledgerhq/devices": "8.10.0", "@ledgerhq/errors": "6.29.0", @@ -142,22 +244,22 @@ "@ledgerhq/hw-transport-webhid": "6.31.0", "@ledgerhq/hw-transport-webusb": "6.30.0", "@ledgerhq/wallet-api-client": "1.13.1", - "@near-js/crypto": "2.5.0", - "@near-js/transactions": "2.5.0", + "@near-js/crypto": "2.5.1", + "@near-js/transactions": "2.5.1", "@scure/base": "2.2.0", "@scure/bip32": "2.2.0", "@trezor/connect-web": "9.7.3", - "cosmjs-types": "0.10.1", + "cosmjs-types": "0.11.0", "ethers": "6.16.0", "ledger-bitcoin": "0.3.0", "ripple-binary-codec": "2.7.0", - "ts-pattern": "^5.9.0", + "ts-pattern": "5.9.0", "xrpl": "4.6.0", }, }, "packages/wallet-mobile": { "name": "@swapkit/wallet-mobile", - "version": "4.3.24", + "version": "4.3.25", "dependencies": { "@swapkit/helpers": "^5.2.1", "@swapkit/toolboxes": "^5.2.1", @@ -166,23 +268,23 @@ }, "packages/wallets": { "name": "@swapkit/wallets", - "version": "4.12.0", + "version": "4.12.1", "dependencies": { "@coinbase/wallet-sdk": "~4.3.7", - "@cosmjs/amino": "~0.37.0", - "@cosmjs/proto-signing": "~0.37.0", + "@cosmjs/amino": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", "@metamask/connect-multichain": "~1.1.0", - "@near-js/transactions": "~2.5.0", + "@near-js/transactions": "2.5.1", "@near-wallet-selector/bitget-wallet": "~10.1.4", "@near-wallet-selector/core": "~10.1.4", "@near-wallet-selector/modal-ui-js": "~10.1.4", - "@noble/hashes": "~2.2.0", + "@noble/hashes": "2.2.0", "@passkeys/core": "~4.1.0", "@passkeys/react": "~3.0.1", "@radixdlt/babylon-gateway-api-sdk": "~1.10.0", "@radixdlt/radix-dapp-toolkit": "~2.3.0", "@scure/base": "~2.2.0", - "@scure/bip39": "~2.2.0", + "@scure/bip39": "2.2.0", "@solana/web3.js": "~1.98.4", "@swapkit/helpers": "^5.2.1", "@swapkit/toolboxes": "^5.2.1", @@ -194,18 +296,18 @@ "@tonconnect/ui": "~3.0.0", "@walletconnect/modal": "~2.7.0", "@walletconnect/sign-client": "~2.23.9", - "cosmjs-types": "~0.10.1", + "cosmjs-types": "0.11.0", "ethers": "^6.14.0", "sats-connect": "~1.0.0", - "ts-pattern": "^5.9.0", + "ts-pattern": "5.9.0", "xumm": "1.8.0", }, "devDependencies": { "@coinbase/wallet-sdk": "4.3.7", - "@cosmjs/amino": "0.37.0", - "@cosmjs/proto-signing": "0.37.0", + "@cosmjs/amino": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", "@metamask/connect-multichain": "1.1.0", - "@near-js/transactions": "2.5.0", + "@near-js/transactions": "2.5.1", "@near-wallet-selector/bitget-wallet": "10.1.4", "@near-wallet-selector/core": "10.1.4", "@near-wallet-selector/modal-ui-js": "10.1.4", @@ -221,38 +323,43 @@ "@walletconnect/modal": "2.7.0", "@walletconnect/sign-client": "2.23.9", "@walletconnect/types": "2.23.9", - "cosmjs-types": "0.10.1", + "cosmjs-types": "0.11.0", "ethers": "6.16.0", "pino-pretty": "13.1.3", "sats-connect": "1.0.0", - "ts-pattern": "^5.9.0", + "ts-pattern": "5.9.0", "xumm": "1.8.0", }, }, "playgrounds/vite-lite": { "name": "@internal/playground-vite-lite", - "version": "0.0.9", + "version": "0.0.32", "dependencies": { - "@noble/curves": "2.2.0", - "@noble/hashes": "~2.2.0", - "@swapkit/sdk": "workspace:*", - "@swapkit/ui": "0.23.0", - "@swapkit/wallet-extensions": "workspace:*", - "@swapkit/wallet-hardware": "workspace:*", - "@swapkit/wallet-mobile": "workspace:*", - "@swapkit/wallets": "workspace:*", - "hoist-non-react-statics": "3.3.2", + "@scure/base": "2.2.0", + "@sentry/react": "9.27.0", + "@swapkit/ui": "workspace:*", + "lodash-es": "4.17.23", "nuqs": "2.8.9", - "react": "19.2.5", - "react-dom": "19.2.5", + "react": "19.1.1", + "react-dom": "19.1.1", }, "devDependencies": { + "@eslint/js": "9.36.0", + "@types/node": "25.6.0", "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@vitejs/plugin-react": "5.1.0", + "eslint": "9.36.0", + "eslint-plugin-react-hooks": "5.2.0", + "eslint-plugin-react-refresh": "0.4.22", + "globals": "16.4.0", + "ledger-bitcoin": "0.3.0", "typescript": "6.0.3", + "typescript-eslint": "8.45.0", "vite": "7.1.10", + "vite-plugin-cjs-interop": "2.4.3", "vite-plugin-node-polyfills": "0.25.0", + "vite-plugin-wasm": "3.5.0", }, }, "tools/builder": { @@ -397,30 +504,36 @@ "@coinbase/wallet-sdk": ["@coinbase/wallet-sdk@4.3.7", "", { "dependencies": { "@noble/hashes": "^1.4.0", "clsx": "^1.2.1", "eventemitter3": "^5.0.1", "preact": "^10.24.2", "viem": "^2.27.2" } }, "sha512-z6e5XDw6EF06RqkeyEa+qD0dZ2ZbLci99vx3zwDY//XO8X7166tqKJrR2XlQnzVmtcUuJtCd5fCvr9Cu6zzX7w=="], - "@cosmjs/amino": ["@cosmjs/amino@0.37.0", "", { "dependencies": { "@cosmjs/crypto": "^0.37.0", "@cosmjs/encoding": "^0.37.0", "@cosmjs/math": "^0.37.0", "@cosmjs/utils": "^0.37.0" } }, "sha512-Qjg3vx0V907ICYr9wTFuF55+P2F7FuVuVdV8WsBJC6G9ekS5nbi7Z4+YsoJf3JEp5WApVgcX3HmAWZhziayxzw=="], + "@cosmjs/amino": ["@cosmjs/amino@0.39.0", "", { "dependencies": { "@cosmjs/crypto": "^0.39.0", "@cosmjs/encoding": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/utils": "^0.39.0" } }, "sha512-56WqsZ4xbdJE4KWJTPbw7hUzePflRxRLuxoBlUsa8qIiFumpzZRW0Ycb7IloEF8wAmdgsdfrG1hSJSBlqdFE7A=="], - "@cosmjs/crypto": ["@cosmjs/crypto@0.37.0", "", { "dependencies": { "@cosmjs/encoding": "^0.37.0", "@cosmjs/math": "^0.37.0", "@cosmjs/utils": "^0.37.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-rjnU7SEgNTUQAUotG686m7ahYSWgHh3J6n2JXoWoHJz0uVv4o4P+pbAFklyQ1PcPIR7u6LezCKDB5tP5Y5PeYQ=="], + "@cosmjs/crypto": ["@cosmjs/crypto@0.39.0", "", { "dependencies": { "@cosmjs/encoding": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/utils": "^0.39.0", "@noble/ciphers": "^2.1.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "@scure/bip39": "^2.0.1" } }, "sha512-ATRhSXN8w3fvUkj9xzLHwvzylDvvn4f3cC1CQwhQc2OxyzpEEFACS3wHS6iwdJJS99acV8dq+oVOYflUqI0brQ=="], - "@cosmjs/encoding": ["@cosmjs/encoding@0.37.1", "", { "dependencies": { "@scure/base": "^2.0.0", "base64-js": "^1.3.0", "readonly-date": "^1.0.0" } }, "sha512-ylV0RjaN1fdB539dUT7mxg+iwL7t0qmUF+xnqPDL0iwOWpHZIajMHMaOtNaqOvD+r/XekaT39rXZP01WDdbQIg=="], + "@cosmjs/encoding": ["@cosmjs/encoding@0.39.0", "", { "dependencies": { "@scure/base": "^2.0.0", "base64-js": "^1.3.0", "readonly-date-esm": "^2.0.0" } }, "sha512-+poEaeM8YjGNVtrHLQNWqkhEeDxapjrdpnPCT+JCRh8YNbeHEdftzZLCH5VCBSOtvo7PF0gK1B7sbQbBl6q5pQ=="], - "@cosmjs/json-rpc": ["@cosmjs/json-rpc@0.37.1", "", { "dependencies": { "@cosmjs/stream": "^0.37.1", "xstream": "^11.14.0" } }, "sha512-yaMtOSC2ObZFAINTj82vpotBqnNsOHZzBUYfaoLDEDNWF/3WitFzvlozWsVQFjAsYvn+TlCnj2g9mlRhFekaTg=="], + "@cosmjs/json-rpc": ["@cosmjs/json-rpc@0.39.0", "", { "dependencies": { "@cosmjs/stream": "^0.39.0", "xstream": "^11.14.0" } }, "sha512-slyo76IYkTuSxrzxvF1s1ScFPIGnW7PbNSx8lr++NzdyPluqe053+cSqsxLUioXb5qI9Nxny2fWxOK8isSn+cg=="], - "@cosmjs/math": ["@cosmjs/math@0.37.1", "", {}, "sha512-GJ+vObNquSz/xfLtdFCdqzype5KnCf1fWXqcBxUftnboGo8YfYf/OIUjrHBZuTapwrGVsGmBhhl9lGjiGoA64A=="], + "@cosmjs/math": ["@cosmjs/math@0.39.0", "", {}, "sha512-FSLy/oDF+BtOP/J60RsjL5W4MCKiCfBjSoeV5xj6qg2g8N884Ue853iuWanjqGkQJwkXCp+JbeK8Mv9j6AaYHw=="], - "@cosmjs/proto-signing": ["@cosmjs/proto-signing@0.37.0", "", { "dependencies": { "@cosmjs/amino": "^0.37.0", "@cosmjs/crypto": "^0.37.0", "@cosmjs/encoding": "^0.37.0", "@cosmjs/math": "^0.37.0", "@cosmjs/utils": "^0.37.0", "cosmjs-types": "^0.10.1" } }, "sha512-Ir/nPyrKIlFKsNAfUPVAfgNj0NBEHyryzIPJbCebTK9fBuAyQ3LXn+QfiFYR58/kVp63gEdIlADMQGGBS5ZF+w=="], + "@cosmjs/proto-signing": ["@cosmjs/proto-signing@0.39.0", "", { "dependencies": { "@cosmjs/amino": "^0.39.0", "@cosmjs/crypto": "^0.39.0", "@cosmjs/encoding": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/utils": "^0.39.0", "cosmjs-types": "^0.11.0" } }, "sha512-jthQ2PA092fvrbFaZRRKuHV7awOsayjDLIBACaGIblFj9yJCcrvhFp+8YV87ia990DjKmWJc3sstHvQZ3yK/EQ=="], - "@cosmjs/socket": ["@cosmjs/socket@0.37.1", "", { "dependencies": { "@cosmjs/stream": "^0.37.1", "isomorphic-ws": "^4.0.1", "ws": "^7", "xstream": "^11.14.0" } }, "sha512-slMETIDYPEXoAcLcX++eu6BXAHnpVQtP5wX00M6zSmeeEBKO9ND976uNBmiu7WLhfOkUEhKaP7m2YRNSlBxsOw=="], + "@cosmjs/socket": ["@cosmjs/socket@0.39.0", "", { "dependencies": { "@cosmjs/stream": "^0.39.0", "isomorphic-ws": "^4.0.1", "ws": "^7", "xstream": "^11.14.0" } }, "sha512-mvA+/ycMn7dnjjdooSPq516poFpSARRXhFhKjCXxGUmBZA+74vLDLbtD6VGzHd08A2JSZBSiAhVOZpjYqgV78A=="], - "@cosmjs/stargate": ["@cosmjs/stargate@0.37.0", "", { "dependencies": { "@cosmjs/amino": "^0.37.0", "@cosmjs/encoding": "^0.37.0", "@cosmjs/math": "^0.37.0", "@cosmjs/proto-signing": "^0.37.0", "@cosmjs/stream": "^0.37.0", "@cosmjs/tendermint-rpc": "^0.37.0", "@cosmjs/utils": "^0.37.0", "cosmjs-types": "^0.10.1" } }, "sha512-accDRW9QvMbWf6zrg/YHR/E8UCDr1q2gu8zUI7Hdn8KjhO4yO/+Ry119Lqr8FRNxCJ4DvLe8yhYDLk5FFKuQCQ=="], + "@cosmjs/stargate": ["@cosmjs/stargate@0.39.0", "", { "dependencies": { "@cosmjs/amino": "^0.39.0", "@cosmjs/encoding": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/proto-signing": "^0.39.0", "@cosmjs/stream": "^0.39.0", "@cosmjs/tendermint-rpc": "^0.39.0", "@cosmjs/utils": "^0.39.0", "cosmjs-types": "^0.11.0" } }, "sha512-dQtucU9czF2NUUbEKs19PMfv+EusDFKWHMVK6Hinytmpq9sdk5JUIln+g/8k+UjKcV4HPv6S0AywbhE+tl84kQ=="], - "@cosmjs/stream": ["@cosmjs/stream@0.37.1", "", { "dependencies": { "xstream": "^11.14.0" } }, "sha512-ILwIeROwpHvfAEXU5w7QgMivPEmubf3Hd+/+qyrfKdrvyVYmAggmNsMyi5pF5cmOPpf4JajS/DMN1CfO6Z+11A=="], + "@cosmjs/stream": ["@cosmjs/stream@0.39.0", "", { "dependencies": { "xstream": "^11.14.0" } }, "sha512-h56it+ku5F6nlO94VyVAyz3pQqYsGRJ8v+5Y5erXYlQ0Qmr+rLrlSMCiViFEMK9INRSilAypdI5hKPCzotiqRg=="], - "@cosmjs/tendermint-rpc": ["@cosmjs/tendermint-rpc@0.37.1", "", { "dependencies": { "@cosmjs/crypto": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/json-rpc": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/socket": "^0.37.1", "@cosmjs/stream": "^0.37.1", "@cosmjs/utils": "^0.37.1", "readonly-date": "^1.0.0", "xstream": "^11.14.0" } }, "sha512-OJi9CejXr7+CwCFfdRF116O2rWgjQKJGCrgG6MbQR6e2U+51a03/BQT8Uoj8/jJwU3LHtj6w7upCO8c4d5r+Tg=="], + "@cosmjs/tendermint-rpc": ["@cosmjs/tendermint-rpc@0.39.0", "", { "dependencies": { "@cosmjs/crypto": "^0.39.0", "@cosmjs/encoding": "^0.39.0", "@cosmjs/json-rpc": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/socket": "^0.39.0", "@cosmjs/stream": "^0.39.0", "@cosmjs/utils": "^0.39.0", "readonly-date-esm": "^2.0.0", "xstream": "^11.14.0" } }, "sha512-KowP/6P6Tx+OnGoimYnxuSBIfhB+vWqWER2pZpEIOHId8ZfcjQ9JS2F+Ah+WmZ9D+bKgn4pJ5ImAS13TeShIEw=="], - "@cosmjs/utils": ["@cosmjs/utils@0.37.1", "", {}, "sha512-WPDPtHRxhG1xR/3H7xtNtWGgpYdnYj4tTC+nmavuOcPRjyowCS7jZXoi+LWJVKHJoj/s/G/3hH7WW/dqbBygwA=="], + "@cosmjs/utils": ["@cosmjs/utils@0.39.0", "", {}, "sha512-h7fy7Tbcl9v8ABntp8+kqw2VmUus2HbnRJFyzTkM7byRktLtECHYNMsztwyl1rdHkzc8Nc2xs6K/56d7a+75aw=="], "@ecies/ciphers": ["@ecies/ciphers@0.2.6", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g=="], + "@emnapi/core": ["@emnapi/core@1.11.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" } }, "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g=="], + "@emurgo/cardano-serialization-lib-browser": ["@emurgo/cardano-serialization-lib-browser@13.2.1", "", {}, "sha512-7RfX1gI16Vj2DgCp/ZoXqyLAakWo6+X95ku/rYGbVzuS/1etrlSiJmdbmdm+eYmszMlGQjrtOJQeVLXoj4L/Ag=="], "@emurgo/cardano-serialization-lib-nodejs": ["@emurgo/cardano-serialization-lib-nodejs@13.2.0", "", {}, "sha512-Bz1zLGEqBQ0BVkqt1OgMxdBOE3BdUWUd7Ly9Ecr/aUwkA8AV1w1XzBMe4xblmJHnB1XXNlPH4SraXCvO+q0Mig=="], @@ -477,6 +590,24 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.10.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], + + "@eslint/config-array": ["@eslint/config-array@0.21.2", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.5" } }, "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.3.1", "", {}, "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA=="], + + "@eslint/core": ["@eslint/core@0.15.2", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.6", "", { "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.3.0", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" } }, "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA=="], + + "@eslint/js": ["@eslint/js@9.36.0", "", {}, "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.3.5", "", { "dependencies": { "@eslint/core": "^0.15.2", "levn": "^0.4.1" } }, "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w=="], + "@ethereumjs/common": ["@ethereumjs/common@10.1.3", "", { "dependencies": { "@ethereumjs/util": "^10.1.3", "eventemitter3": "^5.0.1" } }, "sha512-ECWwbc4s8Ji7U0mkfZP6gIDy1FxXe0ZyVOTt0adkztPQRzX2DbH2ul7a83DSS8qYAiG6//vVXMkP60TyYOnv8Q=="], "@ethereumjs/rlp": ["@ethereumjs/rlp@10.1.3", "", { "bin": { "rlp": "bin/rlp.cjs" } }, "sha512-d795YWkN6O8EJh/PgJ2zZKCdBMl8OlqkuVQESoidH666gaFtUuJ01jDtiuqfyOqTNcTdGhHi8LkQv1WEZzvZZw=="], @@ -539,6 +670,16 @@ "@hookform/resolvers": ["@hookform/resolvers@5.2.2", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA=="], + "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], + + "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="], + + "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + "@inquirer/external-editor": ["@inquirer/external-editor@1.0.3", "", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA=="], "@internal/github": ["@internal/github@workspace:tools/github"], @@ -555,6 +696,8 @@ "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], @@ -663,6 +806,8 @@ "@napi-rs/lzma-linux-x64-gnu": ["@napi-rs/lzma-linux-x64-gnu@1.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.3", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q=="], + "@near-js/accounts": ["@near-js/accounts@2.5.1", "", { "dependencies": { "@near-js/crypto": "2.5.1", "@near-js/keystores": "2.5.1", "@near-js/providers": "2.5.1", "@near-js/signers": "2.5.1", "@near-js/tokens": "2.5.1", "@near-js/transactions": "2.5.1", "@near-js/types": "2.5.1", "@near-js/utils": "2.5.1", "@noble/hashes": "1.7.1", "borsh": "1.0.0", "depd": "2.0.0", "is-my-json-valid": "^2.20.6", "lru_map": "0.4.1", "near-abi": "0.2.0" } }, "sha512-L4/Z9Ujwnz8/uvOExESP6h0t/plu4/0SFrL+UJBnfO5LObVwnJH2KG6MCLONy8rKh1FZHOlT9LPhtG/6nUrvOQ=="], "@near-js/crypto": ["@near-js/crypto@2.5.1", "", { "dependencies": { "@near-js/types": "2.5.1", "@near-js/utils": "2.5.1", "@noble/curves": "1.8.1", "@noble/hashes": "^1.7.1", "borsh": "1.0.0", "secp256k1": "5.0.1" } }, "sha512-Kb+bbnUrfvuzzed9hpLRpcIlCMOaQlw/7BxlZPCq8DggVaK1m0nKR1DHQs2cV0Q0WSKSk2UrFJho1dxeKL5alg=="], @@ -693,7 +838,7 @@ "@near-wallet-selector/modal-ui-js": ["@near-wallet-selector/modal-ui-js@10.1.4", "", { "dependencies": { "@near-wallet-selector/core": "10.1.4", "copy-to-clipboard": "3.3.3", "qrcode": "1.5.4" } }, "sha512-xVth1VpczZTWEjXDNCslznC+8gSJWeGs0BuM03EuNoe4iG3GWXjdvFtP/L2bx0KHb0XiISmAdBiFx3rGLzzMpw=="], - "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], + "@noble/ciphers": ["@noble/ciphers@2.3.0", "", {}, "sha512-Clu/xdfgVTf9o7ngLOURaxePwR0j8sjclKEtVij10/jGulwFsPWCvvRgG/XjUVf8Nei+jLG6uwyXzUTGY1DQrw=="], "@noble/curves": ["@noble/curves@2.2.0", "", { "dependencies": { "@noble/hashes": "2.2.0" } }, "sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ=="], @@ -711,6 +856,48 @@ "@orbs-network/ton-access": ["@orbs-network/ton-access@2.3.3", "", { "dependencies": { "isomorphic-fetch": "^3.0.0" } }, "sha512-b1miCPts7wBG9JKYgzXIRZQm/LMy5Uk1mNK8NzlcXHL3HRHJkkFbuYJGuj3IkWCiIicW3Ipp4sYnn3Fwo4oB0g=="], + "@oxc-parser/binding-android-arm-eabi": ["@oxc-parser/binding-android-arm-eabi@0.116.0", "", { "os": "android", "cpu": "arm" }, "sha512-AOET7YIOU3+ANO/3xQeRVGN5Xx6+JGXaIwlqkcHSfxJ/zzw2B6jb0YaLhX45SeRluKVTU8rka4N/tHtNoJjoCg=="], + + "@oxc-parser/binding-android-arm64": ["@oxc-parser/binding-android-arm64@0.116.0", "", { "os": "android", "cpu": "arm64" }, "sha512-yh0Zvth5cQ6XZkP3QF9MDrXf695zr5XxXq/wBQqpZb0uAgI9wpr98/Hx2RZITMfnNjkIq2VcyU44o3A0bdEmlQ=="], + + "@oxc-parser/binding-darwin-arm64": ["@oxc-parser/binding-darwin-arm64@0.116.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-plcTd/Jska55dToZz6XdRBPRVsj+asjD8QCpQFvt3Wj8pY+10D1pE53Mei3POAS/wSRSy7HiQ2twrm7H2A0CjA=="], + + "@oxc-parser/binding-darwin-x64": ["@oxc-parser/binding-darwin-x64@0.116.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-ahqcF3e3x5Z2ZepzXpZ8ugREdmxvBL+g1nQ0SxO11pIZfck6UtbOtwtdAAxnQXBHHtidu7lPcrBq1SEx26t1PQ=="], + + "@oxc-parser/binding-freebsd-x64": ["@oxc-parser/binding-freebsd-x64@0.116.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-yo2/LaSXtlzKBurvNbwun/sN/RJwW3XhbMr069FwNVtft7GBnaLLdPIz/sf47icxw/BPViEX6wFvzeD12mtrAg=="], + + "@oxc-parser/binding-linux-arm-gnueabihf": ["@oxc-parser/binding-linux-arm-gnueabihf@0.116.0", "", { "os": "linux", "cpu": "arm" }, "sha512-EiZeliIPPdFsuaPx8PzDMVijD/4YaUxO46/eYPk5raRocJqjjxOG6GAacQ8UrG3fbrgYjaEChfYL1e8DyE445A=="], + + "@oxc-parser/binding-linux-arm-musleabihf": ["@oxc-parser/binding-linux-arm-musleabihf@0.116.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Nf7hnKRYRSIgglQcLAqE2St4b/Yr6dh+Z7in8mxol065Knevw71XZAiV1fmPSojq6uKPLV9eoH/wFrgr4TnZXw=="], + + "@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.116.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-9SJI0S4Qggn3QHpT8Y1jtZceA0m4BlpvO3ne2Wxd33UdTHMmelAnrXryjWutHWQtjCzOwSnFBEoQAdNNyt1u3A=="], + + "@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.116.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-wMZ6//GI+q1JwO7G2OR51+eA5P8Gr3BobU8RAzCGJptvyGMkWb7KQ1E8s8naVZRr6bSGWAL2p3mCzKOxmEPmrA=="], + + "@oxc-parser/binding-linux-ppc64-gnu": ["@oxc-parser/binding-linux-ppc64-gnu@0.116.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-5BO0KCzTG2HZTnp3r6SCAOeCs/GwFBQJ1WAOG/ROfDf1fVVEy6hrtLKTLCuUMaamH38v+1+RVEmzRkzBj+rMDQ=="], + + "@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.116.0", "", { "os": "linux", "cpu": "none" }, "sha512-M24gYb/ocVMnLwnH2wY5sLt4sRBkAUHDmfiYtyUYdKTkfPOKtpopd5otsL/BPLnIhpMD8zby4uXVvw7BU0UIlw=="], + + "@oxc-parser/binding-linux-riscv64-musl": ["@oxc-parser/binding-linux-riscv64-musl@0.116.0", "", { "os": "linux", "cpu": "none" }, "sha512-LHLXTHCH0bdvGjlitwr1ngeh32GAgq9HYzQ5VAgt0k0UT84AS8AkXj9Spoa9l20fXkVgSvAKcCEkydi4Ol23Dw=="], + + "@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.116.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-VE+XsztuE5jdHvLIDIQMuyDpz5NJGq1Vx/8EXYF0sS/gehlv9GhDpGVWU0SCZ/LjzIy4io/Z0W84UudqufvP3g=="], + + "@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.116.0", "", { "os": "linux", "cpu": "x64" }, "sha512-rxUkauyjjCmgA7BoR63ogRGEtgubROnCm8AXE9ydg+p42jCGLLqG05mFcS2eC+FYyAU58ZFJNXXeqFW1iCyTGQ=="], + + "@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.116.0", "", { "os": "linux", "cpu": "x64" }, "sha512-0zoZlk9MmXe6oTgSh5lT1D51SDC1bfwC96JmE1amMFAPdEbJk5MFRisfTN9TFBpBigQua65842tjaxqMiorAYw=="], + + "@oxc-parser/binding-openharmony-arm64": ["@oxc-parser/binding-openharmony-arm64@0.116.0", "", { "os": "none", "cpu": "arm64" }, "sha512-PGS7Xqik77U9WMyW626gAD5A2rSN629UvyYJKAl/tgpT+KqZI4+56pJfExhv8IW/PpSHjYHwjmakwobLikz8ww=="], + + "@oxc-parser/binding-wasm32-wasi": ["@oxc-parser/binding-wasm32-wasi@0.116.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-lGNf/9PU8XxB4Gt1Gr1AKwSrjxGYa6os0PlrT4bpoQsfE3gaZonQTKwJyKhiQdgy7pBCI+ed1LB1NNib1FYULw=="], + + "@oxc-parser/binding-win32-arm64-msvc": ["@oxc-parser/binding-win32-arm64-msvc@0.116.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-tcsOHE31duBSRQXZ7NfdtjmMKZwQYlS00PwAMJ4w5oXs3iPCvisUuIXP7Ko4FzeOBTRvkd64btxtQ6cRM0Kwlw=="], + + "@oxc-parser/binding-win32-ia32-msvc": ["@oxc-parser/binding-win32-ia32-msvc@0.116.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-higCz/x+dOQ264YEk22hnu4RDqvjhfehjFORpxoh42QyUxsP6eIembYesBUu5ilALWo0HvRD+m89az2BSTwqpQ=="], + + "@oxc-parser/binding-win32-x64-msvc": ["@oxc-parser/binding-win32-x64-msvc@0.116.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Lg2SRmVHpGG85knDVLbv44r1bYn0OpIV0vg9jVmoEIpDj3Q4kwXuQ6MWVtuslwHR8o2CSiqdBeEn1n1URrs6Eg=="], + + "@oxc-project/types": ["@oxc-project/types@0.116.0", "", {}, "sha512-uOT8S1tlPmDckNxMNtIudN/yXpLdnhlJMX2oLS7cxCd7L0sUF09A/EbSVMWT3Y/iT44IwXCJSJfgfSxXAqWf9Q=="], + "@passkeys/core": ["@passkeys/core@4.1.0", "", { "dependencies": { "@solana/web3.js": "^1.98.2", "sats-connect": "1.0.0", "zod": "^3.23.8" } }, "sha512-aXhiTcTc6zrmmwBL190A4nTUB8Fl7h9FDip38PnreDPyhaueKi0PVWMxhSYGV/HMlMo7O7VB1QQWofyDv2QBiA=="], "@passkeys/react": ["@passkeys/react@3.0.1", "", { "peerDependencies": { "@passkeys/core": "^4.0.0", "react": "^18.2.0 || ^19.0.0", "react-dom": "^18.2.0 || ^19.0.0", "sats-connect": "1.0.0" } }, "sha512-6kVf4cRbKCszGzXc37SVkc77ytgfguB/+NAXawp0Qn8Nm5dzUHlq2jIPgaVeYTaBpdsXu574lfVbLfLFjFOOGQ=="], @@ -981,12 +1168,34 @@ "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@9.27.0", "", { "dependencies": { "@sentry-internal/replay": "9.27.0", "@sentry/core": "9.27.0" } }, "sha512-44rVSt3LCH6qePYRQrl4WUBwnkOk9dzinmnKmuwRksEdDOkVq5KBRhi/IDr7omwSpX8C+KrX5alfKhOx1cP0gQ=="], + "@sentry/babel-plugin-component-annotate": ["@sentry/babel-plugin-component-annotate@3.5.0", "", {}, "sha512-s2go8w03CDHbF9luFGtBHKJp4cSpsQzNVqgIa9Pfa4wnjipvrK6CxVT4icpLA3YO6kg5u622Yoa5GF3cJdippw=="], + "@sentry/browser": ["@sentry/browser@9.27.0", "", { "dependencies": { "@sentry-internal/browser-utils": "9.27.0", "@sentry-internal/feedback": "9.27.0", "@sentry-internal/replay": "9.27.0", "@sentry-internal/replay-canvas": "9.27.0", "@sentry/core": "9.27.0" } }, "sha512-geR3lhRJOmUQqi1WgovLSYcD/f66zYnctdnDEa7j1BW2XIB1nlTJn0mpYyAHghXKkUN/pBpp1Z+Jk0XlVwFYVg=="], + "@sentry/bundler-plugin-core": ["@sentry/bundler-plugin-core@3.5.0", "", { "dependencies": { "@babel/core": "^7.18.5", "@sentry/babel-plugin-component-annotate": "3.5.0", "@sentry/cli": "2.42.2", "dotenv": "^16.3.1", "find-up": "^5.0.0", "glob": "^9.3.2", "magic-string": "0.30.8", "unplugin": "1.0.1" } }, "sha512-zDzPrhJqAAy2VzV4g540qAZH4qxzisstK2+NIJPZUUKztWRWUV2cMHsyUtdctYgloGkLyGpZJBE3RE6dmP/xqQ=="], + + "@sentry/cli": ["@sentry/cli@2.42.2", "", { "dependencies": { "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.7", "progress": "^2.0.3", "proxy-from-env": "^1.1.0", "which": "^2.0.2" }, "optionalDependencies": { "@sentry/cli-darwin": "2.42.2", "@sentry/cli-linux-arm": "2.42.2", "@sentry/cli-linux-arm64": "2.42.2", "@sentry/cli-linux-i686": "2.42.2", "@sentry/cli-linux-x64": "2.42.2", "@sentry/cli-win32-i686": "2.42.2", "@sentry/cli-win32-x64": "2.42.2" }, "bin": { "sentry-cli": "bin/sentry-cli" } }, "sha512-spb7S/RUumCGyiSTg8DlrCX4bivCNmU/A1hcfkwuciTFGu8l5CDc2I6jJWWZw8/0enDGxuj5XujgXvU5tr4bxg=="], + + "@sentry/cli-darwin": ["@sentry/cli-darwin@2.42.2", "", { "os": "darwin" }, "sha512-GtJSuxER7Vrp1IpxdUyRZzcckzMnb4N5KTW7sbTwUiwqARRo+wxS+gczYrS8tdgtmXs5XYhzhs+t4d52ITHMIg=="], + + "@sentry/cli-linux-arm": ["@sentry/cli-linux-arm@2.42.2", "", { "os": [ "linux", "freebsd", ], "cpu": "arm" }, "sha512-7udCw+YL9lwq+9eL3WLspvnuG+k5Icg92YE7zsteTzWLwgPVzaxeZD2f8hwhsu+wmL+jNqbpCRmktPteh3i2mg=="], + + "@sentry/cli-linux-arm64": ["@sentry/cli-linux-arm64@2.42.2", "", { "os": [ "linux", "freebsd", ], "cpu": "arm64" }, "sha512-BOxzI7sgEU5Dhq3o4SblFXdE9zScpz6EXc5Zwr1UDZvzgXZGosUtKVc7d1LmkrHP8Q2o18HcDWtF3WvJRb5Zpw=="], + + "@sentry/cli-linux-i686": ["@sentry/cli-linux-i686@2.42.2", "", { "os": [ "linux", "freebsd", ], "cpu": "ia32" }, "sha512-Sw/dQp5ZPvKnq3/y7wIJyxTUJYPGoTX/YeMbDs8BzDlu9to2LWV3K3r7hE7W1Lpbaw4tSquUHiQjP5QHCOS7aQ=="], + + "@sentry/cli-linux-x64": ["@sentry/cli-linux-x64@2.42.2", "", { "os": [ "linux", "freebsd", ], "cpu": "x64" }, "sha512-mU4zUspAal6TIwlNLBV5oq6yYqiENnCWSxtSQVzWs0Jyq97wtqGNG9U+QrnwjJZ+ta/hvye9fvL2X25D/RxHQw=="], + + "@sentry/cli-win32-i686": ["@sentry/cli-win32-i686@2.42.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-iHvFHPGqgJMNqXJoQpqttfsv2GI3cGodeTq4aoVLU/BT3+hXzbV0x1VpvvEhncJkDgDicJpFLM8sEPHb3b8abw=="], + + "@sentry/cli-win32-x64": ["@sentry/cli-win32-x64@2.42.2", "", { "os": "win32", "cpu": "x64" }, "sha512-vPPGHjYoaGmfrU7xhfFxG7qlTBacroz5NdT+0FmDn6692D8IvpNXl1K+eV3Kag44ipJBBeR8g1HRJyx/F/9ACw=="], + "@sentry/core": ["@sentry/core@9.27.0", "", {}, "sha512-Zb2SSAdWXQjTem+sVWrrAq9L6YYfxyoTwtapaE6C6qZBR5C8Uak0wcYww8StaCFH7dDA/PSW+VxOwjNXocrQHQ=="], "@sentry/react": ["@sentry/react@9.27.0", "", { "dependencies": { "@sentry/browser": "9.27.0", "@sentry/core": "9.27.0", "hoist-non-react-statics": "^3.3.2" }, "peerDependencies": { "react": "^16.14.0 || 17.x || 18.x || 19.x" } }, "sha512-UT7iaGEwTqe06O4mgHfKGTRBHg+U0JSI/id+QxrOji6ksosOsSnSC3Vdq+gPs9pzCCFE+6+DkH6foYNNLIN0lw=="], + "@sentry/vite-plugin": ["@sentry/vite-plugin@3.5.0", "", { "dependencies": { "@sentry/bundler-plugin-core": "3.5.0", "unplugin": "1.0.1" } }, "sha512-jUnpTdpicG8wefamw7eNo2uO+Q3KCbOAiF76xH4gfNHSW6TN2hBfOtmLu7J+ive4c0Al3+NEHz19bIPR0lkwWg=="], + "@serenity-kit/noble-sodium": ["@serenity-kit/noble-sodium@0.2.3", "", { "dependencies": { "@noble/ciphers": "^2.1.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1" } }, "sha512-/IQuvJHJXg8M8SvrZexB/kI5vP0jkoMhNglFpm12h1SitJldncoOA0aF5asvtybJ8nldnkA/HwGEvEL7t+VIyw=="], "@sinclair/typebox": ["@sinclair/typebox@0.33.24", "", {}, "sha512-91up4t0BLjfkCZ4Ap/BcgaPrMaX6n0I2YRu+kc03xGhLy9G3N05nbTpnK8q7GXdv0PxwUoxi67A8o3Wr5U7j3w=="], @@ -1117,7 +1326,7 @@ "@stricahq/cbors": ["@stricahq/cbors@1.0.4", "", { "dependencies": { "bignumber.js": "^9.0.2", "buffer": "^6.0.3" } }, "sha512-0VmdpoYIi3lxgF10gOYvY0+BxD+u7/M6H6afmPWuc8Klg6Zpj9mRQnsw5zv6nYeflfIDvD0NjSQDkANe3psBxg=="], - "@stricahq/typhonjs": ["@stricahq/typhonjs@3.0.2", "", { "dependencies": { "@stricahq/cbors": "1.0.2", "bech32": "^2.0.0", "bignumber.js": "^9.0.1", "blakejs": "^1.2.1", "bs58": "^5.0.0", "buffer": "^6.0.3", "lodash": "^4.17.21" } }, "sha512-se4Hllwkxny4N7MDEDMcTpU2G4wl9I1Em4PsVhS9TCQl6L7YLfRoNw8fqC+qf5uU464Ju5mGxpynEIgKnMGkig=="], + "@stricahq/typhonjs": ["@stricahq/typhonjs@3.1.0", "", { "dependencies": { "@stricahq/cbors": "1.0.2", "bech32": "^2.0.0", "bignumber.js": "^9.0.1", "blakejs": "^1.2.1", "bs58": "^5.0.0", "buffer": "^6.0.3", "lodash": "^4.17.21" } }, "sha512-Eaw0qqNIz+6sA9zD/9pFCdQ+gNbCv8PKFMhXu4Vq6KSR1XsH40jNPFkrqgKaq8q+gbO569U1+tu41dHk40JNbw=="], "@substrate/connect": ["@substrate/connect@0.8.11", "", { "dependencies": { "@substrate/connect-extension-protocol": "^2.0.0", "@substrate/connect-known-chains": "^1.1.5", "@substrate/light-client-extension-helpers": "^1.0.0", "smoldot": "2.0.26" } }, "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw=="], @@ -1149,7 +1358,7 @@ "@swapkit/types": ["@swapkit/types@1.1.0", "", {}, "sha512-Sa2zCj1O1vDevAiCmKALiOmCGuxd+83SHVVZSZFPBA497obA6IrjvxrBJKMPTqp/EaIyQ5oMCWpWT5EmzaREpg=="], - "@swapkit/ui": ["@swapkit/ui@0.23.0", "", { "dependencies": { "@aptos-labs/ts-sdk": "1.34.0", "@cosmjs/amino": "0.39.0", "@cosmjs/crypto": "0.39.0", "@cosmjs/proto-signing": "0.39.0", "@cosmjs/stargate": "0.39.0", "@hookform/resolvers": "5.2.2", "@mysten/sui": "1.44.0", "@near-js/accounts": "2.5.1", "@near-js/crypto": "2.5.1", "@near-js/providers": "2.5.1", "@near-js/signers": "2.5.1", "@near-js/transactions": "2.5.1", "@near-js/utils": "2.5.1", "@noble/curves": "2.2.0", "@noble/hashes": "2.2.0", "@orbs-network/ton-access": "2.3.3", "@polkadot/api": "15.10.2", "@polkadot/keyring": "13.5.7", "@polkadot/rpc-provider": "15.10.2", "@polkadot/util": "13.5.7", "@polkadot/util-crypto": "13.5.7", "@radix-ui/react-accordion": "1.2.12", "@radix-ui/react-alert-dialog": "1.1.15", "@radix-ui/react-checkbox": "1.3.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-dropdown-menu": "2.1.16", "@radix-ui/react-hover-card": "1.1.15", "@radix-ui/react-label": "2.1.8", "@radix-ui/react-menubar": "1.1.16", "@radix-ui/react-select": "2.2.6", "@radix-ui/react-separator": "1.1.8", "@radix-ui/react-slot": "1.2.4", "@radix-ui/react-switch": "1.2.6", "@radix-ui/react-tabs": "1.1.13", "@radix-ui/react-tooltip": "1.2.8", "@radixdlt/babylon-gateway-api-sdk": "1.10.1", "@radixdlt/radix-dapp-toolkit": "2.3.0", "@scure/base": "2.2.0", "@scure/bip32": "2.2.0", "@scure/bip39": "2.2.0", "@sentry/react": "9.27.0", "@solana/spl-memo": "0.2.5", "@solana/spl-token": "0.4.14", "@solana/web3.js": "1.98.4", "@stellar/stellar-sdk": "16.1.0", "@stricahq/bip32ed25519": "1.1.2", "@stricahq/cbors": "1.0.4", "@stricahq/typhonjs": "3.1.0", "@swapkit/core": "4.6.4", "@swapkit/helpers": "4.20.1", "@swapkit/plugins": "4.7.4", "@swapkit/toolboxes": "4.28.0", "@swapkit/wallet-keystore": "4.5.5", "@swapkit/wallets": "4.10.0", "@ton/core": "0.63.1", "@ton/crypto": "3.3.0", "@ton/ton": "16.2.4", "bignumber.js": "9.3.1", "class-variance-authority": "0.7.1", "clsx": "2.1.1", "cosmjs-types": "0.11.0", "crypto-browserify": "3.12.1", "ethers": "6.16.0", "highlight.js": "^11.11.1", "lucide-react": "0.552.0", "micro-key-producer": "0.8.6", "micro-packed": "0.9.0", "near-seed-phrase": "0.2.1", "nuqs": "2.8.9", "protobufjs": "8.0.3", "react": "19.1.1", "react-dom": "19.1.1", "react-hook-form": "7.65.0", "sonner": "2.0.7", "starknet": "10.0.2", "tailwind-merge": "2.6.0", "tailwindcss": "3.4.18", "tailwindcss-animate": "1.0.7", "ts-pattern": "5.9.0", "xrpl": "4.6.0", "zod": "4.4.3", "zustand": "5.0.13" } }, "sha512-iUbOUr62iSz8/zc1IR8NZ796rfU6QeYMvRpc8CMW/fmutTIn2qrCmHCD2cfmURdHokiUEt3iulvB5hUyJyj6Qw=="], + "@swapkit/ui": ["@swapkit/ui@workspace:packages/ui"], "@swapkit/utxo-signer": ["@swapkit/utxo-signer@3.0.0", "", { "peerDependencies": { "@noble/curves": "2.2.0", "@noble/hashes": "2.2.0", "@scure/base": "2.2.0", "micro-packed": "0.9.0" } }, "sha512-naPyfACwNmQPtoaa4QNXuIsZQLPYNJKt0eFjWK3LatqIhw3BTAnd6Fxaha66Ec3xebn1wr0v1gbzAIkWPwYSHw=="], @@ -1227,6 +1436,8 @@ "@trezor/websocket-client": ["@trezor/websocket-client@1.3.0", "", { "dependencies": { "@trezor/utils": "9.5.0", "ws": "^8.18.0" }, "peerDependencies": { "tslib": "^2.6.2" } }, "sha512-9KQSaVc3NtmM6rFFj1e+9bM0C5mVKVidbnxlfzuBJu7G2YMRdIdLPcAXhvmRZjs40uzDuBeApK+p547kODz2ug=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], @@ -1273,7 +1484,29 @@ "@types/websocket": ["@types/websocket@1.0.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww=="], - "@types/ws": ["@types/ws@7.4.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww=="], + "@types/whatwg-mimetype": ["@types/whatwg-mimetype@3.0.2", "", {}, "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA=="], + + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.45.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/type-utils": "8.45.0", "@typescript-eslint/utils": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.45.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.45.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/types": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.45.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.45.0", "@typescript-eslint/types": "^8.45.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.45.0", "", { "dependencies": { "@typescript-eslint/types": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0" } }, "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.45.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.45.0", "", { "dependencies": { "@typescript-eslint/types": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0", "@typescript-eslint/utils": "8.45.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.45.0", "", {}, "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.45.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.45.0", "@typescript-eslint/tsconfig-utils": "8.45.0", "@typescript-eslint/types": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.45.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/types": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.45.0", "", { "dependencies": { "@typescript-eslint/types": "8.45.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag=="], "@vitejs/plugin-react": ["@vitejs/plugin-react@5.1.0", "", { "dependencies": { "@babel/core": "^7.28.4", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.43", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew=="], @@ -1335,13 +1568,17 @@ "abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], + "acorn": ["acorn@8.18.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + "aes-js": ["aes-js@4.0.0-beta.5", "", {}, "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q=="], "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - "ajv": ["ajv@8.11.2", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg=="], + "ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], @@ -1377,7 +1614,9 @@ "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "axios": ["axios@1.13.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA=="], + "axios": ["axios@1.18.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "base-x": ["base-x@4.0.1", "", {}, "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw=="], @@ -1431,6 +1670,8 @@ "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], + "brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="], + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], "brorand": ["brorand@1.1.0", "", {}, "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="], @@ -1459,6 +1700,10 @@ "buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="], + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "buffer-image-size": ["buffer-image-size@0.6.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ=="], + "buffer-xor": ["buffer-xor@1.0.3", "", {}, "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ=="], "bufferutil": ["bufferutil@4.1.0", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw=="], @@ -1479,11 +1724,13 @@ "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + "camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001809", "", {}, "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ=="], + "caniuse-lite": ["caniuse-lite@1.0.30001776", "", {}, "sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw=="], "cardinal": ["cardinal@2.1.1", "", { "dependencies": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" }, "bin": { "cdl": "./bin/cdl.js" } }, "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw=="], @@ -1493,7 +1740,7 @@ "centrifuge": ["centrifuge@5.7.1", "", { "dependencies": { "events": "^3.3.0", "protobufjs": "^7.6.0" } }, "sha512-Jq+T/cAulZVJPfRLfKHX2jcELdwt/LNG4wVx7vQlpaLQlNS+s/HVysRlTNYZ/FktP/NY4sKPI1qz2gh2IGamUA=="], - "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "chardet": ["chardet@2.2.0", "", {}, "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA=="], @@ -1505,7 +1752,7 @@ "classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="], - "cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], @@ -1521,7 +1768,9 @@ "comlink": ["comlink@4.4.2", "", {}, "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g=="], - "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], "console-browserify": ["console-browserify@1.2.0", "", {}, "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="], @@ -1537,7 +1786,7 @@ "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], - "cosmjs-types": ["cosmjs-types@0.10.1", "", {}, "sha512-CENXb4O5GN+VyB68HYXFT2SOhv126Z59631rZC56m8uMWa6/cSlFeai8BwZGT1NMepw0Ecf+U8XSOnBzZUWh9Q=="], + "cosmjs-types": ["cosmjs-types@0.11.0", "", {}, "sha512-kDSkgHpRTrg1413jCNehT3P21+EBxZWFMBr9JEzVfmPiNdtuwAoLAkCYo7c7i/pTakAwyHsXbxOg8kkD+AN33w=="], "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], @@ -1567,7 +1816,7 @@ "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], - "dataloader": ["dataloader@1.4.0", "", {}, "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw=="], + "dataloader": ["dataloader@2.2.3", "", {}, "sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA=="], "dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], @@ -1577,6 +1826,8 @@ "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], @@ -1641,6 +1892,8 @@ "enquirer": ["enquirer@2.4.1", "", { "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" } }, "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ=="], + "entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], @@ -1665,11 +1918,33 @@ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.36.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.36.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ=="], + + "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.2.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="], + + "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.22", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-atkAG6QaJMGoTLc4MDAP+rqZcfwQuTIh2IqHWFLy2TEjxr0MOK+5BSG4RzL2564AAPpZkDRsZXAUz68kjnU6Ug=="], + + "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + "esniff": ["esniff@2.0.1", "", { "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", "event-emitter": "^0.3.5", "type": "^2.7.2" } }, "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg=="], + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], "ethereum-cryptography": ["ethereum-cryptography@2.2.1", "", { "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", "@scure/bip32": "1.4.0", "@scure/bip39": "1.3.0" } }, "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg=="], @@ -1703,6 +1978,8 @@ "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], "fast-sha256": ["fast-sha256@1.3.0", "", {}, "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ=="], @@ -1721,11 +1998,17 @@ "fetch-ponyfill": ["fetch-ponyfill@7.1.0", "", { "dependencies": { "node-fetch": "~2.6.1" } }, "sha512-FhbbL55dj/qdVO3YNK7ZEkshvj3eQ7EuIGV2I6ic/2YiocvyWv+7jg2s4AyS0wdRU75s3tA8ZxI/xPigb0v5Aw=="], + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.4.4", "", {}, "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q=="], "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], @@ -1737,6 +2020,8 @@ "fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], @@ -1759,8 +2044,12 @@ "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "glob": ["glob@9.3.5", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="], + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + "globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="], + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], @@ -1773,10 +2062,16 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + "graphql": ["graphql@16.14.2", "", {}, "sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA=="], "h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], + "happy-dom": ["happy-dom@20.12.0", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "buffer-image-size": "^0.6.4", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.21.0" } }, "sha512-7uMYJu2SEwwL8vVcKp0C0lnt6d2LSGGe+T+oY79PiCJNNSgFpbxW8n5KuzpDQvrU4mt+fYiK1+Jy7Z2v39YR6g=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], @@ -1785,8 +2080,6 @@ "hash-base": ["hash-base@3.0.5", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" } }, "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg=="], - "hash-wasm": ["hash-wasm@4.12.0", "", {}, "sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ=="], - "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], @@ -1825,6 +2118,10 @@ "immer": ["immer@10.2.0", "", {}, "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw=="], + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], "int64-buffer": ["int64-buffer@1.1.1", "", {}, "sha512-xp/v0/im2q7n7ISFJXcYsr/aVsUdZKPUZS1uYtoM9I9Cfmm5YuAi7SQts2TrEXwAKIE0wyn3KxJbo35goJgvwQ=="], @@ -1909,7 +2206,9 @@ "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], @@ -1937,6 +2236,8 @@ "ledger-bitcoin": ["ledger-bitcoin@0.3.0", "", { "dependencies": { "@bitcoinerlab/descriptors": "^1.1.1", "@bitcoinerlab/secp256k1": "^1.2.0", "@ledgerhq/hw-transport": "^6.31.13", "bip32-path": "^0.4.2", "bitcoinjs-lib": "^6.1.7" } }, "sha512-gaTCdvnqFMvK6i6112MCcsNC+DDhUx1EKPDgqYoLswgwWLyb+EoZjXI0VxxkW9m7VszQdpOv210xNdohmQ6knw=="], + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], @@ -1947,15 +2248,19 @@ "lit-html": ["lit-html@3.3.3", "", { "dependencies": { "@types/trusted-types": "^2.0.2" } }, "sha512-el8M6jK2o3RXBnrSHX3ZKrsN8zEV63pSExTO1wYJz7QndGYZ8353e2a5PPX+qHe2aGayfnchQmkAojaWAREOIA=="], - "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], + "lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], + "lodash.clonedeep": ["lodash.clonedeep@4.5.0", "", {}, "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="], + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + "lodash.startcase": ["lodash.startcase@4.4.0", "", {}, "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg=="], - "long": ["long@4.0.0", "", {}, "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="], + "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], @@ -2001,8 +2306,12 @@ "minimalistic-crypto-utils": ["minimalistic-crypto-utils@1.0.1", "", {}, "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="], + "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "minipass": ["minipass@4.2.8", "", {}, "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="], + "mock-socket": ["mock-socket@9.3.1", "", {}, "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw=="], "motion": ["motion@10.16.2", "", { "dependencies": { "@motionone/animation": "^10.15.1", "@motionone/dom": "^10.16.2", "@motionone/svelte": "^10.16.2", "@motionone/types": "^10.15.1", "@motionone/utils": "^10.15.1", "@motionone/vue": "^10.16.2" } }, "sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ=="], @@ -2021,6 +2330,8 @@ "nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + "near-abi": ["near-abi@0.2.0", "", { "dependencies": { "@types/json-schema": "^7.0.11" } }, "sha512-kCwSf/3fraPU2zENK18sh+kKG4uKbEUEQdyWQkmW8ZofmLarObIz2+zAYjA1teDZLeMvEQew3UysnPDXgjneaA=="], "near-api-js": ["near-api-js@3.0.4", "", { "dependencies": { "@near-js/accounts": "1.0.4", "@near-js/crypto": "1.2.1", "@near-js/keystores": "0.0.9", "@near-js/keystores-browser": "0.0.9", "@near-js/keystores-node": "0.0.9", "@near-js/providers": "0.1.1", "@near-js/signers": "0.1.1", "@near-js/transactions": "1.1.2", "@near-js/types": "0.0.4", "@near-js/utils": "0.1.0", "@near-js/wallet-account": "1.1.1", "@noble/curves": "1.2.0", "ajv": "8.11.2", "ajv-formats": "2.1.1", "bn.js": "5.2.1", "borsh": "1.0.0", "depd": "2.0.0", "http-errors": "1.7.2", "near-abi": "0.1.1", "node-fetch": "2.6.7" } }, "sha512-qKWjnugoB7kSFhzZ5GXyH/eABspCQYWBmWnM4hpV5ctnQBt89LqgEu9yD1z4sa89MvUu8BuCxwb1m00BE8iofg=="], @@ -2039,7 +2350,7 @@ "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], - "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "node-fetch": ["node-fetch@2.6.7", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="], "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], @@ -2081,19 +2392,23 @@ "openapi-typescript-helpers": ["openapi-typescript-helpers@0.0.15", "", {}, "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw=="], + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + "os-browserify": ["os-browserify@0.3.0", "", {}, "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A=="], "outdent": ["outdent@0.5.0", "", {}, "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q=="], - "ox": ["ox@0.14.34", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-12seOIk7dv8eAoGQhcWaeKZxNz304IVcDvb9U5Y7JZAEVe21Nm1YMxLjhWah+su5BD4Omx4Zz0z5x3ij9M4GYQ=="], + "ox": ["ox@0.4.4", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-oJPEeCDs9iNiPs6J0rTx+Y0KGeCGyCAA3zo94yZhm8G5WpOxrwUtn2Ie/Y8IyARSqqY/j9JTKA3Fc1xs1DvFnw=="], + + "oxc-parser": ["oxc-parser@0.116.0", "", { "dependencies": { "@oxc-project/types": "^0.116.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm-eabi": "0.116.0", "@oxc-parser/binding-android-arm64": "0.116.0", "@oxc-parser/binding-darwin-arm64": "0.116.0", "@oxc-parser/binding-darwin-x64": "0.116.0", "@oxc-parser/binding-freebsd-x64": "0.116.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.116.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.116.0", "@oxc-parser/binding-linux-arm64-gnu": "0.116.0", "@oxc-parser/binding-linux-arm64-musl": "0.116.0", "@oxc-parser/binding-linux-ppc64-gnu": "0.116.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.116.0", "@oxc-parser/binding-linux-riscv64-musl": "0.116.0", "@oxc-parser/binding-linux-s390x-gnu": "0.116.0", "@oxc-parser/binding-linux-x64-gnu": "0.116.0", "@oxc-parser/binding-linux-x64-musl": "0.116.0", "@oxc-parser/binding-openharmony-arm64": "0.116.0", "@oxc-parser/binding-wasm32-wasi": "0.116.0", "@oxc-parser/binding-win32-arm64-msvc": "0.116.0", "@oxc-parser/binding-win32-ia32-msvc": "0.116.0", "@oxc-parser/binding-win32-x64-msvc": "0.116.0" } }, "sha512-ugEo6wwqaqCGcpi7GsLCwSkoD7gIXzvtdaTxE+mbrXFYazU5Q9YdpZdAj9z2b79i/xlv+uW2aAvyzGAlpUzhKQ=="], "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], "p-filter": ["p-filter@2.1.0", "", { "dependencies": { "p-map": "^2.0.0" } }, "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw=="], - "p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - "p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], "p-map": ["p-map@2.1.0", "", {}, "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="], @@ -2103,6 +2418,8 @@ "pako": ["pako@2.2.0", "", {}, "sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w=="], + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + "parse-asn1": ["parse-asn1@5.1.9", "", { "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", "evp_bytestokey": "^1.0.3", "pbkdf2": "^3.1.5", "safe-buffer": "^5.2.1" } }, "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg=="], "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], @@ -2113,6 +2430,8 @@ "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], "pbkdf2": ["pbkdf2@3.1.6", "", { "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "ripemd160": "^2.0.3", "safe-buffer": "^5.2.1", "sha.js": "^2.4.12", "to-buffer": "^1.2.2" } }, "sha512-BT6eelPB1EyGHo8pC0o9Bl6k6SYVhKO1jEbd3lcTrtr7XHdjP8BW1YpfCV3G9Kwkxgattk+S5q2/RvuttCsS1g=="], @@ -2159,6 +2478,8 @@ "preact": ["preact@10.29.8", "", { "peerDependencies": { "preact-render-to-string": ">=5" }, "optionalPeers": ["preact-render-to-string"] }, "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q=="], + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + "prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], @@ -2167,13 +2488,15 @@ "process-warning": ["process-warning@5.1.0", "", {}, "sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw=="], + "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], + "propagate": ["propagate@2.0.1", "", {}, "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag=="], "protobufjs": ["protobufjs@8.0.3", "", { "dependencies": { "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-LBYnMWkKLB8fE/ljROPDbCl7mgLSlI+oBe1fAAr5MTqFg4TIi0tYrVVurJvQggOjnUYMQtEZBjrej59ojMNTHQ=="], "proxy-compare": ["proxy-compare@2.5.1", "", {}, "sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA=="], - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], "public-encrypt": ["public-encrypt@4.0.3", "", { "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" } }, "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q=="], @@ -2207,9 +2530,9 @@ "randomfill": ["randomfill@1.0.4", "", { "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw=="], - "react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="], + "react": ["react@19.1.1", "", {}, "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="], - "react-dom": ["react-dom@19.2.5", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.5" } }, "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag=="], + "react-dom": ["react-dom@19.1.1", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.1" } }, "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw=="], "react-hook-form": ["react-hook-form@7.65.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-xtOzDz063WcXvGWaHgLNrNzlsdFgtUWcb32E6WFaGTd7kPZG3EeDusjdZfUsPwKCKVXy1ZlntifaHZ4l8pAsmw=="], @@ -2231,8 +2554,6 @@ "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], - "readonly-date": ["readonly-date@1.0.0", "", {}, "sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ=="], - "readonly-date-esm": ["readonly-date-esm@2.0.0", "", {}, "sha512-adlyzz144ofU22kjnnRIN0HPPqIbc5IZvMmMuVtEgMY4mKgNyKqOVb4Fa2GUzE2By4TEPOYoGqDoKRyqmeEuPQ=="], "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], @@ -2283,7 +2604,7 @@ "scale-ts": ["scale-ts@1.6.1", "", {}, "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g=="], - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], "secp256k1": ["secp256k1@5.0.1", "", { "dependencies": { "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" } }, "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA=="], @@ -2333,8 +2654,12 @@ "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + "spawndamnit": ["spawndamnit@3.0.1", "", { "dependencies": { "cross-spawn": "^7.0.5", "signal-exit": "^4.0.1" } }, "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg=="], "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], @@ -2367,6 +2692,8 @@ "superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], "symbol-observable": ["symbol-observable@2.0.3", "", {}, "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA=="], @@ -2377,8 +2704,12 @@ "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], + "tailwindcss-scoped-preflight": ["tailwindcss-scoped-preflight@3.5.9", "", { "peerDependencies": { "postcss": "^8", "tailwindcss": "^3" } }, "sha512-Q1lJssrJ2K96bCj8tocF/HCMy1NwMpFE30is3F4qFAAGfS9XYj6pz8JqfATSEnFhr7D6VAGLMn9apr/yqbSgTQ=="], + "term-size": ["term-size@2.2.1", "", {}, "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg=="], + "terser": ["terser@5.46.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg=="], + "text-encoding-utf-8": ["text-encoding-utf-8@1.0.2", "", {}, "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg=="], "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], @@ -2405,13 +2736,15 @@ "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], "ts-mixer": ["ts-mixer@6.0.4", "", {}, "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="], "ts-pattern": ["ts-pattern@5.9.0", "", {}, "sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg=="], - "tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "tslog": ["tslog@5.1.0", "", { "bin": { "tslog": "esm/subpaths/cli.js" } }, "sha512-g77ALovust2HNBX/63ePEJwetIeX0Vi/dlzqBO+ZAg+aERB54KMmaz/khNPxhFpaxKQ6RQj65sK6vIhj1SJgjQ=="], @@ -2423,6 +2756,8 @@ "type": ["type@2.7.3", "", {}, "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="], + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], "typedarray-to-buffer": ["typedarray-to-buffer@3.1.5", "", { "dependencies": { "is-typedarray": "^1.0.0" } }, "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q=="], @@ -2431,6 +2766,8 @@ "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], + "typescript-eslint": ["typescript-eslint@8.45.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.45.0", "@typescript-eslint/parser": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0", "@typescript-eslint/utils": "8.45.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg=="], + "ua-is-frozen": ["ua-is-frozen@0.1.2", "", {}, "sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw=="], "ua-parser-js": ["ua-parser-js@1.0.41", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug=="], @@ -2449,6 +2786,8 @@ "universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + "unplugin": ["unplugin@1.0.1", "", { "dependencies": { "acorn": "^8.8.1", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.5.0" } }, "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA=="], + "unstorage": ["unstorage@1.17.5", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.10", "lru-cache": "^11.2.7", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.3" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg=="], "update-browserslist-db": ["update-browserslist-db@1.3.1", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ=="], @@ -2473,9 +2812,9 @@ "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "uuid": ["uuid@11.1.1", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ=="], + "uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], - "valibot": ["valibot@0.42.1", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw=="], + "valibot": ["valibot@0.36.0", "", {}, "sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ=="], "valtio": ["valtio@1.11.2", "", { "dependencies": { "proxy-compare": "2.5.1", "use-sync-external-store": "1.2.0" }, "peerDependencies": { "@types/react": ">=16.8", "react": ">=16.8" }, "optionalPeers": ["@types/react", "react"] }, "sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw=="], @@ -2485,18 +2824,28 @@ "vite": ["vite@7.1.10", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA=="], + "vite-plugin-cjs-interop": ["vite-plugin-cjs-interop@2.4.3", "", { "dependencies": { "estree-walker": "^3.0.3", "magic-string": "^0.30.21", "minimatch": "^10.2.4", "oxc-parser": "^0.116.0" }, "peerDependencies": { "vite": "4 || 5 || 6 || 7" } }, "sha512-WH7DUJcuXU3r5DruH8yIyFPxPshgvOUEN4s2ZPohuzEGfQMkp/CmI5NilP7H+q31ut0y57x6dB8D3DAesCI+aQ=="], + "vite-plugin-node-polyfills": ["vite-plugin-node-polyfills@0.25.0", "", { "dependencies": { "@rollup/plugin-inject": "^5.0.5", "node-stdlib-browser": "^1.3.1" }, "peerDependencies": { "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-rHZ324W3LhfGPxWwQb2N048TThB6nVvnipsqBUJEzh3R9xeK9KI3si+GMQxCuAcpPJBVf0LpDtJ+beYzB3/chg=="], + "vite-plugin-wasm": ["vite-plugin-wasm@3.5.0", "", { "peerDependencies": { "vite": "^2 || ^3 || ^4 || ^5 || ^6 || ^7" } }, "sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ=="], + "vm-browserify": ["vm-browserify@1.1.2", "", {}, "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="], "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "webpack-sources": ["webpack-sources@3.5.1", "", {}, "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw=="], + + "webpack-virtual-modules": ["webpack-virtual-modules@0.5.0", "", {}, "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="], + "websocket": ["websocket@1.0.35", "", { "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", "es5-ext": "^0.10.63", "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" } }, "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q=="], "whatwg-fetch": ["whatwg-fetch@3.6.20", "", {}, "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="], + "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], @@ -2507,11 +2856,13 @@ "wif": ["wif@2.0.6", "", { "dependencies": { "bs58check": "<3.0.0" } }, "sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ=="], - "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "ws": ["ws@8.17.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="], + "ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], "xmlhttprequest-ssl": ["xmlhttprequest-ssl@4.0.0", "", {}, "sha512-b7DXzbCm8VWmII2mQiQHy5VG1L6YBUnNxuCooldWpMUXTwa08uXEz1q5Nv6wlULnSI5GiHuwBIq6pNJrqRh/8Q=="], @@ -2531,15 +2882,15 @@ "xumm-xapp-sdk": ["xumm-xapp-sdk@1.7.2", "", { "dependencies": { "debug": "^4.1.1", "events": "^3.3.0" } }, "sha512-kiJAbA+F4gRNRux1zZ+PYJNko9fI4Y8EFf/4EMX4tPcdQEQyXfIMPj7l6tgwSNRy2sISbw2jUYDMayL+ZFlmOg=="], - "y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], "yaeti": ["yaeti@0.0.6", "", {}, "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug=="], "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], + "yargs": ["yargs@17.7.3", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g=="], - "yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], @@ -2565,23 +2916,25 @@ "@bitcoinerlab/secp256k1/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], + "@changesets/get-github-info/dataloader": ["dataloader@1.4.0", "", {}, "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw=="], + + "@changesets/get-github-info/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "@coinbase/wallet-sdk/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], "@coinbase/wallet-sdk/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], - "@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@cosmjs/socket/ws": ["ws@7.5.13", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA=="], - "@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], + "@ecies/ciphers/@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], - "@cosmjs/proto-signing/@cosmjs/amino": ["@cosmjs/amino@0.37.1", "", { "dependencies": { "@cosmjs/crypto": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1" } }, "sha512-z3QSfw2S2kGbi5XBahOdAIu2Nnb7XiLgTOphZQoOJXJcTQemAG/wYHLJD9TcQ48SX+eDTJ4i7XRyJaIdg0ClcA=="], + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@cosmjs/proto-signing/@cosmjs/crypto": ["@cosmjs/crypto@0.37.1", "", { "dependencies": { "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-CdLOKQVJM422UegKpi4T/xkdNwvLZwJwSC7NyYi7tAyty0NzP67u+vNqar7Ok22ECkKLj6N9uRcIl4g62oZThA=="], + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - "@cosmjs/socket/ws": ["ws@7.5.13", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA=="], + "@eslint/eslintrc/strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "@cosmjs/tendermint-rpc/@cosmjs/crypto": ["@cosmjs/crypto@0.37.1", "", { "dependencies": { "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-CdLOKQVJM422UegKpi4T/xkdNwvLZwJwSC7NyYi7tAyty0NzP67u+vNqar7Ok22ECkKLj6N9uRcIl4g62oZThA=="], + "@keplr-wallet/types/long": ["long@4.0.0", "", {}, "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="], "@ledgerhq/devices/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], @@ -2603,6 +2956,8 @@ "@ledgerhq/hw-app-btc/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "@ledgerhq/hw-app-eth/axios": ["axios@1.13.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA=="], + "@ledgerhq/hw-app-eth/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], "@ledgerhq/hw-transport-mocker/@ledgerhq/hw-transport": ["@ledgerhq/hw-transport@6.35.7", "", { "dependencies": { "@ledgerhq/devices": "8.17.0", "@ledgerhq/errors": "^7.0.0", "@ledgerhq/logs": "^6.17.0", "events": "^3.3.0" } }, "sha512-vVhAVQ56+7A5FY5Mr09HY+bmf3H6TXpwsj+/xbadNkjl//e/YzTWfpXk4eBnj3hwk1PQ9Mn6pKFH0BHjS2BKlg=="], @@ -2617,16 +2972,22 @@ "@manypkg/find-root/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="], + "@manypkg/find-root/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "@manypkg/find-root/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], "@manypkg/get-packages/@changesets/types": ["@changesets/types@4.1.0", "", {}, "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw=="], "@manypkg/get-packages/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], - "@metamask/connect-multichain/ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], + "@metamask/connect-multichain/uuid": ["uuid@11.1.1", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ=="], + + "@metamask/mobile-wallet-protocol-core/uuid": ["uuid@11.1.1", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ=="], "@metamask/mobile-wallet-protocol-dapp-client/@metamask/utils": ["@metamask/utils@9.3.0", "", { "dependencies": { "@ethereumjs/tx": "^4.2.0", "@metamask/superstruct": "^3.1.0", "@noble/hashes": "^1.3.1", "@scure/base": "^1.1.3", "@types/debug": "^4.1.7", "debug": "^4.3.4", "pony-cause": "^2.1.10", "semver": "^7.5.4", "uuid": "^9.0.1" } }, "sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g=="], + "@metamask/mobile-wallet-protocol-dapp-client/uuid": ["uuid@11.1.1", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ=="], + "@metamask/utils/@ethereumjs/tx": ["@ethereumjs/tx@4.2.0", "", { "dependencies": { "@ethereumjs/common": "^3.2.0", "@ethereumjs/rlp": "^4.0.1", "@ethereumjs/util": "^8.1.0", "ethereum-cryptography": "^2.0.0" } }, "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw=="], "@metamask/utils/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], @@ -2635,20 +2996,6 @@ "@metamask/utils/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "@motionone/animation/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@motionone/dom/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@motionone/easing/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@motionone/generators/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@motionone/svelte/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@motionone/utils/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@motionone/vue/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@mysten/bcs/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], "@mysten/sui/@noble/curves": ["@noble/curves@1.9.4", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw=="], @@ -2661,8 +3008,6 @@ "@mysten/sui/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - "@mysten/sui/valibot": ["valibot@0.36.0", "", {}, "sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ=="], - "@mysten/utils/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], "@near-js/accounts/@noble/hashes": ["@noble/hashes@1.7.1", "", {}, "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ=="], @@ -2679,8 +3024,6 @@ "@near-js/keystores-node/@near-js/keystores": ["@near-js/keystores@0.0.9", "", { "dependencies": { "@near-js/crypto": "1.2.1", "@near-js/types": "0.0.4" } }, "sha512-j8ySgVEcm2Gg6zxkSdadNtPlIqhJZdPGfWWM3tPtEoowNS9snhwZn5NRFPrgmX0+MzpF7E091CRcY90MvRVhsg=="], - "@near-js/providers/node-fetch": ["node-fetch@2.6.7", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="], - "@near-js/signers/@noble/hashes": ["@noble/hashes@1.7.1", "", {}, "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ=="], "@near-js/transactions/@noble/hashes": ["@noble/hashes@1.7.1", "", {}, "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ=="], @@ -2713,80 +3056,18 @@ "@polkadot-api/substrate-bindings/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - "@polkadot/api/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/api-augment/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/api-base/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/api-derive/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/keyring/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/networks/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/rpc-augment/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/rpc-core/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/rpc-provider/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/types/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/types-augment/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/types-codec/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/types-create/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/types-known/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/types-support/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/util/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@polkadot/util-crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], "@polkadot/util-crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], "@polkadot/util-crypto/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - "@polkadot/util-crypto/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/wasm-bridge/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/wasm-crypto/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/wasm-crypto-asmjs/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/wasm-crypto-init/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/wasm-crypto-wasm/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/wasm-util/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/x-bigint/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@polkadot/x-fetch/@polkadot/x-global": ["@polkadot/x-global@13.5.9", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-zSRWvELHd3Q+bFkkI1h2cWIqLo1ETm+MxkNXLec3lB56iyq/MjWBxfXnAFFYFayvlEVneo7CLHcp+YTFd9aVSA=="], "@polkadot/x-fetch/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], - "@polkadot/x-fetch/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/x-global/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/x-randomvalues/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/x-textdecoder/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/x-textencoder/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@polkadot/x-ws/@polkadot/x-global": ["@polkadot/x-global@13.5.9", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-zSRWvELHd3Q+bFkkI1h2cWIqLo1ETm+MxkNXLec3lB56iyq/MjWBxfXnAFFYFayvlEVneo7CLHcp+YTFd9aVSA=="], - "@polkadot/x-ws/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@polkadot/x-ws/ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], - "@radix-ui/react-alert-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], "@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], @@ -2809,13 +3090,23 @@ "@radixdlt/radix-dapp-toolkit/rxjs": ["rxjs@7.8.1", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg=="], - "@radixdlt/radix-dapp-toolkit/uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], + "@radixdlt/radix-dapp-toolkit/valibot": ["valibot@0.42.1", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw=="], + + "@rollup/plugin-inject/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], "@scure/starknet/@noble/curves": ["@noble/curves@1.7.0", "", { "dependencies": { "@noble/hashes": "1.6.0" } }, "sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw=="], "@scure/starknet/@noble/hashes": ["@noble/hashes@1.6.1", "", {}, "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w=="], - "@serenity-kit/noble-sodium/@noble/ciphers": ["@noble/ciphers@2.3.0", "", {}, "sha512-Clu/xdfgVTf9o7ngLOURaxePwR0j8sjclKEtVij10/jGulwFsPWCvvRgG/XjUVf8Nei+jLG6uwyXzUTGY1DQrw=="], + "@sentry/bundler-plugin-core/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + + "@sentry/bundler-plugin-core/magic-string": ["magic-string@0.30.8", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ=="], + + "@sentry/cli/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "@sentry/cli/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], "@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": ">=5.3.3" } }, "sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug=="], @@ -2837,6 +3128,10 @@ "@solana/codecs-strings/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + "@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": ">=5.3.3" } }, "sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug=="], "@solana/kit/@solana/codecs": ["@solana/codecs@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-data-structures": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/options": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g=="], @@ -2849,8 +3144,6 @@ "@solana/rpc-api/@solana/codecs-strings": ["@solana/codecs-strings@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": ">=5.3.3" } }, "sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug=="], - "@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], - "@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": ">=5.3.3" } }, "sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug=="], "@solana/sysvars/@solana/codecs": ["@solana/codecs@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-data-structures": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/options": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g=="], @@ -2871,6 +3164,8 @@ "@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], + "@solana/web3.js/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "@stacks/common/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], "@stacks/network/cross-fetch": ["cross-fetch@3.2.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q=="], @@ -2879,78 +3174,24 @@ "@stacks/transactions/@noble/secp256k1": ["@noble/secp256k1@1.7.1", "", {}, "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw=="], - "@starknet-io/get-starknet-wallet-standard/ox": ["ox@0.4.4", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-oJPEeCDs9iNiPs6J0rTx+Y0KGeCGyCAA3zo94yZhm8G5WpOxrwUtn2Ie/Y8IyARSqqY/j9JTKA3Fc1xs1DvFnw=="], - "@stellar/stellar-base/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], "@stellar/stellar-base/@stellar/js-xdr": ["@stellar/js-xdr@3.1.2", "", {}, "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ=="], - "@stellar/stellar-sdk/axios": ["axios@1.18.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw=="], - "@stellar/stellar-sdk/bignumber.js": ["bignumber.js@11.1.5", "", {}, "sha512-6WmzCNtUnfKpbozq+hOgWaZMMzORmYBwF1xZScyoIX3QRYWeKTtxxwDOW5tIz7C9BdjkIYHGTcelCLkXg0mndw=="], - "@stricahq/typhonjs/@stricahq/cbors": ["@stricahq/cbors@1.0.2", "", { "dependencies": { "bignumber.js": "^9.0.2", "buffer": "^6.0.3" } }, "sha512-6ePsEiq7EGHA5IiPn9poA7sF5iXPqt30kKw3pjR/BhP7S+XHZNu/OPumESWnVl4AM+IEYC2x9eL+4qRPsTPVww=="], - - "@swapkit/core/@stricahq/typhonjs": ["@stricahq/typhonjs@3.1.0", "", { "dependencies": { "@stricahq/cbors": "1.0.2", "bech32": "^2.0.0", "bignumber.js": "^9.0.1", "blakejs": "^1.2.1", "bs58": "^5.0.0", "buffer": "^6.0.3", "lodash": "^4.17.21" } }, "sha512-Eaw0qqNIz+6sA9zD/9pFCdQ+gNbCv8PKFMhXu4Vq6KSR1XsH40jNPFkrqgKaq8q+gbO569U1+tu41dHk40JNbw=="], - - "@swapkit/core/cosmjs-types": ["cosmjs-types@0.11.0", "", {}, "sha512-kDSkgHpRTrg1413jCNehT3P21+EBxZWFMBr9JEzVfmPiNdtuwAoLAkCYo7c7i/pTakAwyHsXbxOg8kkD+AN33w=="], - - "@swapkit/cosmos-signer/cosmjs-types": ["cosmjs-types@0.11.0", "", {}, "sha512-kDSkgHpRTrg1413jCNehT3P21+EBxZWFMBr9JEzVfmPiNdtuwAoLAkCYo7c7i/pTakAwyHsXbxOg8kkD+AN33w=="], - - "@swapkit/toolboxes/@stricahq/typhonjs": ["@stricahq/typhonjs@3.1.0", "", { "dependencies": { "@stricahq/cbors": "1.0.2", "bech32": "^2.0.0", "bignumber.js": "^9.0.1", "blakejs": "^1.2.1", "bs58": "^5.0.0", "buffer": "^6.0.3", "lodash": "^4.17.21" } }, "sha512-Eaw0qqNIz+6sA9zD/9pFCdQ+gNbCv8PKFMhXu4Vq6KSR1XsH40jNPFkrqgKaq8q+gbO569U1+tu41dHk40JNbw=="], - - "@swapkit/toolboxes/cosmjs-types": ["cosmjs-types@0.11.0", "", {}, "sha512-kDSkgHpRTrg1413jCNehT3P21+EBxZWFMBr9JEzVfmPiNdtuwAoLAkCYo7c7i/pTakAwyHsXbxOg8kkD+AN33w=="], - - "@swapkit/ui/@cosmjs/amino": ["@cosmjs/amino@0.39.0", "", { "dependencies": { "@cosmjs/crypto": "^0.39.0", "@cosmjs/encoding": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/utils": "^0.39.0" } }, "sha512-56WqsZ4xbdJE4KWJTPbw7hUzePflRxRLuxoBlUsa8qIiFumpzZRW0Ycb7IloEF8wAmdgsdfrG1hSJSBlqdFE7A=="], - - "@swapkit/ui/@cosmjs/crypto": ["@cosmjs/crypto@0.39.0", "", { "dependencies": { "@cosmjs/encoding": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/utils": "^0.39.0", "@noble/ciphers": "^2.1.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "@scure/bip39": "^2.0.1" } }, "sha512-ATRhSXN8w3fvUkj9xzLHwvzylDvvn4f3cC1CQwhQc2OxyzpEEFACS3wHS6iwdJJS99acV8dq+oVOYflUqI0brQ=="], - - "@swapkit/ui/@cosmjs/proto-signing": ["@cosmjs/proto-signing@0.39.0", "", { "dependencies": { "@cosmjs/amino": "^0.39.0", "@cosmjs/crypto": "^0.39.0", "@cosmjs/encoding": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/utils": "^0.39.0", "cosmjs-types": "^0.11.0" } }, "sha512-jthQ2PA092fvrbFaZRRKuHV7awOsayjDLIBACaGIblFj9yJCcrvhFp+8YV87ia990DjKmWJc3sstHvQZ3yK/EQ=="], - - "@swapkit/ui/@cosmjs/stargate": ["@cosmjs/stargate@0.39.0", "", { "dependencies": { "@cosmjs/amino": "^0.39.0", "@cosmjs/encoding": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/proto-signing": "^0.39.0", "@cosmjs/stream": "^0.39.0", "@cosmjs/tendermint-rpc": "^0.39.0", "@cosmjs/utils": "^0.39.0", "cosmjs-types": "^0.11.0" } }, "sha512-dQtucU9czF2NUUbEKs19PMfv+EusDFKWHMVK6Hinytmpq9sdk5JUIln+g/8k+UjKcV4HPv6S0AywbhE+tl84kQ=="], - - "@swapkit/ui/@stricahq/typhonjs": ["@stricahq/typhonjs@3.1.0", "", { "dependencies": { "@stricahq/cbors": "1.0.2", "bech32": "^2.0.0", "bignumber.js": "^9.0.1", "blakejs": "^1.2.1", "bs58": "^5.0.0", "buffer": "^6.0.3", "lodash": "^4.17.21" } }, "sha512-Eaw0qqNIz+6sA9zD/9pFCdQ+gNbCv8PKFMhXu4Vq6KSR1XsH40jNPFkrqgKaq8q+gbO569U1+tu41dHk40JNbw=="], - - "@swapkit/ui/@swapkit/core": ["@swapkit/core@4.6.4", "", { "dependencies": { "@swapkit/helpers": "4.20.1", "@swapkit/plugins": "4.7.4", "@swapkit/toolboxes": "4.28.0", "@swapkit/wallet-core": "4.3.21" }, "peerDependencies": { "@stricahq/typhonjs": "3.1.0", "@ton/core": "0.63.1", "cosmjs-types": "0.11.0", "ts-pattern": "5.9.0" } }, "sha512-0nwvzI7dOy9uieMXcJzTGe6DuQRurmj6DKV4+A4nYT2Me0OOFnfgxSJ+O2Z3qa4Z/KyO47mfOuHKmSXLKEwlLg=="], - - "@swapkit/ui/@swapkit/helpers": ["@swapkit/helpers@4.20.1", "", { "dependencies": { "@swapkit/contracts": "4.1.5", "@swapkit/tokens": "4.4.1", "@swapkit/types": "0.12.0" }, "peerDependencies": { "@near-js/providers": "2.5.1", "ethers": "6.16.0", "ts-pattern": "5.9.0", "zod": "4.4.3", "zustand": "5.0.13" } }, "sha512-7AujBntn3HfCOR/wW8q2qDaYQnrdzoHS4HeGbmE9+WZ7nXAWhQ24cUWAouBLtR2Cjh4Uw8NLiYtPTSV347wcNw=="], - - "@swapkit/ui/@swapkit/plugins": ["@swapkit/plugins@4.7.4", "", { "dependencies": { "@swapkit/helpers": "4.20.1", "@swapkit/toolboxes": "4.28.0", "@swapkit/utxo-signer": "2.3.0" }, "peerDependencies": { "@mysten/sui": "2.17.0", "@near-js/transactions": "2.5.1", "@near-js/utils": "2.5.1", "@noble/hashes": "2.2.0", "@scure/base": "2.2.0", "@solana/web3.js": "1.98.4", "@stellar/stellar-sdk": "16.1.0", "ethers": "6.16.0", "ts-pattern": "5.9.0" } }, "sha512-dEBM8nrwLb99teLr2XNh8QNgQHGYjEzalHFV5Ldc5XWHU97rn5E9dKfRCEPLAv2RaosbDR6fGnsXbhmgn4t/Gw=="], - - "@swapkit/ui/@swapkit/toolboxes": ["@swapkit/toolboxes@4.28.0", "", { "dependencies": { "@swapkit/helpers": "4.20.1", "@swapkit/utxo-signer": "2.3.0" }, "peerDependencies": { "@aptos-labs/ts-sdk": "7.0.1", "@cosmjs/amino": "0.39.0", "@cosmjs/crypto": "0.39.0", "@cosmjs/proto-signing": "0.39.0", "@cosmjs/stargate": "0.39.0", "@mysten/sui": "2.17.0", "@near-js/accounts": "2.5.1", "@near-js/crypto": "2.5.1", "@near-js/providers": "2.5.1", "@near-js/signers": "2.5.1", "@near-js/transactions": "2.5.1", "@near-js/utils": "2.5.1", "@noble/curves": "2.2.0", "@noble/hashes": "2.2.0", "@orbs-network/ton-access": "2.3.3", "@polkadot/api": "16.5.6", "@polkadot/keyring": "14.0.3", "@polkadot/rpc-provider": "16.5.6", "@polkadot/util": "14.0.3", "@polkadot/util-crypto": "14.0.3", "@provablehq/sdk": "0.11.3", "@radixdlt/babylon-gateway-api-sdk": "1.10.1", "@radixdlt/radix-dapp-toolkit": "2.3.0", "@scure/base": "2.2.0", "@scure/bip32": "2.2.0", "@scure/bip39": "2.2.0", "@solana/spl-memo": "0.2.5", "@solana/spl-token": "0.4.14", "@solana/web3.js": "1.98.4", "@stellar/stellar-sdk": "16.1.0", "@stricahq/bip32ed25519": "1.1.2", "@stricahq/cbors": "1.0.4", "@stricahq/typhonjs": "3.1.0", "@ton/core": "0.63.1", "@ton/crypto": "3.3.0", "@ton/ton": "16.2.4", "bignumber.js": "9.3.1", "cosmjs-types": "0.11.0", "ethers": "6.16.0", "micro-key-producer": "0.8.6", "near-seed-phrase": "0.2.1", "protobufjs": "8.0.3", "ripple-address-codec": "5.0.1", "starknet": "10.0.2", "ts-pattern": "5.9.0", "xrpl": "4.6.0" } }, "sha512-ximfqTV82dmcc+knKmnB1hLqVe3JHvwrcqhyNh7ysrLMkfRxnA8TpFr6yR/+fjD7zZWVekG+1uKuebDsRbd5Ww=="], - - "@swapkit/ui/@swapkit/wallet-keystore": ["@swapkit/wallet-keystore@4.5.5", "", { "dependencies": { "@swapkit/helpers": "4.20.1", "@swapkit/toolboxes": "4.28.0", "@swapkit/wallet-core": "4.3.21" }, "peerDependencies": { "@noble/hashes": "2.2.0", "@scure/bip39": "2.2.0" } }, "sha512-wus6HgRG/zUYxOFTTzVnUZk5FATH0mwYmC3o+lEQ5ntVDUHn2xLiVauWc7Si+P+AAA9SDTG41Cnru/vHB/YJOw=="], - - "@swapkit/ui/cosmjs-types": ["cosmjs-types@0.11.0", "", {}, "sha512-kDSkgHpRTrg1413jCNehT3P21+EBxZWFMBr9JEzVfmPiNdtuwAoLAkCYo7c7i/pTakAwyHsXbxOg8kkD+AN33w=="], - - "@swapkit/ui/react": ["react@19.1.1", "", {}, "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="], - - "@swapkit/ui/react-dom": ["react-dom@19.1.1", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.1" } }, "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw=="], - - "@swapkit/wallet-extensions/@cosmjs/amino": ["@cosmjs/amino@0.37.1", "", { "dependencies": { "@cosmjs/crypto": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1" } }, "sha512-z3QSfw2S2kGbi5XBahOdAIu2Nnb7XiLgTOphZQoOJXJcTQemAG/wYHLJD9TcQ48SX+eDTJ4i7XRyJaIdg0ClcA=="], - - "@swapkit/wallet-extensions/@cosmjs/proto-signing": ["@cosmjs/proto-signing@0.37.1", "", { "dependencies": { "@cosmjs/amino": "^0.37.1", "@cosmjs/crypto": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "cosmjs-types": "^0.10.1" } }, "sha512-cCUfejHOfjx6L/noF9QnXIy4dKoTKl56NFIqz2cizx+kZKszdL0yOtQlu0dD9nR+uMafRHU7aok6v5HH4RZIDw=="], + "@stellar/stellar-sdk/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], - "@swapkit/wallet-extensions/@cosmjs/stargate": ["@cosmjs/stargate@0.37.1", "", { "dependencies": { "@cosmjs/amino": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/proto-signing": "^0.37.1", "@cosmjs/stream": "^0.37.1", "@cosmjs/tendermint-rpc": "^0.37.1", "@cosmjs/utils": "^0.37.1", "cosmjs-types": "^0.10.1" } }, "sha512-nQgaJB7A81cRYtmDrcIySq8hbd+QLXJTGFEs6R1xMdxascaABX0x86nS44ALk+EZojQQRnwupOsw1dKLlQmIFg=="], - - "@swapkit/wallet-hardware/@cosmjs/amino": ["@cosmjs/amino@0.37.1", "", { "dependencies": { "@cosmjs/crypto": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1" } }, "sha512-z3QSfw2S2kGbi5XBahOdAIu2Nnb7XiLgTOphZQoOJXJcTQemAG/wYHLJD9TcQ48SX+eDTJ4i7XRyJaIdg0ClcA=="], - - "@swapkit/wallet-hardware/@cosmjs/proto-signing": ["@cosmjs/proto-signing@0.37.1", "", { "dependencies": { "@cosmjs/amino": "^0.37.1", "@cosmjs/crypto": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "cosmjs-types": "^0.10.1" } }, "sha512-cCUfejHOfjx6L/noF9QnXIy4dKoTKl56NFIqz2cizx+kZKszdL0yOtQlu0dD9nR+uMafRHU7aok6v5HH4RZIDw=="], - - "@swapkit/wallets/@cosmjs/amino": ["@cosmjs/amino@0.37.1", "", { "dependencies": { "@cosmjs/crypto": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1" } }, "sha512-z3QSfw2S2kGbi5XBahOdAIu2Nnb7XiLgTOphZQoOJXJcTQemAG/wYHLJD9TcQ48SX+eDTJ4i7XRyJaIdg0ClcA=="], - - "@swapkit/wallets/@cosmjs/proto-signing": ["@cosmjs/proto-signing@0.37.1", "", { "dependencies": { "@cosmjs/amino": "^0.37.1", "@cosmjs/crypto": "^0.37.1", "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "cosmjs-types": "^0.10.1" } }, "sha512-cCUfejHOfjx6L/noF9QnXIy4dKoTKl56NFIqz2cizx+kZKszdL0yOtQlu0dD9nR+uMafRHU7aok6v5HH4RZIDw=="], - - "@swc/helpers/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "@stricahq/typhonjs/@stricahq/cbors": ["@stricahq/cbors@1.0.2", "", { "dependencies": { "bignumber.js": "^9.0.2", "buffer": "^6.0.3" } }, "sha512-6ePsEiq7EGHA5IiPn9poA7sF5iXPqt30kKw3pjR/BhP7S+XHZNu/OPumESWnVl4AM+IEYC2x9eL+4qRPsTPVww=="], "@ton/ton/axios": ["axios@1.15.0", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^2.1.0" } }, "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q=="], - "@ton/ton/dataloader": ["dataloader@2.2.3", "", {}, "sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA=="], - "@ton/ton/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@tonconnect/isomorphic-eventsource/eventsource": ["eventsource@2.0.2", "", {}, "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA=="], + "@tonconnect/isomorphic-fetch/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "@trezor/blockchain-link/@stellar/stellar-sdk": ["@stellar/stellar-sdk@14.2.0", "", { "dependencies": { "@stellar/stellar-base": "^14.0.1", "axios": "^1.12.2", "bignumber.js": "^9.3.1", "eventsource": "^2.0.2", "feaxios": "^0.0.23", "randombytes": "^2.1.0", "toml": "^3.0.0", "urijs": "^1.19.1" } }, "sha512-7nh2ogzLRMhfkIC0fGjn1LHUzk3jqVw8tjAuTt5ADWfL9CSGBL18ILucE9igz2L/RU2AZgeAvhujAnW91Ut/oQ=="], "@trezor/blockchain-link/crypto-browserify": ["crypto-browserify@3.12.0", "", { "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", "create-hash": "^1.1.0", "create-hmac": "^1.1.0", "diffie-hellman": "^5.0.0", "inherits": "^2.0.1", "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" } }, "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg=="], @@ -2989,7 +3230,9 @@ "@trezor/utxo-lib/wif": ["wif@5.0.0", "", { "dependencies": { "bs58check": "^4.0.0" } }, "sha512-iFzrC/9ne740qFbNjTZ2FciSRJlHIXoxqk/Y5EnE08QOXu1WjJyCCswwDTYbohAOEnlCtLaAAQBhyaLRFh2hMA=="], - "@trezor/websocket-client/ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.8", "", {}, "sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], "@walletconnect/environment/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], @@ -3011,6 +3254,8 @@ "@walletconnect/time/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + "@walletconnect/utils/@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], + "@walletconnect/utils/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], "@walletconnect/utils/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], @@ -3025,20 +3270,14 @@ "@xrplf/isomorphic/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], - "@xrplf/isomorphic/ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], - "abi-wan-kanabi/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], - "abi-wan-kanabi/yargs": ["yargs@17.7.3", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g=="], + "ajv-formats/ajv": ["ajv@8.11.2", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg=="], "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], - "aria-hidden/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "asn1.js/bn.js": ["bn.js@4.12.5", "", {}, "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ=="], - "async-mutex/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "bip32/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], "bip32/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], @@ -3055,6 +3294,8 @@ "browserify-zlib/pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + "browserslist/caniuse-lite": ["caniuse-lite@1.0.30001809", "", {}, "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ=="], + "bs58check/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], "c32check/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], @@ -3067,8 +3308,12 @@ "create-ecdh/bn.js": ["bn.js@4.12.5", "", {}, "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ=="], + "cross-fetch/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "diffie-hellman/bn.js": ["bn.js@4.12.5", "", {}, "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ=="], + "eciesjs/@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], + "eciesjs/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], "eciesjs/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], @@ -3089,17 +3334,25 @@ "ethers/@types/node": ["@types/node@22.7.5", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ=="], + "ethers/tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="], + + "ethers/ws": ["ws@8.17.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="], + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "fetch-ponyfill/node-fetch": ["node-fetch@2.6.7", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="], + "glob/minimatch": ["minimatch@8.0.7", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg=="], "http-errors/depd": ["depd@1.1.2", "", {}, "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="], "http-errors/inherits": ["inherits@2.0.3", "", {}, "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="], + "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "isomorphic-fetch/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "jayson/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="], - "jayson/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + "jayson/@types/ws": ["@types/ws@7.4.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww=="], "jayson/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], @@ -3109,8 +3362,6 @@ "keccak/node-addon-api": ["node-addon-api@2.0.2", "", {}, "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="], - "micro-key-producer/@noble/ciphers": ["@noble/ciphers@2.3.0", "", {}, "sha512-Clu/xdfgVTf9o7ngLOURaxePwR0j8sjclKEtVij10/jGulwFsPWCvvRgG/XjUVf8Nei+jLG6uwyXzUTGY1DQrw=="], - "micro-key-producer/micro-packed": ["micro-packed@0.8.0", "", { "dependencies": { "@scure/base": "2.0.0" } }, "sha512-AKb8znIvg9sooythbXzyFeChEY0SkW0C6iXECpy/ls0e5BtwXO45J9wD9SLzBztnS4XmF/5kwZknsq+jyynd/A=="], "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], @@ -3135,19 +3386,19 @@ "near-api-js/@noble/curves": ["@noble/curves@1.2.0", "", { "dependencies": { "@noble/hashes": "1.3.2" } }, "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw=="], + "near-api-js/ajv": ["ajv@8.11.2", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg=="], + "near-api-js/bn.js": ["bn.js@5.2.1", "", {}, "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="], "near-api-js/near-abi": ["near-abi@0.1.1", "", { "dependencies": { "@types/json-schema": "^7.0.11" } }, "sha512-RVDI8O+KVxRpC3KycJ1bpfVj9Zv+xvq9PlW1yIFl46GhrnLw83/72HqHGjGDjQ8DtltkcpSjY9X3YIGZ+1QyzQ=="], - "near-api-js/node-fetch": ["node-fetch@2.6.7", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="], - "near-seed-phrase/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], "node-stdlib-browser/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], "ox/@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.1", "", {}, "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ=="], - "ox/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], + "ox/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], "ox/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], @@ -3157,19 +3408,15 @@ "ox/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], - "pino/pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], + "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "pkg-dir/find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + "path-scurry/minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], - "protobufjs/long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], + "pino/pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], "public-encrypt/bn.js": ["bn.js@4.12.5", "", {}, "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ=="], - "react-remove-scroll/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "react-remove-scroll-bar/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "react-style-singleton/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "qrcode/yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], "read-yaml-file/js-yaml": ["js-yaml@3.15.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag=="], @@ -3179,11 +3426,7 @@ "ripple-keypairs/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - "rpc-websockets/@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], - - "rpc-websockets/ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], - - "smoldot/ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], + "rxjs/tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="], "socks-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], @@ -3205,9 +3448,7 @@ "usb/node-addon-api": ["node-addon-api@8.9.2", "", {}, "sha512-VijLXbi3UACN69I0JVXJsX4tjACjNoQDgv2gTF6sx2wWEi8tkSg2eX8p5gSIFi8z2+DL3oHmY6OyKce38SDolg=="], - "use-callback-ref/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "use-sidecar/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "use-sync-external-store/react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="], "viem/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], @@ -3217,8 +3458,12 @@ "viem/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], + "viem/ox": ["ox@0.14.34", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-12seOIk7dv8eAoGQhcWaeKZxNz304IVcDvb9U5Y7JZAEVe21Nm1YMxLjhWah+su5BD4Omx4Zz0z5x3ij9M4GYQ=="], + "viem/ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="], + "vite-plugin-cjs-interop/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + "websocket/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "websocket/utf-8-validate": ["utf-8-validate@5.0.10", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ=="], @@ -3227,27 +3472,19 @@ "xrpl/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], + "xumm-sdk/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "@aptos-labs/aptos-client/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@aptos-labs/ts-sdk/@scure/bip32/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], "@aptos-labs/ts-sdk/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], "@bitcoinerlab/secp256k1/@noble/curves/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - - "@cosmjs/proto-signing/@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@cosmjs/proto-signing/@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@ledgerhq/domain-service/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "@cosmjs/proto-signing/@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@cosmjs/tendermint-rpc/@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@cosmjs/tendermint-rpc/@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@cosmjs/tendermint-rpc/@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@ledgerhq/domain-service/react-dom/scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], + "@ledgerhq/evm-tools/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], "@ledgerhq/hw-app-btc/bitcoinjs-lib/bech32": ["bech32@1.1.4", "", {}, "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="], @@ -3255,6 +3492,8 @@ "@ledgerhq/hw-app-btc/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@ledgerhq/hw-app-eth/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "@ledgerhq/hw-transport-mocker/@ledgerhq/hw-transport/@ledgerhq/devices": ["@ledgerhq/devices@8.17.0", "", { "dependencies": { "semver": "7.7.3" } }, "sha512-l+rrVQEjR1hSWOLD00LFX4zbS8yB1M/Mb6UYPmSHGO7TmE1CFbZ4CmDJC/kZSl3hdrXCJ+YUNpvaLCcSWDwA+Q=="], "@ledgerhq/hw-transport-mocker/@ledgerhq/hw-transport/@ledgerhq/errors": ["@ledgerhq/errors@7.0.0", "", {}, "sha512-+Q/vykUlNeIxiM+I3cu1B660WLkzlmIsHLTV9QNV5D2/Ocplx3QMg52NYq2X7OAfGQnfH1rQvhn/NrjT+t9wBA=="], @@ -3263,6 +3502,8 @@ "@ledgerhq/psbtv2/bitcoinjs-lib/bip32": ["bip32@2.0.6", "", { "dependencies": { "@types/node": "10.12.18", "bs58check": "^2.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "tiny-secp256k1": "^1.1.3", "typeforce": "^1.11.5", "wif": "^2.0.6" } }, "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA=="], + "@manypkg/find-root/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + "@metamask/mobile-wallet-protocol-dapp-client/@metamask/utils/@ethereumjs/tx": ["@ethereumjs/tx@4.2.0", "", { "dependencies": { "@ethereumjs/common": "^3.2.0", "@ethereumjs/rlp": "^4.0.1", "@ethereumjs/util": "^8.1.0", "ethereum-cryptography": "^2.0.0" } }, "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw=="], "@metamask/mobile-wallet-protocol-dapp-client/@metamask/utils/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], @@ -3303,6 +3544,8 @@ "@near-js/wallet-account/@near-js/accounts/@near-js/providers": ["@near-js/providers@0.1.1", "", { "dependencies": { "@near-js/transactions": "1.1.2", "@near-js/types": "0.0.4", "@near-js/utils": "0.1.0", "bn.js": "5.2.1", "borsh": "1.0.0", "http-errors": "1.7.2" }, "optionalDependencies": { "node-fetch": "2.6.7" } }, "sha512-0M/Vz2Ac34ShKVoe2ftVJ5Qg4eSbEqNXDbCDOdVj/2qbLWZa7Wpe+me5ei4TMY2ZhGdawhgJUPrYwdJzOCyf8w=="], + "@near-js/wallet-account/@near-js/accounts/ajv": ["ajv@8.11.2", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg=="], + "@near-js/wallet-account/@near-js/accounts/near-abi": ["near-abi@0.1.1", "", { "dependencies": { "@types/json-schema": "^7.0.11" } }, "sha512-RVDI8O+KVxRpC3KycJ1bpfVj9Zv+xvq9PlW1yIFl46GhrnLw83/72HqHGjGDjQ8DtltkcpSjY9X3YIGZ+1QyzQ=="], "@near-js/wallet-account/@near-js/crypto/@noble/curves": ["@noble/curves@1.2.0", "", { "dependencies": { "@noble/hashes": "1.3.2" } }, "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw=="], @@ -3313,12 +3556,20 @@ "@near-js/wallet-account/@near-js/utils/bs58": ["bs58@4.0.0", "", { "dependencies": { "base-x": "^2.0.1" } }, "sha512-/jcGuUuSebyxwLLfKrbKnCJttxRf9PM51EnHTwmFKBxl4z1SGkoAhrfd6uZKE0dcjQTfm6XzTP8DPr1tzE4KIw=="], + "@near-wallet-selector/core/rxjs/tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="], + "@radixdlt/radix-dapp-toolkit/@noble/curves/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@radixdlt/radix-dapp-toolkit/rxjs/tslib": ["tslib@2.7.0", "", {}, "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="], + "@scure/starknet/@noble/curves/@noble/hashes": ["@noble/hashes@1.6.0", "", {}, "sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ=="], + "@solana/codecs-data-structures/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "@solana/codecs-data-structures/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana/codecs-strings/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "@solana/codecs-strings/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], "@solana/codecs/@solana/codecs-core/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], @@ -3331,6 +3582,8 @@ "@solana/kit/@solana/codecs/@solana/options": ["@solana/options@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-data-structures": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/codecs-strings": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw=="], + "@solana/options/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "@solana/options/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], "@solana/sysvars/@solana/codecs/@solana/codecs-data-structures": ["@solana/codecs-data-structures@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/codecs-numbers": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw=="], @@ -3343,90 +3596,10 @@ "@stacks/common/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], - "@starknet-io/get-starknet-wallet-standard/ox/@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.1", "", {}, "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ=="], - - "@starknet-io/get-starknet-wallet-standard/ox/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@starknet-io/get-starknet-wallet-standard/ox/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@starknet-io/get-starknet-wallet-standard/ox/@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="], - - "@starknet-io/get-starknet-wallet-standard/ox/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@starknet-io/get-starknet-wallet-standard/ox/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], + "@stacks/network/cross-fetch/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], "@stellar/stellar-base/@noble/curves/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@stellar/stellar-sdk/axios/proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], - - "@swapkit/core/@stricahq/typhonjs/@stricahq/cbors": ["@stricahq/cbors@1.0.2", "", { "dependencies": { "bignumber.js": "^9.0.2", "buffer": "^6.0.3" } }, "sha512-6ePsEiq7EGHA5IiPn9poA7sF5iXPqt30kKw3pjR/BhP7S+XHZNu/OPumESWnVl4AM+IEYC2x9eL+4qRPsTPVww=="], - - "@swapkit/toolboxes/@stricahq/typhonjs/@stricahq/cbors": ["@stricahq/cbors@1.0.2", "", { "dependencies": { "bignumber.js": "^9.0.2", "buffer": "^6.0.3" } }, "sha512-6ePsEiq7EGHA5IiPn9poA7sF5iXPqt30kKw3pjR/BhP7S+XHZNu/OPumESWnVl4AM+IEYC2x9eL+4qRPsTPVww=="], - - "@swapkit/ui/@cosmjs/amino/@cosmjs/encoding": ["@cosmjs/encoding@0.39.0", "", { "dependencies": { "@scure/base": "^2.0.0", "base64-js": "^1.3.0", "readonly-date-esm": "^2.0.0" } }, "sha512-+poEaeM8YjGNVtrHLQNWqkhEeDxapjrdpnPCT+JCRh8YNbeHEdftzZLCH5VCBSOtvo7PF0gK1B7sbQbBl6q5pQ=="], - - "@swapkit/ui/@cosmjs/amino/@cosmjs/math": ["@cosmjs/math@0.39.0", "", {}, "sha512-FSLy/oDF+BtOP/J60RsjL5W4MCKiCfBjSoeV5xj6qg2g8N884Ue853iuWanjqGkQJwkXCp+JbeK8Mv9j6AaYHw=="], - - "@swapkit/ui/@cosmjs/amino/@cosmjs/utils": ["@cosmjs/utils@0.39.0", "", {}, "sha512-h7fy7Tbcl9v8ABntp8+kqw2VmUus2HbnRJFyzTkM7byRktLtECHYNMsztwyl1rdHkzc8Nc2xs6K/56d7a+75aw=="], - - "@swapkit/ui/@cosmjs/crypto/@cosmjs/encoding": ["@cosmjs/encoding@0.39.0", "", { "dependencies": { "@scure/base": "^2.0.0", "base64-js": "^1.3.0", "readonly-date-esm": "^2.0.0" } }, "sha512-+poEaeM8YjGNVtrHLQNWqkhEeDxapjrdpnPCT+JCRh8YNbeHEdftzZLCH5VCBSOtvo7PF0gK1B7sbQbBl6q5pQ=="], - - "@swapkit/ui/@cosmjs/crypto/@cosmjs/math": ["@cosmjs/math@0.39.0", "", {}, "sha512-FSLy/oDF+BtOP/J60RsjL5W4MCKiCfBjSoeV5xj6qg2g8N884Ue853iuWanjqGkQJwkXCp+JbeK8Mv9j6AaYHw=="], - - "@swapkit/ui/@cosmjs/crypto/@cosmjs/utils": ["@cosmjs/utils@0.39.0", "", {}, "sha512-h7fy7Tbcl9v8ABntp8+kqw2VmUus2HbnRJFyzTkM7byRktLtECHYNMsztwyl1rdHkzc8Nc2xs6K/56d7a+75aw=="], - - "@swapkit/ui/@cosmjs/crypto/@noble/ciphers": ["@noble/ciphers@2.3.0", "", {}, "sha512-Clu/xdfgVTf9o7ngLOURaxePwR0j8sjclKEtVij10/jGulwFsPWCvvRgG/XjUVf8Nei+jLG6uwyXzUTGY1DQrw=="], - - "@swapkit/ui/@cosmjs/proto-signing/@cosmjs/encoding": ["@cosmjs/encoding@0.39.0", "", { "dependencies": { "@scure/base": "^2.0.0", "base64-js": "^1.3.0", "readonly-date-esm": "^2.0.0" } }, "sha512-+poEaeM8YjGNVtrHLQNWqkhEeDxapjrdpnPCT+JCRh8YNbeHEdftzZLCH5VCBSOtvo7PF0gK1B7sbQbBl6q5pQ=="], - - "@swapkit/ui/@cosmjs/proto-signing/@cosmjs/math": ["@cosmjs/math@0.39.0", "", {}, "sha512-FSLy/oDF+BtOP/J60RsjL5W4MCKiCfBjSoeV5xj6qg2g8N884Ue853iuWanjqGkQJwkXCp+JbeK8Mv9j6AaYHw=="], - - "@swapkit/ui/@cosmjs/proto-signing/@cosmjs/utils": ["@cosmjs/utils@0.39.0", "", {}, "sha512-h7fy7Tbcl9v8ABntp8+kqw2VmUus2HbnRJFyzTkM7byRktLtECHYNMsztwyl1rdHkzc8Nc2xs6K/56d7a+75aw=="], - - "@swapkit/ui/@cosmjs/stargate/@cosmjs/encoding": ["@cosmjs/encoding@0.39.0", "", { "dependencies": { "@scure/base": "^2.0.0", "base64-js": "^1.3.0", "readonly-date-esm": "^2.0.0" } }, "sha512-+poEaeM8YjGNVtrHLQNWqkhEeDxapjrdpnPCT+JCRh8YNbeHEdftzZLCH5VCBSOtvo7PF0gK1B7sbQbBl6q5pQ=="], - - "@swapkit/ui/@cosmjs/stargate/@cosmjs/math": ["@cosmjs/math@0.39.0", "", {}, "sha512-FSLy/oDF+BtOP/J60RsjL5W4MCKiCfBjSoeV5xj6qg2g8N884Ue853iuWanjqGkQJwkXCp+JbeK8Mv9j6AaYHw=="], - - "@swapkit/ui/@cosmjs/stargate/@cosmjs/stream": ["@cosmjs/stream@0.39.0", "", { "dependencies": { "xstream": "^11.14.0" } }, "sha512-h56it+ku5F6nlO94VyVAyz3pQqYsGRJ8v+5Y5erXYlQ0Qmr+rLrlSMCiViFEMK9INRSilAypdI5hKPCzotiqRg=="], - - "@swapkit/ui/@cosmjs/stargate/@cosmjs/tendermint-rpc": ["@cosmjs/tendermint-rpc@0.39.0", "", { "dependencies": { "@cosmjs/crypto": "^0.39.0", "@cosmjs/encoding": "^0.39.0", "@cosmjs/json-rpc": "^0.39.0", "@cosmjs/math": "^0.39.0", "@cosmjs/socket": "^0.39.0", "@cosmjs/stream": "^0.39.0", "@cosmjs/utils": "^0.39.0", "readonly-date-esm": "^2.0.0", "xstream": "^11.14.0" } }, "sha512-KowP/6P6Tx+OnGoimYnxuSBIfhB+vWqWER2pZpEIOHId8ZfcjQ9JS2F+Ah+WmZ9D+bKgn4pJ5ImAS13TeShIEw=="], - - "@swapkit/ui/@cosmjs/stargate/@cosmjs/utils": ["@cosmjs/utils@0.39.0", "", {}, "sha512-h7fy7Tbcl9v8ABntp8+kqw2VmUus2HbnRJFyzTkM7byRktLtECHYNMsztwyl1rdHkzc8Nc2xs6K/56d7a+75aw=="], - - "@swapkit/ui/@stricahq/typhonjs/@stricahq/cbors": ["@stricahq/cbors@1.0.2", "", { "dependencies": { "bignumber.js": "^9.0.2", "buffer": "^6.0.3" } }, "sha512-6ePsEiq7EGHA5IiPn9poA7sF5iXPqt30kKw3pjR/BhP7S+XHZNu/OPumESWnVl4AM+IEYC2x9eL+4qRPsTPVww=="], - - "@swapkit/ui/@swapkit/core/@swapkit/wallet-core": ["@swapkit/wallet-core@4.3.21", "", { "dependencies": { "@swapkit/helpers": "4.20.1" } }, "sha512-88zNmn14D9oBWuzDuzWv0Lz5s67UalK9CWR5poVtxEmVep0KxWnxgpITnSi1oHkzRmdF7UPt2OmwFxAXTKPdsw=="], - - "@swapkit/ui/@swapkit/helpers/@swapkit/contracts": ["@swapkit/contracts@4.1.5", "", {}, "sha512-0OZ+A4d68XIoqXWxZL10ahF+MKuT2J215oeeJZB1bAk5mu9oBfl1qeBl6IWbp1RnKMcpecm5K2hTGlCsKpR+TQ=="], - - "@swapkit/ui/@swapkit/helpers/@swapkit/tokens": ["@swapkit/tokens@4.4.1", "", { "peerDependencies": { "ts-pattern": "5.9.0" } }, "sha512-PVHduHv3RTc4aY9pHDvge9t0rrChJA5xGkoYd34E/PO9t/3gWRb4ABHVmakLxtLJnh5hb/McSha5y1HGzvzVEQ=="], - - "@swapkit/ui/@swapkit/helpers/@swapkit/types": ["@swapkit/types@0.12.0", "", {}, "sha512-x3doLExMh372PQYKngJFC1lzr7FSW99g5TfUBSDsZf43pOnkhNaFR0kmXDU/BdcD/z6UMJzm9i71G4NcVJ1P+g=="], - - "@swapkit/ui/@swapkit/plugins/@swapkit/utxo-signer": ["@swapkit/utxo-signer@2.3.0", "", { "peerDependencies": { "@noble/curves": "2.2.0", "@noble/hashes": "2.2.0", "@scure/base": "2.2.0", "micro-packed": "0.9.0" } }, "sha512-NHQentVysPD92QwD8ZyTss4DkqC4GWgGsueeiUMS3DdigbiR9Bknr7apbS2Gj86Jlmv+QYedf/7QIDdhd8bPkw=="], - - "@swapkit/ui/@swapkit/toolboxes/@swapkit/utxo-signer": ["@swapkit/utxo-signer@2.3.0", "", { "peerDependencies": { "@noble/curves": "2.2.0", "@noble/hashes": "2.2.0", "@scure/base": "2.2.0", "micro-packed": "0.9.0" } }, "sha512-NHQentVysPD92QwD8ZyTss4DkqC4GWgGsueeiUMS3DdigbiR9Bknr7apbS2Gj86Jlmv+QYedf/7QIDdhd8bPkw=="], - - "@swapkit/ui/@swapkit/wallet-keystore/@swapkit/wallet-core": ["@swapkit/wallet-core@4.3.21", "", { "dependencies": { "@swapkit/helpers": "4.20.1" } }, "sha512-88zNmn14D9oBWuzDuzWv0Lz5s67UalK9CWR5poVtxEmVep0KxWnxgpITnSi1oHkzRmdF7UPt2OmwFxAXTKPdsw=="], - - "@swapkit/ui/react-dom/scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], - - "@swapkit/wallet-extensions/@cosmjs/amino/@cosmjs/crypto": ["@cosmjs/crypto@0.37.1", "", { "dependencies": { "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-CdLOKQVJM422UegKpi4T/xkdNwvLZwJwSC7NyYi7tAyty0NzP67u+vNqar7Ok22ECkKLj6N9uRcIl4g62oZThA=="], - - "@swapkit/wallet-extensions/@cosmjs/proto-signing/@cosmjs/crypto": ["@cosmjs/crypto@0.37.1", "", { "dependencies": { "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-CdLOKQVJM422UegKpi4T/xkdNwvLZwJwSC7NyYi7tAyty0NzP67u+vNqar7Ok22ECkKLj6N9uRcIl4g62oZThA=="], - - "@swapkit/wallet-hardware/@cosmjs/amino/@cosmjs/crypto": ["@cosmjs/crypto@0.37.1", "", { "dependencies": { "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-CdLOKQVJM422UegKpi4T/xkdNwvLZwJwSC7NyYi7tAyty0NzP67u+vNqar7Ok22ECkKLj6N9uRcIl4g62oZThA=="], - - "@swapkit/wallet-hardware/@cosmjs/proto-signing/@cosmjs/crypto": ["@cosmjs/crypto@0.37.1", "", { "dependencies": { "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-CdLOKQVJM422UegKpi4T/xkdNwvLZwJwSC7NyYi7tAyty0NzP67u+vNqar7Ok22ECkKLj6N9uRcIl4g62oZThA=="], - - "@swapkit/wallets/@cosmjs/amino/@cosmjs/crypto": ["@cosmjs/crypto@0.37.1", "", { "dependencies": { "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-CdLOKQVJM422UegKpi4T/xkdNwvLZwJwSC7NyYi7tAyty0NzP67u+vNqar7Ok22ECkKLj6N9uRcIl4g62oZThA=="], - - "@swapkit/wallets/@cosmjs/proto-signing/@cosmjs/crypto": ["@cosmjs/crypto@0.37.1", "", { "dependencies": { "@cosmjs/encoding": "^0.37.1", "@cosmjs/math": "^0.37.1", "@cosmjs/utils": "^0.37.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.2", "@noble/hashes": "^1.8.0", "@scure/bip39": "^1.6.0", "hash-wasm": "^4.12.0" } }, "sha512-CdLOKQVJM422UegKpi4T/xkdNwvLZwJwSC7NyYi7tAyty0NzP67u+vNqar7Ok22ECkKLj6N9uRcIl4g62oZThA=="], - - "@ton/ton/axios/proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], - - "@trezor/blockchain-link-utils/@stellar/stellar-sdk/axios": ["axios@1.18.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw=="], - "@trezor/blockchain-link-utils/@stellar/stellar-sdk/eventsource": ["eventsource@2.0.2", "", {}, "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA=="], "@trezor/blockchain-link-utils/@trezor/protobuf/long": ["long@5.2.5", "", {}, "sha512-e0r9YBBgNCq1D1o5Dp8FMH0N5hsFtXDBiVa0qoJPHpakvZkmDKPRoGffZJII/XsHvj9An9blm+cRJ01yQqU+Dw=="], @@ -3437,8 +3610,6 @@ "@trezor/blockchain-link-utils/xrpl/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - "@trezor/blockchain-link/@stellar/stellar-sdk/axios": ["axios@1.18.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw=="], - "@trezor/blockchain-link/@stellar/stellar-sdk/eventsource": ["eventsource@2.0.2", "", {}, "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA=="], "@trezor/blockchain-link/xrpl/@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="], @@ -3459,12 +3630,16 @@ "@trezor/utxo-lib/bs58check/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.1.4", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg=="], + "@walletconnect/modal-ui/lit/@lit/reactive-element": ["@lit/reactive-element@1.6.3", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.0.0" } }, "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ=="], "@walletconnect/modal-ui/lit/lit-element": ["lit-element@3.3.3", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.1.0", "@lit/reactive-element": "^1.3.0", "lit-html": "^2.8.0" } }, "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA=="], "@walletconnect/modal-ui/lit/lit-html": ["lit-html@2.8.0", "", { "dependencies": { "@types/trusted-types": "^2.0.2" } }, "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q=="], + "@walletconnect/modal-ui/qrcode/yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], + "@walletconnect/utils/ox/@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.1", "", {}, "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ=="], "@walletconnect/utils/ox/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], @@ -3479,11 +3654,7 @@ "abi-wan-kanabi/fs-extra/universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], - "abi-wan-kanabi/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - - "abi-wan-kanabi/yargs/y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - - "abi-wan-kanabi/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "browserify-sign/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], @@ -3493,14 +3664,16 @@ "bs58check/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], - "centrifuge/protobufjs/long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], - "ethereum-cryptography/@scure/bip32/@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], "ethereum-cryptography/@scure/bip39/@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], "ethers/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="], + "glob/minimatch/brace-expansion": ["brace-expansion@2.1.4", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg=="], + + "jayson/@types/ws/@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], + "micro-key-producer/micro-packed/@scure/base": ["@scure/base@2.0.0", "", {}, "sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w=="], "near-api-js/@near-js/signers/@noble/hashes": ["@noble/hashes@1.3.3", "", {}, "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA=="], @@ -3511,15 +3684,21 @@ "near-api-js/@noble/curves/@noble/hashes": ["@noble/hashes@1.3.2", "", {}, "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="], - "near-seed-phrase/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "near-api-js/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "ox/@scure/bip32/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], + "near-seed-phrase/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], "ox/@scure/bip32/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], "ox/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - "pkg-dir/find-up/locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "qrcode/yargs/cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], + + "qrcode/yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "qrcode/yargs/y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], + + "qrcode/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], "read-yaml-file/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], @@ -3537,6 +3716,14 @@ "viem/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], + "viem/ox/@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.1", "", {}, "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ=="], + + "viem/ox/@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], + + "viem/ox/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], + + "vite-plugin-cjs-interop/minimatch/brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], + "websocket/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "xrpl/@scure/bip32/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], @@ -3549,16 +3736,14 @@ "xrpl/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - "@cosmjs/proto-signing/@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - - "@cosmjs/tendermint-rpc/@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - "@ledgerhq/hw-app-btc/bitcoinjs-lib/bip32/@types/node": ["@types/node@10.12.18", "", {}, "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ=="], "@ledgerhq/hw-transport-mocker/@ledgerhq/hw-transport/@ledgerhq/devices/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], "@ledgerhq/psbtv2/bitcoinjs-lib/bip32/@types/node": ["@types/node@10.12.18", "", {}, "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ=="], + "@manypkg/find-root/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "@metamask/mobile-wallet-protocol-dapp-client/@metamask/utils/@ethereumjs/tx/@ethereumjs/common": ["@ethereumjs/common@3.2.0", "", { "dependencies": { "@ethereumjs/util": "^8.1.0", "crc-32": "^1.2.0" } }, "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA=="], "@metamask/mobile-wallet-protocol-dapp-client/@metamask/utils/@ethereumjs/tx/@ethereumjs/rlp": ["@ethereumjs/rlp@4.0.1", "", { "bin": { "rlp": "bin/rlp" } }, "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw=="], @@ -3577,61 +3762,19 @@ "@near-js/keystores-node/@near-js/keystores/@near-js/types/bn.js": ["bn.js@5.2.1", "", {}, "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="], - "@near-js/wallet-account/@near-js/accounts/@near-js/providers/node-fetch": ["node-fetch@2.6.7", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="], + "@near-js/wallet-account/@near-js/accounts/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "@near-js/wallet-account/@near-js/crypto/@noble/curves/@noble/hashes": ["@noble/hashes@1.3.2", "", {}, "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="], "@near-js/wallet-account/@near-js/utils/bs58/base-x": ["base-x@2.0.6", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-UAmjxz9KbK+YIi66xej+pZVo/vxUOh49ubEvZW5egCbxhur05pBb+hwuireQwKO4nDpsNm64/jEei17LEpsr5g=="], - "@solana/codecs/@solana/codecs-core/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], - - "@solana/codecs/@solana/codecs-numbers/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], - - "@starknet-io/get-starknet-wallet-standard/ox/@scure/bip32/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - - "@starknet-io/get-starknet-wallet-standard/ox/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - - "@swapkit/ui/@cosmjs/stargate/@cosmjs/tendermint-rpc/@cosmjs/json-rpc": ["@cosmjs/json-rpc@0.39.0", "", { "dependencies": { "@cosmjs/stream": "^0.39.0", "xstream": "^11.14.0" } }, "sha512-slyo76IYkTuSxrzxvF1s1ScFPIGnW7PbNSx8lr++NzdyPluqe053+cSqsxLUioXb5qI9Nxny2fWxOK8isSn+cg=="], - - "@swapkit/ui/@cosmjs/stargate/@cosmjs/tendermint-rpc/@cosmjs/socket": ["@cosmjs/socket@0.39.0", "", { "dependencies": { "@cosmjs/stream": "^0.39.0", "isomorphic-ws": "^4.0.1", "ws": "^7", "xstream": "^11.14.0" } }, "sha512-mvA+/ycMn7dnjjdooSPq516poFpSARRXhFhKjCXxGUmBZA+74vLDLbtD6VGzHd08A2JSZBSiAhVOZpjYqgV78A=="], - - "@swapkit/wallet-extensions/@cosmjs/amino/@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@swapkit/wallet-extensions/@cosmjs/amino/@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@swapkit/wallet-extensions/@cosmjs/amino/@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@swapkit/wallet-extensions/@cosmjs/proto-signing/@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@swapkit/wallet-extensions/@cosmjs/proto-signing/@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@solana/codecs/@solana/codecs-core/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "@swapkit/wallet-extensions/@cosmjs/proto-signing/@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@swapkit/wallet-hardware/@cosmjs/amino/@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@swapkit/wallet-hardware/@cosmjs/amino/@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@swapkit/wallet-hardware/@cosmjs/amino/@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@swapkit/wallet-hardware/@cosmjs/proto-signing/@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@swapkit/wallet-hardware/@cosmjs/proto-signing/@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@swapkit/wallet-hardware/@cosmjs/proto-signing/@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@swapkit/wallets/@cosmjs/amino/@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@swapkit/wallets/@cosmjs/amino/@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@swapkit/wallets/@cosmjs/amino/@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@swapkit/wallets/@cosmjs/proto-signing/@cosmjs/crypto/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@swapkit/wallets/@cosmjs/proto-signing/@cosmjs/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "@solana/codecs/@solana/codecs-core/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], - "@swapkit/wallets/@cosmjs/proto-signing/@cosmjs/crypto/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], + "@solana/codecs/@solana/codecs-numbers/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "@trezor/blockchain-link-utils/@stellar/stellar-sdk/axios/proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], + "@solana/codecs/@solana/codecs-numbers/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], "@trezor/blockchain-link-utils/@trezor/protobuf/protobufjs/long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], @@ -3645,8 +3788,6 @@ "@trezor/blockchain-link-utils/xrpl/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - "@trezor/blockchain-link/@stellar/stellar-sdk/axios/proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], - "@trezor/blockchain-link/xrpl/@scure/bip32/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], "@trezor/blockchain-link/xrpl/@scure/bip32/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], @@ -3659,13 +3800,21 @@ "@trezor/device-authenticity/@trezor/protobuf/protobufjs/long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], - "@walletconnect/utils/ox/@scure/bip32/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], + "@walletconnect/modal-ui/qrcode/yargs/cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], + + "@walletconnect/modal-ui/qrcode/yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "@walletconnect/modal-ui/qrcode/yargs/y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], + + "@walletconnect/modal-ui/qrcode/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], - "abi-wan-kanabi/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "@walletconnect/utils/ox/@scure/bip32/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], "near-api-js/@near-js/utils/bs58/base-x": ["base-x@2.0.6", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-UAmjxz9KbK+YIi66xej+pZVo/vxUOh49ubEvZW5egCbxhur05pBb+hwuireQwKO4nDpsNm64/jEei17LEpsr5g=="], - "pkg-dir/find-up/locate-path/p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + "qrcode/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + + "qrcode/yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "ripemd160/hash-base/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], @@ -3673,24 +3822,24 @@ "ripemd160/hash-base/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "@near-js/keystores-browser/@near-js/crypto/@near-js/utils/bs58/base-x": ["base-x@2.0.6", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-UAmjxz9KbK+YIi66xej+pZVo/vxUOh49ubEvZW5egCbxhur05pBb+hwuireQwKO4nDpsNm64/jEei17LEpsr5g=="], + "vite-plugin-cjs-interop/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "@near-js/keystores-node/@near-js/crypto/@near-js/utils/bs58/base-x": ["base-x@2.0.6", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-UAmjxz9KbK+YIi66xej+pZVo/vxUOh49ubEvZW5egCbxhur05pBb+hwuireQwKO4nDpsNm64/jEei17LEpsr5g=="], + "@manypkg/find-root/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - "@swapkit/ui/@cosmjs/stargate/@cosmjs/tendermint-rpc/@cosmjs/socket/ws": ["ws@7.5.13", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA=="], + "@near-js/keystores-browser/@near-js/crypto/@near-js/utils/bs58/base-x": ["base-x@2.0.6", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-UAmjxz9KbK+YIi66xej+pZVo/vxUOh49ubEvZW5egCbxhur05pBb+hwuireQwKO4nDpsNm64/jEei17LEpsr5g=="], - "@swapkit/wallet-extensions/@cosmjs/amino/@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], + "@near-js/keystores-node/@near-js/crypto/@near-js/utils/bs58/base-x": ["base-x@2.0.6", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-UAmjxz9KbK+YIi66xej+pZVo/vxUOh49ubEvZW5egCbxhur05pBb+hwuireQwKO4nDpsNm64/jEei17LEpsr5g=="], - "@swapkit/wallet-extensions/@cosmjs/proto-signing/@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], + "@walletconnect/modal-ui/qrcode/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], - "@swapkit/wallet-hardware/@cosmjs/amino/@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], + "@walletconnect/modal-ui/qrcode/yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "@swapkit/wallet-hardware/@cosmjs/proto-signing/@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], + "qrcode/yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "@swapkit/wallets/@cosmjs/amino/@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], + "@walletconnect/modal-ui/qrcode/yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "@swapkit/wallets/@cosmjs/proto-signing/@cosmjs/crypto/@scure/bip39/@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], + "qrcode/yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + "@walletconnect/modal-ui/qrcode/yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], } } diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000..1e227b0 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,8 @@ +pre-commit: + commands: + lint: + glob: "*.{jsx,tsx,ts,js,json}" + run: bun biome check --write --no-errors-on-unmatched {staged_files} && git add {staged_files} + type-check: + glob: "*.{ts,tsx}" + run: bun type-check diff --git a/package.json b/package.json index 377a98e..bf6ace6 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "@biomejs/biome": "2.4.13", "@changesets/changelog-github": "0.6.0", "@changesets/cli": "2.31.0", - "@cosmjs/amino": "0.37.0", - "@cosmjs/proto-signing": "0.37.0", - "@cosmjs/stargate": "0.37.0", + "@cosmjs/amino": "0.39.0", + "@cosmjs/proto-signing": "0.39.0", + "@cosmjs/stargate": "0.39.0", "@scure/bip32": "2.2.0", "@swapkit/core": "^5.0.5", "@swapkit/helpers": "^5.2.1", @@ -17,6 +17,10 @@ "@swapkit/wallet-keystore": "^5.1.1", "@types/bun": "1.3.13", "@types/node": "25.6.0", + "@types/react": "19.2.14", + "@types/react-dom": "19.2.3", + "caniuse-lite": "1.0.30001776", + "happy-dom": "^20.8.9", "ledger-bitcoin": "0.3.0", "typescript": "6.0.3", "zod": "4.4.3" diff --git a/packages/sdk/package.json b/packages/sdk/package.json index eccd805..10086f8 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,7 +1,7 @@ { "author": "swapkit-dev", "dependencies": { - "@stricahq/typhonjs": "~3.0.1", + "@stricahq/typhonjs": "3.1.0", "@swapkit/core": "^5.0.5", "@swapkit/helpers": "^5.2.1", "@swapkit/plugins": "^5.0.5", @@ -10,7 +10,7 @@ "@swapkit/wallet-core": "^5.0.5", "@swapkit/wallet-keystore": "^5.1.1", "@swapkit/wallets": "workspace:*", - "cosmjs-types": "0.10.1" + "cosmjs-types": "0.11.0" }, "description": "SwapKit - SDK", "exports": { @@ -45,21 +45,12 @@ "types": "./dist/types/wallets.d.ts" } }, - "files": [ - "dist/", - "src/" - ], + "files": ["dist/", "src/"], "homepage": "https://github.com/swapkit/wallets", "license": "SEE LICENSE IN LICENSE", "name": "@swapkit/sdk", - "publishConfig": { - "access": "public" - }, - "repository": { - "directory": "packages/sdk", - "type": "git", - "url": "git+https://github.com/swapkit/wallets.git" - }, + "publishConfig": { "access": "public" }, + "repository": { "directory": "packages/sdk", "type": "git", "url": "git+https://github.com/swapkit/wallets.git" }, "scripts": { "build": "bun run ./build.ts", "build:clean": "rm -rf dist && bun run ./build.ts", diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md new file mode 100644 index 0000000..f35795c --- /dev/null +++ b/packages/ui/CHANGELOG.md @@ -0,0 +1,401 @@ +# @swapkit/ui + +## 0.23.0 + +### Minor Changes + +- [#190](https://github.com/swapkit/ui/pull/190) [`96394f7`](https://github.com/swapkit/ui/commit/96394f72e0f3a4b058e4d18bad923eb3370c412a) Thanks [@towanTG](https://github.com/towanTG)! - Enable the Aleo chain for keystore wallets, detect shielded swap deliveries, and add a resumable unshield dialog for private Aleo records. Completed swaps that delivered shielded ALEO get a passive "Shielded" badge in the transaction history; the unshield action lives in the wallet drawer's ALEO section ("Shielded swap deliveries" row with an Unshield button). The dialog labels amounts as shielded _from swap deliveries_ (only swap-delivered records are visible — there is no chain scanning) and unshields the largest record per pass, with the remainder staying shielded for the next pass. `@provablehq/sdk` ships as a peer dependency of `@swapkit/toolboxes` — package managers that don't auto-install peers need it added as a direct dependency. Vite integrators must exclude `@provablehq/sdk` from dependency optimization and include `@provablehq/sdk > core-js/proposals/json-parse-with-source.js` so the SDK's browser WASM asset resolves correctly. Swap tracking and shielded-delivery detection now run whenever the widget is mounted (previously only while the transaction history drawer was open). After a successful pass the dialog offers "Unshield next" when more shielded records remain — including the fee record's change, which is now tracked under the unshield transaction so it stays unshieldable — and the tab warns before closing while a proof is being generated. + +- [#201](https://github.com/swapkit/ui/pull/201) [`acac94e`](https://github.com/swapkit/ui/commit/acac94e82383df885ba557a9bcadd0ff22e22f97) Thanks [@towanTG](https://github.com/towanTG)! - Bump @swapkit dependencies (wallets 4.10.0, wallet-keystore 4.5.5, toolboxes 4.28.0, helpers 4.20.1, core 4.6.4, plugins 4.7.4). Enables Hypercore (HYPE) for keystore wallets: the keystore connect path (`@swapkit/wallets`) now lists `Chain.Hype`, so it no longer gets filtered out at connect time. + +- [#197](https://github.com/swapkit/ui/pull/197) [`2bda851`](https://github.com/swapkit/ui/commit/2bda8516e6e4e6ef3c16ea4bc9ba7ca485833328) Thanks [@towanTG](https://github.com/towanTG)! - Enable Hypercore (HYPE) and HyperEVM in the widget: added to the chain catalog, API-supported chain list, and minimal tokens with their native HYPE assets (8 and 18 decimals respectively). HyperEVM joins the EVM chain list, so wallet support comes through the shared EVM wallet paths. + +- [#191](https://github.com/swapkit/ui/pull/191) [`b9cf5dc`](https://github.com/swapkit/ui/commit/b9cf5dc1e71164d1d221f014923f77edc3cf7d55) Thanks [@towanTG](https://github.com/towanTG)! - Enable Robinhood Chain (HOOD) in the widget: added to the EVM chain list and chain catalog with the `HOOD.ETH` native asset (ETH-gas L2). Wallet support comes automatically through the shared EVM wallet paths. Note: the public RPC (`rpc.mainnet.chain.robinhood.com`) is rate-limited — production integrators should configure a provider RPC via `SKConfig.setRpcUrl`. + +- [#195](https://github.com/swapkit/ui/pull/195) [`dbe2fc1`](https://github.com/swapkit/ui/commit/dbe2fc1aeea49af19b863856e6b535d557bef5c9) Thanks [@towanTG](https://github.com/towanTG)! - Search the SwapKit API token catalog when selecting chains or typing in the asset picker, merging API-only tokens after bundled static results. Update @swapkit/\* dependencies to the July 24 stable release (helpers 4.20.0 with searchTokens, tokens 4.4.0 with dev token lists). + +- [#173](https://github.com/swapkit/ui/pull/173) [`c879ec8`](https://github.com/swapkit/ui/commit/c879ec822d261545608ee1c75e78079cd8c0a33b) Thanks [@towanTG](https://github.com/towanTG)! - Add Stellar (XLM) chain support to the widget: chain catalog entry, native asset defaults, and minimal token list. Bump @swapkit/\* dependencies to nightly builds with the Stellar toolbox and keystore signing support. + +- [#187](https://github.com/swapkit/ui/pull/187) [`dab11a1`](https://github.com/swapkit/ui/commit/dab11a1fd752abd0d9a7b871639fbf2d2a9ccfa1) Thanks [@towanTG](https://github.com/towanTG)! - Add a Stellar trustline approval step to the swap widget. Swapping into a non-native Stellar asset (e.g. XLM.USDC) whose receiving account lacks the required trustline now prompts a one-time "Approve on Stellar" step (the dialog explains that the trustline locks a 0.5 XLM base reserve): `swapKit.approveAssetValue(route)` has the receiving wallet sign and broadcast the API-delivered changeTrust XDR (skipping when the trustline already exists), then the route is re-fetched and the swap continues. If the destination account doesn't exist on Stellar yet, a distinct message explains it must be created and funded (~1 XLM minimum plus 0.5 XLM per trustline) first. SDK dependencies are bumped to the releases carrying this flow (`@swapkit/core` 4.6.1, `@swapkit/helpers` 4.19.1, `@swapkit/plugins` 4.7.1, `@swapkit/toolboxes` 4.26.1, `@swapkit/wallet-keystore` 4.5.2, `@swapkit/wallets` 4.8.31), along with `@stellar/stellar-sdk` 16.1.0 — required by the new toolboxes peer range and for working Stellar support in browser bundles (v15 shipped a UMD `browser` entry whose named exports resolve to `undefined` under Vite). + +### Patch Changes + +- [#195](https://github.com/swapkit/ui/pull/195) [`dbe2fc1`](https://github.com/swapkit/ui/commit/dbe2fc1aeea49af19b863856e6b535d557bef5c9) Thanks [@towanTG](https://github.com/towanTG)! - Add Robinhood Chain to API_SUPPORTED_CHAINS so HOOD actually appears in the widget's chain filter and asset picker (completes the HOOD enablement from [#191](https://github.com/swapkit/ui/issues/191)). + +- [#175](https://github.com/swapkit/ui/pull/175) [`15d4e04`](https://github.com/swapkit/ui/commit/15d4e04af9cce8e219abcc5c84bfcab8341fa564) Thanks [@towanTG](https://github.com/towanTG)! - Bump @swapkit/\* to nightly builds that include the Stellar swap dispatch fix (the swapkit plugin now signs and broadcasts the Stellar transaction envelope XDR returned in swap responses). + +## 0.22.1 + +### Patch Changes + +- [#164](https://github.com/swapkit/ui/pull/164) [`908717f`](https://github.com/swapkit/ui/commit/908717fa4a402dcff67984ede6e6edeca132704b) Thanks [@towanTG](https://github.com/towanTG)! - Bump @swapkit dependencies to latest published versions. + +## 0.22.0 + +### Minor Changes + +- [#153](https://github.com/swapkit/ui/pull/153) [`551165f`](https://github.com/swapkit/ui/commit/551165f01df1f034bd41117e8cd46d9063710a54) Thanks [@towanTG](https://github.com/towanTG)! - Make assets in the wallet drawer selectable as the swap input. Clicking a token row now closes the drawer and sets that asset as the widget's input asset, leaving the output unchanged. If the picked asset is the current output asset, the sides swap so the pair stays valid; the entered amount is cleared on change (matching the normal input-asset selector). + +### Patch Changes + +- [#154](https://github.com/swapkit/ui/pull/154) [`8f34999`](https://github.com/swapkit/ui/commit/8f349993d8225504efa3545ce15f24bd842dd860) Thanks [@towanTG](https://github.com/towanTG)! - Approval dialog now shows the token contract and the **spender** as block-explorer links (via `getExplorerAddressUrl` from `@swapkit/helpers`). The spender is the real allowance grantee, decoded from the approve calldata with `ethers` (the approval tx's `to` is the token contract, not the spender); if it can't be decoded it's hidden rather than shown as a misleading address. Both addresses are truncated, labelled, and open the explorer in a new tab. (API-2647 a/b) + +- [#159](https://github.com/swapkit/ui/pull/159) [`f16e85f`](https://github.com/swapkit/ui/commit/f16e85f67279458158db53c062d786083e0470de) Thanks [@towanTG](https://github.com/towanTG)! - Bump `@swapkit/*` dependencies to latest: `core` 4.4.40, `helpers` 4.15.1, `plugins` 4.6.54, `toolboxes` 4.19.0, `wallet-keystore` 4.4.8, `wallets` 4.8.26. `wallets` 4.8.26 realigns the tree so it resolves a single `@swapkit/types@0.9.0` (previously bumping pulled a duplicate 0.8.1/0.9.0 and broke the type-check). + +## 0.21.1 + +### Patch Changes + +- [#143](https://github.com/swapkit/ui/pull/143) [`5936cea`](https://github.com/swapkit/ui/commit/5936ceabdf1dccd6ce5bbcfffc08adc67b820eea) Thanks [@towanTG](https://github.com/towanTG)! - Fix a Widget Studio crash for users whose persisted `formValues` (localStorage) predate the Local Mode field. The form default read `SKConfig.getState().localMode`, which can be `undefined` (older bundled `@swapkit/helpers`, a stale bundler dep cache, or pre-existing localStorage), leaving `localMode` undefined and throwing `Cannot read properties of undefined (reading 'enabled')` on first render. Local mode now falls back to a hardcoded default (`{ enabled: false, quoteUrl: "http://localhost:3000", swapUrl: "http://localhost:3001" }`) and is coalesced so it is never undefined downstream. + +## 0.21.0 + +### Minor Changes + +- [#141](https://github.com/swapkit/ui/pull/141) [`3bcd3f9`](https://github.com/swapkit/ui/commit/3bcd3f91889ac6e71ffe3a773a836041c0bf870e) Thanks [@towanTG](https://github.com/towanTG)! - Bump all `@swapkit/*` dependencies to latest (core 4.4.38, helpers 4.15.0, plugins 4.6.52, toolboxes 4.17.6, wallet-keystore 4.4.6, wallets 4.8.25) and add a **Local Mode** toggle to the Widget Studio's Developer settings. + + Local Mode mirrors `@swapkit/helpers`' `SKConfig.localMode`, routing quote/swap requests to locally running services (default `http://localhost:3000` / `http://localhost:3001`). The toggle is only shown when the studio itself is served from `localhost`, since it targets local-only endpoints and never ships in the embed snippet. + +## 0.20.4 + +### Patch Changes + +- [#137](https://github.com/swapkit/ui/pull/137) [`360939c`](https://github.com/swapkit/ui/commit/360939c34a123a05fcfabfd5158d59004385dd13) Thanks [@towanTG](https://github.com/towanTG)! - Route widget selected/hover/active states through the correct theme tokens so every persistent fill is configurable from the Widget Studio. Selected chain rows (popover + sheet), popular chain pills, derive-address rows, and the selected `Chip` now use `colorBgActive`; default `Button`, `Skeleton`, and provider badge use `colorSecondary` for their static surface; transient `hover:` overlays continue to use `colorBgHover`. Accent color stays as the selection affordance (border, check icon) only. + +## 0.20.3 + +### Patch Changes + +- [#134](https://github.com/swapkit/ui/pull/134) [`9482966`](https://github.com/swapkit/ui/commit/9482966faff5ef7ff6af2d75de2238ca14e0cbbe) Thanks [@towanTG](https://github.com/towanTG)! - Add configurable widget theme tokens for border radius and font family, emit the full Studio configuration through generated snippets, and document the UI package. + +## 0.20.2 + +### Patch Changes + +- [#131](https://github.com/swapkit/ui/pull/131) [`a164ef9`](https://github.com/swapkit/ui/commit/a164ef9a1d71fe43c25dfe866cd13f39345e21a6) Thanks [@towanTG](https://github.com/towanTG)! - Expose active and overlay theme controls in Widget Studio, update wallet configuration learn-more links, and bump SwapKit runtime dependencies. + +## 0.20.1 + +### Patch Changes + +- [`7238dcd`](https://github.com/swapkit/ui/commit/7238dcd1a2bf00850af2a7ad163eb125e294fb6c) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - Stabilize the React widget studio wallet configuration and swap-to asset loading. + +## 0.20.0 + +### Minor Changes + +- [#123](https://github.com/swapkit/ui/pull/123) [`b6bde66`](https://github.com/swapkit/ui/commit/b6bde663d46c47f3fdfbc320222db5757beeb04d) Thanks [@towanTG](https://github.com/towanTG)! - Surface every provider in a multi-hop quote rather than just the first. + + - The collapsed quote card now face-piles the provider logos and renders the full path label (`1inch → Chainflip`, truncated to `A → … → Z` for 4+ providers) instead of only `providers[0]`. + - The priority badge (Recommended / Cheapest / Fastest) moves to a corner ribbon on the top-right of the card and dialog rows, freeing the inline row for the path label and amount on mobile too. + - The fee details accordion now leads with a vertical per-leg timeline (sell asset → provider → … → buy asset) for multi-hop routes; single-hop routes show the fees breakdown only, unchanged. + - The route-select dialog mirrors the collapsed card: stacked logos, path label, corner ribbon, and the title becomes "Select route". + +## 0.19.1 + +### Patch Changes + +- [`9fd99aa`](https://github.com/swapkit/ui/commit/9fd99aad6159da2908cefbe8d530774949239bbf) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - Declare SwapKit peer dependencies required by toolbox consumers and keep balance refresh available for connected zero-balance wallets. + +## 0.19.0 + +### Minor Changes + +- [#113](https://github.com/swapkit/ui/pull/113) [`417ccf7`](https://github.com/swapkit/ui/commit/417ccf72f734a22a17bffb1525311a5346121086) Thanks [@towanTG](https://github.com/towanTG)! - Wallet drawer + connect-wallet flow improvements, plus a SwapKit dependency bump. + + - **Wallet drawer grouped by wallet.** Connected chains are now grouped under a per-wallet header (avatar, name, "N chains · M tokens", total USD) that collapses/expands when more than one wallet is connected; a single wallet renders as a flat label. The Connect-wallet action is always visible, pinned above Disconnect, and uses a generic label (no input/output chain reference). Disconnect reads "Disconnect all" when multiple wallets are connected. + - **Main swap button connect logic.** The button shows a plain "Connect wallet" while there is no wallet connected and no quote yet — clicking it opens the generic connect dialog. The chain-specific connect flow only triggers once a route exists, and the input chain (what the user pays from) is always resolved before the output chain. + - **Dependency bump:** `@swapkit/core@4.4.31`, `@swapkit/helpers@4.13.13`, `@swapkit/plugins@4.6.45`, `@swapkit/toolboxes@4.16.2`, `@swapkit/wallet-keystore@4.3.37`, `@swapkit/wallets@4.8.22`. + +## 0.18.2 + +### Patch Changes + +- [#110](https://github.com/swapkit/ui/pull/110) [`7128a31`](https://github.com/swapkit/ui/commit/7128a31bd59a28cbdfb635ee99c4c2ef8b0cea74) Thanks [@towanTG](https://github.com/towanTG)! - Bump SwapKit packages to the latest releases, including wallets 4.8.19, and apply developer-mode chain filtering consistently in the wallet connect dialog. Ledger Litecoin is no longer hidden behind developer mode. + +## 0.18.1 + +### Patch Changes + +- [#106](https://github.com/swapkit/ui/pull/106) [`349a199`](https://github.com/swapkit/ui/commit/349a1996d13129b13aabcfa2aa477bb117095456) Thanks [@towanTG](https://github.com/towanTG)! - Bump SwapKit package dependencies to their latest patch releases (`@swapkit/core@4.4.28`, `@swapkit/helpers@4.13.11`, `@swapkit/plugins@4.6.42`, `@swapkit/toolboxes@4.15.15`, `@swapkit/wallet-keystore@4.3.34`, `@swapkit/wallets@4.8.18`). + +- [#107](https://github.com/swapkit/ui/pull/107) [`67da9b1`](https://github.com/swapkit/ui/commit/67da9b1a7b47caf75601c08835cd03190142d4c1) Thanks [@towanTG](https://github.com/towanTG)! - Validate `getRouteWithTx` amount fields before calling `swap`, matching the stricter SwapKit route type required by the latest helpers/core packages. + +## 0.18.0 + +### Minor Changes + +- [#103](https://github.com/swapkit/ui/pull/103) [`0c379f9`](https://github.com/swapkit/ui/commit/0c379f942ef32a5135d233563893c49bace0dc84) Thanks [@towanTG](https://github.com/towanTG)! - **Chains configuration + redesigned wallet rows in the studio.** + + Adds a new **Chains** section to the studio's Settings tab letting integrators restrict the chain set the widget operates on. Disabling a chain hides it from the asset selector and auto-disables wallets whose required chains are all gone (Ripple → Xaman, Radix → Radix Wallet, all Cosmos chains → Keplr / Leap). The change is full-stack: + + - React widget gains a `chains` prop (`Chain[] | "all" | { include } | { exclude }`, mirroring `wallets`). + - Web component gains `chains` / `chains-include` / `chains-exclude` attributes; the snippet generator emits them when the user picks anything other than "all". + - `SwapKitConfigProvider` exposes `enabledChains` and `isChainAllowed`; the asset-select chain filter, popular-chain pills, asset list hook, and wallet-connect dialog all honour the gate. + - New `lib/chain-catalog.ts` declares the 32 controllable chains, preset groupings (All / EVM only / BTC + ETH / Cosmos / UTXO), and the chain → required-wallets dependency map. + + Also redesigns the **Wallet Configuration** rows in the same tab. The single-line layout was wrapping to 5+ visual lines at the sidebar's 380px width. New row: glyph · name · status tag (Needs config / Ready / Disabled) on the title line, description + doc link on the sub-line, switch + chevron-to-configure on the right. Fields expand inline below the row instead of all at once. Sort order: needs-config → ready → disabled. + +### Patch Changes + +- [#98](https://github.com/swapkit/ui/pull/98) [`d4ed0e2`](https://github.com/swapkit/ui/commit/d4ed0e20b472635ea894524d61eb3364f0a87af3) Thanks [@towanTG](https://github.com/towanTG)! - Drop `React.forwardRef` across all UI primitives (accordion, button, card, checkbox, chip, dialog, form, input, label, separator, sheet, sidebar, tabs, textarea, tooltip) — React 19 accepts `ref` as a regular prop. Ref types are widened to `React.Ref` so callback refs from libraries like React Hook Form still work. Behaviour is unchanged. Also drops three unused biome suppression comments and refactors `` `getConfig` into smaller helpers to clear a cognitive-complexity warning. + +## 0.17.0 + +### Minor Changes + +- [#96](https://github.com/swapkit/ui/pull/96) [`d8bca4a`](https://github.com/swapkit/ui/commit/d8bca4acd4f32540498a31ab014cdfbb8d0d37aa) Thanks [@towanTG](https://github.com/towanTG)! - Gate KeepKey, Vultisig, and Litecoin-on-Ledger behind the dev-mode flag. In production builds they're hidden from the wallet connect dialog, the studio sidebar wallet selector, and (for LTC-on-Ledger) the chain select dialog. In dev mode they remain visible but are tagged with a "DEV" badge so the wallets repo can iterate on them through this UI. + + The dev signal is `SKConfig.envs.isDev`, which is wired to the studio's `developMode` toggle, the web component's `develop-mode` attribute, and the `__SWAPKIT_IS_DEV__` compile-time default (`SWAPKIT_USE_DEV_API=true` at build). + +### Patch Changes + +- [#92](https://github.com/swapkit/ui/pull/92) [`c9213b0`](https://github.com/swapkit/ui/commit/c9213b035ba0165ff2f518c12533f28eac91930f) Thanks [@towanTG](https://github.com/towanTG)! - Bump SwapKit dependencies and limit swap confirmation amounts to 10 significant digits. + +- [#92](https://github.com/swapkit/ui/pull/92) [`c9213b0`](https://github.com/swapkit/ui/commit/c9213b035ba0165ff2f518c12533f28eac91930f) Thanks [@towanTG](https://github.com/towanTG)! - Remove the "Customised" / "Defaults" label from the studio sidebar footer. The Reset button's disabled state already communicates whether the config differs from defaults, so the label was redundant. + +## 0.16.5 + +### Patch Changes + +- [#88](https://github.com/swapkit/ui/pull/88) [`74cefd7`](https://github.com/swapkit/ui/commit/74cefd7a575ad97bcce020a0ec4d84f11f90dc77) Thanks [@towanTG](https://github.com/towanTG)! - Add input-chain wallet connection actions when a quote exists but the connected wallet does not cover the pay asset chain. + +- [#87](https://github.com/swapkit/ui/pull/87) [`b3ce60b`](https://github.com/swapkit/ui/commit/b3ce60b61b4146f345aa0ab9cdd8c4862599cc6e) Thanks [@towanTG](https://github.com/towanTG)! - Persist tracker polling metadata with transaction history and schedule pending transaction checks with backoff, visibility gating, and a per-tick request cap. + +## 0.16.4 + +### Patch Changes + +- [#84](https://github.com/swapkit/ui/pull/84) [`d4c1c0a`](https://github.com/swapkit/ui/commit/d4c1c0ac580bfc6862638070d91ad72c98761fde) Thanks [@towanTG](https://github.com/towanTG)! - Use wallet-level UTXO xpub discovery before hardware address selection, then bind the selected derived address on final connect. + +## 0.16.3 + +### Patch Changes + +- [#81](https://github.com/swapkit/ui/pull/81) [`170f352`](https://github.com/swapkit/ui/commit/170f3528aab5ea3134a1946a8320f3b5311efbe7) Thanks [@towanTG](https://github.com/towanTG)! - Bump `@swapkit/wallets` to 4.8.12. + +- [#81](https://github.com/swapkit/ui/pull/81) [`170f352`](https://github.com/swapkit/ui/commit/170f3528aab5ea3134a1946a8320f3b5311efbe7) Thanks [@towanTG](https://github.com/towanTG)! - Request the send-chain wallet connection before swap execution when a quote exists but the input chain is not connected. + +## 0.16.2 + +### Patch Changes + +- [#78](https://github.com/swapkit/ui/pull/78) [`9d6ede4`](https://github.com/swapkit/ui/commit/9d6ede4022d17da75cb64791567e280ecb191d7a) Thanks [@towanTG](https://github.com/towanTG)! - Bump `@swapkit/wallets` to 4.8.11 and keep web-component swap state local so embedded widgets do not refresh when assets change. + +## 0.16.1 + +### Patch Changes + +- [#74](https://github.com/swapkit/ui/pull/74) [`d74ed28`](https://github.com/swapkit/ui/commit/d74ed28b2ca28b3808b7a19ace338a3dd0e2cc7e) Thanks [@towanTG](https://github.com/towanTG)! - Enable the UTXO xpub address selection flow for Trezor hardware wallets. + +## 0.16.0 + +### Minor Changes + +- [#68](https://github.com/swapkit/ui/pull/68) [`d14e317`](https://github.com/swapkit/ui/commit/d14e317b0ec9a54588d066f89b21c60184ab962c) Thanks [@towanTG](https://github.com/towanTG)! - Studio sidebar — new "Wallet configuration" section under Settings. + + Lets developers persist wallet/integration credentials (`apiKeys.walletConnectProjectId`, `apiKeys.xaman`, `apiKeys.passkeys`, `apiKeys.keepKey`, plus `integrations.{coinbase, nearWalletSelector, trezor, keepKey, radix}`) directly in the studio. Persisted to localStorage alongside the rest of the form, applied to `SKConfig` immediately and on next page load so the studio's live preview reflects the values. + + Each wallet's block: + + - Header with the wallet name + "Get it →" link to where the credential is acquired (cloud.reown.com, apps.xumm.dev, console.radixdlt.com, etc.). + - Inline `Missing` badge when an enabled wallet's required field is empty. + - Top-of-section warning banner when any enabled wallet is missing a hard-required field. + + The configurator-side picker continues to surface the full wallet list regardless of mobile UA — only the connect dialog filters to mobile-supported wallets. + +- [#68](https://github.com/swapkit/ui/pull/68) [`d14e317`](https://github.com/swapkit/ui/commit/d14e317b0ec9a54588d066f89b21c60184ab962c) Thanks [@towanTG](https://github.com/towanTG)! - Wallet config now flows from the studio into the embed snippet and the deployed `` web component. + + **Snippet generator** — when any wallet/integration credential is set, emits a JSON `config` attribute on the `` element next to `widget-id` / `widget-key`. The payload is the same partial `SKConfig.set` shape the studio's live preview already feeds into the SDK (apiKeys + integrations, with empty fields filtered). + + **Web component** — `config` is now an `observedAttribute`. `getConfig()` parses it as JSON; `renderWidget()` applies it via `SKConfig.set` before any wallet connect runs, so the widget's `SwapKit()` client picks up the credentials at construct time. Bad JSON is `console.warn`'d and ignored — doesn't crash the widget. + + **Wallet config blocks** in the studio sidebar now sort dynamically: blocks missing a hard-required field bubble to the top, then blocks with any required spec, then recommended-only / NEAR. Original order is the tiebreaker so the layout stays stable as users fill things in. + + **Per-wallet enable toggle** — each wallet config block has a compact switch on the right side of its header that toggles `enabledWalletOptions` in sync with the wallet picker below. + +### Patch Changes + +- [#70](https://github.com/swapkit/ui/pull/70) [`6c8d007`](https://github.com/swapkit/ui/commit/6c8d00724a5384bb18f48c89a40c1c4d188721e7) Thanks [@towanTG](https://github.com/towanTG)! - Fix `apiKeyInvalid` on the very first `SwapKitApi.*` request after `` mounts. + + `useSwapTo` is declared earlier in `` than the `applyAuthConfig` `useEffect`, and React fires effects in declaration order — so swap-to fired its fetch before the widget had a chance to write `widgetId/widgetKey` (or `apiKeys.swapKit`) into `SKConfig`. The helpers' `dynamicHeader` callback returned `{}`, the request shipped without auth, and the API responded `{"error":"apiKeyInvalid","message":"Invalid API key"}`. + + Apply auth synchronously during the first render via a `useRef` sentinel, before any effect runs. `SKConfig` is a zustand store — sync writes from render are safe because they don't touch React's own state graph. Subsequent prop changes are still picked up by the debounced re-apply effect. + + The web-component path (``) was already race-free since `renderWidget()` writes to `SKConfig` synchronously before mounting React. + +- [#67](https://github.com/swapkit/ui/pull/67) [`470ffe9`](https://github.com/swapkit/ui/commit/470ffe9440c1c6fc5c14749524c26291d6f97c4c) Thanks [@towanTG](https://github.com/towanTG)! - Bump `@swapkit/wallets` to 4.8.8 — picks up upstream wallet connect fixes. + +- [#63](https://github.com/swapkit/ui/pull/63) [`fdbcca6`](https://github.com/swapkit/ui/commit/fdbcca622cb9f1195184f0339d70a6e451f12bc9) Thanks [@towanTG](https://github.com/towanTG)! - `ColorPickerField` — open the native colour picker reliably on mobile. + + Tapping the colour swatch on iOS Safari (and some Android browsers) didn't open the native picker because the swatch was a ` + )} + +
+
+ setQuery(e.target.value)} + placeholder="Search chains" + ref={inputRef} + value={query} + /> + +
+
+
+ {visibleChains.length === 0 ? ( +
+ No chains match +
+ ) : ( + visibleChains.map((c) => { + const isSel = selectedSet.has(c); + const cfg = getChainConfig(c); + return ( + // biome-ignore lint/a11y/useSemanticElements: button+role=checkbox keeps chain icon and name inside a single clickable row; +
+ + ); +} diff --git a/packages/ui/src/react/components/composable/chain-filter-sheet.tsx b/packages/ui/src/react/components/composable/chain-filter-sheet.tsx new file mode 100644 index 0000000..227db1b --- /dev/null +++ b/packages/ui/src/react/components/composable/chain-filter-sheet.tsx @@ -0,0 +1,150 @@ +"use client"; + +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { type Chain, getChainConfig } from "@swapkit/helpers"; +import { CheckIcon, ChevronLeftIcon, SearchIcon } from "lucide-react"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { cn } from "../../../lib/utils"; +import { ChainIcon } from "../simple/chain-icon"; + +/** + * Mobile chain filter — full-screen bottom sheet replacement for `ChainFilterPopover` + * on viewports `< 640px`. Single-select UX: tapping a chain row replaces the multi + * selection with that one chain and dismisses; tapping "All chains" clears and + * dismisses; the close affordance dismisses without applying. + * + * Multi-select is preserved on desktop via the popover; mobile users still have the + * popular-chain pills above the search for quick toggles. + */ +export function ChainFilterSheet({ + open, + onOpenChange, + allChains, + selected, + onChange, +}: { + open: boolean; + onOpenChange: (open: boolean) => void; + allChains: Chain[]; + selected: Chain[]; + onChange: (next: Chain[]) => void; +}) { + const [query, setQuery] = useState(""); + + // Open with a clean search state and reset on close. + useEffect(() => { + if (!open) setQuery(""); + }, [open]); + + const matches = useCallback( + (c: Chain) => { + if (!query) return true; + const q = query.toLowerCase(); + return c.toLowerCase().includes(q) || (getChainConfig(c)?.name ?? c).toLowerCase().includes(q); + }, + [query], + ); + + const visibleChains = useMemo(() => allChains.filter(matches), [allChains, matches]); + + // The sheet UX is single-select. Translate at the boundary: a single-element + // `selected` highlights that row; a multi-selection (set via the popular-chain + // pills) shows nothing highlighted so the next tap is a clean replace. + const activeChain: Chain | null = selected.length === 1 ? (selected[0] ?? null) : null; + + const handleSelect = (c: Chain | null) => { + onChange(c ? [c] : []); + onOpenChange(false); + }; + + return ( + + + + +
+ + + + + Chain + + +
+ +
+ + setQuery(e.target.value)} + placeholder="Search chains" + type="search" + value={query} + /> +
+ +
+
+ +
+ + {visibleChains.map((c) => { + const cfg = getChainConfig(c); + const isActive = activeChain === c; + return ( +
+ +
+ ); + })} + + {visibleChains.length === 0 && ( +
+ No chains match "{query}" +
+ )} +
+
+
+
+ ); +} diff --git a/packages/ui/src/react/components/composable/destination-address-input.tsx b/packages/ui/src/react/components/composable/destination-address-input.tsx new file mode 100644 index 0000000..850176e --- /dev/null +++ b/packages/ui/src/react/components/composable/destination-address-input.tsx @@ -0,0 +1,87 @@ +"use client"; + +import type { Chain } from "@swapkit/helpers"; +import { cn } from "../../../lib/utils"; +import { Button } from "../ui/button"; +import { Card, CardContent } from "../ui/card"; +import { Input } from "../ui/input"; + +export function DestinationAddressInput({ + chain, + customAddress, + error, + isExpanded, + isOutputChainConnected, + isWalletConnected, + walletAddress, + onAddressChange, + onExpandedChange, +}: { + chain: Chain | undefined; + customAddress: string; + error: string | null; + isExpanded: boolean; + isOutputChainConnected: boolean; + isWalletConnected: boolean; + walletAddress: string; + onAddressChange: (address: string) => void; + onExpandedChange: (expanded: boolean) => void; +}) { + if (!isWalletConnected || !chain) return null; + + // Output chain IS connected and field is collapsed — show compact address card + if (isOutputChainConnected && !isExpanded) { + return ( + + + + Receiving at{" "} + + {walletAddress.slice(0, 6)}...{walletAddress.slice(-4)} + + + + + + ); + } + + const hasError = !!error; + + // Output chain NOT connected OR field expanded — show address input + return ( + + +

+ {hasError + ? error + : isOutputChainConnected + ? "Enter a custom receiving address" + : "Enter a receiving address or connect a wallet"} +

+ + onAddressChange(e.target.value)} + placeholder={`${chain} address`} + value={customAddress} + /> + + {isOutputChainConnected && ( + + )} +
+
+ ); +} diff --git a/packages/ui/src/react/components/composable/route-provider-parts.tsx b/packages/ui/src/react/components/composable/route-provider-parts.tsx new file mode 100644 index 0000000..bc4deb6 --- /dev/null +++ b/packages/ui/src/react/components/composable/route-provider-parts.tsx @@ -0,0 +1,285 @@ +"use client"; + +import { AssetValue, PriorityLabel, type QuoteResponseRoute } from "@swapkit/helpers"; +import { match } from "ts-pattern"; +import { cn, formatTokenAmount } from "../../../lib/utils"; +import { formatProviderName } from "../../hooks/use-swap-quote"; +import { getProviderLogoUrl } from "../config"; +import { AssetIcon } from "../simple/asset-icon"; + +// Build stable React keys for repeated providers. A multi-hop route can hit +// the same provider twice (e.g. ONEINCH on both legs), so we suffix each +// occurrence with its index to keep keys unique without falling back to a +// raw array index. +function keyedProviders(providers: ReadonlyArray) { + const counts = new Map(); + return providers.map((provider, index) => { + const occurrence = (counts.get(provider) ?? 0) + 1; + counts.set(provider, occurrence); + return { index, key: `${provider}#${occurrence}`, provider }; + }); +} + +// Sized for the collapsed quote header by default; consumers (dialog rows) can +// bump it up. Face-piles when more than one provider with negative margin and +// a ring matching the surface so logos read distinct from each other. +export function StackedProviderLogos({ + providers, + size = 24, + ringColor = "sk-ui-ring-background", + className, +}: { + providers: ReadonlyArray; + size?: number; + ringColor?: string; + className?: string; +}) { + if (!providers?.length) return null; + + return ( + + {keyedProviders(providers).map(({ provider, key, index }) => ( + {formatProviderName(provider)} 0 && "sk-ui-ring-2", + index > 0 && ringColor, + )} + height={size} + key={key} + onError={(e) => { + e.currentTarget.style.display = "none"; + }} + src={getProviderLogoUrl(provider)} + style={{ + height: size, + marginLeft: index === 0 ? 0 : -Math.round(size / 3), + width: size, + zIndex: providers.length - index, + }} + title={formatProviderName(provider)} + width={size} + /> + ))} + + ); +} + +export function pathLabel(providers: ReadonlyArray): string { + const names = providers.map(formatProviderName); + if (names.length <= 1) return names[0] ?? ""; + // Three or more providers compress the middle to keep the label single-line + // at the 380px widget width: "1inch → … → Chainflip". + if (names.length > 3) return `${names[0]} → … → ${names[names.length - 1]}`; + return names.join(" → "); +} + +function tagLabel(tags: ReadonlyArray | undefined): string | null { + return ( + match(tags) + .when( + (t): t is PriorityLabel[] => Array.isArray(t) && t.includes(PriorityLabel.RECOMMENDED), + () => "Recommended", + ) + .when( + (t): t is PriorityLabel[] => Array.isArray(t) && t.includes(PriorityLabel.CHEAPEST), + () => "Cheapest", + ) + .when( + (t): t is PriorityLabel[] => Array.isArray(t) && t.includes(PriorityLabel.FASTEST), + () => "Fastest", + ) + .otherwise(() => null) ?? null + ); +} + +// Sits at the top-right of the card, straddling its border so the inline row +// has room for the path + timer + amount. The fill is an opaque equivalent of +// the inline `bg-success` (translucent green @ 0.16) composited over whichever +// surface the ribbon straddles — the card by default, the base background for +// dialog rows. Computing it live with `color-mix` keeps it in sync when a +// studio user re-themes either token, instead of muddying as a translucent +// chip would over the row border. +export function RoutePriorityRibbon({ + tags, + className, + surfaceVar = "--sk-ui-card", +}: { + tags?: ReadonlyArray; + className?: string; + /** Theme variable for the surface the ribbon sits over. */ + surfaceVar?: "--sk-ui-card" | "--sk-ui-background"; +}) { + const label = tagLabel(tags); + if (!label) return null; + return ( + + {label} + + ); +} + +function safeTicker(asset: string | undefined): string { + if (!asset) return ""; + try { + return AssetValue.from({ asset }).ticker ?? asset; + } catch { + // Fall back to the suffix after the chain dot if AssetValue can't parse. + return asset.split(".")[1]?.split("-")[0] ?? asset; + } +} + +export type RouteLeg = NonNullable[number]; + +// Vertical timeline laid out as input asset → provider step → mid asset → … → +// receive asset. Mirrors the design's expanded detail. +export function RouteLegsTimeline({ + legs, + outAmount, + outTicker, + sellAmount, + sellTicker, +}: { + legs: ReadonlyArray; + outAmount?: string | number | null; + outTicker?: string | null; + sellAmount?: string | number | null; + sellTicker?: string | null; +}) { + if (!legs?.length) return null; + + type AssetNode = { type: "asset"; asset: string; role: "pay" | "mid" | "receive" }; + type StepNode = { type: "step"; leg: RouteLeg }; + type Node = AssetNode | StepNode; + + const nodes: Node[] = [{ asset: legs[0]?.sellAsset ?? "", role: "pay", type: "asset" }]; + legs.forEach((leg, index) => { + nodes.push({ leg, type: "step" }); + nodes.push({ asset: leg.buyAsset, role: index === legs.length - 1 ? "receive" : "mid", type: "asset" }); + }); + + return ( +
    + {nodes.map((node, index) => { + const isFirst = index === 0; + const isLast = index === nodes.length - 1; + const key = node.type === "asset" ? `asset-${index}-${node.asset}` : `step-${index}-${node.leg.provider}`; + return ( +
  1. + {/* Rail + marker */} +
    + {!isFirst && ( + + )} + {!isLast && ( + + )} + {node.type === "asset" ? ( + // Reuse AssetIcon so the timeline marker is identical to + // every other place the widget shows assets (asset select, + // wallet drawer): real token icon + chain badge bottom-right + // for non-native tokens, deterministic-hue fallback if the + // icon URL 404s. + + + + ) : ( + // Larger than the asset markers (size-8 vs size-6) so the + // provider reads as the actor mediating between assets, not + // a peer node. Matches the design's 32px provider vs 24px asset. + {formatProviderName(node.leg.provider)} { + e.currentTarget.style.visibility = "hidden"; + }} + src={getProviderLogoUrl(node.leg.provider)} + width={32} + /> + )} +
    + + {/* Content */} + {node.type === "asset" ? ( + + ) : ( + + )} +
  2. + ); + })} +
+ ); +} + +function RouteAssetRow({ + asset, + role, + sellAmount, + sellTicker, + outAmount, + outTicker, +}: { + asset: string; + role: "pay" | "mid" | "receive"; + sellAmount?: string | number | null; + sellTicker?: string | null; + outAmount?: string | number | null; + outTicker?: string | null; +}) { + const ticker = safeTicker(asset); + const chain = asset.split(".")[0] ?? ""; + + return ( +
+
+ {ticker} + {chain && {chain}} +
+ {role === "pay" && sellAmount != null && ( +
+ You send + + {formatTokenAmount(sellAmount)} {sellTicker ?? ticker} + +
+ )} + {role === "receive" && outAmount != null && ( +
+ You receive + + {formatTokenAmount(outAmount)} {outTicker ?? ticker} + +
+ )} +
+ ); +} + +function RouteStepRow({ leg }: { leg: RouteLeg }) { + return ( +
+ + {formatProviderName(leg.provider)} + + + Swap Provider + +
+ ); +} diff --git a/packages/ui/src/react/components/composable/swap-amount-input.tsx b/packages/ui/src/react/components/composable/swap-amount-input.tsx new file mode 100644 index 0000000..79f2f06 --- /dev/null +++ b/packages/ui/src/react/components/composable/swap-amount-input.tsx @@ -0,0 +1,38 @@ +import { Loader2Icon } from "lucide-react"; +import { cn } from "../../../lib/utils"; +import { Input } from "../ui/input"; + +export function SwapAmountInput({ + amount, + setAmount, + isLoading, + formattedAmountUSD, + disabled = false, + className, +}: { + amount: string | null | undefined; + formattedAmountUSD: string | undefined; + isLoading?: boolean; + disabled?: boolean; + className?: string; + setAmount?: (amount: string) => void; +}) { + return ( +
+ setAmount?.(e.target.value)} + placeholder="0.00" + type="text" + value={amount ?? "0.00"} + /> + +
+ {isLoading && } + + {formattedAmountUSD} +
+
+ ); +} diff --git a/packages/ui/src/react/components/composable/swap-asset-item.tsx b/packages/ui/src/react/components/composable/swap-asset-item.tsx new file mode 100644 index 0000000..dc2b07e --- /dev/null +++ b/packages/ui/src/react/components/composable/swap-asset-item.tsx @@ -0,0 +1,33 @@ +"use client"; + +import { AssetValue } from "@swapkit/helpers"; +import type { Ref } from "react"; +import { cn } from "../../../lib/utils"; +import { AssetIcon } from "../simple/asset-icon"; + +type SwapAssetItemProps = { + asset: string | null | undefined; + className?: string; + logoURI?: string; + ref?: Ref; +}; + +export function SwapAssetItem({ asset, className, logoURI, ref }: SwapAssetItemProps) { + if (!asset) return null; + + const assetValue = AssetValue.from({ asset }); + + return ( +
+ + +
+ + {assetValue?.ticker} + + + {assetValue?.chain} +
+
+ ); +} diff --git a/packages/ui/src/react/components/composable/swap-asset-select.tsx b/packages/ui/src/react/components/composable/swap-asset-select.tsx new file mode 100644 index 0000000..52e8b14 --- /dev/null +++ b/packages/ui/src/react/components/composable/swap-asset-select.tsx @@ -0,0 +1,294 @@ +"use client"; + +import { Chain, getChainConfig } from "@swapkit/helpers"; +import { ChevronDownIcon, ListFilterIcon, Loader2Icon, SearchIcon } from "lucide-react"; +import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { cn, formatCurrency } from "../../../lib/utils"; +import { useFilteredSortedAssets } from "../../hooks/use-filtered-sorted-assets"; +import { useMediaQuery } from "../../hooks/use-media-query"; +import { showModal, useModal } from "../../hooks/use-modal"; +import { useTokenPrices } from "../../hooks/use-token-prices"; +import { useWalletsConfig } from "../../swapkit-config-context"; +import { useSwapKitStore } from "../../swapkit-context"; +import { ChainIcon } from "../simple/chain-icon"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../ui/dialog"; +import { Input } from "../ui/input"; +import { ChainFilterPopover } from "./chain-filter-popover"; +import { ChainFilterSheet } from "./chain-filter-sheet"; +import { SwapAssetItem } from "./swap-asset-item"; + +// Quick-filter pills shown under the search bar. First-class chains most users swap to/from. +const POPULAR_CHAIN_PILLS = [Chain.Bitcoin, Chain.Ethereum, Chain.Solana, Chain.Tron, Chain.Base] as const; + +export const SwapAssetSelect = memo(function SwapAssetSelect({ + selectedAsset, + setSelectedAsset, + isOutputSelect = false, +}: { + selectedAsset: string | undefined; + setSelectedAsset: (asset: string) => void; + isOutputSelect?: boolean; +}) { + const handleSelectAssetClick = async () => { + const { confirmed, data: assetIdentifier } = await showModal( + , + ); + + if (!confirmed) return; + + setSelectedAsset(assetIdentifier); + }; + + return ( + + ); +}); + +export function SwapAssetSelectTokenDialog({ isOutputSelect = false }: { isOutputSelect?: boolean }) { + const modal = useModal(); + + const { assets, filters, isSearchingTokens, setFilters, tokenLogoUrls } = useFilteredSortedAssets({ + filterBySwapTo: isOutputSelect, + }); + const { pricesByTokenId } = useTokenPrices(); + const { isFetchingSwapTo } = useSwapKitStore(); + const { effectiveChains, isChainAllowed } = useWalletsConfig(); + + const popularChainPills = useMemo(() => POPULAR_CHAIN_PILLS.filter(isChainAllowed), [isChainAllowed]); + + const [selectedNetworks, setSelectedNetworks] = useState([]); + const [chainFilterOpen, setChainFilterOpen] = useState(false); + const chainFilterTriggerRef = useRef(null); + // Mobile breakpoint per the design — keeps the asset list out from behind the picker + // and gives the search input the keyboard real estate it needs. + const isMobileChainFilter = useMediaQuery("(max-width: 639px)"); + + useEffect(() => { + setFilters((f) => ({ ...f, selectedNetworks })); + }, [selectedNetworks, setFilters]); + + const searchQuery = filters?.searchQuery ?? ""; + const hasActiveFilters = searchQuery.length > 0 || selectedNetworks.length > 0; + const isLoadingSwapTo = isOutputSelect && isFetchingSwapTo; + + const clearFilters = useCallback(() => { + setSelectedNetworks([]); + setFilters((f) => ({ ...f, searchQuery: "" })); + }, [setFilters]); + + // Split into held vs rest. `assets` from the hook is already sorted balance-first, + // but the visual grouping requires explicit partitioning. + const { held, rest } = useMemo(() => { + const limited = assets?.slice(0, 100) ?? []; + const h: typeof limited = []; + const r: typeof limited = []; + for (const a of limited) { + if ((a?.getValue?.("number") ?? 0) > 0) h.push(a); + else r.push(a); + } + return { held: h, rest: r }; + }, [assets]); + + return ( + + + + Select token + + + {/* Search + chain filter popover trigger */} +
+
+ setFilters((f) => ({ ...f, searchQuery: e.target.value }))} + placeholder="Search by name, symbol or address" + value={searchQuery} + /> + {isSearchingTokens ? ( + + ) : ( + + )} +
+ +
+ + {isMobileChainFilter ? ( + + ) : ( + chainFilterOpen && ( + setChainFilterOpen(false)} + selected={selectedNetworks} + triggerRef={chainFilterTriggerRef} + /> + ) + )} +
+
+ + {/* Popular chain pills — quick toggles */} +
+ {popularChainPills.map((chain) => { + const cfg = getChainConfig(chain); + const isOn = selectedNetworks.includes(chain); + return ( + + ); + })} +
+ + {/* Scrollable grouped list. DialogContent is a fixed height on desktop (620px), so flex-1 here fills the remaining space. */} +
+ {isLoadingSwapTo && ( +
+ + Finding available pairs… +
+ )} + + {!isLoadingSwapTo && held.length === 0 && rest.length === 0 ? ( +
+ No assets found + + Try changing the selected networks or the search query + + {hasActiveFilters && ( + + )} +
+ ) : !isLoadingSwapTo ? ( + <> + {held.length > 0 && ( + + {held.map((asset) => ( + modal.resolve({ confirmed: true, data: identifier })} + priceUSD={pricesByTokenId?.get(asset.toString())?.priceUSD} + /> + ))} + + )} + {rest.length > 0 && ( + + {rest.map((asset) => ( + modal.resolve({ confirmed: true, data: identifier })} + priceUSD={pricesByTokenId?.get(asset.toString())?.priceUSD} + /> + ))} + + )} + + ) : null} +
+
+
+ ); +} + +function AssetGroup({ title, children }: { title: string; children: React.ReactNode }) { + return ( +
+
+ {title} +
+
{children}
+
+ ); +} + +function AssetRow({ + asset, + logoURI, + onSelect, + priceUSD, +}: { + asset: ReturnType["assets"][number]; + logoURI: string | undefined; + onSelect: (identifier: string) => void; + priceUSD: number | undefined; +}) { + const identifier = asset.toString(); + const heldAmount = asset?.getValue("number") ?? 0; + const hasBalance = heldAmount > 0; + + return ( + + ); +} diff --git a/packages/ui/src/react/components/composable/swap-input-chain-selector.tsx b/packages/ui/src/react/components/composable/swap-input-chain-selector.tsx new file mode 100644 index 0000000..65163e8 --- /dev/null +++ b/packages/ui/src/react/components/composable/swap-input-chain-selector.tsx @@ -0,0 +1,69 @@ +"use client"; + +import type { AssetValue } from "@swapkit/helpers"; +import { SwapAmountInput } from "./swap-amount-input"; +import { SwapAssetSelect } from "./swap-asset-select"; + +export function SwapInputWithChainSelector({ + label, + formattedAmountUSD, + + isSwapping, + isLoading, + isOutputSelect = false, + + selectedAsset, + setSelectedAsset, + + amount, + setAmount, + + balance, +}: { + label: string; + formattedAmountUSD: string | undefined; + + isSwapping: boolean; + isLoading?: boolean; + isOutputSelect?: boolean; + + selectedAsset: string | undefined; + setSelectedAsset: (asset: string) => void; + + amount: string | null | undefined; + setAmount?: (amount: string) => void; + + balance?: AssetValue | null; +}) { + const isInputDisabled = !selectedAsset || isSwapping || isLoading || !setAmount; + + return ( +
+ {label} + +
+
+ + + {balance && ( + + Bal: {balance.toSignificant(6)} + + )} +
+ + +
+
+ ); +} diff --git a/packages/ui/src/react/components/composable/swap-quote-preview.tsx b/packages/ui/src/react/components/composable/swap-quote-preview.tsx new file mode 100644 index 0000000..9b3bd25 --- /dev/null +++ b/packages/ui/src/react/components/composable/swap-quote-preview.tsx @@ -0,0 +1,224 @@ +"use client"; + +import { ArrowLeftRight, ChevronRight, InfoIcon, TimerIcon } from "lucide-react"; +import { type ReactNode, useState } from "react"; +import { formatTokenAmount } from "../../../lib/utils"; +import { useMediaQuery } from "../../hooks/use-media-query"; +import { showModal } from "../../hooks/use-modal"; +import type { UseSwapQuoteReturn } from "../../hooks/use-swap-quote"; +import { SwapQuoteRouteSelectDialog } from "../dialogs/swap-quote-route-select-dialog"; +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "../ui/accordion"; +import { Button } from "../ui/button"; +import { Card, CardContent, CardHeader } from "../ui/card"; +import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "../ui/sheet"; +import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip"; +import { pathLabel, RouteLegsTimeline, RoutePriorityRibbon, StackedProviderLogos } from "./route-provider-parts"; + +// Each fees-row info icon surfaces a short explanation. Desktop uses Radix +// Tooltip (hover-driven); on touch Radix Tooltip's pointerdown handler closes +// what just opened, so mobile gets a top-sliding Sheet instead — tap the +// icon, sheet slides in with the title + body, tap outside / close to dismiss. +// Rendered as inline-block + baseline-aligned so the icon flows with the +// preceding text rather than dropping to its own line when the label wraps. +function FeeInfo({ title, children }: { title: ReactNode; children: ReactNode }) { + const isMobile = useMediaQuery("(max-width: 639px)"); + const [open, setOpen] = useState(false); + + const trigger = ( + + ); + + if (isMobile) { + return ( + <> + {trigger} + + + + {title} + {children} + + + + + ); + } + + return ( + + {trigger} + {children} + + ); +} + +export function SwapQuotePreview({ + selectedRoute, + routes, + setSelectedRouteIndex, + className, +}: { + selectedRoute: UseSwapQuoteReturn["selectedRoute"]; + routes: UseSwapQuoteReturn["routes"]; + setSelectedRouteIndex: UseSwapQuoteReturn["setSelectedRouteIndex"]; + className?: string; +}) { + if (!selectedRoute) return null; + + const selectQuoteRoute = async () => { + const { confirmed, data: selectedRouteIndex } = await showModal( + , + ); + + if (!confirmed) return; + + setSelectedRouteIndex(selectedRouteIndex); + }; + + const providers = selectedRoute.route?.providers ?? []; + const legs = selectedRoute.route?.legs ?? []; + const tags = selectedRoute.tags; + + return ( + // sk-ui-relative on the wrapper so the corner ribbon positions against the + // card edge (Card itself has no overflow:hidden so the ribbon doesn't clip). +
+ + + + + + + + + + + + + 1 {selectedRoute?.inputAssetTicker} ≈ {formatTokenAmount(selectedRoute?.expectedBuyAmountFor1Input)}{" "} + {selectedRoute?.outputAssetTicker} + + + + Fees: {selectedRoute?.formattedTotalFeesUSD} + + + + + {legs.length > 0 && ( + <> + +
+ + )} + +
    +
  • + + Minimum received after slippage ({selectedRoute?.formattedMaxSlippagePercentage}) + + The smallest amount you'll receive if the price moves against you within your slippage + tolerance. If the route would deliver less than this, the swap is cancelled. + + + + + {formatTokenAmount(selectedRoute?.expectedBuyAmountMaxSlippage)}{" "} + {selectedRoute?.outputAssetTicker} + +
  • + +
  • + + Liquidity fee + + Cost of sourcing the output asset along this route. May include pool fees, bridge spreads, or + DEX-aggregator pricing depending on the provider. + + + + {selectedRoute?.formattedLiquidityFeeUSD === "$0.00" ? ( + FREE + ) : ( + + {selectedRoute?.formattedLiquidityFeeUSD} + + )} +
  • + +
  • + + Exchange fee + Fee taken to provide you with the swap service. + + + {selectedRoute?.formattedExchangeFeeUSD === "$0.00" ? ( + FREE + ) : ( + + {selectedRoute?.formattedExchangeFeeUSD} + + )} +
  • + +
  • + + Inbound network fee + + Gas paid to the source chain to send your input into the route. Varies with current network + conditions. + + + + {selectedRoute?.formattedInboundNetworkFeeUSD === "$0.00" ? ( + FREE + ) : ( + + {selectedRoute?.formattedInboundNetworkFeeUSD} + + )} +
  • +
+ + + + + +
+ ); +} diff --git a/packages/ui/src/react/components/composable/transaction-history-drawer.tsx b/packages/ui/src/react/components/composable/transaction-history-drawer.tsx new file mode 100644 index 0000000..2d2a5d6 --- /dev/null +++ b/packages/ui/src/react/components/composable/transaction-history-drawer.tsx @@ -0,0 +1,185 @@ +"use client"; + +import { AssetValue } from "@swapkit/helpers"; +import { ArrowRight, CheckCircle2, ExternalLink, History, ShieldCheck, Trash2, XCircle } from "lucide-react"; +import { useCallback, useMemo, useState } from "react"; +import { showModal, useModal } from "../../hooks/use-modal"; +import { + type TransactionRecord, + type TransactionStatus, + useTransactionHistory, +} from "../../stores/transaction-history-store"; +import { AssetIcon } from "../simple/asset-icon"; +import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "../ui/sheet"; + +export function showTransactionHistoryDrawer() { + return showModal(); +} + +function getRelativeTime(timestamp: number) { + const now = Date.now(); + const diff = now - timestamp; + const seconds = Math.floor(diff / 1000); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + + if (days > 0) return `${days}d ago`; + if (hours > 0) return `${hours}h ago`; + if (minutes > 0) return `${minutes}m ago`; + return "just now"; +} + +function StatusIcon({ status }: { status: TransactionStatus }) { + switch (status) { + case "completed": + return ; + case "failed": + return ; + default: + return
; + } +} + +function truncateHash(hash: string) { + if (hash.length <= 12) return hash; + return `${hash.slice(0, 6)}...${hash.slice(-4)}`; +} + +function formatAmount(amount: string | undefined, asset: string | undefined) { + if (!amount || !asset) return null; + try { + const assetValue = AssetValue.from({ asset, value: amount }); + return assetValue.toSignificant(6); + } catch { + return amount; + } +} + +function TransactionItem({ transaction }: { transaction: TransactionRecord }) { + const handleClick = useCallback(() => { + const url = `https://track.swapkit.dev/?hash=${transaction.hash}&chainId=${transaction.chainId}`; + window.open(url, "_blank", "noopener,noreferrer"); + }, [transaction.hash, transaction.chainId]); + + const sellTicker = transaction.sellAsset ? AssetValue.from({ asset: transaction.sellAsset }).ticker : null; + const buyTicker = transaction.buyAsset ? AssetValue.from({ asset: transaction.buyAsset }).ticker : null; + const sellAmount = formatAmount(transaction.sellAmount, transaction.sellAsset); + const buyAmount = formatAmount(transaction.buyAmount, transaction.buyAsset); + + return ( + + ); +} + +export function TransactionHistoryDrawer() { + const modal = useModal(); + const { transactions, clearHistory } = useTransactionHistory(); + const [showConfirm, setShowConfirm] = useState(false); + + const handleClearHistory = useCallback(() => { + if (showConfirm) { + clearHistory(); + setShowConfirm(false); + } else { + setShowConfirm(true); + setTimeout(() => setShowConfirm(false), 3000); + } + }, [showConfirm, clearHistory]); + + const sortedTransactions = useMemo(() => { + return [...transactions].sort((a, b) => b.timestamp - a.timestamp); + }, [transactions]); + + return ( + + + + Transaction History + + {transactions.length === 0 + ? "No transactions yet" + : `${transactions.length} transaction${transactions.length !== 1 ? "s" : ""}`} + + + +
+ {sortedTransactions.length > 0 ? ( + sortedTransactions.map((tx) => ) + ) : ( +
+
+ +

No transactions yet

+

+ Your swap and approval transactions will appear here +

+
+
+ )} +
+ + {transactions.length > 0 && ( + + )} +
+
+ ); +} diff --git a/packages/ui/src/react/components/config.ts b/packages/ui/src/react/components/config.ts new file mode 100644 index 0000000..221cec7 --- /dev/null +++ b/packages/ui/src/react/components/config.ts @@ -0,0 +1,215 @@ +import type { Chain, ProviderName, TokenNames } from "@swapkit/helpers"; +import { WalletOption } from "@swapkit/helpers"; + +const getAssetsBaseUrl = () => { + if (import.meta.env?.MODE === "development") { + return "https://storage.googleapis.com/sk-apiv2-dev-token-list-swapkit"; + } + + return "https://storage.googleapis.com/sk-apiv2-token-list-swapkit"; +}; + +export const getTokenLogoUrl = (token: TokenNames | (string & {})) => { + return `${getAssetsBaseUrl()}/images/${token?.toLowerCase()}.png`; +}; + +export const getProviderLogoUrl = (provider: ProviderName | (string & {})) => { + const normalizedProvider = provider?.replace(/(_V\d+|_STREAMING)$/g, "").toLowerCase(); + return `${getAssetsBaseUrl()}/images/providers/${normalizedProvider}.png`; +}; + +export const getChainLogoUrl = (chain: Chain | (string & {})) => { + return `${getAssetsBaseUrl()}/images/chains/${chain?.toLowerCase()}.${chain?.toLowerCase()}.png`; +}; + +export const getWalletLogoUrl = (wallet: WalletOption | (string & {})) => { + return `${getAssetsBaseUrl()}/images/wallets/${wallet?.toLowerCase()}.png`; +}; + +export const WALLET_DISPLAY_NAMES: Partial> = { + [WalletOption.BITGET]: "Bitget", + [WalletOption.BRAVE]: "Brave", + [WalletOption.COINBASE_MOBILE]: "Coinbase", + [WalletOption.COINBASE_WEB]: "Coinbase", + [WalletOption.COSMOSTATION]: "Cosmostation", + [WalletOption.CTRL]: "CTRL", + [WalletOption.EIP6963]: "Browser Wallet", + [WalletOption.EXODUS]: "Exodus", + [WalletOption.KEEPKEY]: "KeepKey", + [WalletOption.KEEPKEY_BEX]: "KeepKey", + [WalletOption.KEPLR]: "Keplr", + [WalletOption.KEYSTORE]: "Keystore", + [WalletOption.LEAP]: "Leap", + [WalletOption.LEDGER]: "Ledger", + [WalletOption.METAMASK]: "MetaMask", + [WalletOption.OKX]: "OKX", + [WalletOption.OKX_MOBILE]: "OKX", + [WalletOption.ONEKEY]: "OneKey", + [WalletOption.PASSKEYS]: "Passkeys", + [WalletOption.PHANTOM]: "Phantom", + [WalletOption.RADIX_WALLET]: "Radix Wallet", + [WalletOption.TALISMAN]: "Talisman", + [WalletOption.TREZOR]: "Trezor", + [WalletOption.TRONLINK]: "TronLink", + [WalletOption.TRUSTWALLET_WEB]: "Trust Wallet", + [WalletOption.VULTISIG]: "Vultisig", + [WalletOption.WALLETCONNECT]: "WalletConnect", + [WalletOption.WALLET_SELECTOR]: "Wallet Selector", + [WalletOption.XAMAN]: "Xaman", +}; + +/** + * Theme tokens for the SwapKit widget. + * Color values should be in HSL format: "H S% L%" or "H S% L% / A". + * + * Note: These map to dedicated theme variables (--sk-bg-*, --sk-ui-accent, etc.) + * to avoid conflicts with component-level styles. + */ +export interface SwapKitThemeTokens { + /** Main widget background color */ + background?: string; + /** Elevated surface color (cards, dialogs) */ + surface?: string; + /** Hover state overlay */ + hover?: string; + /** Active/pressed state overlay */ + active?: string; + /** Modal backdrop overlay */ + overlay?: string; + /** Primary foreground (primary button background) */ + primaryForeground?: string; + /** Main text color */ + text?: string; + /** Muted/subtle text color */ + mutedForeground?: string; + /** Muted text (alias for mutedForeground) */ + mutedText?: string; + /** Text color on primary buttons (for contrast on bright backgrounds) */ + primaryButtonText?: string; + /** Brand/accent color (steppers, progress indicators, highlights) */ + accent?: string; + /** Text on accent backgrounds */ + accentForeground?: string; + /** Primary button background color */ + primaryButton?: string; + /** Primary button text color */ + primaryButtonForeground?: string; + /** Border color */ + border?: string; + /** Base border radius used by rounded UI surfaces */ + radius?: string; + /** Font family stack applied to the widget root */ + fontFamily?: string; +} + +/** @deprecated Use SwapKitThemeTokens instead. */ +export type SwapKitColors = SwapKitThemeTokens; + +/** Default token values for dark theme */ +export const DEFAULT_THEME_TOKENS: Required = { + accent: "140 87% 79%", + accentForeground: "140 6% 8%", + active: "0 0% 100% / 0.12", + background: "140 6% 8%", + border: "0 0% 100% / 0.12", + fontFamily: + 'ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"', + hover: "0 0% 100% / 0.08", + mutedForeground: "0 0% 100% / 0.64", + mutedText: "0 0% 100% / 0.64", + overlay: "0 0% 0% / 0.8", + primaryButton: "0 0% 100% / 0.92", + primaryButtonForeground: "140 6% 8%", + primaryButtonText: "140 6% 8%", + primaryForeground: "140 87% 79%", + radius: "0.5rem", + surface: "120 3% 13%", + text: "0 0% 100% / 0.92", +}; + +/** @deprecated Use DEFAULT_THEME_TOKENS instead. */ +export const DEFAULT_COLORS = DEFAULT_THEME_TOKENS; + +/** CSS variable names mapped to SwapKitThemeTokens keys */ +const THEME_TOKEN_VAR_MAP: Record = { + accent: "--sk-ui-accent", + accentForeground: "--sk-ui-accent-foreground", + active: "--sk-bg-active", + background: "--sk-bg", + border: "--sk-ui-border", + fontFamily: "--sk-ui-font-family", + hover: "--sk-bg-hover", + mutedForeground: "--sk-ui-muted-foreground", + mutedText: "--sk-ui-muted-foreground", + overlay: "--sk-bg-overlay", + primaryButton: "--sk-ui-primary-button", + primaryButtonForeground: "--sk-ui-primary-button-foreground", + primaryButtonText: "--sk-ui-primary-button-text", + primaryForeground: "--sk-ui-primary", + radius: "--sk-ui-radius", + surface: "--sk-bg-surface", + text: "--sk-ui-primary-foreground", +}; + +/** + * Applies custom theme tokens to CSS variables on a DOM element. + * Only sets variables for tokens that are provided. + * Also sets derived variables that reference base variables to ensure + * proper cascading (CSS var() references resolve at definition scope, not use scope). + */ +export function applyThemeTokensToElement(element: HTMLElement, tokens: SwapKitThemeTokens) { + for (const [key, value] of Object.entries(tokens)) { + if (value) { + const varName = THEME_TOKEN_VAR_MAP[key as keyof SwapKitThemeTokens]; + element.style.setProperty(varName, value); + + // Derived variables must be set explicitly (CSS var() resolves at definition scope) + if (key === "background") { + element.style.setProperty("--sk-ui-background", value); + element.style.setProperty("--sk-ui-sidebar-background", value); + element.style.setProperty("--sk-ui-sidebar-primary", value); + } + if (key === "surface") { + element.style.setProperty("--sk-ui-card", value); + element.style.setProperty("--sk-ui-secondary", value); + element.style.setProperty("--sk-ui-muted", value); + } + if (key === "primaryForeground") { + element.style.setProperty("--sk-ui-accent", value); + } + if (key === "primaryButtonText") { + element.style.setProperty("--sk-ui-accent-foreground", value); + } + if (key === "text") { + element.style.setProperty("--sk-ui-foreground", value); + element.style.setProperty("--sk-ui-secondary-foreground", value); + element.style.setProperty("--sk-ui-card-foreground", value); + } + } + } +} + +/** @deprecated Use applyThemeTokensToElement instead. */ +export const applyColorsToElement = applyThemeTokensToElement; + +/** + * Generates inline style object for React components. + * Returns CSS custom property declarations for provided theme tokens. + */ +export function getThemeTokenStyleProps(tokens?: SwapKitThemeTokens): React.CSSProperties { + if (!tokens) return {}; + + const style: Record = {}; + + for (const [key, value] of Object.entries(tokens)) { + if (value) { + const varName = THEME_TOKEN_VAR_MAP[key as keyof SwapKitThemeTokens]; + style[varName] = value; + } + } + + return style as React.CSSProperties; +} + +/** @deprecated Use getThemeTokenStyleProps instead. */ +export const getColorsStyleProps = getThemeTokenStyleProps; diff --git a/packages/ui/src/react/components/dialogs/approval-confirm-dialog.tsx b/packages/ui/src/react/components/dialogs/approval-confirm-dialog.tsx new file mode 100644 index 0000000..732e440 --- /dev/null +++ b/packages/ui/src/react/components/dialogs/approval-confirm-dialog.tsx @@ -0,0 +1,152 @@ +"use client"; + +import { AssetValue, getExplorerAddressUrl } from "@swapkit/helpers"; +import { ExternalLinkIcon, Loader2Icon } from "lucide-react"; +import { useMemo, useState } from "react"; +import { useModal } from "../../hooks/use-modal"; +import { getTokenLogoUrl } from "../config"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../ui/dialog"; + +export interface ApprovalConfirmDialogProps { + tokenAsset: string; + /** Approval amount. Omitted for allowance-less approvals (e.g. a Stellar trustline). */ + amount?: string; + /** The contract being granted the allowance. Omitted when it can't be decoded — the row is hidden rather than guessed. */ + spenderAddress?: string; + /** Dialog heading. Defaults to "Approve Token". */ + title?: string; + /** Optional explanatory copy shown under the token icon (e.g. what a trustline does). */ + description?: string; + isWaiting?: boolean; + onApproveClick?: () => Promise; +} + +export const ApprovalConfirmDialog = ({ + tokenAsset, + amount, + spenderAddress, + title = "Approve Token", + description, + isWaiting: externalIsWaiting = false, + onApproveClick, +}: ApprovalConfirmDialogProps) => { + const modal = useModal(); + const [internalIsWaiting, setInternalIsWaiting] = useState(false); + + const isWaiting = externalIsWaiting || internalIsWaiting; + + const { tokenTicker, tokenLogoUrl, truncatedSpenderAddress, truncatedTokenAddress, tokenUrl, spenderUrl } = + useMemo(() => { + const truncate = (value: string) => `${value.slice(0, 6)}...${value.slice(-4)}`; + + const assetValue = AssetValue.from({ asset: tokenAsset }); + const { chain, address: tokenAddress } = assetValue; + + // Explorer helper throws on unsupported chains — fall back to no link rather than break the dialog. + const safeExplorerUrl = (address?: string) => { + if (!address) return undefined; + try { + return getExplorerAddressUrl({ address, chain }) || undefined; + } catch { + return undefined; + } + }; + + return { + spenderUrl: safeExplorerUrl(spenderAddress), + tokenLogoUrl: getTokenLogoUrl(tokenAsset), + tokenTicker: assetValue.ticker, + tokenUrl: safeExplorerUrl(tokenAddress), + truncatedSpenderAddress: spenderAddress ? truncate(spenderAddress) : undefined, + truncatedTokenAddress: tokenAddress ? truncate(tokenAddress) : undefined, + }; + }, [tokenAsset, spenderAddress]); + + const handleApprove = async () => { + if (onApproveClick) { + setInternalIsWaiting(true); + try { + await onApproveClick(); + modal.resolve({ confirmed: true, data: undefined }); + } catch (error) { + setInternalIsWaiting(false); + throw error; + } + } else { + modal.resolve({ confirmed: true, data: undefined }); + } + }; + + return ( + + + + {title} + + +
+ {tokenTicker} + +
+ + {amount ? `${amount} ${tokenTicker}` : tokenTicker} + +
+ + {description ? ( +

{description}

+ ) : null} + + {isWaiting ? ( +
+ + Waiting for confirmation... +
+ ) : ( +
+ {tokenUrl ? ( + + ) : null} + + {truncatedSpenderAddress ? ( +
+ Spender + + {spenderUrl ? ( + + {truncatedSpenderAddress} + + + ) : ( + {truncatedSpenderAddress} + )} +
+ ) : null} +
+ )} +
+ + +
+
+ ); +}; diff --git a/packages/ui/src/react/components/dialogs/swap-confirm-dialog.tsx b/packages/ui/src/react/components/dialogs/swap-confirm-dialog.tsx new file mode 100644 index 0000000..2a99da7 --- /dev/null +++ b/packages/ui/src/react/components/dialogs/swap-confirm-dialog.tsx @@ -0,0 +1,144 @@ +import { AssetValue } from "@swapkit/helpers"; +import { ChevronDown, MoveDownIcon } from "lucide-react"; +import { useMemo } from "react"; +import { formatTokenAmount } from "../../../lib/utils"; +import { useModal } from "../../hooks/use-modal"; +import type { useSwapQuote } from "../../hooks/use-swap-quote"; +import { SwapAmountInput } from "../composable/swap-amount-input"; +import { SwapAssetItem } from "../composable/swap-asset-item"; +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "../ui/accordion"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../ui/dialog"; + +const CONFIRM_AMOUNT_MAX_SIGNIFICANT_DIGITS = 10; + +function formatConfirmAmount(amount: number | string | null | undefined) { + return formatTokenAmount(amount, { maximumSignificantDigits: CONFIRM_AMOUNT_MAX_SIGNIFICANT_DIGITS }); +} + +export const SwapConfirmDialog = ({ + swapRoute, + destinationAddress, +}: { + swapRoute: NonNullable["selectedRoute"]>; + destinationAddress: string; +}) => { + const modal = useModal(); + + const { totalFeesListItems, swapSummaryListItems } = useMemo(() => { + const totalFeesListItems = [ + { title: "Network fee", value: swapRoute.formattedInboundNetworkFeeUSD }, + { title: "Liquidity fee", value: swapRoute.formattedLiquidityFeeUSD }, + { title: "Exchange fee", value: swapRoute.formattedExchangeFeeUSD }, + ]; + + const buyTicker = swapRoute.route?.buyAsset ? AssetValue.from({ asset: swapRoute.route.buyAsset }).ticker : ""; + + const truncatedAddress = destinationAddress + ? `${destinationAddress.slice(0, 6)}...${destinationAddress.slice(-4)}` + : ""; + + const swapSummaryListItems = [ + { title: "Estimated time", value: swapRoute.formattedEstimatedTime }, + { title: "Max. slippage", value: swapRoute?.formattedMaxSlippagePercentage }, + { title: "Recipient", value: truncatedAddress }, + { title: "Min received", value: `${formatConfirmAmount(swapRoute.expectedBuyAmountMaxSlippage)} ${buyTicker}` }, + ]; + + return { swapSummaryListItems, totalFeesListItems }; + }, [swapRoute, destinationAddress]); + + return ( + + + + Confirm swap + + +
+
+ + + +
+ +
+
+ + + +
+
+ +
+ + + +
+
+ +
+ + + + Total fee + + + + + {swapRoute?.formattedTotalFeesUSD} + + + + +
    + {totalFeesListItems.map((item) => ( +
  • + {item.title} + + + {item.value} + +
  • + ))} +
+
+ +
    + {swapSummaryListItems.map((item) => ( +
  • + {item.title} + + + {item.value} + +
  • + ))} +
+
+
+
+ + + +
+ ); +}; diff --git a/packages/ui/src/react/components/dialogs/swap-quote-route-select-dialog.tsx b/packages/ui/src/react/components/dialogs/swap-quote-route-select-dialog.tsx new file mode 100644 index 0000000..dda66ba --- /dev/null +++ b/packages/ui/src/react/components/dialogs/swap-quote-route-select-dialog.tsx @@ -0,0 +1,66 @@ +import { TimerIcon } from "lucide-react"; +import { cn, formatTokenAmount } from "../../../lib/utils"; +import { useModal } from "../../hooks/use-modal"; +import type { UseSwapQuoteReturn } from "../../hooks/use-swap-quote"; +import { pathLabel, RoutePriorityRibbon, StackedProviderLogos } from "../composable/route-provider-parts"; +import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../ui/dialog"; + +export const SwapQuoteRouteSelectDialog = ({ + routes, + selectedRoute, +}: { + routes: UseSwapQuoteReturn["routes"]; + selectedRoute: UseSwapQuoteReturn["selectedRoute"]; +}) => { + const modal = useModal["routeIndex"]>(); + + return ( + + + + Select route + + +
+ {routes?.map((route) => { + const providers = route?.route?.providers ?? []; + const isSelected = route?.routeIndex === selectedRoute?.routeIndex; + return ( +
+ + +
+ ); + })} +
+
+
+ ); +}; diff --git a/packages/ui/src/react/components/dialogs/unshield-dialog.tsx b/packages/ui/src/react/components/dialogs/unshield-dialog.tsx new file mode 100644 index 0000000..ba1ed1d --- /dev/null +++ b/packages/ui/src/react/components/dialogs/unshield-dialog.tsx @@ -0,0 +1,419 @@ +"use client"; + +import type { AleoWallet } from "@swapkit/toolboxes/aleo"; +import { AlertCircleIcon, CheckCircle2Icon, Loader2Icon, ShieldCheckIcon } from "lucide-react"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { useModal } from "../../hooks/use-modal"; +import { + addAleoShieldedDeliveryHash, + clearAleoUnshieldResumeTransactions, + getAleoShieldedDeliveryHashes, + getAleoUnshieldResumeTransaction, + persistAleoUnshieldResumeTransaction, + removeAleoShieldedDeliveryHashes, +} from "../../lib/aleo-shielded-deliveries"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../ui/dialog"; + +const MICRO_CREDITS_PER_ALEO = 1_000_000n; +const DEFAULT_FEE_RECORD_MICROCREDITS = 4n * MICRO_CREDITS_PER_ALEO; + +type UnshieldState = "idle" | "fetching" | "confirm" | "proving" | "confirming" | "success" | "error"; +type AleoRecord = Awaited>[number]; + +type DeliveryRecords = { deliveryHash: string; records: AleoRecord[]; microcredits: bigint }; + +export type AleoUnshieldWallet = Pick; + +export type UnshieldDialogProps = { + address: string; + deliveryHashes?: readonly string[]; + onCompleted?: (deliveryHashes: readonly string[]) => Promise | void; + onRefreshBalance?: () => Promise; + wallet: AleoUnshieldWallet; +}; + +function formatMicrocredits(microcredits: bigint) { + const whole = microcredits / MICRO_CREDITS_PER_ALEO; + const fraction = (microcredits % MICRO_CREDITS_PER_ALEO).toString().padStart(6, "0").replace(/0+$/, ""); + return fraction ? `${whole}.${fraction}` : whole.toString(); +} + +function truncateHash(hash: string) { + return hash.length <= 18 ? hash : `${hash.slice(0, 10)}...${hash.slice(-6)}`; +} + +function getErrorMessage(error: unknown) { + if (error instanceof Error && error.message) return error.message; + return "The unshield transaction could not be completed. Please try again."; +} + +function extractSplitTransactionId(error: unknown) { + const queue: unknown[] = [error]; + const visited = new Set(); + + while (queue.length) { + const value = queue.shift(); + if (typeof value !== "object" || value === null || visited.has(value)) continue; + visited.add(value); + + const record = value as Record; + if (typeof record.splitTransactionId === "string" && record.splitTransactionId) { + return record.splitTransactionId; + } + + queue.push(record.info, record.error, record.cause); + } + + return undefined; +} + +function getPlannedUnshieldAmount(records: readonly AleoRecord[]) { + const unspent = records.filter((record) => !record.spent).sort((a, b) => (a.microcredits < b.microcredits ? -1 : 1)); + const [onlyRecord] = unspent; + if (!onlyRecord) return 0n; + if (unspent.length === 1) { + return onlyRecord.microcredits > DEFAULT_FEE_RECORD_MICROCREDITS + ? onlyRecord.microcredits - DEFAULT_FEE_RECORD_MICROCREDITS + : 0n; + } + return unspent.at(-1)?.microcredits ?? 0n; +} + +export const UnshieldDialog = ({ + address, + deliveryHashes: deliveryHashesProp, + onCompleted, + onRefreshBalance, + wallet, +}: UnshieldDialogProps) => { + const modal = useModal(); + const [deliveryHashes, setDeliveryHashes] = useState(() => [ + ...new Set(deliveryHashesProp ?? getAleoShieldedDeliveryHashes(address)), + ]); + const [remainingDeliveryHashes, setRemainingDeliveryHashes] = useState([]); + const [state, setState] = useState("idle"); + const [deliveries, setDeliveries] = useState([]); + const [errorMessage, setErrorMessage] = useState(""); + const [resumeTransactionId, setResumeTransactionId] = useState(); + const [publicBalance, setPublicBalance] = useState(); + const [unshieldedMicrocredits, setUnshieldedMicrocredits] = useState(0n); + + const records = useMemo(() => deliveries.flatMap((delivery) => delivery.records), [deliveries]); + const totalMicrocredits = useMemo( + () => deliveries.reduce((total, delivery) => total + delivery.microcredits, 0n), + [deliveries], + ); + const plannedMicrocredits = useMemo(() => getPlannedUnshieldAmount(records), [records]); + const isBusy = state === "proving" || state === "confirming"; + + const fetchRecords = useCallback(async () => { + setState("fetching"); + setErrorMessage(""); + + try { + const fetchedDeliveries = await Promise.all( + deliveryHashes.map(async (deliveryHash) => { + const fetchedRecords = await wallet.getRecords({ transactionIds: [deliveryHash] }); + const unspentRecords = fetchedRecords.filter((record) => !record.spent); + return { + deliveryHash, + microcredits: unspentRecords.reduce((total, record) => total + record.microcredits, 0n), + records: unspentRecords, + }; + }), + ); + const storedResumeTransactionId = getAleoUnshieldResumeTransaction(address, deliveryHashes); + + setDeliveries(fetchedDeliveries); + setResumeTransactionId(storedResumeTransactionId); + + if (storedResumeTransactionId) { + setErrorMessage("A previous unshield split completed, but the final transaction did not. Resume it safely."); + setState("error"); + return; + } + + if (!fetchedDeliveries.some((delivery) => delivery.records.length > 0)) { + setErrorMessage("No unspent shielded records were found for these swap deliveries."); + setState("error"); + return; + } + + setState("confirm"); + } catch (error) { + setErrorMessage(getErrorMessage(error)); + setState("error"); + } + }, [address, deliveryHashes, wallet]); + + useEffect(() => { + void fetchRecords(); + }, [fetchRecords]); + + // Closing the tab mid-proof loses the pass (only a confirmed split is resumable) — + // warn while proving or confirming. + useEffect(() => { + if (!isBusy || typeof window === "undefined") return; + + const handleBeforeUnload = (event: BeforeUnloadEvent) => { + event.preventDefault(); + event.returnValue = ""; + }; + + window.addEventListener("beforeunload", handleBeforeUnload); + return () => window.removeEventListener("beforeunload", handleBeforeUnload); + }, [isBusy]); + + const handleUnshieldNext = useCallback(() => { + if (!remainingDeliveryHashes.length) return; + setRemainingDeliveryHashes([]); + // fetchRecords re-runs via its deliveryHashes dependency once state lands. + setDeliveryHashes([...new Set(remainingDeliveryHashes)]); + }, [remainingDeliveryHashes]); + + const completeUnshield = useCallback( + async (result: Awaited>) => { + setState("confirming"); + try { + await onRefreshBalance?.(); + } catch { + // The toolbox result already contains the refreshed public balance, so a + // secondary widget balance refresh must not turn a successful unshield into an error. + } + let completedDeliveryHashes: string[] = []; + try { + const [deliveryStates, unshieldChangeRecords] = await Promise.all([ + Promise.all( + deliveryHashes.map(async (deliveryHash) => ({ + deliveryHash, + records: await wallet.getRecords({ transactionIds: [deliveryHash] }), + })), + ), + wallet.getRecords({ transactionIds: [result.unshieldTransactionId] }), + ]); + completedDeliveryHashes = deliveryStates + .filter(({ records: deliveryRecords }) => !deliveryRecords.some((record) => !record.spent)) + .map(({ deliveryHash }) => deliveryHash); + // The fee record's private change lands under the unshield transaction — + // track it as a delivery so it stays unshieldable in a later pass. + if (unshieldChangeRecords.some((record) => !record.spent)) { + addAleoShieldedDeliveryHash(address, result.unshieldTransactionId); + } + } catch { + // Preserve hashes when the post-success check fails so shielded funds are + // never hidden from the next session by a transient record lookup error. + } + removeAleoShieldedDeliveryHashes(address, completedDeliveryHashes); + clearAleoUnshieldResumeTransactions(address, deliveryHashes); + await onCompleted?.(completedDeliveryHashes); + setRemainingDeliveryHashes(getAleoShieldedDeliveryHashes(address)); + setPublicBalance(result.publicBalance.toSignificant(6)); + setResumeTransactionId(undefined); + setState("success"); + }, + [address, deliveryHashes, onCompleted, onRefreshBalance, wallet], + ); + + const handleUnshield = useCallback(async () => { + const activeRecords = records.filter((record) => !record.spent); + if (!activeRecords.length) return; + + setUnshieldedMicrocredits(getPlannedUnshieldAmount(activeRecords)); + setState("proving"); + setErrorMessage(""); + + try { + const result = await wallet.unshield({ records: activeRecords }); + await completeUnshield(result); + } catch (error) { + const splitTransactionId = extractSplitTransactionId(error); + if (splitTransactionId) { + persistAleoUnshieldResumeTransaction(address, deliveryHashes, splitTransactionId); + setResumeTransactionId(splitTransactionId); + setErrorMessage( + "The record split completed, but the final unshield transaction did not. Your progress is saved.", + ); + } else { + setErrorMessage(getErrorMessage(error)); + } + setState("error"); + } + }, [address, completeUnshield, deliveryHashes, records, wallet]); + + const handleResume = useCallback(async () => { + if (!resumeTransactionId) return; + + setState("proving"); + setErrorMessage(""); + + try { + const result = await wallet.unshield({ transactionId: resumeTransactionId }); + await completeUnshield(result); + } catch (error) { + const splitTransactionId = extractSplitTransactionId(error) ?? resumeTransactionId; + persistAleoUnshieldResumeTransaction(address, deliveryHashes, splitTransactionId); + setResumeTransactionId(splitTransactionId); + setErrorMessage(getErrorMessage(error)); + setState("error"); + } + }, [address, completeUnshield, deliveryHashes, resumeTransactionId, wallet]); + + return ( + { + if (isBusy && !open) return; + modal.onOpenChange(open); + }}> + { + if (isBusy) event.preventDefault(); + }} + onPointerDownOutside={(event) => { + if (isBusy) event.preventDefault(); + }} + showCloseButton={!isBusy}> + + Unshield Aleo + + + {state === "idle" || state === "fetching" ? ( +
+ +
+

Finding shielded swap deliveries

+

+ Decrypting records locally for this wallet session. +

+
+
+ ) : null} + + {state === "confirm" ? ( + <> +
+
+ +
+

Shielded from swap deliveries

+

{formatMicrocredits(totalMicrocredits)} ALEO

+
+
+
+ +
+ {deliveries.map((delivery) => ( +
+
+

Swap delivery

+

+ {truncateHash(delivery.deliveryHash)} +

+
+ + {formatMicrocredits(delivery.microcredits)} ALEO + +
+ ))} +
+ +

+ Unshielding generates a zero-knowledge proof in this browser. No record plaintext is stored. + {plannedMicrocredits > 0n && plannedMicrocredits < totalMicrocredits + ? " Each pass unshields the largest record — the remainder stays shielded and can be unshielded next." + : ""} + {plannedMicrocredits === 0n + ? ` This record is smaller than the ${formatMicrocredits(DEFAULT_FEE_RECORD_MICROCREDITS)} ALEO fee reserve, so it cannot cover its own unshield fee.` + : ""} +

+ + + + ) : null} + + {state === "proving" ? ( +
+ +
+

Generating zero-knowledge proof

+

+ This can take a minute or two. Keep this tab open. The flow cannot be cancelled while proving. +

+
+
+ ) : null} + + {state === "confirming" ? ( +
+ +
+

Confirming unshield transaction

+

+ The proof was submitted. Refreshing your public Aleo balance now. +

+
+
+ ) : null} + + {state === "success" ? ( +
+ +
+

Unshield complete

+

+ Unshielded amount: {formatMicrocredits(unshieldedMicrocredits)} ALEO +

+

+ Refreshed public balance: {publicBalance ?? "0"} ALEO +

+
+
+ {remainingDeliveryHashes.length ? ( + + ) : null} + +
+
+ ) : null} + + {state === "error" ? ( +
+
+ +
+

Unshield needs attention

+

{errorMessage}

+ {resumeTransactionId ? ( +

+ Split transaction: {truncateHash(resumeTransactionId)} +

+ ) : null} +
+
+ + {resumeTransactionId ? ( + + ) : ( + + )} +
+ ) : null} +
+
+ ); +}; diff --git a/packages/ui/src/react/components/dialogs/wallet-chain-select-dialog.tsx b/packages/ui/src/react/components/dialogs/wallet-chain-select-dialog.tsx new file mode 100644 index 0000000..6b2b0ef --- /dev/null +++ b/packages/ui/src/react/components/dialogs/wallet-chain-select-dialog.tsx @@ -0,0 +1,108 @@ +"use client"; + +import { type Chain, getChainConfig } from "@swapkit/helpers"; +import { AlertTriangleIcon } from "lucide-react"; +import { useState } from "react"; +import { cn } from "../../../lib/utils"; +import { useModal } from "../../hooks/use-modal"; +import { isExperimentalChainForWallet } from "../../lib/experimental-wallets"; +import { useWalletsConfig } from "../../swapkit-config-context"; +import type { WalletDescriptor } from "../../types"; +import { ChainIcon } from "../simple/chain-icon"; +import { WalletIcon } from "../simple/wallet-icon"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog"; +import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip"; + +export function WalletChainSelectDialog({ + wallet, + chains, + defaultChain, + showDeviceHint, +}: { + wallet: WalletDescriptor; + chains: Chain[]; + defaultChain?: Chain; + showDeviceHint?: boolean; +}) { + const modal = useModal(); + const { isDev } = useWalletsConfig(); + const initialChain = defaultChain && chains.includes(defaultChain) ? defaultChain : chains[0]; + // biome-ignore lint/style/noNonNullAssertion: chains is always non-empty + const [selectedChain, setSelectedChain] = useState(initialChain!); + + const chainConfig = getChainConfig(selectedChain); + + return ( + + + + + + Connect {wallet.displayName} + + + +

+ {wallet.displayName} only supports connecting one chain at a time. Please select the chain you want to + connect. +

+ + {showDeviceHint && ( +
+ +

+ Make sure the {chainConfig?.name ?? selectedChain} app is open + on your device before connecting. +

+
+ )} + +
+ {chains.map((chain) => { + const config = getChainConfig(chain); + const isSelected = chain === selectedChain; + const isExperimental = isDev && isExperimentalChainForWallet(wallet.walletOption, chain); + + return ( + + + + + + {config?.name ?? chain} + {isExperimental && ( + + Development only — not supported in production + + )} + + + ); + })} +
+ + + + +
+
+ ); +} diff --git a/packages/ui/src/react/components/dialogs/wallet-chains-config.ts b/packages/ui/src/react/components/dialogs/wallet-chains-config.ts new file mode 100644 index 0000000..1761423 --- /dev/null +++ b/packages/ui/src/react/components/dialogs/wallet-chains-config.ts @@ -0,0 +1,16 @@ +import { Chain } from "@swapkit/helpers"; + +// Widget supported EVM chains - matches API_SUPPORTED_CHAINS from swapkit-context.tsx +export const WIDGET_SUPPORTED_EVM_CHAINS = [ + Chain.Ethereum, + Chain.Arbitrum, + Chain.Avalanche, + Chain.Base, + Chain.BinanceSmartChain, + Chain.Berachain, + Chain.Gnosis, + Chain.Monad, + Chain.Optimism, + Chain.Polygon, + Chain.XLayer, +] as const; diff --git a/packages/ui/src/react/components/dialogs/wallet-connect-dialog.tsx b/packages/ui/src/react/components/dialogs/wallet-connect-dialog.tsx new file mode 100644 index 0000000..a9bf492 --- /dev/null +++ b/packages/ui/src/react/components/dialogs/wallet-connect-dialog.tsx @@ -0,0 +1,817 @@ +"use client"; + +import { + type Chain, + type DerivationPathArray, + type EIP6963AnnounceProviderEvent, + getChainConfig, + WalletOption, +} from "@swapkit/helpers"; +import { + CheckIcon, + ChevronDownIcon, + ChevronRightIcon, + KeyRoundIcon, + ListFilterIcon, + PlusCircleIcon, + SearchIcon, + UploadIcon, + WalletMinimalIcon, + XIcon, +} from "lucide-react"; +import { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { toast } from "sonner"; +import { match } from "ts-pattern"; +import { cn } from "../../../lib/utils"; +import { useMediaQuery } from "../../hooks/use-media-query"; +import { showModal, useModal } from "../../hooks/use-modal"; +import { filterExperimentalChainsForWallet, isExperimentalWallet } from "../../lib/experimental-wallets"; +import { useWalletsConfig } from "../../swapkit-config-context"; +import { API_SUPPORTED_CHAINS, useSwapKit, useSwapKitStore } from "../../swapkit-context"; +import type { WalletDescriptor } from "../../types"; +import { ChainFilterPopover } from "../composable/chain-filter-popover"; +import { ChainFilterSheet } from "../composable/chain-filter-sheet"; +import { ChainIcon } from "../simple/chain-icon"; +import { WalletIcon } from "../simple/wallet-icon"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog"; +import { Input } from "../ui/input"; +import { SWAPKIT_WIDGET_TOASTER_ID } from "../ui/sonner"; +import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip"; +import { WalletChainSelectDialog } from "./wallet-chain-select-dialog"; +import { WIDGET_SUPPORTED_EVM_CHAINS } from "./wallet-chains-config"; +import { supportsXpubDerivation } from "./wallet-derive-address-dialog"; +import { + discoverEIP6963Wallets, + eip6963ToDescriptor, + getWalletOptionForEIP6963, + staticWalletToDescriptor, +} from "./wallet-utils"; + +const SINGLE_CHAIN_CONNECT_WALLETS = new Set([WalletOption.LEDGER, WalletOption.TREZOR]); + +// Values annotated as WalletOption[]: since helpers 5.1.0 the WalletOption registry members are +// literal types, so unannotated collections infer per-group literal unions that reject the wider +// WalletOption values flowing through the filter pipelines below. +const WALLET_GROUPS: Record<"Browser Extensions" | "Hardware Wallets" | "Mobile Wallets" | "Other", WalletOption[]> = { + "Browser Extensions": [ + WalletOption.BITGET, + WalletOption.BRAVE, + WalletOption.COINBASE_WEB, + WalletOption.CTRL, + WalletOption.KEEPKEY_BEX, + WalletOption.KEPLR, + WalletOption.LEAP, + WalletOption.METAMASK, + WalletOption.OKX, + WalletOption.ONEKEY, + WalletOption.PASSKEYS, + WalletOption.PHANTOM, + WalletOption.RADIX_WALLET, + WalletOption.TALISMAN, + ], + "Hardware Wallets": [WalletOption.KEEPKEY, WalletOption.LEDGER, WalletOption.TREZOR], + "Mobile Wallets": [ + WalletOption.COINBASE_MOBILE, + WalletOption.OKX_MOBILE, + WalletOption.TRUSTWALLET_WEB, + WalletOption.VULTISIG, + WalletOption.WALLETCONNECT, + WalletOption.XAMAN, + ], + Other: [WalletOption.KEYSTORE], +}; + +const FEATURED_WALLETS: WalletOption[] = [ + WalletOption.METAMASK, + WalletOption.CTRL, + WalletOption.COINBASE_WEB, + WalletOption.KEYSTORE, + WalletOption.LEDGER, + WalletOption.TREZOR, + WalletOption.BRAVE, + WalletOption.OKX, +]; + +export const ALL_WALLET_OPTIONS = Array.from(new Set([...Object.values(WALLET_GROUPS).flat(), ...FEATURED_WALLETS])); + +function RequiredChainBanner({ + requiredChain, + requiredFor, + filterIsApplied, + onApply, + onDismiss, +}: { + requiredChain: Chain; + /** Whether the banner is asking the user to connect the *input* chain (what they're paying from) or the *output* chain (where the swap settles). */ + requiredFor: "input" | "output"; + filterIsApplied: boolean; + onApply: () => void; + onDismiss: () => void; +}) { + const requiredCfg = getChainConfig(requiredChain); + const chainName = requiredCfg?.name ?? requiredChain; + const headline = requiredFor === "input" ? `You're swapping from ${chainName}` : `Your swap pays out to ${chainName}`; + const subtitle = requiredFor === "input" ? "Pick a wallet that holds it." : "Pick a wallet that supports it."; + return ( +
+ +
+ {headline} + {subtitle} +
+ {filterIsApplied ? ( + + + Filter on + + ) : ( + + )} + +
+ ); +} + +export function WalletConnectDialog({ + requiredChain, + requiredFor = "output", +}: { + requiredChain?: Chain; + requiredFor?: "input" | "output"; +} = {}) { + const modal = useModal(); + const { getWalletExtendedPublicKey } = useSwapKit(); + const { enabledWallets, isWalletAllowed, isChainAllowed, isDev } = useWalletsConfig(); + const walletChainsMap = useSwapKitStore((state) => state.walletChainsMap); + const [isShowingAllWallets, setIsShowingAllWallets] = useState(false); + const [searchQuery, setSearchQuery] = useState(""); + const [chainFilterOpen, setChainFilterOpen] = useState(false); + const [selectedChains, setSelectedChains] = useState([]); + // Below 640px the popover crowds the wallet list — switch to a full-screen sheet. + const isMobileChainFilter = useMediaQuery("(max-width: 639px)"); + const [requiredBannerDismissed, setRequiredBannerDismissed] = useState(false); + const [eip6963Wallets, setEip6963Wallets] = useState([]); + const chainFilterTriggerRef = useRef(null); + + const getWalletChains = useCallback( + (wallet: WalletOption): Chain[] => + filterExperimentalChainsForWallet(wallet, walletChainsMap[wallet] ?? [], isDev).filter(isChainAllowed), + [walletChainsMap, isChainAllowed, isDev], + ); + const getStaticWalletDescriptor = useCallback( + (wallet: WalletOption) => + staticWalletToDescriptor(wallet, getWalletChains(wallet), getWalletExtendedPublicKey(wallet)), + [getWalletChains, getWalletExtendedPublicKey], + ); + + // Shown while still loading (chains === undefined) OR has at least one + // direct-signing chain the integrator has enabled. + const hasDirectSigningChains = useCallback( + (wallet: WalletOption): boolean => { + const chains = walletChainsMap[wallet]; + if (chains === undefined) return true; + return filterExperimentalChainsForWallet(wallet, chains, isDev).some(isChainAllowed); + }, + [walletChainsMap, isChainAllowed, isDev], + ); + + // Discover EIP-6963 wallets on mount + useEffect(() => { + const { providers, cleanup } = discoverEIP6963Wallets(); + + // Convert to descriptors + setEip6963Wallets(providers.map((p) => eip6963ToDescriptor(p, [...WIDGET_SUPPORTED_EVM_CHAINS], walletChainsMap))); + + // Continue listening for late announcements + const handleAnnouncement = (event: Event) => { + const e = event as EIP6963AnnounceProviderEvent; + setEip6963Wallets((prev) => { + const existing = prev.find((w) => w.eip6963Info?.uuid === e.detail.info.uuid); + if (existing) return prev; + return [...prev, eip6963ToDescriptor(e.detail, [...WIDGET_SUPPORTED_EVM_CHAINS], walletChainsMap)]; + }); + }; + + window.addEventListener("eip6963:announceProvider", handleAnnouncement); + + return () => { + cleanup(); + window.removeEventListener("eip6963:announceProvider", handleAnnouncement); + }; + }, [walletChainsMap]); + + // Reset state when dialog closes + useEffect(() => { + if (!modal.open) { + setChainFilterOpen(false); + setSelectedChains([]); + setSearchQuery(""); + setIsShowingAllWallets(false); + setRequiredBannerDismissed(false); + } + }, [modal.open]); + + const filteredFeaturedWallets = useMemo(() => { + const allowed = (wallet: WalletOption) => isWalletAllowed(wallet) && hasDirectSigningChains(wallet); + const featured = FEATURED_WALLETS.filter(allowed); + if (featured.length >= 8) return featured; + + const featuredSet = new Set(featured); + const fillOrder: WalletOption[] = [ + WalletOption.WALLETCONNECT, + WalletOption.PHANTOM, + WalletOption.COINBASE_MOBILE, + WalletOption.BITGET, + WalletOption.KEEPKEY, + WalletOption.KEPLR, + WalletOption.TALISMAN, + WalletOption.VULTISIG, + WalletOption.TRUSTWALLET_WEB, + WalletOption.ONEKEY, + ]; + const fillOrderSet = new Set(fillOrder); + const remaining = Object.values(WALLET_GROUPS) + .flat() + .filter((w) => !fillOrderSet.has(w)); + + for (const wallet of [...fillOrder, ...remaining]) { + if (featured.length >= 8) break; + if (!featuredSet.has(wallet) && allowed(wallet)) { + featured.push(wallet); + featuredSet.add(wallet); + } + } + + return featured; + }, [isWalletAllowed, hasDirectSigningChains]); + + const allAvailableChains = useMemo(() => { + const chains = new Set(); + for (const [wallet, walletChains] of Object.entries(walletChainsMap) as [WalletOption, Chain[] | undefined][]) { + if (!isWalletAllowed(wallet)) continue; + if (!walletChains) continue; + for (const chain of filterExperimentalChainsForWallet(wallet, walletChains, isDev)) { + if (isChainAllowed(chain)) chains.add(chain); + } + } + // Sort by real-world importance / market cap so the filter list matches the wallet rows. + return Array.from(chains).sort((a, b) => rankChain(a) - rankChain(b)); + }, [walletChainsMap, isWalletAllowed, isChainAllowed, isDev]); + + // Filter static wallets based on configuration + const filteredStaticWalletGroups = useMemo(() => { + const groupsToFilter = + enabledWallets === "all" + ? WALLET_GROUPS + : Object.entries(WALLET_GROUPS).reduce( + (acc, [groupName, wallets]) => { + const filtered = wallets.filter((w) => enabledWallets.includes(w)); + if (filtered.length > 0) { + acc[groupName as keyof typeof WALLET_GROUPS] = filtered; + } + return acc; + }, + {} as Partial, + ); + + return Object.entries(groupsToFilter) + ?.map(([groupTitle, wallets]) => { + const matchingWallets = wallets?.filter( + (wallet) => + isWalletAllowed(wallet) && + hasDirectSigningChains(wallet) && + wallet.toLowerCase().includes(searchQuery.toLowerCase()), + ); + + if (matchingWallets?.length === 0) return null; + + return { groupTitle, wallets: matchingWallets }; + }) + ?.filter((group) => group !== null); + }, [enabledWallets, searchQuery, isWalletAllowed, hasDirectSigningChains]); + + const filteredEip6963Wallets = useMemo(() => { + return eip6963Wallets.filter((wallet) => { + if (wallet.eip6963Info) { + const mappedOption = getWalletOptionForEIP6963(wallet.eip6963Info); + if (mappedOption && !isWalletAllowed(mappedOption)) return false; + if (mappedOption && !hasDirectSigningChains(mappedOption)) return false; + } + // EIP-6963 descriptors carry their own supportedChains (EVM fallback for + // unmapped providers), so we filter directly rather than via walletChainsMap. + if (!wallet.supportedChains.some(isChainAllowed)) return false; + if (searchQuery.length >= 1 && !wallet.displayName.toLowerCase().includes(searchQuery.toLowerCase())) { + return false; + } + return true; + }); + }, [eip6963Wallets, searchQuery, isWalletAllowed, hasDirectSigningChains, isChainAllowed]); + + return ( + + + + Connect wallet + + + {requiredChain && !requiredBannerDismissed && ( + setSelectedChains([requiredChain])} + onDismiss={() => setRequiredBannerDismissed(true)} + requiredChain={requiredChain} + requiredFor={requiredFor} + /> + )} + +
+
+ setSearchQuery(e.target.value)} + placeholder="Search wallet provider" + value={searchQuery} + /> + +
+ +
+ + {isMobileChainFilter ? ( + + ) : ( + chainFilterOpen && ( + setChainFilterOpen(false)} + selected={selectedChains} + triggerRef={chainFilterTriggerRef} + /> + ) + )} +
+
+ +
+
+ {/* Detected wallets — always visible (first screen and expanded) */} + {filteredEip6963Wallets.length > 0 && ( +
+ Detected +
+ {filteredEip6963Wallets.map((wallet) => ( + + ))} +
+
+ )} + + {/* Popular wallets - first screen only */} + {!isShowingAllWallets && searchQuery.length < 2 && filteredFeaturedWallets.length > 0 && ( +
+ Popular +
+ {filteredFeaturedWallets.map((wallet) => ( + + ))} +
+
+ )} + + {/* All wallets - animated show/hide (detected already rendered above) */} +
= 2 ? "sk-ui-grid-rows-[1fr]" : "sk-ui-grid-rows-[0fr]", + )}> +
+
+ {/* Static wallet groups */} + {filteredStaticWalletGroups?.map(({ groupTitle, wallets }) => { + if (wallets?.length === 0) return null; + + const isKeystoreGroup = wallets?.length === 1 && wallets[0] === WalletOption.KEYSTORE; + const keystoreDescriptor = isKeystoreGroup + ? getStaticWalletDescriptor(WalletOption.KEYSTORE) + : null; + + return ( +
+ {groupTitle} + +
+ {isKeystoreGroup && keystoreDescriptor ? ( + <> + + + + + ) : ( + wallets?.map((wallet) => ( + + )) + )} +
+
+ ); + })} +
+
+
+
+ {/* Fade the last row so the scroll edge visibly "cuts off" a wallet below — a clear "there's more" hint. + Offset by -1rem so it sits flush with the scroll container's visual bottom (which has -mb-4). */} +
+
+ + + +

+ By connecting your wallet, you agree to our{" "} + + Terms of Service + {" "} + and{" "} + + Privacy Policy + +

+
+ +
+ ); +} + +type KeystoreMethod = "upload" | "create" | "import"; + +const KEYSTORE_METHOD_CONFIG: Record = { + create: { icon: , label: "Create Wallet" }, + import: { icon: , label: "Import Phrase" }, + upload: { icon: , label: "Upload Keystore" }, +}; + +type ConnectWallet = ReturnType["connectWallet"]; + +async function connectNonKeystoreWallet({ + connectWallet, + finalChains, + requiredChain, + wallet, + isDev, +}: { + connectWallet: ConnectWallet; + finalChains: Chain[]; + requiredChain?: Chain; + wallet: WalletDescriptor; + isDev: boolean; +}): Promise<"connected" | "cancelled" | "idle"> { + let chains = filterExperimentalChainsForWallet(wallet.walletOption, finalChains, isDev); + + if (SINGLE_CHAIN_CONNECT_WALLETS.has(wallet.walletOption)) { + const { confirmed, data: selectedChain } = await showModal( + , + ); + + // User dismissed the chain-select step (outside click / X / no selection). + // Leave the outer connect-wallet modal open so they can pick a different wallet. + if (!confirmed || !selectedChain) return "idle"; + chains = [selectedChain as Chain]; + } + + const singleChain = chains.length === 1 ? chains[0] : undefined; + + if (wallet.type === "eip6963" && wallet.walletOption === WalletOption.EIP6963 && wallet.eip6963Provider) { + await connectWallet(WalletOption.EIP6963, chains, wallet.eip6963Provider, wallet.eip6963Info); + return "connected"; + } + + if (singleChain && supportsXpubDerivation(singleChain, wallet)) { + const { WalletDeriveAddressDialog } = await import("./wallet-derive-address-dialog"); + const { confirmed, data } = await showModal<{ + address: string; + derivationPath: DerivationPathArray; + index: number; + }>(); + + if (!confirmed) return "cancelled"; + + if (data) { + await connectWallet(wallet.walletOption, chains, undefined, undefined, data.derivationPath, { + address: data.address, + }); + } + + return "connected"; + } + + await connectWallet(wallet.walletOption, chains); + return "connected"; +} + +function WalletConnectButton({ + wallet, + selectedChains, + requiredChain, + keystoreMethod, + detected, +}: { + wallet: WalletDescriptor; + selectedChains: Chain[]; + requiredChain?: Chain; + keystoreMethod?: KeystoreMethod; + detected?: boolean; +}) { + const { connectWallet, isConnectingWallet, walletType } = useSwapKit(); + const { isDev, isChainAllowed } = useWalletsConfig(); + const modal = useModal(); + + // EIP-6963 descriptors carry an unfiltered EVM fallback list. Filtering once + // here keeps the chain stack and the matching-chain count consistent. + const allowedSupportedChains = useMemo( + () => filterExperimentalChainsForWallet(wallet.walletOption, wallet.supportedChains, isDev).filter(isChainAllowed), + [wallet.supportedChains, wallet.walletOption, isChainAllowed, isDev], + ); + + const supportsSelectedChains = + selectedChains.length === 0 || selectedChains.every((c) => allowedSupportedChains.includes(c)); + + const handleWalletClick = useCallback(async () => { + try { + const supportedChains = wallet.supportedChains; + + if (!supportedChains || supportedChains?.length === 0) { + toast.error("This wallet does not support any chains", { + description: "Please try a different wallet.", + toasterId: SWAPKIT_WIDGET_TOASTER_ID, + }); + modal.resolve({ confirmed: false }); + return; + } + + const chainsToConnect = + selectedChains.length > 0 ? supportedChains.filter((c) => selectedChains.includes(c)) : supportedChains; + + const finalChains = chainsToConnect.length > 0 ? chainsToConnect : supportedChains; + + await match({ keystoreMethod, walletOption: wallet.walletOption }) + .with({ keystoreMethod: "create", walletOption: WalletOption.KEYSTORE }, async () => { + const { WalletKeystoreCreateDialog } = await import("./wallet-keystore-create-dialog"); + const { confirmed } = await showModal(); + modal.resolve(confirmed ? { confirmed: true, data: WalletOption.KEYSTORE } : { confirmed: false }); + }) + .with({ keystoreMethod: "import", walletOption: WalletOption.KEYSTORE }, async () => { + const { WalletKeystorePhraseDialog } = await import("./wallet-keystore-phrase-dialog"); + const { confirmed } = await showModal(); + modal.resolve(confirmed ? { confirmed: true, data: WalletOption.KEYSTORE } : { confirmed: false }); + }) + .with({ walletOption: WalletOption.KEYSTORE }, async () => { + const { WalletKeystoreConnectDialog } = await import("./wallet-keystore-connect-dialog"); + const { confirmed } = await showModal(); + modal.resolve(confirmed ? { confirmed: true, data: WalletOption.KEYSTORE } : { confirmed: false }); + }) + .otherwise(async () => { + const result = await connectNonKeystoreWallet({ connectWallet, finalChains, isDev, requiredChain, wallet }); + + if (result === "connected") modal.resolve({ confirmed: true, data: wallet.walletOption }); + if (result === "cancelled") modal.resolve({ confirmed: false }); + }); + } catch { + toast.error("Failed to connect your wallet", { + description: "Make sure your wallet is connected and accessible by the browser.", + toasterId: SWAPKIT_WIDGET_TOASTER_ID, + }); + modal.resolve({ confirmed: false }); + } + }, [connectWallet, modal, wallet, selectedChains, requiredChain, keystoreMethod, isDev]); + + const methodConfig = keystoreMethod ? KEYSTORE_METHOD_CONFIG[keystoreMethod] : null; + const isSingleChain = SINGLE_CHAIN_CONNECT_WALLETS.has(wallet.walletOption); + const matchingChains = + selectedChains.length === 0 + ? allowedSupportedChains + : allowedSupportedChains.filter((c) => selectedChains.includes(c)); + const displayName = methodConfig ? methodConfig.label : wallet.displayName; + + if (!supportsSelectedChains) { + return ( + + ); + } + + return ( + + ); +} + +// Rank map derived from API_SUPPORTED_CHAINS, which is already ordered by real-world +// importance / market cap. Chains not in the list land at the end in a stable order. +const CHAIN_RANK = new Map(API_SUPPORTED_CHAINS.map((chain, index) => [chain, index])); + +function rankChain(chain: Chain): number { + return CHAIN_RANK.get(chain) ?? Number.MAX_SAFE_INTEGER; +} + +function ChainStack({ chains, max = 6 }: { chains: Chain[]; max?: number }) { + const sorted = [...chains].sort((a, b) => rankChain(a) - rankChain(b)); + const shown = sorted.slice(0, max); + const extra = sorted.length - shown.length; + return ( + + {shown.map((c, i) => ( + + + + ))} + {extra > 0 && ( + + +{extra} + + )} + + ); +} + +function WalletGroupHeader({ children, count }: { children: ReactNode; count?: number }) { + return ( +
+ {children} + {typeof count === "number" && count > 0 && ( + + {count} + + )} +
+ ); +} diff --git a/packages/ui/src/react/components/dialogs/wallet-derive-address-dialog.tsx b/packages/ui/src/react/components/dialogs/wallet-derive-address-dialog.tsx new file mode 100644 index 0000000..7fea0bf --- /dev/null +++ b/packages/ui/src/react/components/dialogs/wallet-derive-address-dialog.tsx @@ -0,0 +1,618 @@ +"use client"; + +import { + type AssetValue, + type Chain, + type DerivationPathArray, + derivationPathToString, + getChainConfig, + NetworkDerivationPath, + type UTXOChain, + UTXOChains, +} from "@swapkit/helpers"; +import type { GetExtendedPublicKey } from "@swapkit/wallets"; +import { AlertTriangleIcon, CheckIcon, LoaderIcon, RefreshCwIcon } from "lucide-react"; +import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react"; +import { cn } from "../../../lib/utils"; +import { useModal } from "../../hooks/use-modal"; +import type { WalletDescriptor } from "../../types"; +import { ChainIcon } from "../simple/chain-icon"; +import { WalletIcon } from "../simple/wallet-icon"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog"; + +function isUtxoChain(chain: Chain): chain is UTXOChain { + return (UTXOChains as readonly Chain[]).includes(chain); +} + +/** Whether to show the derive-address flow for a given wallet+chain combo. */ +export type WalletDescriptorWithXpub = WalletDescriptor & { getExtendedPublicKey: GetExtendedPublicKey }; + +export function supportsXpubDerivation(chain: Chain, wallet: WalletDescriptor): wallet is WalletDescriptorWithXpub { + return isUtxoChain(chain) && typeof wallet.getExtendedPublicKey === "function"; +} + +// Number of indices derived per batch. Each index expands to 2 rows (receive + change), +// so a batch of 5 renders 10 rows at a time. +const ADDRESS_BATCH_SIZE = 5; + +type DerivedRow = { + index: number; + change: boolean; + path: DerivationPathArray; + pathString: string; + address: string; + balance: AssetValue | null; + balanceLoading: boolean; +}; + +type XpubRequest = { chain: Chain; derivationPath: DerivationPathArray; wallet: WalletDescriptorWithXpub }; + +async function fetchXpub({ request, account }: { request: XpubRequest; account: number }): Promise { + const raw = await request.wallet.getExtendedPublicKey(request.chain, request.derivationPath, { + accountIndex: account, + }); + const xpub = raw?.xpub; + if (!xpub || typeof xpub !== "string") { + console.warn("[derive-address] unexpected getExtendedPublicKey return:", raw); + throw new Error(`Wallet did not return a usable extended public key for account ${account}`); + } + return xpub; +} + +async function deriveBatchFromXpub({ + xpub, + chain, + startIndex, + count, + account, + derivationPath, +}: { + xpub: string; + chain: UTXOChain; + startIndex: number; + count: number; + account: number; + derivationPath: DerivationPathArray; +}): Promise { + const { deriveAddressesFromXpub, getUTXOAddressPath } = await import("@swapkit/toolboxes/utxo"); + const derived = deriveAddressesFromXpub({ accountIndex: account, chain, count, startIndex, xpub }); + + // deriveAddressesFromXpub returns both receiving (change=false) and change (change=true) branches. + // Order pairs so the grid reads: index0/receive, index0/change, index1/receive, … + const rows = derived.map((item) => { + const path = getUTXOAddressPath({ + accountIndex: account, + chain, + change: item.change, + derivationPath, + index: item.index, + }); + const row: DerivedRow = { + address: item.address, + balance: null, + balanceLoading: true, + change: item.change, + index: item.index, + path, + pathString: derivationPathToString(path), + }; + return row; + }); + + rows.sort((a, b) => a.index - b.index || Number(a.change) - Number(b.change)); + return rows; +} + +/** + * Map common hardware-wallet / transport errors into a short, user-facing message. + * Returns null when no specific pattern matched — caller should keep the original message. + */ +function friendlyDeviceError(err: unknown): string | null { + const raw = err instanceof Error ? `${err.name}: ${err.message}` : String(err ?? ""); + const lower = raw.toLowerCase(); + + if (lower.includes("disconnected") || lower.includes("device_disconnected") || lower.includes("no device")) { + return "Device disconnected. Reconnect it, unlock, and open the app for this chain."; + } + if (lower.includes("locked")) { + return "Device is locked. Unlock it and keep the app for this chain open."; + } + if (lower.includes("app is not open") || lower.includes("0x6d02") || lower.includes("0x6e00")) { + return "The wallet app on your device is not open. Open the app for this chain and retry."; + } + if (lower.includes("access denied") || lower.includes("notallowed") || lower.includes("user declined")) { + return "Permission denied at the browser or device prompt. Grant access and retry."; + } + if (lower.includes("busy")) { + return "Device is busy with another request. Wait a moment and retry."; + } + if (lower.includes("timeout") || lower.includes("timed out")) { + return "Device didn't respond in time. Reconnect and retry."; + } + return null; +} + +async function fetchBalance({ chain, address }: { chain: UTXOChain; address: string }): Promise { + try { + const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo"); + const toolbox = getUtxoToolbox(chain); + const balances = await toolbox.getBalance(address, true); + return balances?.[0] ?? null; + } catch (error) { + console.warn(`[derive-address] balance fetch failed for ${address}:`, error); + return null; + } +} + +export function WalletDeriveAddressDialog({ wallet, chain }: { wallet: WalletDescriptorWithXpub; chain: Chain }) { + const modal = useModal<{ address: string; derivationPath: DerivationPathArray; index: number }>(); + + const [rows, setRows] = useState([]); + const [selectedRowId, setSelectedRowId] = useState(null); + const [loadingMore, setLoadingMore] = useState(false); + const [initialLoading, setInitialLoading] = useState(true); + const [error, setError] = useState(null); + const [showChange, setShowChange] = useState(true); + const [jumpIndex, setJumpIndex] = useState(""); + const [account, setAccount] = useState(0); + const [accountDraft, setAccountDraft] = useState("0"); + + const accountInputId = useId(); + const jumpInputId = useId(); + + // xpub is cached per-account: switching accounts triggers one extra device call + // for that account's xpub, then every derive on that account is local. + const xpubByAccount = useRef>(new Map()); + const initialLoadStarted = useRef(false); + const rowRefs = useRef>(new Map()); + // Queue a one-shot scroll-into-view for the row we expect to land in rows. + // Tracked by (index, change) because the exact pathString isn't known synchronously — + // derivation uses SDK helpers that are lazy-loaded with the toolbox. + const scrollTargetRef = useRef<{ index: number; change: boolean } | null>(null); + // Remember the last attempted load so the Retry button can re-run exactly that call. + const lastAttemptRef = useRef<{ startIndex: number } | null>(null); + const [retrying, setRetrying] = useState(false); + + const chainConfig = getChainConfig(chain); + const derivationPath = NetworkDerivationPath[chain] as DerivationPathArray; + + const loadMore = useCallback( + async (startIndex: number) => { + if (!isUtxoChain(chain)) return; + lastAttemptRef.current = { startIndex }; + try { + // Fetch xpub once per account — subsequent derives at that account are local. + let xpub = xpubByAccount.current.get(account); + if (!xpub) { + xpub = await fetchXpub({ account, request: { chain, derivationPath, wallet } }); + xpubByAccount.current.set(account, xpub); + } + + const newRows = await deriveBatchFromXpub({ + account, + chain, + count: ADDRESS_BATCH_SIZE, + derivationPath, + startIndex, + xpub, + }); + setRows((prev) => [...prev, ...newRows]); + setError(null); + + // Fetch balances in parallel; update each row as it resolves (keyed by pathString to tell receive vs change apart). + for (const row of newRows) { + void fetchBalance({ address: row.address, chain }).then((balance) => { + setRows((prev) => + prev.map((r) => (r.pathString === row.pathString ? { ...r, balance, balanceLoading: false } : r)), + ); + }); + } + } catch (err) { + console.warn("[derive-address] loadMore failed:", err); + const friendly = friendlyDeviceError(err); + const raw = err instanceof Error ? err.message : "Failed to derive addresses"; + setError(friendly ?? raw); + } + }, + [account, chain, derivationPath, wallet], + ); + + const handleRetry = useCallback(async () => { + if (retrying) return; + setRetrying(true); + setError(null); + const attempt = lastAttemptRef.current?.startIndex ?? 0; + await loadMore(attempt); + setRetrying(false); + }, [loadMore, retrying]); + + // Initial batch on mount — ref-guarded to survive React StrictMode double-mount, + // which would otherwise fire two concurrent device calls and trip Ledger's transport lock. + useEffect(() => { + if (initialLoadStarted.current) return; + initialLoadStarted.current = true; + void (async () => { + await loadMore(0); + setInitialLoading(false); + })(); + }, [loadMore]); + + // When the chosen account changes, wipe state and re-derive from the fresh xpub. + const previousAccountRef = useRef(account); + useEffect(() => { + if (previousAccountRef.current === account) return; + previousAccountRef.current = account; + setRows([]); + setSelectedRowId(null); + setError(null); + setInitialLoading(true); + void (async () => { + await loadMore(0); + setInitialLoading(false); + })(); + }, [account, loadMore]); + + // After any derivation that might have produced our scroll target, scroll-select it once. + useEffect(() => { + const target = scrollTargetRef.current; + if (!target) return; + const row = rows.find((r) => r.index === target.index && r.change === target.change); + if (!row) return; + scrollTargetRef.current = null; + setSelectedRowId(row.pathString); + requestAnimationFrame(() => { + rowRefs.current.get(row.pathString)?.scrollIntoView({ behavior: "smooth", block: "center" }); + }); + }, [rows]); + + const handleLoadMore = useCallback(async () => { + setLoadingMore(true); + const nextStartIndex = rows.length ? Math.max(...rows.map((row) => row.index)) + 1 : 0; + await loadMore(nextStartIndex); + setLoadingMore(false); + }, [loadMore, rows]); + + const handleConnect = useCallback(() => { + if (!selectedRowId) return; + const row = rows.find((r) => r.pathString === selectedRowId); + if (!row) return; + modal.resolve({ confirmed: true, data: { address: row.address, derivationPath: row.path, index: row.index } }); + }, [modal, rows, selectedRowId]); + + const formattedBalance = useMemo(() => { + return (row: DerivedRow) => { + if (row.balanceLoading) return "…"; + if (!row.balance) return "0"; + return row.balance.toSignificant(6); + }; + }, []); + + const hasBalance = (row: DerivedRow) => { + if (!row.balance) return false; + try { + return row.balance.gt(0); + } catch { + return Number(row.balance.toSignificant(6)) > 0; + } + }; + + const visibleRows = useMemo(() => (showChange ? rows : rows.filter((r) => !r.change)), [rows, showChange]); + + const selectedRow = useMemo(() => rows.find((r) => r.pathString === selectedRowId) ?? null, [rows, selectedRowId]); + + const handleJumpSubmit = useCallback( + (e: React.FormEvent) => { + e.preventDefault(); + const target = Number.parseInt(jumpIndex, 10); + if (!Number.isFinite(target) || target < 0) return; + + // Queue the scroll+select for when the receive row at `target` exists in state. + scrollTargetRef.current = { change: false, index: target }; + + // If already present, the rows effect will fire on next render thanks to the ref being set. + const existing = rows.find((r) => r.index === target && !r.change); + if (existing) { + setSelectedRowId(existing.pathString); + requestAnimationFrame(() => { + rowRefs.current.get(existing.pathString)?.scrollIntoView({ behavior: "smooth", block: "center" }); + }); + scrollTargetRef.current = null; + return; + } + + // Otherwise derive from current tail up through target, in batches of ADDRESS_BATCH_SIZE. + void (async () => { + setLoadingMore(true); + const maxIndex = rows.length ? Math.max(...rows.map((r) => r.index)) : -1; + let start = maxIndex + 1; + while (start <= target) { + await loadMore(start); + start += ADDRESS_BATCH_SIZE; + } + setLoadingMore(false); + })(); + }, + [jumpIndex, loadMore, rows], + ); + + const handleAccountCommit = useCallback( + (e?: React.FormEvent) => { + e?.preventDefault(); + const next = Number.parseInt(accountDraft, 10); + if (!Number.isFinite(next) || next < 0) { + setAccountDraft(String(account)); + return; + } + if (next === account) return; + setAccount(next); + }, + [account, accountDraft], + ); + + const truncateAddress = (addr: string, lead = 14, trail = 8) => + addr.length <= lead + trail + 1 ? addr : `${addr.slice(0, lead)}…${addr.slice(-trail)}`; + + return ( + + + + + + + Select {chainConfig?.name ?? chain} address + + + +

+ Pick the address to connect. Balances are fetched live from your wallet. +

+ + {/* Control strip — account switcher, jump-to-index, change-path toggle */} +
+
+ +
+ # + handleAccountCommit()} + onChange={(e) => setAccountDraft(e.target.value.replace(/[^0-9]/g, ""))} + placeholder="0" + title="BIP44 account index (slot 2 of m/44'/coin'/account'/change/index)" + value={accountDraft} + /> +
+
+ +
+ +
+ +
+ # + setJumpIndex(e.target.value.replace(/[^0-9]/g, ""))} + placeholder="0" + title="Derive through this receive index and select it" + value={jumpIndex} + /> +
+
+ +
+ +
+
+ + {error && ( +
+ +

{error}

+ +
+ )} + +
+ {initialLoading && rows.length === 0 && ( +
+ + Deriving addresses… +
+ )} + + {visibleRows.map((row) => { + const isSelected = row.pathString === selectedRowId; + const funded = hasBalance(row); + return ( + // biome-ignore lint/a11y/useSemanticElements: button+role=radio keeps rich layout (address, path, balance) inside the clickable region; a native +
+ + {/* Selection summary strip — shows which address will be connected */} +
+ {selectedRow ? ( + <> +
+ Selected + + {truncateAddress(selectedRow.address, 18, 12)} + +
+
+ + {formattedBalance(selectedRow)} {chain} + +
+ + ) : ( + Select an address above + )} +
+ + +
+ + + +
+
+ +
+ ); +} diff --git a/packages/ui/src/react/components/dialogs/wallet-keystore-connect-dialog.tsx b/packages/ui/src/react/components/dialogs/wallet-keystore-connect-dialog.tsx new file mode 100644 index 0000000..ec4a0fa --- /dev/null +++ b/packages/ui/src/react/components/dialogs/wallet-keystore-connect-dialog.tsx @@ -0,0 +1,294 @@ +"use client"; + +import { zodResolver } from "@hookform/resolvers/zod"; +import type { Chain } from "@swapkit/helpers"; +import type { Keystore } from "@swapkit/wallet-keystore"; +import { CheckIcon, UploadIcon } from "lucide-react"; +import { useCallback, useEffect, useId } from "react"; +import { useForm } from "react-hook-form"; +import { toast } from "sonner"; +import { z } from "zod"; +import { cn } from "../../../lib/utils"; +import { useModal } from "../../hooks/use-modal"; +import { captureWidgetError } from "../../sentry"; +import { useSwapKit } from "../../swapkit-context"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog"; +import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "../ui/form"; +import { Input } from "../ui/input"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs"; + +const step1Schema = z.object({ + currentStep: z.literal(1), + keystoreFile: z.object({ + file: z.instanceof(File), + keystore: z.object({ + crypto: z.object({ + cipher: z.string(), + cipherparams: z.object({ iv: z.string() }), + ciphertext: z.string(), + kdf: z.string(), + kdfparams: z.object({ c: z.number(), dklen: z.number(), prf: z.string(), salt: z.string() }), + mac: z.string(), + }), + meta: z.string(), + version: z.number(), + }), + }), + password: z.string(), +}); + +const step2Schema = step1Schema.extend({ + currentStep: z.literal(2), + password: z.string().min(1, "Password is required"), +}); + +const step3Schema = step2Schema.extend({ currentStep: z.literal(3) }); + +const keystoreSchema = z.discriminatedUnion("currentStep", [step1Schema, step2Schema, step3Schema]); + +type KeystoreFormData = z.infer; + +export interface WalletKeystoreConnectDialogProps { + selectedChains?: Chain[]; +} + +export function WalletKeystoreConnectDialog({ selectedChains }: WalletKeystoreConnectDialogProps) { + const modal = useModal(); + const fileInputId = useId(); + const { connectKeystore, isConnectingWallet } = useSwapKit(); + + const form = useForm({ + defaultValues: { currentStep: 1, keystoreFile: { file: undefined, keystore: undefined }, password: "" }, + resolver: zodResolver(keystoreSchema), + }); + + // Clear sensitive data when dialog unmounts + useEffect(() => { + return () => { + form.setValue("password", ""); + }; + }, [form]); + + const handleConnectWallet = form.handleSubmit(async (data) => { + if (!data?.password) return; + + try { + const { KEYSTORE_SUPPORTED_CHAINS } = await import("@swapkit/wallet-keystore"); + + // Use selected chains if provided, otherwise use all supported chains + const chainsToConnect = + selectedChains && selectedChains.length > 0 + ? KEYSTORE_SUPPORTED_CHAINS.filter((c) => selectedChains.includes(c)) + : KEYSTORE_SUPPORTED_CHAINS; + + // If filter results in empty (no overlap), fall back to all + const finalChains = chainsToConnect.length > 0 ? chainsToConnect : KEYSTORE_SUPPORTED_CHAINS; + + await connectKeystore({ ...data?.keystoreFile, chains: finalChains }, data?.password); + + // Clear password from memory immediately after successful use + form.setValue("password", ""); + form.setValue("currentStep", 3); + } catch { + form.setError("password", { message: "You used an incorrect password or something went wrong." }); + } + }); + + const handleKeystoreFileChange = useCallback( + async (e: React.ChangeEvent) => { + const keystoreFile = e?.target?.files?.[0]; + + if (!keystoreFile) return; + + try { + form.setValue( + "keystoreFile", + { file: keystoreFile, keystore: JSON.parse(await keystoreFile.text()) as Keystore }, + { shouldValidate: true }, + ); + } catch (error) { + console.error("Error parsing keystore file:", error); + captureWidgetError(error, { category: "wallet", tags: { action: "parse", provider: "keystore" } }); + toast.error("Something went wrong while parsing the keystore file", { + description: "Please check if the file is a valid keystore file", + }); + } + }, + [form], + ); + + const [currentStep, keystoreFile] = form.watch(["currentStep", "keystoreFile"]); + + return ( + + + + Connect keystore wallet + + + form.setValue("currentStep", Number.parseInt(newValue, 10) as 1 | 2 | 3)} + value={currentStep.toString()}> + + 1 && "!sk-ui-bg-accent")} value="1" variant="stepper" /> + 2 && "!sk-ui-bg-accent")} value="2" variant="stepper" /> + = 3 && "!sk-ui-bg-accent")} value="3" variant="stepper" /> + + + +
{ + form.setValue("currentStep", 2); + })}> +
+ + Upload your keystore file to connect your wallet + + +
+ Keystore file + + + +
+ + {keystoreFile?.file && ( +
+ Selected: {keystoreFile?.file?.name} ({(keystoreFile?.file?.size / 1024).toFixed(1)} KB) +
+ )} +
+ + + + + + +
+
+ + +
+
+ + Enter the password for your keystore file + + + {keystoreFile?.file && ( +
+
+ + + Keystore file: {keystoreFile?.file?.name} + +
+
+ )} + + + ( + + Password + + + + + + + + )} + /> + +
+ + + + + + + +
+ + +
+
+ +

Wallet Connected Successfully!

+

+ Your keystore wallet is now connected and ready to use. +

+
+
+ + + + + + +
+
+
+
+ ); +} diff --git a/packages/ui/src/react/components/dialogs/wallet-keystore-create-dialog.tsx b/packages/ui/src/react/components/dialogs/wallet-keystore-create-dialog.tsx new file mode 100644 index 0000000..1092d42 --- /dev/null +++ b/packages/ui/src/react/components/dialogs/wallet-keystore-create-dialog.tsx @@ -0,0 +1,326 @@ +"use client"; + +import type { Chain } from "@swapkit/helpers"; +import type { Keystore } from "@swapkit/wallet-keystore"; +import { CheckIcon, CopyIcon, DownloadIcon, ShieldAlertIcon } from "lucide-react"; +import { useCallback, useEffect, useId, useRef, useState } from "react"; +import { toast } from "sonner"; +import { cn } from "../../../lib/utils"; +import { useModal } from "../../hooks/use-modal"; +import { useSwapKit } from "../../swapkit-context"; +import { Button } from "../ui/button"; +import { Checkbox } from "../ui/checkbox"; +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog"; +import { Input } from "../ui/input"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs"; + +export interface WalletKeystoreCreateDialogProps { + selectedChains?: Chain[]; +} + +export function WalletKeystoreCreateDialog({ selectedChains }: WalletKeystoreCreateDialogProps) { + const modal = useModal(); + const { connectKeystore } = useSwapKit(); + const checkboxId = useId(); + const passwordInputId = useId(); + const confirmPasswordInputId = useId(); + + const [currentStep, setCurrentStep] = useState(1); + const [phrase, setPhrase] = useState(""); + const [savedPhrase, setSavedPhrase] = useState(false); + const [password, setPassword] = useState(""); + const [confirmPassword, setConfirmPassword] = useState(""); + const [passwordError, setPasswordError] = useState(""); + const [isConnecting, setIsConnecting] = useState(false); + const [keystore, setKeystore] = useState(null); + const [copied, setCopied] = useState(false); + const phraseRef = useRef(""); + + // Generate phrase on mount + useEffect(() => { + let cancelled = false; + void (async () => { + const { generatePhrase } = await import("@swapkit/wallet-keystore"); + const generated = generatePhrase(12); + if (!cancelled) { + phraseRef.current = generated; + setPhrase(generated); + } + })(); + return () => { + cancelled = true; + }; + }, []); + + // Clear sensitive refs and state on unmount + useEffect(() => { + return () => { + phraseRef.current = ""; + setPhrase(""); + setPassword(""); + setConfirmPassword(""); + setKeystore(null); + }; + }, []); + + const phraseWords = phrase ? phrase.split(" ") : []; + + const handleCopyPhrase = useCallback(async () => { + if (!phrase) return; + await navigator.clipboard.writeText(phrase); + setCopied(true); + toast.success("Recovery phrase copied to clipboard", { description: "Auto-clears in 60s. Store it securely." }); + setTimeout(() => setCopied(false), 2000); + // Auto-clear clipboard after 60s, but only if it still contains our phrase + setTimeout(async () => { + try { + const current = await navigator.clipboard.readText(); + if (current === phrase) await navigator.clipboard.writeText(""); + } catch { + // Clipboard read may be blocked; fall back to unconditional clear + try { + await navigator.clipboard.writeText(""); + } catch { + // User denied clipboard access — nothing we can do + } + } + }, 60_000); + }, [phrase]); + + const handleConnect = useCallback(async () => { + if (password.length < 8) { + setPasswordError("Password must be at least 8 characters"); + return; + } + if (password !== confirmPassword) { + setPasswordError("Passwords do not match"); + return; + } + + setPasswordError(""); + + try { + setIsConnecting(true); + setCurrentStep(3); + + const { encryptToKeyStore, KEYSTORE_SUPPORTED_CHAINS } = await import("@swapkit/wallet-keystore"); + + const encrypted = await encryptToKeyStore(phraseRef.current, password); + setKeystore(encrypted); + + const chainsToConnect = + selectedChains && selectedChains.length > 0 + ? KEYSTORE_SUPPORTED_CHAINS.filter((c) => selectedChains.includes(c)) + : KEYSTORE_SUPPORTED_CHAINS; + + const finalChains = chainsToConnect.length > 0 ? chainsToConnect : KEYSTORE_SUPPORTED_CHAINS; + + await connectKeystore( + { chains: finalChains, file: new File([JSON.stringify(encrypted)], "keystore.json"), keystore: encrypted }, + password, + ); + + // Clear sensitive data after successful connection + setPassword(""); + setConfirmPassword(""); + setPhrase(""); + phraseRef.current = ""; + setCurrentStep(4); + } catch { + setPasswordError("Something went wrong while creating the wallet."); + setCurrentStep(2); + // Clear sensitive data even on failure — user may abandon the dialog + setPassword(""); + setConfirmPassword(""); + setPhrase(""); + phraseRef.current = ""; + } finally { + setIsConnecting(false); + } + }, [password, confirmPassword, selectedChains, connectKeystore]); + + const handleDownloadKeystore = useCallback(() => { + if (!keystore) return; + const blob = new Blob([JSON.stringify(keystore, null, 2)], { type: "application/json" }); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = "keystore.json"; + a.click(); + URL.revokeObjectURL(url); + }, [keystore]); + + return ( + + + + Create new wallet + + + + + 1 && "!sk-ui-bg-accent")} value="1" variant="stepper" /> + 2 && "!sk-ui-bg-accent")} value="2" variant="stepper" /> + 3 && "!sk-ui-bg-accent")} value="3" variant="stepper" /> + = 4 && "!sk-ui-bg-accent")} value="4" variant="stepper" /> + + + {/* Step 1: Generate & Display Phrase */} + +
+
+
+ +
+

+ Write down your recovery phrase +

+

+ This is the only way to recover your wallet. Store it securely and never share it with anyone. +

+
+
+
+ +
+ {phraseWords.map((word, index) => { + const key = `word-${index}-${word}`; + return ( +
+ {index + 1}. + {word} +
+ ); + })} +
+ + + +
+ setSavedPhrase(checked === true)} + /> + +
+
+ + + + + + +
+ + {/* Step 2: Set Password */} + +
+ + Create a password to encrypt your wallet keystore file + + +
+ + { + setPassword(e.target.value); + setPasswordError(""); + }} + placeholder="Enter password (min. 8 characters)..." + type="password" + value={password} + /> +
+ +
+ + { + setConfirmPassword(e.target.value); + setPasswordError(""); + }} + placeholder="Confirm your password..." + type="password" + value={confirmPassword} + /> +
+ + {passwordError &&

{passwordError}

} +
+ + + + + + +
+ + {/* Step 3: Connecting */} + +
+
+
+

Creating and connecting your wallet...

+
+
+ + + {/* Step 4: Success */} + +
+
+ +

Wallet Created Successfully!

+

+ Your new keystore wallet is connected and ready to use. Download your keystore file to access your + wallet in the future. +

+
+ + {keystore && ( + + )} +
+ + + + +
+ + +
+ ); +} diff --git a/packages/ui/src/react/components/dialogs/wallet-keystore-phrase-dialog.tsx b/packages/ui/src/react/components/dialogs/wallet-keystore-phrase-dialog.tsx new file mode 100644 index 0000000..27a4b82 --- /dev/null +++ b/packages/ui/src/react/components/dialogs/wallet-keystore-phrase-dialog.tsx @@ -0,0 +1,294 @@ +"use client"; + +import type { Chain } from "@swapkit/helpers"; +import type { Keystore } from "@swapkit/wallet-keystore"; +import { CheckCircleIcon, CheckIcon, DownloadIcon, XCircleIcon } from "lucide-react"; +import { useCallback, useEffect, useId, useRef, useState } from "react"; +import { cn } from "../../../lib/utils"; +import { useModal } from "../../hooks/use-modal"; +import { useSwapKit } from "../../swapkit-context"; +import { Button } from "../ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog"; +import { Input } from "../ui/input"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs"; +import { Textarea } from "../ui/textarea"; + +export interface WalletKeystorePhraseDialogProps { + selectedChains?: Chain[]; +} + +export function WalletKeystorePhraseDialog({ selectedChains }: WalletKeystorePhraseDialogProps) { + const modal = useModal(); + const { connectKeystore } = useSwapKit(); + const passwordInputId = useId(); + const confirmPasswordInputId = useId(); + + const [currentStep, setCurrentStep] = useState(1); + const [phrase, setPhrase] = useState(""); + const [phraseValid, setPhraseValid] = useState(null); + const [password, setPassword] = useState(""); + const [confirmPassword, setConfirmPassword] = useState(""); + const [passwordError, setPasswordError] = useState(""); + const [isConnecting, setIsConnecting] = useState(false); + const [keystore, setKeystore] = useState(null); + const phraseRef = useRef(""); + // Cache the dynamically-imported keystore module so we don't re-fetch it on every keystroke + const keystoreModuleRef = useRef(null); + + // Clear sensitive refs and state on unmount + useEffect(() => { + return () => { + phraseRef.current = ""; + setPhrase(""); + setPassword(""); + setConfirmPassword(""); + setKeystore(null); + }; + }, []); + + const wordCount = phrase.trim() ? phrase.trim().split(/\s+/).length : 0; + + const handlePhraseChange = useCallback(async (value: string) => { + setPhrase(value); + phraseRef.current = value; + + const trimmed = value.trim(); + if (!trimmed) { + setPhraseValid(null); + return; + } + + if (!keystoreModuleRef.current) { + keystoreModuleRef.current = await import("@swapkit/wallet-keystore"); + } + // Re-read trimmed value from ref to avoid acting on a stale closure if newer keystrokes have arrived + setPhraseValid(keystoreModuleRef.current.validatePhrase(phraseRef.current.trim())); + }, []); + + const handleConnect = useCallback(async () => { + if (password.length < 8) { + setPasswordError("Password must be at least 8 characters"); + return; + } + if (password !== confirmPassword) { + setPasswordError("Passwords do not match"); + return; + } + + setPasswordError(""); + + try { + setIsConnecting(true); + setCurrentStep(3); + + const { encryptToKeyStore, KEYSTORE_SUPPORTED_CHAINS } = await import("@swapkit/wallet-keystore"); + + const encrypted = await encryptToKeyStore(phraseRef.current.trim(), password); + setKeystore(encrypted); + + const chainsToConnect = + selectedChains && selectedChains.length > 0 + ? KEYSTORE_SUPPORTED_CHAINS.filter((c) => selectedChains.includes(c)) + : KEYSTORE_SUPPORTED_CHAINS; + + const finalChains = chainsToConnect.length > 0 ? chainsToConnect : KEYSTORE_SUPPORTED_CHAINS; + + await connectKeystore( + { chains: finalChains, file: new File([JSON.stringify(encrypted)], "keystore.json"), keystore: encrypted }, + password, + ); + + // Clear sensitive data after successful connection + setPassword(""); + setConfirmPassword(""); + setPhrase(""); + phraseRef.current = ""; + } catch { + setPasswordError("Something went wrong while importing the wallet."); + setCurrentStep(2); + // Clear sensitive data even on failure — user may abandon the dialog + setPassword(""); + setConfirmPassword(""); + setPhrase(""); + phraseRef.current = ""; + } finally { + setIsConnecting(false); + } + }, [password, confirmPassword, selectedChains, connectKeystore]); + + const handleDownloadKeystore = useCallback(() => { + if (!keystore) return; + const blob = new Blob([JSON.stringify(keystore, null, 2)], { type: "application/json" }); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = "keystore.json"; + a.click(); + URL.revokeObjectURL(url); + }, [keystore]); + + return ( + + + + Import wallet from phrase + + + + + 1 && "!sk-ui-bg-accent")} value="1" variant="stepper" /> + 2 && "!sk-ui-bg-accent")} value="2" variant="stepper" /> + = 3 && "!sk-ui-bg-accent")} value="3" variant="stepper" /> + + + {/* Step 1: Enter Phrase */} + +
+ + Enter your 12 or 24 word recovery phrase to import your wallet. + + +