diff --git a/README.md b/README.md
index 0edfa12..db2c7da 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,32 @@ adapter. Connects to any EIP-6963 browser wallet (e.g., MetaMask).
Run with `npm install && npm run dev`.
+### [`app-kit-swap`](./app-kit-swap)
+
+Browser app that estimates and swaps USDC for EURC on Arc Testnet using
+[App Kit](https://www.npmjs.com/package/@circle-fin/app-kit) with the viem
+adapter. Connects to any EIP-6963 browser wallet (e.g., MetaMask).
+
+Run with `npm install && npm run dev`.
+
+### [`app-kit-transfer-widget`](./app-kit-transfer-widget)
+
+React app that embeds a USDC transfer widget with
+[App Kit](https://www.npmjs.com/package/@circle-fin/app-kit). Supports same-chain
+`send()` and crosschain `bridge()` flows for EVM and Solana browser wallets,
+including estimate, review, and retry.
+
+Run with `npm install && npm run dev`.
+
+### [`app-kit-unified-balance`](./app-kit-unified-balance)
+
+Browser app that deposits USDC into a unified balance from Base Sepolia and
+Solana Devnet, reads the balance, and spends it on Arc Testnet using
+[App Kit](https://www.npmjs.com/package/@circle-fin/app-kit) with the viem and
+Solana adapters. Connects an EVM wallet and a Solana wallet.
+
+Run with `npm install && npm run dev`.
+
### [`entity-secret-setup`](./entity-secret-setup)
Node.js script that generates a new entity secret, registers it with Circle,
diff --git a/app-kit-bridge-evm/README.md b/app-kit-bridge-evm/README.md
new file mode 100644
index 0000000..f56cb2a
--- /dev/null
+++ b/app-kit-bridge-evm/README.md
@@ -0,0 +1,45 @@
+# Bridge USDC between EVM chains
+
+Use [`@circle-fin/app-kit`](https://www.npmjs.com/package/@circle-fin/app-kit)
+to bridge USDC from Ethereum Sepolia to Arc Testnet with a browser wallet and
+the viem adapter.
+
+This Vite + TypeScript page connects an EIP-6963 wallet (for example MetaMask),
+creates a Circle adapter from the provider, then calls `bridge()` and
+`retryBridge()` when needed.
+
+## Prerequisites
+
+- [Node.js 22 or later](https://nodejs.org/)
+- An EIP-6963 browser wallet such as MetaMask
+- Testnet USDC on Ethereum Sepolia
+- Native gas token on Ethereum Sepolia for the wallet transaction
+
+This project does not require environment variables or API keys.
+
+## Install and run
+
+```bash
+npm install
+npm run dev
+```
+
+Open the local Vite URL in a browser with your wallet installed.
+
+```bash
+npm run build
+```
+
+## What this example does
+
+1. Discovers an EIP-6963 browser wallet and requests account access.
+2. Creates a viem adapter with `createViemAdapterFromProvider()`.
+3. Bridges 1 USDC from `Ethereum_Sepolia` to `Arc_Testnet` with `kit.bridge()`.
+4. Retries with `kit.retryBridge()` if the result state is `"error"`.
+5. Streams App Kit action events into the on-page output panel.
+
+## Key file
+
+- `src/main.ts` — wallet connect, adapter creation, bridge, and retry.
+ Change `from` / `to` `chain` and `amount` in the bridge call for different
+ chains or amounts.
diff --git a/app-kit-bridge-evm/package.json b/app-kit-bridge-evm/package.json
index b8a7b5a..c068cbe 100644
--- a/app-kit-bridge-evm/package.json
+++ b/app-kit-bridge-evm/package.json
@@ -9,11 +9,11 @@
},
"devDependencies": {
"typescript": "~7.0.2",
- "vite": "^8.2.0"
+ "vite": "^8.2.1"
},
"dependencies": {
- "@circle-fin/app-kit": "^1.11.0",
- "@circle-fin/adapter-viem-v2": "^1.14.1",
- "viem": "^2.55.11"
+ "@circle-fin/app-kit": "^1.12.0",
+ "@circle-fin/adapter-viem-v2": "^1.15.1",
+ "viem": "^2.55.17"
}
}
diff --git a/app-kit-bridge-solana/README.md b/app-kit-bridge-solana/README.md
new file mode 100644
index 0000000..0961d11
--- /dev/null
+++ b/app-kit-bridge-solana/README.md
@@ -0,0 +1,47 @@
+# Bridge USDC from Solana to EVM
+
+Use [`@circle-fin/app-kit`](https://www.npmjs.com/package/@circle-fin/app-kit)
+to bridge USDC from Solana Devnet to Arc Testnet with Solana and EVM browser
+wallets.
+
+This Vite + TypeScript page connects a Solana wallet for the source and an
+EIP-6963 EVM wallet for the destination, creates Circle adapters for both, then
+calls `bridge()` and `retryBridge()` when needed.
+
+## Prerequisites
+
+- [Node.js 22 or later](https://nodejs.org/)
+- An EIP-6963 EVM browser wallet such as MetaMask
+- A Solana browser wallet on `window.solana` such as Phantom
+- Testnet USDC on Solana Devnet
+- Native gas tokens for both wallets
+
+This project does not require environment variables or API keys.
+
+## Install and run
+
+```bash
+npm install
+npm run dev
+```
+
+Open the local Vite URL in a browser with both wallets installed.
+
+```bash
+npm run build
+```
+
+## What this example does
+
+1. Connects an EIP-6963 EVM wallet for the Arc Testnet destination.
+2. Connects a Solana browser wallet for the Solana Devnet source.
+3. Creates viem and Solana adapters from the connected providers.
+4. Bridges 1 USDC from `Solana_Devnet` to `Arc_Testnet` with `kit.bridge()`.
+5. Retries with `kit.retryBridge()` if the result state is `"error"`.
+6. Streams App Kit action events into the on-page output panel.
+
+## Key file
+
+- `src/main.ts` — wallet connect, adapter creation, bridge, and retry.
+ Change `from` / `to` `chain` and `amount` in the bridge call for different
+ chains or amounts.
diff --git a/app-kit-bridge-solana/package.json b/app-kit-bridge-solana/package.json
index 6007b15..617ae3c 100644
--- a/app-kit-bridge-solana/package.json
+++ b/app-kit-bridge-solana/package.json
@@ -9,12 +9,12 @@
},
"devDependencies": {
"typescript": "~7.0.2",
- "vite": "^8.2.0"
+ "vite": "^8.2.1"
},
"dependencies": {
- "@circle-fin/adapter-solana": "^1.6.4",
- "@circle-fin/adapter-viem-v2": "^1.14.1",
- "@circle-fin/app-kit": "^1.11.0",
- "viem": "^2.55.11"
+ "@circle-fin/adapter-solana": "^1.6.5",
+ "@circle-fin/adapter-viem-v2": "^1.15.1",
+ "@circle-fin/app-kit": "^1.12.0",
+ "viem": "^2.55.17"
}
}
diff --git a/app-kit-send/README.md b/app-kit-send/README.md
new file mode 100644
index 0000000..32fb879
--- /dev/null
+++ b/app-kit-send/README.md
@@ -0,0 +1,44 @@
+# Send USDC on an EVM chain
+
+Use [`@circle-fin/app-kit`](https://www.npmjs.com/package/@circle-fin/app-kit)
+to estimate and send USDC on Arc Testnet with a browser wallet and the viem
+adapter.
+
+This Vite + TypeScript page connects an EIP-6963 wallet (for example MetaMask),
+creates a Circle adapter from the provider, then calls `estimateSend()` and
+`send()`.
+
+## Prerequisites
+
+- [Node.js 22 or later](https://nodejs.org/)
+- An EIP-6963 browser wallet such as MetaMask
+- Testnet USDC on Arc Testnet
+- Native gas token on Arc Testnet for the wallet transaction
+
+This project does not require environment variables or API keys.
+
+## Install and run
+
+```bash
+npm install
+npm run dev
+```
+
+Open the local Vite URL in a browser with your wallet installed.
+
+```bash
+npm run build
+```
+
+## What this example does
+
+1. Discovers an EIP-6963 browser wallet and requests account access.
+2. Creates a viem adapter with `createViemAdapterFromProvider()`.
+3. Estimates the transfer with `kit.estimateSend()`.
+4. Sends 1 USDC on `Arc_Testnet` to the entered recipient with `kit.send()`.
+
+## Key file
+
+- `src/main.ts` — wallet connect, adapter creation, estimate, and send.
+ Change `chain`, `amount`, and `token` in the send params for a different
+ chain, amount, or token.
diff --git a/app-kit-send/package.json b/app-kit-send/package.json
index b88fbd9..41226b4 100644
--- a/app-kit-send/package.json
+++ b/app-kit-send/package.json
@@ -9,11 +9,11 @@
},
"devDependencies": {
"typescript": "~7.0.2",
- "vite": "^8.2.0"
+ "vite": "^8.2.1"
},
"dependencies": {
- "@circle-fin/adapter-viem-v2": "^1.14.1",
- "@circle-fin/app-kit": "^1.11.0",
- "viem": "^2.55.11"
+ "@circle-fin/adapter-viem-v2": "^1.15.1",
+ "@circle-fin/app-kit": "^1.12.0",
+ "viem": "^2.55.17"
}
}
diff --git a/app-kit-swap/.gitignore b/app-kit-swap/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/app-kit-swap/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/app-kit-swap/README.md b/app-kit-swap/README.md
new file mode 100644
index 0000000..b183378
--- /dev/null
+++ b/app-kit-swap/README.md
@@ -0,0 +1,68 @@
+# Swap USDC on Arc Testnet
+
+Use [`@circle-fin/app-kit`](https://www.npmjs.com/package/@circle-fin/app-kit)
+to estimate and swap USDC for EURC on Arc Testnet with a browser wallet and the
+viem adapter.
+
+This Vite + TypeScript page connects an EIP-6963 wallet (for example MetaMask),
+creates a Circle adapter from the provider, then calls `estimateSwap()` and
+`swap()`.
+
+## Prerequisites
+
+- [Node.js 22 or later](https://nodejs.org/)
+- An EIP-6963 browser wallet such as MetaMask
+- Testnet USDC on Arc Testnet
+- Native gas token on Arc Testnet for the wallet transaction
+
+This project does not require environment variables or API keys.
+
+## Install and run
+
+```bash
+npm install
+npm run dev
+```
+
+Open the local Vite URL in a browser with your wallet installed.
+
+```bash
+npm run build
+```
+
+## What this example does
+
+1. Discovers an EIP-6963 browser wallet and requests account access.
+2. Creates a viem adapter with `createViemAdapterFromProvider()`.
+3. Estimates the swap with `kit.estimateSwap()`.
+4. Swaps 1 USDC for EURC on `Arc_Testnet` with `kit.swap()`.
+
+## Thin liquidity on Arc Testnet
+
+Arc Testnet swap pools are often thin or imbalanced. Quotes and swaps can fail
+even when your code and wallet setup are correct. This is an environment
+limitation on testnet, not a bug in your integration.
+
+Common errors:
+
+- **No route available** — the swap router could not find a quote for that pair
+ or amount (liquidity path missing or temporarily unavailable).
+- **On-chain simulation failed** — a quote existed, but the pool could not meet
+ the minimum output under the configured slippage.
+
+If you hit either error:
+
+1. Retry with a smaller `amountIn` (for example `0.1` or `1` USDC).
+2. Prefer `EURC → USDC` when probing for available depth — Arc Testnet pools
+ are often USDC-heavy, so that direction usually has less price impact.
+3. Optionally raise `config.slippageBps` above the default `300` (3%) for
+ testnet experiments.
+4. Retry later — testnet liquidity and routing availability change over time.
+
+Use mainnet liquidity expectations only after you move off Arc Testnet.
+
+## Key file
+
+- `src/main.ts` — wallet connect, adapter creation, estimate, and swap.
+ Change `chain`, `tokenIn` / `tokenOut`, and `amountIn` in the swap params
+ for a different chain, pair, or amount.
diff --git a/app-kit-swap/index.html b/app-kit-swap/index.html
new file mode 100644
index 0000000..5248ace
--- /dev/null
+++ b/app-kit-swap/index.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+ Swap USDC on Arc Testnet
+
+
+
+
+
+ Swap USDC
+
+
+
+
+
diff --git a/app-kit-swap/package.json b/app-kit-swap/package.json
new file mode 100644
index 0000000..3742342
--- /dev/null
+++ b/app-kit-swap/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "app-kit-swap",
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "preview": "vite preview"
+ },
+ "devDependencies": {
+ "typescript": "~7.0.2",
+ "vite": "^8.2.1"
+ },
+ "dependencies": {
+ "@circle-fin/adapter-viem-v2": "^1.15.1",
+ "@circle-fin/app-kit": "^1.12.0",
+ "viem": "^2.55.17"
+ }
+}
diff --git a/app-kit-swap/src/main.ts b/app-kit-swap/src/main.ts
new file mode 100644
index 0000000..82f12df
--- /dev/null
+++ b/app-kit-swap/src/main.ts
@@ -0,0 +1,143 @@
+/**
+ * Copyright 2026 Circle Internet Group, Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { AppKit } from "@circle-fin/app-kit";
+import type { SwapParams } from "@circle-fin/app-kit";
+import { createViemAdapterFromProvider } from "@circle-fin/adapter-viem-v2";
+import type { CreateViemAdapterFromProviderParams } from "@circle-fin/adapter-viem-v2";
+
+type BrowserWalletProvider = CreateViemAdapterFromProviderParams["provider"];
+
+type EIP6963ProviderDetail = {
+ info: {
+ uuid: string;
+ name: string;
+ icon: string;
+ rdns: string;
+ };
+ provider: BrowserWalletProvider;
+};
+
+declare global {
+ interface WindowEventMap {
+ "eip6963:announceProvider": CustomEvent;
+ }
+}
+
+const kit = new AppKit();
+let walletProvider: BrowserWalletProvider | null = null;
+
+/** Discover an EIP-6963 browser wallet (prefers MetaMask). */
+async function getProvider(): Promise {
+ const providers = new Map();
+
+ const onAnnounce = ((event: CustomEvent) => {
+ providers.set(event.detail.info.uuid, event.detail);
+ }) as EventListener;
+
+ window.addEventListener("eip6963:announceProvider", onAnnounce);
+ window.dispatchEvent(new Event("eip6963:requestProvider"));
+ await new Promise((resolve) => window.setTimeout(resolve, 250));
+ window.removeEventListener("eip6963:announceProvider", onAnnounce);
+
+ const selectedProvider =
+ [...providers.values()].find(
+ ({ info }) => info.rdns === "io.metamask" || info.name === "MetaMask",
+ )?.provider ?? [...providers.values()][0]?.provider;
+
+ if (!selectedProvider) {
+ throw new Error("No EIP-6963 browser wallet found");
+ }
+
+ return selectedProvider;
+}
+
+/** Connect the wallet and enable swapping. */
+async function handleWalletConnect() {
+ try {
+ connectWalletButton.disabled = true;
+
+ walletProvider = await getProvider();
+ await walletProvider.request({
+ method: "eth_requestAccounts",
+ params: undefined,
+ });
+ const accounts = (await walletProvider.request({
+ method: "eth_accounts",
+ params: undefined,
+ })) as string[];
+
+ walletInfo.textContent = accounts[0] ?? "Connected";
+ swapButton.disabled = !walletProvider;
+ } catch (error) {
+ render({ error: error instanceof Error ? error.message : "Unknown error" });
+ } finally {
+ connectWalletButton.disabled = Boolean(walletProvider);
+ }
+}
+
+/** Estimate and swap 1 USDC for EURC on Arc Testnet. */
+async function handleSwap() {
+ try {
+ if (!walletProvider) {
+ throw new Error("Connect a wallet first");
+ }
+
+ swapButton.disabled = true;
+
+ const adapter = await createViemAdapterFromProvider({
+ provider: walletProvider,
+ });
+
+ const swapParams: SwapParams = {
+ from: { adapter, chain: "Arc_Testnet" },
+ tokenIn: "USDC",
+ tokenOut: "EURC",
+ amountIn: "1.00",
+ };
+
+ const estimate = await kit.estimateSwap(swapParams);
+ const result = await kit.swap(swapParams);
+
+ render({ estimate, result });
+ } catch (error) {
+ render({ error: error instanceof Error ? error.message : "Unknown error" });
+ } finally {
+ swapButton.disabled = false;
+ }
+}
+
+/** Pretty-print a value into the output panel. */
+function render(value: unknown) {
+ output.textContent = JSON.stringify(
+ value,
+ (_key, currentValue) =>
+ typeof currentValue === "bigint" ? currentValue.toString() : currentValue,
+ 2,
+ );
+ output.scrollTop = 0;
+}
+
+const connectWalletButton =
+ document.querySelector("#connectWallet")!;
+const swapButton = document.querySelector("#swap")!;
+const walletInfo = document.querySelector("#walletInfo")!;
+const output = document.querySelector("#output")!;
+
+connectWalletButton.addEventListener("click", handleWalletConnect);
+swapButton.addEventListener("click", handleSwap);
diff --git a/app-kit-swap/tsconfig.json b/app-kit-swap/tsconfig.json
new file mode 100644
index 0000000..1ab38c8
--- /dev/null
+++ b/app-kit-swap/tsconfig.json
@@ -0,0 +1,23 @@
+{
+ "compilerOptions": {
+ "target": "es2023",
+ "module": "esnext",
+ "lib": ["ES2023", "DOM"],
+ "types": ["vite/client"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}
diff --git a/app-kit-transfer-widget/package-lock.json b/app-kit-transfer-widget/package-lock.json
index 8cc10a1..67ef3ac 100644
--- a/app-kit-transfer-widget/package-lock.json
+++ b/app-kit-transfer-widget/package-lock.json
@@ -8,22 +8,22 @@
"name": "transfer-widget",
"version": "0.0.0",
"dependencies": {
- "@circle-fin/adapter-solana": "^1.6.4",
- "@circle-fin/adapter-viem-v2": "^1.14.1",
- "@circle-fin/app-kit": "^1.11.0",
+ "@circle-fin/adapter-solana": "^1.6.5",
+ "@circle-fin/adapter-viem-v2": "^1.15.1",
+ "@circle-fin/app-kit": "^1.12.0",
"@solana/web3.js": "^1.98.4",
"react": "^19.2.8",
"react-dom": "^19.2.8",
- "viem": "^2.55.11"
+ "viem": "^2.55.17"
},
"devDependencies": {
- "@types/node": "^24.13.3",
- "@types/react": "^19.2.17",
- "@types/react-dom": "^19.2.3",
- "@vitejs/plugin-react": "^6.0.4",
- "oxlint": "^1.75.0",
- "typescript": "~5.9.0",
- "vite": "^8.2.0"
+ "@types/node": "^26.2.0",
+ "@types/react": "^19.2.18",
+ "@types/react-dom": "^19.2.4",
+ "@vitejs/plugin-react": "^6.0.5",
+ "oxlint": "^1.78.0",
+ "typescript": "~7.0.2",
+ "vite": "^8.2.1"
}
},
"node_modules/@adraffy/ens-normalize": {
@@ -42,9 +42,9 @@
}
},
"node_modules/@circle-fin/adapter-solana": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/@circle-fin/adapter-solana/-/adapter-solana-1.6.4.tgz",
- "integrity": "sha512-AIZTWNXvA4Kg6CRbmMQFnSwaoKENZZFWbI6jZgYX5Rmldj4OWpVbcwLHonXHHXEhUXrPGBR99Vj8yBrVPj+7sw==",
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/@circle-fin/adapter-solana/-/adapter-solana-1.6.5.tgz",
+ "integrity": "sha512-30kLPSuq0/tPA3hpNS1p3zqirDYk3VVSJtjT4DQiSf9qlN4Ps1r6fuLlBD6KmLvRVAPb+7EODLBmcaMyEed8Rw==",
"dependencies": {
"@coral-xyz/anchor": "^0.31.1",
"@ethersproject/abi": "^5.8.0",
@@ -68,9 +68,9 @@
}
},
"node_modules/@circle-fin/adapter-viem-v2": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@circle-fin/adapter-viem-v2/-/adapter-viem-v2-1.14.1.tgz",
- "integrity": "sha512-C6MGBO0EP1zlu14B3QD7+ko3Jg0eUTKo0mG3uAJAXE6BXXqRwRgWVNdiwIi0Sr16duOabq5QMmql3T/yNoT99A==",
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/@circle-fin/adapter-viem-v2/-/adapter-viem-v2-1.15.1.tgz",
+ "integrity": "sha512-VzkfPjbqvfA++djJ2adTLievnIKEZVx10h3wbG+9HIJPWgF4hFIhx+MMjBkdRVzcWSga9uAGyLWFvvsMzVwNwQ==",
"dependencies": {
"@ethersproject/abi": "^5.8.0",
"@ethersproject/address": "^5.8.0",
@@ -91,15 +91,15 @@
}
},
"node_modules/@circle-fin/app-kit": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@circle-fin/app-kit/-/app-kit-1.11.0.tgz",
- "integrity": "sha512-geO5oAoC41E7fz/xjys4ibfIMwlEBHYm2lFDFA4taFojUy9fGmJePBZVxA+7dAF15VNY6rcLSA33spOj3CixjA==",
- "dependencies": {
- "@circle-fin/bridge-kit": "1.12.2",
- "@circle-fin/earn-kit": "1.4.0",
- "@circle-fin/provider-gateway-v1": "1.1.4",
- "@circle-fin/swap-kit": "1.5.0",
- "@circle-fin/unified-balance-kit": "1.3.1",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/@circle-fin/app-kit/-/app-kit-1.12.0.tgz",
+ "integrity": "sha512-RmkG4ehc16XjiAMEQ6VEllNkhU2L6IVN8h7KKGJpkdXzwnRzytPNNJ6XJkMGIYu4xa88IzWGubwCYtD//7bjOA==",
+ "dependencies": {
+ "@circle-fin/bridge-kit": "1.13.0",
+ "@circle-fin/earn-kit": "1.5.0",
+ "@circle-fin/provider-gateway-v1": "1.2.0",
+ "@circle-fin/swap-kit": "1.5.1",
+ "@circle-fin/unified-balance-kit": "1.4.0",
"@coral-xyz/anchor": "^0.31.1",
"@ethersproject/abi": "^5.8.0",
"@ethersproject/address": "^5.8.0",
@@ -120,11 +120,11 @@
}
},
"node_modules/@circle-fin/bridge-kit": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/@circle-fin/bridge-kit/-/bridge-kit-1.12.2.tgz",
- "integrity": "sha512-E2WO7NMOLkyk+GSasnIlarzcY8+6McE8ijbmvdEC+V0+CLczHH7sSbu9Yst626VzVhdWcQCMNf2AstrQDFF6tQ==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/@circle-fin/bridge-kit/-/bridge-kit-1.13.0.tgz",
+ "integrity": "sha512-nq98R26ZCPUE/yagWIvzs1ghCSprwScs+wosyNM0VSmQqd+atLQ37f1z7vD6O9Dt75RYzUzATXGChzlnEhhArw==",
"dependencies": {
- "@circle-fin/provider-cctp-v2": "^1.10.1",
+ "@circle-fin/provider-cctp-v2": "^1.10.2",
"@ethersproject/abi": "^5.8.0",
"@ethersproject/address": "^5.8.0",
"@ethersproject/bytes": "^5.8.0",
@@ -140,11 +140,11 @@
}
},
"node_modules/@circle-fin/earn-kit": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@circle-fin/earn-kit/-/earn-kit-1.4.0.tgz",
- "integrity": "sha512-A6Ht86ZgJTON5/x9cKuJNa6j0VH3Q4YqNIuEznWPYfJiYUmuk+Xg35iFkl8+BG1W29eDixrWaxe2PC2XrDA/sQ==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@circle-fin/earn-kit/-/earn-kit-1.5.0.tgz",
+ "integrity": "sha512-Scoj9MOa1DgTE8Kby6r/GnedQD4+2rI1LrxYlmsgjZxoe30MtL0SX3bMRt2ksgHBMRJnXscyykIEQAxJWaTKvQ==",
"dependencies": {
- "@circle-fin/provider-earn-service": "^1.3.1",
+ "@circle-fin/provider-earn-service": "^1.4.0",
"@ethersproject/abi": "^5.8.0",
"@ethersproject/address": "^5.8.0",
"@ethersproject/bytes": "^5.8.0",
@@ -161,9 +161,9 @@
}
},
"node_modules/@circle-fin/provider-cctp-v2": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/@circle-fin/provider-cctp-v2/-/provider-cctp-v2-1.10.1.tgz",
- "integrity": "sha512-nyOXiZCh2inCDTPOi6QTItc6ADChP7Y1juo8pfRY4pLdzUmlGOG+2BOERTmctBNocKFxvpkZRTYL/XY+ApvnuQ==",
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/@circle-fin/provider-cctp-v2/-/provider-cctp-v2-1.10.2.tgz",
+ "integrity": "sha512-oxTptKweZP6q7AYIOxvD7VF0CINR4k+/Gf0OvhoQ6Seyc3QIdUgtGZy9fN8SlIvgwEsXI+MzvNezjpdFE/MM4w==",
"dependencies": {
"@coral-xyz/anchor": "^0.31.1",
"@ethersproject/abi": "^5.8.0",
@@ -191,9 +191,9 @@
}
},
"node_modules/@circle-fin/provider-earn-service": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@circle-fin/provider-earn-service/-/provider-earn-service-1.3.1.tgz",
- "integrity": "sha512-CDu6uwnBGQ68y7312czRUO3NHTJbq3MsqmvtjfDocWkElJpGA2tpIk1VJtbZ5thmkHf/5CzrtbX2AyPHB+Ah/g==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@circle-fin/provider-earn-service/-/provider-earn-service-1.4.0.tgz",
+ "integrity": "sha512-Pykd5wnd7UVI66z4A5Fi//dWv0zxfBZId8pxYDcBTSyOYYvO6JQgPQ08Q0qWHyhc8oygD38VrDJBYrr+zoF1LQ==",
"dependencies": {
"@ethersproject/abi": "^5.8.0",
"@ethersproject/address": "^5.8.0",
@@ -211,9 +211,9 @@
}
},
"node_modules/@circle-fin/provider-gateway-v1": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@circle-fin/provider-gateway-v1/-/provider-gateway-v1-1.1.4.tgz",
- "integrity": "sha512-/z/9GGRbbKLHNaKPwFyWQS9HUM7dthox/Qeshx/f/eFs25aSox4YVrCdla50F2ccm/sx/bri68azLNvHp13LZA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@circle-fin/provider-gateway-v1/-/provider-gateway-v1-1.2.0.tgz",
+ "integrity": "sha512-uIV69AcO62uXCpvvFlQBS+xTbbyQO3tZh4X9H1bz0NMH5+4lTlQVuMdOUzAI0ZFOl7YeTgYuKOsYCxqKxsVm0w==",
"dependencies": {
"@coral-xyz/anchor": "^0.31.1",
"@ethersproject/abi": "^5.8.0",
@@ -233,9 +233,9 @@
}
},
"node_modules/@circle-fin/provider-stablecoin-service-swap": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@circle-fin/provider-stablecoin-service-swap/-/provider-stablecoin-service-swap-1.4.0.tgz",
- "integrity": "sha512-IQUjeFBpyG3v2msLbIXKMFH8Ecdkv448gFDtogk/pm06L4MDuWKQPxNFoUZt+a8o8ogTQ1KkueUrvXj/gmG3Kw==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@circle-fin/provider-stablecoin-service-swap/-/provider-stablecoin-service-swap-1.4.1.tgz",
+ "integrity": "sha512-qDCvniDm6QWKPHsOnz7k1qxOX1WhWvK/JdpSZZvH7ogE4oReqtU7xGKdD17xgD2AFcOmedIBBbn9SEbXhuw42g==",
"dependencies": {
"@coral-xyz/anchor": "^0.31.1",
"@ethersproject/address": "^5.8.0",
@@ -253,11 +253,11 @@
}
},
"node_modules/@circle-fin/swap-kit": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@circle-fin/swap-kit/-/swap-kit-1.5.0.tgz",
- "integrity": "sha512-0qlHZgOmGfkowH88cp/8M9K4NQUBW3elgUofncaz86I1na9zkJfYTo/ROwH759e4PNcfmF7NuR+3lVTRrI+Faw==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@circle-fin/swap-kit/-/swap-kit-1.5.1.tgz",
+ "integrity": "sha512-Tsk5bboQ50wPU655NnpymYbO9PIbXcleDWrIbsLrX/NmN7sp5LyX5ZcAEKzLNJ5XBvuJSFhLnGpbqbL69KzmeQ==",
"dependencies": {
- "@circle-fin/provider-stablecoin-service-swap": "^1.4.0",
+ "@circle-fin/provider-stablecoin-service-swap": "^1.4.1",
"@coral-xyz/anchor": "^0.31.1",
"@ethersproject/abi": "^5.8.0",
"@ethersproject/address": "^5.8.0",
@@ -275,11 +275,11 @@
}
},
"node_modules/@circle-fin/unified-balance-kit": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@circle-fin/unified-balance-kit/-/unified-balance-kit-1.3.1.tgz",
- "integrity": "sha512-zlXS0ayGY+M1rWUhUA2yz24HBDNQaka3rJWGe826XPIZ+X9MExyycB4NntfNGso2bOQq54KmZ9LwRW+eZUP8rA==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@circle-fin/unified-balance-kit/-/unified-balance-kit-1.4.0.tgz",
+ "integrity": "sha512-hg2yQ+/P3LL1Y4AwA7qlZISj4tII1W21AAUW+NhPWjGUAhKVCOP4UKZeL5+hwqdIsiarGQ5RBLSKMP8fKQ8LVQ==",
"dependencies": {
- "@circle-fin/provider-gateway-v1": "1.1.4",
+ "@circle-fin/provider-gateway-v1": "1.2.0",
"@coral-xyz/anchor": "^0.31.1",
"@ethersproject/abi": "^5.8.0",
"@ethersproject/address": "^5.8.0",
@@ -835,9 +835,9 @@
}
},
"node_modules/@oxlint/binding-android-arm-eabi": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.77.0.tgz",
- "integrity": "sha512-E06sKWS6PiI6HRxS1wyQg22HvApt01hI7fV+T3wUk3OSbaaP4a3hYGY/MIQDmASqCiRjBdpRQYkgMkqH82cWmQ==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.78.0.tgz",
+ "integrity": "sha512-Bu819lmAfZMUHErrpe0cEWj3iaefuUODHSU8+UbXy67V/r7/7f4K3FL0NmbD85E+wiFLDYuhP8Zlv0XnVeXshw==",
"cpu": [
"arm"
],
@@ -852,9 +852,9 @@
}
},
"node_modules/@oxlint/binding-android-arm64": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.77.0.tgz",
- "integrity": "sha512-NvsKz0KZxTp9cYWPLf+FXaSZwB3oO3peAjtukpOMBgse2vhQSoIIVqeO1yR0lEo/UcdZIDL18uq+kL0LzQ0ytA==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.78.0.tgz",
+ "integrity": "sha512-CDfxZgB61B7buRdY2FJoAYYPPXCZ1EoC1LKscnC5dg3kjobdxiconvAvvN1BmHyW4PyFT3jRLDag/BY/roSNBQ==",
"cpu": [
"arm64"
],
@@ -869,9 +869,9 @@
}
},
"node_modules/@oxlint/binding-darwin-arm64": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.77.0.tgz",
- "integrity": "sha512-bgjTn6nW4bQCFBvSvuHCpDD+sONvmpo4lGI4PxzMt1quBA+xYxhczk6RiCn3GZ9gY8uhaBbwhj9MdKGfu6T9DA==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.78.0.tgz",
+ "integrity": "sha512-2Y2U9Ahrz+OO0Ej88f9SJYq51/jUBp1Mc7iZu0ukrbeeZ3gpRGfzIFnoqfHDY96xr0GEfNrPUBFEy0nN5aD7HA==",
"cpu": [
"arm64"
],
@@ -886,9 +886,9 @@
}
},
"node_modules/@oxlint/binding-darwin-x64": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.77.0.tgz",
- "integrity": "sha512-aotaIttH1R6j1Rwhx0M0htgeZyGtVQqYNTVEYMN/UcgHPquGA6kmk9OyuDc3a2GKUQBC+3C3GVQCcrRPMYqAFA==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.78.0.tgz",
+ "integrity": "sha512-rpych6eJq6m9jDRypTEaPD1xysaEW5h9+xuxhGK/QhOg+/xaqPZrCrTNoIl/f3nEjuJeCEmstNDlrE9rJi/3/g==",
"cpu": [
"x64"
],
@@ -903,9 +903,9 @@
}
},
"node_modules/@oxlint/binding-freebsd-x64": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.77.0.tgz",
- "integrity": "sha512-nNx/wta7ksRAdYvq+l4AWjXkLxEXHALhENxjj2cYbQAIR4ybaA5L+hCbE63HOmft5czQ6ks+hb8vmEAnn7YGPg==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.78.0.tgz",
+ "integrity": "sha512-IcMGrQT3QizkOESUJd5et+rOhVqSkNDfNik1cvrKDqIbzqx9KMtRswpFgkCuNTSwylCFLKhGUu8KmqY1ZnC0Dg==",
"cpu": [
"x64"
],
@@ -920,9 +920,9 @@
}
},
"node_modules/@oxlint/binding-linux-arm-gnueabihf": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.77.0.tgz",
- "integrity": "sha512-tMLLjM7xXtzXisVCzkOTXNCy9bZVId2wteNwjohlFDR/jY6WagpEDA1c1wu4xRc20Hojaxj+V6DSR7gbKxijWA==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.78.0.tgz",
+ "integrity": "sha512-/uLdoJ0IXE6vo/0f0LKjinQAp+re+VMaCWaNT8ENIv2EOCkSsc8SGaflXAuW0Jua2dq5+GLVWm1NQK7P3UFSNQ==",
"cpu": [
"arm"
],
@@ -937,9 +937,9 @@
}
},
"node_modules/@oxlint/binding-linux-arm-musleabihf": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.77.0.tgz",
- "integrity": "sha512-MiAFDFaqR0tmHTAyo0YDcZ5hyLREdYw/RQhc2R3cbT+8O3tB+zqPM2th9TTQ+Uo3jn/embS+DO+HyX9ztCPkOQ==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.78.0.tgz",
+ "integrity": "sha512-7xi4Wb/O8NRJhLoUXmDJMUVpNYvB5kefdhFU1Jb8rtae4QoXlTiLwI14X4YvAXVZLNZChP8m5qO9SQAlWQTbkQ==",
"cpu": [
"arm"
],
@@ -954,9 +954,9 @@
}
},
"node_modules/@oxlint/binding-linux-arm64-gnu": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.77.0.tgz",
- "integrity": "sha512-/xqQ3B16i1T4cyt/9Mn+4CpzhUXoBXp7kVpIwzOXNFLj5JmK1bIjsbSnX296Gg8A/o7oDtKWikFgBx0SLwztkw==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.78.0.tgz",
+ "integrity": "sha512-4hFW0+fVXa3OIh1Y4A5SPkmvI4wuuBSrCVKzOyE7PTjhc7yEqZ1pmvEEeS5Lj/MaqvegFxXyF33N+6jkehxdyg==",
"cpu": [
"arm64"
],
@@ -974,9 +974,9 @@
}
},
"node_modules/@oxlint/binding-linux-arm64-musl": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.77.0.tgz",
- "integrity": "sha512-LSbwuRKiNCenPDcbARqAZ5RfBy7gmj7vOvfJRLeCDU3gFtSxWbhv/+VTlaUqzUhNj1gFLHB8h7ALnxa/Az6z6g==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.78.0.tgz",
+ "integrity": "sha512-oC0mvsgBJjlMijSDEhx9KuvR9zYeHXceA9MjbuXB1F8NSR78Yj2unOBrstEvTVaq+pko+kuue6DajC00eqvTdg==",
"cpu": [
"arm64"
],
@@ -994,9 +994,9 @@
}
},
"node_modules/@oxlint/binding-linux-ppc64-gnu": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.77.0.tgz",
- "integrity": "sha512-QWdcH31mXEUe5Nq1s0CfCpceaKjIo9uZtwDjAuL681g1axf+5x8xrg/eXWaw//4NCxYZ4V4e5Hu5tvdR+pTBlg==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.78.0.tgz",
+ "integrity": "sha512-XAllT5SUZS+ohjuZ3/5S0cwe0r7eboiuigeStCZ5DXRYx/2KVM2UvQXvAfyzXEimtQjAB7cDQ2YxDe2Zl2WNQQ==",
"cpu": [
"ppc64"
],
@@ -1014,9 +1014,9 @@
}
},
"node_modules/@oxlint/binding-linux-riscv64-gnu": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.77.0.tgz",
- "integrity": "sha512-GnOfYgJxbcElOiPZaDFDl406ONddwvOWk2jvAAAEjwAl4GofNoHF+/HHUIBYa6bFCArlcGPi0XjC4cU1pkgF/Q==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.78.0.tgz",
+ "integrity": "sha512-trucMER/0QtecoXvc1y/UVqE3kwJipDwrx4oHfj+nNm3dq2zjP44WT0CfHNDPM3G1DXIkx/gY6lAD21NSCZVhA==",
"cpu": [
"riscv64"
],
@@ -1034,9 +1034,9 @@
}
},
"node_modules/@oxlint/binding-linux-riscv64-musl": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.77.0.tgz",
- "integrity": "sha512-AyEMTUCf0xY+hHF+IxqXFQIX0yQOIR8ykpY0lJNOw9xYqOzUX8dyZfRvlG0RfXwuQn2eonf/8NrMmDSZJjdqsA==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.78.0.tgz",
+ "integrity": "sha512-cm3O4F/HQbdzOUX5mKHqG5KDL6E5w0pnlZ+fbBy2rmLryPOowkuLagFHTopQsEIpjcaZoPOrL+BmmAytAG9HFg==",
"cpu": [
"riscv64"
],
@@ -1054,9 +1054,9 @@
}
},
"node_modules/@oxlint/binding-linux-s390x-gnu": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.77.0.tgz",
- "integrity": "sha512-sPLzEcNvxd/oyVQ5oZo92CiHkFkpBeRop13E/P3TPY+hZfXHKCOWKI70TE2RYwMKFJDc20EMjH16L7NZICtKTw==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.78.0.tgz",
+ "integrity": "sha512-33wRf6HqGNsybJ3qX4cGaQN2ODPxNmc1rMa0mrTmx3eFq1VzOnvQooi9bIGVYakW8a/wmqVx1mgsUm8R2xfTiw==",
"cpu": [
"s390x"
],
@@ -1074,9 +1074,9 @@
}
},
"node_modules/@oxlint/binding-linux-x64-gnu": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.77.0.tgz",
- "integrity": "sha512-1Oh2ssH2L7lwyvkdSqaMUfsGfwU2Wfvew+obBUYjRVqhpBcUpwnsPSEr1IzVi9XqkuY10geiLsNKecqaZC34Dw==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.78.0.tgz",
+ "integrity": "sha512-rRdISSYegj6VganMZ9tjRjijowfHJ09IZU01i0toBAqr6n5LEtwHq2IeS4FjW2RoskOHlb6efB26H5izYb3GEQ==",
"cpu": [
"x64"
],
@@ -1094,9 +1094,9 @@
}
},
"node_modules/@oxlint/binding-linux-x64-musl": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.77.0.tgz",
- "integrity": "sha512-0j/2wRgNGO+Qj/M1uu/p57h/hFTTWWcfie0ufkbabeus2s5+/QqkCflnMOwLLN5m2GsNeWp4xdl4cPa4n7QCOQ==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.78.0.tgz",
+ "integrity": "sha512-GmsP4rW0xTL6u5CVdcDsaN5Fbc7hBc382Wmar1kttbnwSEviM+rSINKOMQ+UQ6iH+AGwC+8gaAiwu134Tgh6Lg==",
"cpu": [
"x64"
],
@@ -1114,9 +1114,9 @@
}
},
"node_modules/@oxlint/binding-openharmony-arm64": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.77.0.tgz",
- "integrity": "sha512-BJ/j54qS0usEnyDkLYURMj2iiD9h5Cyy+ppzeMSXBGRXaGRNWnj1Mw14NqWMR5E/PzdgB30OOCCzLzbRoduafw==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.78.0.tgz",
+ "integrity": "sha512-sy9yeYuADc8a+n4TLBayzMCZiHPW78DcIFVpOXTmdKHWQeM9xe5uzkqIIZmi326D5hY9XVwacipEB1p7tQjPAg==",
"cpu": [
"arm64"
],
@@ -1131,9 +1131,9 @@
}
},
"node_modules/@oxlint/binding-win32-arm64-msvc": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.77.0.tgz",
- "integrity": "sha512-Yh8w+g2Lpx7StrvtYkoz9JJvXjB9wxgFChFNb85nrXm/wj/XTwGWS1hve9+900HL7llrntYB3YP+y32E3tRqzA==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.78.0.tgz",
+ "integrity": "sha512-rjc2hF1KfMi8fZj1X/m3AmnHbdsF3rL0v6KQg0Uc880Yb2khjz+3U14sfdZ7jWTpRnN1m1NQa/TT7uU9lJWPrA==",
"cpu": [
"arm64"
],
@@ -1148,9 +1148,9 @@
}
},
"node_modules/@oxlint/binding-win32-ia32-msvc": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.77.0.tgz",
- "integrity": "sha512-zja5b7+6a7UsRFgAQSrnax5vrzliEyNPLCjfXONu/vTWswaIVZGFajJZptaeRvPE4LghtFdAzVFlexTm7MVTGA==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.78.0.tgz",
+ "integrity": "sha512-zcuXFVrEFHIafRfkCQT8w/Xe41o07ozl/vwHq7p94vB29xVzsB0sZGYORU1jhcYKv3Lr0J3HbJ2T4fHH5rWmvA==",
"cpu": [
"ia32"
],
@@ -1165,9 +1165,9 @@
}
},
"node_modules/@oxlint/binding-win32-x64-msvc": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.77.0.tgz",
- "integrity": "sha512-+teyvPDZ2RjUvo+SuCqS/UhaJl1QtdW5fWT5NJTV61V5MIuIS90Db9LixmtEGvXixyttiK62P96MSu3UlpviBw==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.78.0.tgz",
+ "integrity": "sha512-Sb5ocmLSuYeOuXd+CFOToGKp/gjXUEWDnvIGwhnh8aq8wY4TMmEnKnvbogSW7RdMZv77JSARduS7/gv+khYEjA==",
"cpu": [
"x64"
],
@@ -1632,12 +1632,12 @@
}
},
"node_modules/@types/node": {
- "version": "24.13.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz",
- "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==",
+ "version": "26.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz",
+ "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==",
"license": "MIT",
"dependencies": {
- "undici-types": "~7.18.0"
+ "undici-types": "~8.3.0"
}
},
"node_modules/@types/react": {
@@ -1675,6 +1675,326 @@
"@types/node": "*"
}
},
+ "node_modules/@typescript/typescript-aix-ppc64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz",
+ "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-darwin-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz",
+ "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-darwin-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz",
+ "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-freebsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-freebsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz",
+ "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-arm": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz",
+ "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz",
+ "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-loong64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz",
+ "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-mips64el": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz",
+ "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-ppc64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz",
+ "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-riscv64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz",
+ "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-s390x": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz",
+ "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz",
+ "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-netbsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-netbsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz",
+ "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-openbsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-openbsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz",
+ "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-sunos-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz",
+ "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-win32-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz",
+ "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-win32-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz",
+ "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
"node_modules/@vitejs/plugin-react": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.5.tgz",
@@ -2448,9 +2768,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.17",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz",
- "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==",
+ "version": "3.3.18",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
+ "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
"dev": true,
"funding": [
{
@@ -2559,9 +2879,9 @@
"license": "MIT"
},
"node_modules/oxlint": {
- "version": "1.77.0",
- "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.77.0.tgz",
- "integrity": "sha512-qnGh8XJHaQ0dprrDXNQZgS0FgjI6v+V3+X8DwmaV++5Aamy6jGKfDdQ1TUvhUxtmKFAbEf4/WeO5QZX+5WSngg==",
+ "version": "1.78.0",
+ "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.78.0.tgz",
+ "integrity": "sha512-QgQePuxIqKOzo1KSjG2EnITEeWvWnKAm77eq8nrMtf6AGoA+zyGc4PFYtDNJSD25g/ibOwfQ851hZ4/SPkMVoA==",
"dev": true,
"license": "MIT",
"bin": {
@@ -2574,25 +2894,25 @@
"url": "https://github.com/sponsors/Boshen"
},
"optionalDependencies": {
- "@oxlint/binding-android-arm-eabi": "1.77.0",
- "@oxlint/binding-android-arm64": "1.77.0",
- "@oxlint/binding-darwin-arm64": "1.77.0",
- "@oxlint/binding-darwin-x64": "1.77.0",
- "@oxlint/binding-freebsd-x64": "1.77.0",
- "@oxlint/binding-linux-arm-gnueabihf": "1.77.0",
- "@oxlint/binding-linux-arm-musleabihf": "1.77.0",
- "@oxlint/binding-linux-arm64-gnu": "1.77.0",
- "@oxlint/binding-linux-arm64-musl": "1.77.0",
- "@oxlint/binding-linux-ppc64-gnu": "1.77.0",
- "@oxlint/binding-linux-riscv64-gnu": "1.77.0",
- "@oxlint/binding-linux-riscv64-musl": "1.77.0",
- "@oxlint/binding-linux-s390x-gnu": "1.77.0",
- "@oxlint/binding-linux-x64-gnu": "1.77.0",
- "@oxlint/binding-linux-x64-musl": "1.77.0",
- "@oxlint/binding-openharmony-arm64": "1.77.0",
- "@oxlint/binding-win32-arm64-msvc": "1.77.0",
- "@oxlint/binding-win32-ia32-msvc": "1.77.0",
- "@oxlint/binding-win32-x64-msvc": "1.77.0"
+ "@oxlint/binding-android-arm-eabi": "1.78.0",
+ "@oxlint/binding-android-arm64": "1.78.0",
+ "@oxlint/binding-darwin-arm64": "1.78.0",
+ "@oxlint/binding-darwin-x64": "1.78.0",
+ "@oxlint/binding-freebsd-x64": "1.78.0",
+ "@oxlint/binding-linux-arm-gnueabihf": "1.78.0",
+ "@oxlint/binding-linux-arm-musleabihf": "1.78.0",
+ "@oxlint/binding-linux-arm64-gnu": "1.78.0",
+ "@oxlint/binding-linux-arm64-musl": "1.78.0",
+ "@oxlint/binding-linux-ppc64-gnu": "1.78.0",
+ "@oxlint/binding-linux-riscv64-gnu": "1.78.0",
+ "@oxlint/binding-linux-riscv64-musl": "1.78.0",
+ "@oxlint/binding-linux-s390x-gnu": "1.78.0",
+ "@oxlint/binding-linux-x64-gnu": "1.78.0",
+ "@oxlint/binding-linux-x64-musl": "1.78.0",
+ "@oxlint/binding-openharmony-arm64": "1.78.0",
+ "@oxlint/binding-win32-arm64-msvc": "1.78.0",
+ "@oxlint/binding-win32-ia32-msvc": "1.78.0",
+ "@oxlint/binding-win32-x64-msvc": "1.78.0"
},
"peerDependencies": {
"oxlint-tsgolint": ">=7.0.2001",
@@ -3014,22 +3334,43 @@
"license": "0BSD"
},
"node_modules/typescript": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz",
+ "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
"license": "Apache-2.0",
"bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
+ "tsc": "bin/tsc"
},
"engines": {
- "node": ">=14.17"
+ "node": ">=16.20.0"
+ },
+ "optionalDependencies": {
+ "@typescript/typescript-aix-ppc64": "7.0.2",
+ "@typescript/typescript-darwin-arm64": "7.0.2",
+ "@typescript/typescript-darwin-x64": "7.0.2",
+ "@typescript/typescript-freebsd-arm64": "7.0.2",
+ "@typescript/typescript-freebsd-x64": "7.0.2",
+ "@typescript/typescript-linux-arm": "7.0.2",
+ "@typescript/typescript-linux-arm64": "7.0.2",
+ "@typescript/typescript-linux-loong64": "7.0.2",
+ "@typescript/typescript-linux-mips64el": "7.0.2",
+ "@typescript/typescript-linux-ppc64": "7.0.2",
+ "@typescript/typescript-linux-riscv64": "7.0.2",
+ "@typescript/typescript-linux-s390x": "7.0.2",
+ "@typescript/typescript-linux-x64": "7.0.2",
+ "@typescript/typescript-netbsd-arm64": "7.0.2",
+ "@typescript/typescript-netbsd-x64": "7.0.2",
+ "@typescript/typescript-openbsd-arm64": "7.0.2",
+ "@typescript/typescript-openbsd-x64": "7.0.2",
+ "@typescript/typescript-sunos-x64": "7.0.2",
+ "@typescript/typescript-win32-arm64": "7.0.2",
+ "@typescript/typescript-win32-x64": "7.0.2"
}
},
"node_modules/undici-types": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
- "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
+ "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==",
"license": "MIT"
},
"node_modules/uuid": {
@@ -3046,9 +3387,9 @@
}
},
"node_modules/viem": {
- "version": "2.55.11",
- "resolved": "https://registry.npmjs.org/viem/-/viem-2.55.11.tgz",
- "integrity": "sha512-RR5MwtdUnFfqw6ZGoFptizywyLOkLuhTL7UafoP3Irf2upXpANakQkLgGqY4H7A7+8JBxjUs6lElGF5zuGjMEw==",
+ "version": "2.55.17",
+ "resolved": "https://registry.npmjs.org/viem/-/viem-2.55.17.tgz",
+ "integrity": "sha512-XKASpfG9jznxsU/J7Bj2k9aS0UZgU3sBcwVoQ6slD5T1RmNJHh3khmFVJuRKjrOe3uqHb0FJKbb6jwE49WtVDQ==",
"funding": [
{
"type": "github",
@@ -3133,16 +3474,16 @@
}
},
"node_modules/vite": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.0.tgz",
- "integrity": "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==",
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz",
+ "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==",
"dev": true,
"license": "MIT",
"dependencies": {
"lightningcss": "^1.33.0",
"picomatch": "^4.0.5",
- "postcss": "^8.5.23",
- "rolldown": "~1.2.0",
+ "postcss": "^8.5.25",
+ "rolldown": "~1.2.1",
"tinyglobby": "^0.2.17"
},
"bin": {
diff --git a/app-kit-transfer-widget/package.json b/app-kit-transfer-widget/package.json
index 6f253d8..5f19a25 100644
--- a/app-kit-transfer-widget/package.json
+++ b/app-kit-transfer-widget/package.json
@@ -1,7 +1,6 @@
{
"name": "transfer-widget",
- "private": true,
- "version": "0.0.0",
+ "version": "0.1.0",
"type": "module",
"scripts": {
"dev": "vite",
@@ -10,22 +9,22 @@
"preview": "vite preview"
},
"dependencies": {
- "@circle-fin/adapter-solana": "^1.6.4",
- "@circle-fin/adapter-viem-v2": "^1.14.1",
- "@circle-fin/app-kit": "^1.11.0",
+ "@circle-fin/adapter-solana": "^1.6.5",
+ "@circle-fin/adapter-viem-v2": "^1.15.1",
+ "@circle-fin/app-kit": "^1.12.0",
"@solana/web3.js": "^1.98.4",
"react": "^19.2.8",
"react-dom": "^19.2.8",
- "viem": "^2.55.11"
+ "viem": "^2.55.17"
},
"devDependencies": {
- "@types/node": "^24.13.3",
- "@types/react": "^19.2.17",
- "@types/react-dom": "^19.2.3",
- "@vitejs/plugin-react": "^6.0.4",
- "oxlint": "^1.75.0",
- "typescript": "~5.9.0",
- "vite": "^8.2.0"
+ "@types/node": "^26.2.0",
+ "@types/react": "^19.2.18",
+ "@types/react-dom": "^19.2.4",
+ "@vitejs/plugin-react": "^6.0.5",
+ "oxlint": "^1.78.0",
+ "typescript": "~7.0.2",
+ "vite": "^8.2.1"
},
"overrides": {
"uuid": "^11.1.1"
diff --git a/app-kit-unified-balance/.gitignore b/app-kit-unified-balance/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/app-kit-unified-balance/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/app-kit-unified-balance/README.md b/app-kit-unified-balance/README.md
new file mode 100644
index 0000000..656fabc
--- /dev/null
+++ b/app-kit-unified-balance/README.md
@@ -0,0 +1,50 @@
+# Deposit and spend a unified USDC balance
+
+Use [`@circle-fin/app-kit`](https://www.npmjs.com/package/@circle-fin/app-kit)
+to deposit USDC into a unified balance across chains, read that balance, and
+spend it to a recipient on Arc Testnet.
+
+This Vite + TypeScript page connects EVM and Solana browser wallets, creates
+Circle adapters with the chains this demo uses, then calls
+`unifiedBalance.deposit()`, `unifiedBalance.getBalances()`, and
+`unifiedBalance.spend()`.
+
+## Prerequisites
+
+- [Node.js 22 or later](https://nodejs.org/)
+- An EIP-6963 EVM browser wallet such as MetaMask
+- A Solana browser wallet on `window.solana` such as Phantom
+- Testnet USDC on Base Sepolia and Solana Devnet
+- Native gas tokens for both wallets
+
+This project does not require environment variables or API keys.
+
+## Install and run
+
+```bash
+npm install
+npm run dev
+```
+
+Open the local Vite URL in a browser with both wallets installed.
+
+```bash
+npm run build
+```
+
+## What this example does
+
+1. Connects an EVM wallet and builds a viem adapter for Base Sepolia and Arc
+ Testnet.
+2. Connects a Solana wallet and builds a Solana adapter for Solana Devnet.
+3. Deposits 2 USDC from Base Sepolia with `kit.unifiedBalance.deposit()`.
+4. Deposits 1 USDC from Solana Devnet with `kit.unifiedBalance.deposit()`.
+5. Reads the unified balance with `kit.unifiedBalance.getBalances()`.
+6. Spends 2.50 USDC to a recipient on Arc Testnet with
+ `kit.unifiedBalance.spend()`.
+
+## Key file
+
+- `src/main.ts` — wallet connect, adapters, deposit, balance, and spend.
+ Change `chain`, `amount`, and `token` on the deposit and spend calls (and
+ `supportedChains` on the adapters) for different chains or amounts.
diff --git a/app-kit-unified-balance/index.html b/app-kit-unified-balance/index.html
new file mode 100644
index 0000000..22740bd
--- /dev/null
+++ b/app-kit-unified-balance/index.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+ App Kit Unified Balance
+
+
+
+
+
+
+
Connect Solana wallet
+
+
+
+
+ Deposit Base Sepolia
+ Deposit Solana Devnet
+ Check Unified Balance
+
+
+
+
+
+
diff --git a/app-kit-unified-balance/package.json b/app-kit-unified-balance/package.json
new file mode 100644
index 0000000..442dcf0
--- /dev/null
+++ b/app-kit-unified-balance/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "app-kit-unified-balance",
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "preview": "vite preview"
+ },
+ "devDependencies": {
+ "typescript": "~7.0.2",
+ "vite": "^8.2.1"
+ },
+ "dependencies": {
+ "@circle-fin/adapter-solana": "^1.6.5",
+ "@circle-fin/adapter-viem-v2": "^1.15.1",
+ "@circle-fin/app-kit": "^1.12.0",
+ "viem": "^2.55.17"
+ }
+}
diff --git a/app-kit-unified-balance/src/main.ts b/app-kit-unified-balance/src/main.ts
new file mode 100644
index 0000000..e8ee0ae
--- /dev/null
+++ b/app-kit-unified-balance/src/main.ts
@@ -0,0 +1,300 @@
+/**
+ * Copyright 2026 Circle Internet Group, Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { AppKit } from "@circle-fin/app-kit";
+import { ArcTestnet, BaseSepolia, SolanaDevnet } from "@circle-fin/app-kit/chains";
+import { createSolanaAdapterFromProvider } from "@circle-fin/adapter-solana";
+import type {
+ CreateSolanaAdapterFromProviderParams,
+ SolanaAdapter,
+} from "@circle-fin/adapter-solana";
+import { createViemAdapterFromProvider } from "@circle-fin/adapter-viem-v2";
+import type {
+ CreateViemAdapterFromProviderParams,
+ ViemAdapter,
+} from "@circle-fin/adapter-viem-v2";
+
+type EvmWalletProvider = CreateViemAdapterFromProviderParams["provider"];
+type SolanaWalletProvider = CreateSolanaAdapterFromProviderParams["provider"];
+
+type EIP6963ProviderDetail = {
+ info: {
+ uuid: string;
+ name: string;
+ icon: string;
+ rdns: string;
+ };
+ provider: EvmWalletProvider;
+};
+
+declare global {
+ interface Window {
+ solana?: SolanaWalletProvider;
+ }
+
+ interface WindowEventMap {
+ "eip6963:announceProvider": CustomEvent;
+ }
+}
+
+const kit = new AppKit();
+let evmAdapter: ViemAdapter | null = null;
+let solanaAdapter: SolanaAdapter | null = null;
+
+/** Discover an EIP-6963 browser wallet (prefers MetaMask). */
+async function getEvmProvider(): Promise {
+ const providers = new Map();
+
+ const onAnnounce = ((event: CustomEvent) => {
+ providers.set(event.detail.info.uuid, event.detail);
+ }) as EventListener;
+
+ window.addEventListener("eip6963:announceProvider", onAnnounce);
+ window.dispatchEvent(new Event("eip6963:requestProvider"));
+ await new Promise((resolve) => window.setTimeout(resolve, 250));
+ window.removeEventListener("eip6963:announceProvider", onAnnounce);
+
+ const selectedProvider =
+ [...providers.values()].find(
+ ({ info }) => info.rdns === "io.metamask" || info.name === "MetaMask",
+ )?.provider ?? [...providers.values()][0]?.provider;
+
+ if (!selectedProvider) {
+ throw new Error("No EIP-6963 browser wallet found");
+ }
+
+ return selectedProvider;
+}
+
+/** Connect the EVM wallet and build an adapter for Base Sepolia + Arc Testnet. */
+async function handleEvmConnect() {
+ try {
+ connectEvmButton.disabled = true;
+
+ const provider = await getEvmProvider();
+ await provider.request({
+ method: "eth_requestAccounts",
+ params: undefined,
+ });
+ const accounts = (await provider.request({
+ method: "eth_accounts",
+ params: undefined,
+ })) as string[];
+
+ // Create the adapter once at connect time with the chains this demo uses
+ evmAdapter = await createViemAdapterFromProvider({
+ provider,
+ capabilities: {
+ supportedChains: [BaseSepolia, ArcTestnet],
+ },
+ });
+ evmWalletInfo.textContent = accounts[0] ?? "Connected";
+ } catch (error) {
+ evmAdapter = null;
+ render({ error: error instanceof Error ? error.message : "Unknown error" });
+ } finally {
+ connectEvmButton.disabled = Boolean(evmAdapter);
+ updateActionButtons();
+ }
+}
+
+/** Connect the Solana wallet and build an adapter for Solana Devnet. */
+async function handleSolanaConnect() {
+ try {
+ connectSolanaButton.disabled = true;
+
+ const provider = window.solana;
+ if (!provider) {
+ throw new Error("No Solana browser wallet found");
+ }
+
+ const connection = await provider.connect();
+ const connectedAddress =
+ connection.publicKey?.toString() ?? provider.publicKey?.toString() ?? null;
+
+ // Create the adapter once at connect time for Solana Devnet
+ solanaAdapter = await createSolanaAdapterFromProvider({
+ provider,
+ capabilities: {
+ supportedChains: [SolanaDevnet],
+ },
+ });
+ solanaWalletInfo.textContent = connectedAddress ?? "Connected";
+ } catch (error) {
+ solanaAdapter = null;
+ render({ error: error instanceof Error ? error.message : "Unknown error" });
+ } finally {
+ connectSolanaButton.disabled = Boolean(solanaAdapter);
+ updateActionButtons();
+ }
+}
+
+/** Deposit 2 USDC from Base Sepolia into the unified balance. */
+async function handleDepositBase() {
+ try {
+ if (!evmAdapter) {
+ throw new Error("Connect an EVM wallet first");
+ }
+
+ depositBaseButton.disabled = true;
+
+ // Switch the wallet to Base Sepolia before depositing
+ await evmAdapter.ensureChain(BaseSepolia);
+
+ const result = await kit.unifiedBalance.deposit({
+ from: { adapter: evmAdapter, chain: "Base_Sepolia" },
+ amount: "2.00",
+ token: "USDC",
+ });
+
+ render(result);
+ } catch (error) {
+ render({ error: error instanceof Error ? error.message : "Unknown error" });
+ } finally {
+ updateActionButtons();
+ }
+}
+
+/** Deposit 1 USDC from Solana Devnet into the unified balance. */
+async function handleDepositSolana() {
+ try {
+ if (!solanaAdapter) {
+ throw new Error("Connect a Solana wallet first");
+ }
+
+ depositSolanaButton.disabled = true;
+
+ const result = await kit.unifiedBalance.deposit({
+ from: { adapter: solanaAdapter, chain: "Solana_Devnet" },
+ amount: "1.00",
+ token: "USDC",
+ });
+
+ render(result);
+ } catch (error) {
+ render({ error: error instanceof Error ? error.message : "Unknown error" });
+ } finally {
+ updateActionButtons();
+ }
+}
+
+/** Read the unified USDC balance across connected wallets. */
+async function handleCheckBalance() {
+ try {
+ checkBalanceButton.disabled = true;
+
+ // Include every connected adapter as a balance source
+ const sources = [
+ ...(evmAdapter ? [{ adapter: evmAdapter }] : []),
+ ...(solanaAdapter ? [{ adapter: solanaAdapter }] : []),
+ ];
+
+ const balances = await kit.unifiedBalance.getBalances({
+ sources,
+ networkType: "testnet",
+ includePending: true,
+ });
+
+ render(balances);
+ } catch (error) {
+ render({ error: error instanceof Error ? error.message : "Unknown error" });
+ } finally {
+ updateActionButtons();
+ }
+}
+
+/** Spend 2.50 USDC from the unified balance to a recipient on Arc Testnet. */
+async function handleSpend(event: SubmitEvent) {
+ event.preventDefault();
+
+ try {
+ if (!evmAdapter || !solanaAdapter) {
+ throw new Error("Connect both wallets first");
+ }
+
+ spendButton.disabled = true;
+
+ const recipientAddress = recipientAddressInput.value.trim();
+
+ // Pull liquidity from both chains and deliver on Arc Testnet
+ const result = await kit.unifiedBalance.spend({
+ amount: "2.50",
+ token: "USDC",
+ from: [{ adapter: evmAdapter }, { adapter: solanaAdapter }],
+ to: {
+ adapter: evmAdapter,
+ chain: "Arc_Testnet",
+ recipientAddress,
+ },
+ });
+
+ render(result);
+ } catch (error) {
+ render({ error: error instanceof Error ? error.message : "Unknown error" });
+ } finally {
+ updateActionButtons();
+ }
+}
+
+/** Enable deposit / balance / spend actions based on which wallets are connected. */
+function updateActionButtons() {
+ const hasEvmAdapter = Boolean(evmAdapter);
+ const hasSolanaAdapter = Boolean(solanaAdapter);
+
+ depositBaseButton.disabled = !hasEvmAdapter;
+ depositSolanaButton.disabled = !hasSolanaAdapter;
+ checkBalanceButton.disabled = !hasEvmAdapter && !hasSolanaAdapter;
+ spendButton.disabled = !(hasEvmAdapter && hasSolanaAdapter);
+}
+
+/** Pretty-print a value into the output panel. */
+function render(value: unknown) {
+ output.textContent = JSON.stringify(
+ value,
+ (_key, currentValue) =>
+ typeof currentValue === "bigint" ? currentValue.toString() : currentValue,
+ 2,
+ );
+ output.scrollTop = 0;
+}
+
+const connectEvmButton = document.querySelector("#connectEvm")!;
+const connectSolanaButton =
+ document.querySelector("#connectSolana")!;
+const depositBaseButton =
+ document.querySelector("#depositBase")!;
+const depositSolanaButton =
+ document.querySelector("#depositSolana")!;
+const checkBalanceButton =
+ document.querySelector("#checkBalance")!;
+const spendForm = document.querySelector("form")!;
+const spendButton = document.querySelector("#spend")!;
+const recipientAddressInput =
+ document.querySelector("#recipientAddress")!;
+const evmWalletInfo = document.querySelector("#evmWalletInfo")!;
+const solanaWalletInfo =
+ document.querySelector("#solanaWalletInfo")!;
+const output = document.querySelector("#output")!;
+
+connectEvmButton.addEventListener("click", handleEvmConnect);
+connectSolanaButton.addEventListener("click", handleSolanaConnect);
+depositBaseButton.addEventListener("click", handleDepositBase);
+depositSolanaButton.addEventListener("click", handleDepositSolana);
+checkBalanceButton.addEventListener("click", handleCheckBalance);
+spendForm.addEventListener("submit", handleSpend);
+updateActionButtons();
diff --git a/app-kit-unified-balance/tsconfig.json b/app-kit-unified-balance/tsconfig.json
new file mode 100644
index 0000000..1ab38c8
--- /dev/null
+++ b/app-kit-unified-balance/tsconfig.json
@@ -0,0 +1,23 @@
+{
+ "compilerOptions": {
+ "target": "es2023",
+ "module": "esnext",
+ "lib": ["ES2023", "DOM"],
+ "types": ["vite/client"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}