diff --git a/.gitleaks.toml b/.gitleaks.toml new file mode 100644 index 0000000..515ef3b --- /dev/null +++ b/.gitleaks.toml @@ -0,0 +1,10 @@ +# Gitleaks configuration +# Used by Sourcery AI and other secret scanners + +# The hex strings in constants.ts are public blockchain contract addresses, +# not API keys or secrets. They are viewable on-chain by anyone. +[[allowlist]] +description = "Public blockchain contract addresses (not secrets)" +paths = [ + '''packages/bridging-sdk/src/constants\.ts''', +] diff --git a/apps/demo-bridging-app/index.html b/apps/demo-bridging-app/index.html new file mode 100644 index 0000000..c793fa0 --- /dev/null +++ b/apps/demo-bridging-app/index.html @@ -0,0 +1,14 @@ + + + + + + + GoodDollar Bridge Demo + + + +
+ + + diff --git a/apps/demo-bridging-app/package.json b/apps/demo-bridging-app/package.json new file mode 100644 index 0000000..7752e1f --- /dev/null +++ b/apps/demo-bridging-app/package.json @@ -0,0 +1,33 @@ +{ + "name": "demo-bridging-app", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@goodsdks/bridging-sdk": "workspace:*", + "@reown/appkit": "^1.0.0", + "@reown/appkit-adapter-wagmi": "^1.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "viem": "^2.28.0", + "wagmi": "^2.14.8" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react": "^4.2.1", + "eslint": "^8.57.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "typescript": "^5.2.2", + "vite": "^5.2.0" + } +} diff --git a/apps/demo-bridging-app/src/App.tsx b/apps/demo-bridging-app/src/App.tsx new file mode 100644 index 0000000..6697dbe --- /dev/null +++ b/apps/demo-bridging-app/src/App.tsx @@ -0,0 +1,154 @@ +import { useState } from "react" +import { useAccount } from "wagmi" +import { WagmiProvider } from "./config" +import { BridgeForm } from "./components/BridgeForm" +import { TransactionHistory } from "./components/TransactionHistory" +import type { BridgeProtocol } from "@goodsdks/bridging-sdk" + +function AppContent() { + const { isConnected } = useAccount() + const [selectedProtocol, setSelectedProtocol] = + useState("LAYERZERO") + + return ( +
+ {/* Premium Header */} +
+

+ Main Bridge +

+

+ Seamlessly convert between Fuse G$ tokens to Celo and vice versa, + enabling versatile use of G$ tokens across various platforms and + ecosystems. +

+
+ + {/* Main Content Area */} +
+ {!isConnected ? ( +
+
+ + + +
+

+ Connect Your Wallet +

+

+ To start bridging G$ tokens across chains, please connect your + wallet first. +

+
+ +
+
+ ) : ( +
+ {/* Integrated Bridge Section */} +
+
+

+ Select Bridge Provider +

+
+ + +
+
+ + {/* Enhanced Bridge Form */} + +
+ + {/* Recent Transactions Section */} +
+

+ Recent Transactions +

+ +
+
+ )} +
+ + {/* Simple Premium Footer */} + +
+ ) +} + +function App() { + return ( + + + + ) +} + +export default App diff --git a/apps/demo-bridging-app/src/components/BridgeForm.tsx b/apps/demo-bridging-app/src/components/BridgeForm.tsx new file mode 100644 index 0000000..e698876 --- /dev/null +++ b/apps/demo-bridging-app/src/components/BridgeForm.tsx @@ -0,0 +1,337 @@ +import { useState, useEffect } from "react" +import { useAccount } from "wagmi" +import { formatUnits } from "viem" +import { useBridgingSDK, useBridgeFee } from "@goodsdks/react-hooks" +import { SUPPORTED_CHAINS, BRIDGE_PROTOCOLS, parseAmount } from "@goodsdks/bridging-sdk" +import type { BridgeProtocol, ChainId } from "@goodsdks/bridging-sdk" + +interface BridgeFormProps { + defaultProtocol: BridgeProtocol +} + +export function BridgeForm({ defaultProtocol }: BridgeFormProps) { + const { address } = useAccount() + const { sdk, loading: sdkLoading } = useBridgingSDK() + + const [fromChain, setFromChain] = useState(42220) // Celo + const [toChain, setToChain] = useState(1) // Ethereum + const [amount, setAmount] = useState("") + const [recipient, setRecipient] = useState("") + const [isBridging, setIsBridging] = useState(false) + const [isApproving, setIsApproving] = useState(false) + const [allowance, setAllowance] = useState(0n) + const [balance, setBalance] = useState<{ formatted: string; value: bigint } | undefined>() + const [error, setError] = useState(null) + + // Fetch balance and allowance using SDK + useEffect(() => { + if (!sdk || !address) return + + const fetchData = async () => { + try { + const [bal, allow] = await Promise.all([ + sdk.getG$Balance(address), + sdk.getAllowance(address) + ]) + const decimals = SUPPORTED_CHAINS[fromChain].decimals + setBalance({ formatted: formatUnits(bal, decimals), value: bal }) + setAllowance(allow) + } catch (err) { + console.error("Failed to fetch balance/allowance:", err) + } + } + + fetchData() + const interval = setInterval(fetchData, 10000) + return () => clearInterval(interval) + }, [sdk, address, fromChain]) + + // Get fee estimate + const { fee, loading: feeLoading, error: feeError } = useBridgeFee( + fromChain, + toChain, + defaultProtocol + ) + + // Set recipient to connected address if not set + useEffect(() => { + if (address && !recipient) { + setRecipient(address) + } + }, [address, recipient]) + + const handleApprove = async () => { + if (!sdk) return + try { + setIsApproving(true) + setError(null) + const decimals = SUPPORTED_CHAINS[fromChain].decimals + const amountInWei = parseAmount(amount, decimals) + await sdk.approve(amountInWei) + + // Refresh allowance + if (address) { + const allow = await sdk.getAllowance(address) + setAllowance(allow) + } + } catch (err) { + setError(err instanceof Error ? err.message : "Approval failed") + } finally { + setIsApproving(false) + } + } + + const handleBridge = async () => { + if (!sdk || !address) return + + try { + setIsBridging(true) + setError(null) + + const decimals = SUPPORTED_CHAINS[fromChain].decimals + const amountInWei = parseAmount(amount, decimals) + + if (amountInWei <= 0n) { + throw new Error("Amount must be greater than 0") + } + + const canBridgeResult = await sdk.canBridge(address, amountInWei, toChain) + if (!canBridgeResult.isWithinLimit) { + throw new Error(canBridgeResult.error || "Bridge limit exceeded") + } + + await sdk.bridgeTo( + recipient as `0x${string}`, + toChain, + amountInWei, + defaultProtocol, + fee?.amount + ) + + setAmount("") + } catch (err) { + setError(err instanceof Error ? err.message : "Bridge failed") + } finally { + setIsBridging(false) + } + } + + const handleMaxAmount = () => { + if (balance) { + setAmount(balance.formatted) + } + } + + const handleSwapChains = () => { + setFromChain(toChain) + setToChain(fromChain) + } + + const getEstimatedReceive = () => { + if (!amount) return "0.00" + const val = parseFloat(amount) + // Simple estimation: subtract 0.1% protocol fee + hypothetical network fee + const estimate = val * 0.999 - (fee ? 0.01 : 0) + return Math.max(0, estimate).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + } + + const decimals = SUPPORTED_CHAINS[fromChain].decimals + const amountInWei = parseAmount(amount, decimals) + const needsApproval = amountInWei > allowance + + return ( +
+ {/* Chain Selection Row */} +
+
+ +
+
+
+ {SUPPORTED_CHAINS[fromChain].name[0]} +
+
+ G$ {SUPPORTED_CHAINS[fromChain].name} +
+
+ + + + +
+
+ + + +
+ +
+
+
+ {SUPPORTED_CHAINS[toChain].name[0]} +
+
+ G$ {SUPPORTED_CHAINS[toChain].name} +
+
+ + + + +
+
+
+ + {/* Amount Input Section */} +
+
+
+ + Balance: {balance?.formatted || "0.00"} G$ +
+
+
+ +
+ G$ +
+ setAmount(e.target.value)} + className="w-full bg-slate-50 border border-slate-100 rounded-2xl py-6 pl-32 pr-6 text-2xl font-bold text-slate-900 focus:bg-white focus:border-blue-500 transition-all outline-none" + placeholder="1000" + /> +
+ + {/* Fee Estimate Display */} + {amount && ( +
+ {feeLoading ? ( +
+ + + + + Estimating bridge fee... +
+ ) : fee ? ( +
+ Estimated bridge fee: + + {parseFloat(fee.formatted.split(" ")[0]).toFixed(6)} {SUPPORTED_CHAINS[fromChain].name} + +
+ ) : null} +
+ )} +
+ +
+
+ + Balance: 0.00 G$ +
+
+ +
+
+
+ + {/* Action Button */} + {needsApproval ? ( + + ) : null} + + + + {/* Details Footnote */} +
+

Protocol Fee: 0.10% of bridged G$ amount

+

Provider: {BRIDGE_PROTOCOLS[defaultProtocol]}

+ {fee && ( +

+ Bridge fee (pre-execution): {parseFloat(fee.formatted.split(" ")[0]).toFixed(10)} {SUPPORTED_CHAINS[fromChain].name} +

+ )} +
+ + {/* Error Display */} + {error && ( +
+ {error} +
+ )} + {feeError && ( +
+ {feeError} +
+ )} +
+ ) +} \ No newline at end of file diff --git a/apps/demo-bridging-app/src/components/FeeEstimator.tsx b/apps/demo-bridging-app/src/components/FeeEstimator.tsx new file mode 100644 index 0000000..9dc5138 --- /dev/null +++ b/apps/demo-bridging-app/src/components/FeeEstimator.tsx @@ -0,0 +1,192 @@ +import { useState } from "react" +import { useBridgeFee } from "@goodsdks/react-hooks" +import { SUPPORTED_CHAINS, BRIDGE_PROTOCOLS } from "@goodsdks/bridging-sdk" +import type { BridgeProtocol, ChainId } from "@goodsdks/bridging-sdk" + +interface FeeEstimatorProps { + fromChain: ChainId + toChain: ChainId + amount: string +} + +export function FeeEstimator({ fromChain, toChain, amount }: FeeEstimatorProps) { + const [selectedProtocol, setSelectedProtocol] = useState("AXELAR") + + // Get fees for both protocols + const { fee: axelarFee, loading: axelarLoading, error: axelarError } = useBridgeFee( + fromChain, + toChain, + "AXELAR" + ) + + const { fee: lzFee, loading: lzLoading, error: lzError } = useBridgeFee( + fromChain, + toChain, + "LAYERZERO" + ) + + const getFeeDisplay = (fee: any) => { + if (!fee) return null + const [amount, token] = fee.formatted.split(" ") + return { amount: parseFloat(amount), token } + } + + const axelarFeeDisplay = getFeeDisplay(axelarFee) + const lzFeeDisplay = getFeeDisplay(lzFee) + + const getCheapestProtocol = () => { + if (!axelarFeeDisplay || !lzFeeDisplay) return null + + if (axelarFeeDisplay.amount < lzFeeDisplay.amount) { + return "AXELAR" + } else { + return "LAYERZERO" + } + } + + const cheapestProtocol = getCheapestProtocol() + + const getTotalCost = (protocol: BridgeProtocol) => { + const feeDisplay = protocol === "AXELAR" ? axelarFeeDisplay : lzFeeDisplay + if (!feeDisplay || !amount) return 0 + + return parseFloat(amount) + feeDisplay.amount + } + + if (!fromChain || !toChain) { + return ( +
+

Fee Estimator

+

Select source and destination chains to see fee estimates.

+
+ ) + } + + return ( +
+

Fee Estimator

+ +
+

+ Bridging from {SUPPORTED_CHAINS[fromChain].name} to{" "} + {SUPPORTED_CHAINS[toChain].name} +

+
+ + {/* Protocol Comparison */} +
+
+ {/* Axelar Fee */} +
setSelectedProtocol("AXELAR")} + > +
+

Axelar

+ {cheapestProtocol === "AXELAR" && ( + + Cheapest + + )} +
+ + {axelarLoading ? ( +

Loading fee...

+ ) : axelarError ? ( +

Error loading fee

+ ) : axelarFeeDisplay ? ( +
+

+ {axelarFeeDisplay.amount.toFixed(6)} {axelarFeeDisplay.token} +

+ {amount && ( +

+ Total: {getTotalCost("AXELAR").toFixed(6)} {axelarFeeDisplay.token} +

+ )} +
+ ) : ( +

No route available

+ )} +
+ + {/* LayerZero Fee */} +
setSelectedProtocol("LAYERZERO")} + > +
+

LayerZero

+ {cheapestProtocol === "LAYERZERO" && ( + + Cheapest + + )} +
+ + {lzLoading ? ( +

Loading fee...

+ ) : lzError ? ( +

Error loading fee

+ ) : lzFeeDisplay ? ( +
+

+ {lzFeeDisplay.amount.toFixed(6)} {lzFeeDisplay.token} +

+ {amount && ( +

+ Total: {getTotalCost("LAYERZERO").toFixed(6)} {lzFeeDisplay.token} +

+ )} +
+ ) : ( +

No route available

+ )} +
+
+ + {/* Selected Protocol Details */} +
+

+ Selected: {BRIDGE_PROTOCOLS[selectedProtocol]} +

+ + {selectedProtocol === "AXELAR" && axelarFeeDisplay && ( +
+

• Secure cross-chain communication

+

• Gas refunds supported

+

• Explorer: axelarscan.io

+
+ )} + + {selectedProtocol === "LAYERZERO" && lzFeeDisplay && ( +
+

• Ultra-light node endpoints

+

• Custom adapter parameters

+

• Explorer: layerzeroscan.com

+
+ )} +
+ + {/* Fee Information */} +
+

Important Notes

+
    +
  • • Fees are paid in the source chain's native token
  • +
  • • Fees cover cross-chain infrastructure costs
  • +
  • • Fees may vary based on network congestion
  • +
  • • Total cost = bridge amount + protocol fee
  • +
+
+
+
+ ) +} \ No newline at end of file diff --git a/apps/demo-bridging-app/src/components/TransactionHistory.tsx b/apps/demo-bridging-app/src/components/TransactionHistory.tsx new file mode 100644 index 0000000..312cafc --- /dev/null +++ b/apps/demo-bridging-app/src/components/TransactionHistory.tsx @@ -0,0 +1,226 @@ +import { useState } from "react" +import { useAccount } from "wagmi" +import { useBridgingSDK, useBridgeHistory } from "@goodsdks/react-hooks" +import { BridgingSDK } from "@goodsdks/bridging-sdk" +import type { BridgeRequestEvent, ExecutedTransferEvent } from "@goodsdks/bridging-sdk" + +export function TransactionHistory() { + const { address, isConnected } = useAccount() + const { history, loading } = useBridgeHistory(address) + + if (!isConnected) return null + + if (loading) { + return ( +
+ + + + +
+ ) + } + + if (history.length === 0) { + return ( +
+

+ No recent bridge transactions found +

+

+ Make sure your wallet is connected to see your bridge transactions +

+
+ ) + } + + return ( +
+ {history.map((tx: BridgeRequestEvent | ExecutedTransferEvent, index: number) => ( + + ))} +
+ ) +} + +function TransactionCard({ transaction }: { transaction: BridgeRequestEvent | ExecutedTransferEvent }) { + const { sdk } = useBridgingSDK() + const [status, setStatus] = useState(null) + const [statusLoading, setStatusLoading] = useState(false) + const type = "targetChainId" in transaction.args ? "request" : "executed" + const protocol = transaction.args.bridge + + const fetchStatus = async () => { + if (!sdk || type !== "request") return + try { + setStatusLoading(true) + const txStatus = await sdk.getTransactionStatus( + transaction.transactionHash, + protocol, + ) + setStatus(txStatus) + } catch (err) { + console.error("Failed to fetch status:", err) + } finally { + setStatusLoading(false) + } + } + + const formatAmountValue = (amount: bigint, chainId: number) => { + const decimals = chainId === 1 || chainId === 122 ? 2 : 18 + const val = Number(amount) / Math.pow(10, decimals) + return val.toLocaleString(undefined, { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + }) + } + + const srcChainId = type === "request" + ? sdk?.publicClient.chain?.id || 42220 + : (transaction.args as ExecutedTransferEvent["args"]).sourceChainId + + const dstChainId = type === "request" + ? (transaction.args as BridgeRequestEvent["args"]).targetChainId + : sdk?.publicClient.chain?.id || 42220 + + const amount = formatAmountValue(transaction.args.amount, Number(srcChainId)) + + return ( +
+ {/* Card Header */} +
+
+
+ + Bridged via {BridgingSDK.formatProtocolName(protocol)} + + + + {type === "request" + ? new Date(Number((transaction.args as BridgeRequestEvent["args"]).timestamp) * 1000).toLocaleString() + : `Block #${transaction.blockNumber}`} + +
+
+
+ + {type === "request" ? "Initiated" : "Completed"} + +
+
+
+{amount} G$
+
+ + {/* Card Body */} +
+
+
+
+ {BridgingSDK.formatChainName(Number(srcChainId))[0]} +
+
+ + From + + + {BridgingSDK.formatChainName(Number(srcChainId))} + +
+
+ +
+ + + +
+ +
+
+ {BridgingSDK.formatChainName(Number(dstChainId))[0]} +
+
+ + To + + + {BridgingSDK.formatChainName(Number(dstChainId))} + +
+
+
+ +
+ {type === "request" && !status && ( + + )} + + {status && ( +
+
+ + {BridgingSDK.getStatusLabel(status)} + +
+ )} + + + + + + +
+
+
+ ) +} diff --git a/apps/demo-bridging-app/src/config.tsx b/apps/demo-bridging-app/src/config.tsx new file mode 100644 index 0000000..14d9233 --- /dev/null +++ b/apps/demo-bridging-app/src/config.tsx @@ -0,0 +1,63 @@ +import { createAppKit } from "@reown/appkit/react" +import { WagmiProvider as WagmiProviderOriginal, http } from "wagmi" +import { celo, mainnet, fuse, xdc } from "@reown/appkit/networks" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import { WagmiAdapter } from "@reown/appkit-adapter-wagmi" +import { ReactNode } from "react" + +const queryClient = new QueryClient() + +// 1. Get projectId from https://cloud.reown.com +const projectId = "3a882e00d37608ab3c3429584b7ed1d6" + +// 2. Create a metadata object - optional +const metadata = { + name: "GoodDollar Bridge Demo", + description: "Demo app for GoodDollar cross-chain bridging", + url: "https://demo-bridging-app.vercel.app", + icons: ["https://demo-bridging-app.vercel.app/icon.png"], +} + +// 3. Set the networks +const networks = [celo, mainnet, fuse, xdc] as any + +// 4. Create Wagmi Adapter +const wagmiAdapter = new WagmiAdapter({ + networks, + projectId, + ssr: true, + transports: { + [celo.id]: http("https://forno.celo.org"), + [mainnet.id]: http("https://eth.llamarpc.com"), + [fuse.id]: http("https://rpc.fuse.io"), + [xdc.id]: http("https://rpc.xdcrpc.com"), + }, +}) + +// 5. Create modal +createAppKit({ + adapters: [wagmiAdapter], + networks: networks as any, + metadata, + projectId, + features: { + analytics: true, // Optional - defaults to your Cloud configuration + email: false, + socials: [], + emailShowWallets: false, + }, +}) + +type ComponentProps = { + children: ReactNode +} + +export function WagmiProvider({ children }: ComponentProps) { + return ( + + {children} + + ) +} + +export { wagmiAdapter } diff --git a/apps/demo-bridging-app/src/index.css b/apps/demo-bridging-app/src/index.css new file mode 100644 index 0000000..8fbff42 --- /dev/null +++ b/apps/demo-bridging-app/src/index.css @@ -0,0 +1,124 @@ +@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&display=swap'); + +:root { + --primary: #0085FF; + --primary-glow: rgba(0, 133, 255, 0.4); + --secondary: #00D1FF; + --background: #F8FAFC; + --card-bg: #FFFFFF; + --text-main: #0F172A; + --text-muted: #64748B; + --accent-green: #10B981; + --accent-blue: #3B82F6; + --glass-bg: rgba(255, 255, 255, 0.7); + --glass-border: rgba(255, 255, 255, 0.3); +} + +body { + margin: 0; + font-family: 'Outfit', -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background: var(--background); + color: var(--text-main); +} + +.premium-card { + background-color: #fff; + border-radius: 1.5rem; + box-shadow: 0 8px 30px rgb(0 0 0 / 0.04); + border: 1px solid #f1f5f9; + padding: 2rem; + transition: all 0.3s; +} + +.premium-card:hover { + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.06); + transform: translateY(-0.25rem); +} + +.glass-effect { + backdrop-filter: blur(12px); + background: rgba(255, 255, 255, 0.7); + border: 1px solid rgba(255, 255, 255, 0.3); +} + +.gradient-text { + background-clip: text; + -webkit-background-clip: text; + color: transparent; + background-image: linear-gradient(to right, #2563eb, #06b6d4); + font-weight: 700; +} + +.input-glow:focus { + outline: none; + box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1); + border-color: #3b82f6; +} + +.premium-button { + position: relative; + overflow: hidden; + background-color: #2563eb; + color: #fff; + font-weight: 600; + padding: 1rem 2rem; + border-radius: 1rem; + transition: all 0.3s; + box-shadow: 0 10px 15px -3px rgba(59, 130, 246, 0.2); + border: none; + cursor: pointer; +} + +.premium-button:hover:not(:disabled) { + background-color: #1d4ed8; + box-shadow: 0 20px 25px -5px rgba(59, 130, 246, 0.3); + transform: translateY(-0.125rem); +} + +.premium-button:active { + transform: scale(0.95); +} + +.premium-button:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.premium-button-secondary { + background-color: #f8fafc; + color: #334155; + font-weight: 600; + padding: 1rem 2rem; + border-radius: 1rem; + transition: all 0.3s; + border: 1px solid #e2e8f0; + cursor: pointer; +} + +.premium-button-secondary:hover { + background-color: #f1f5f9; +} + +.premium-button-secondary:active { + transform: scale(0.95); +} + +/* Custom scrollbar */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background-color: #e2e8f0; + border-radius: 9999px; +} + +::-webkit-scrollbar-thumb:hover { + background-color: #cbd5e1; +} diff --git a/apps/demo-bridging-app/src/main.tsx b/apps/demo-bridging-app/src/main.tsx new file mode 100644 index 0000000..99771c0 --- /dev/null +++ b/apps/demo-bridging-app/src/main.tsx @@ -0,0 +1,10 @@ +import React from "react" +import ReactDOM from "react-dom/client" +import App from "./App" +import "./index.css" + +ReactDOM.createRoot(document.getElementById("root")!).render( + + + , +) \ No newline at end of file diff --git a/apps/demo-bridging-app/tsconfig.json b/apps/demo-bridging-app/tsconfig.json new file mode 100644 index 0000000..7a7611e --- /dev/null +++ b/apps/demo-bridging-app/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} \ No newline at end of file diff --git a/apps/demo-bridging-app/tsconfig.node.json b/apps/demo-bridging-app/tsconfig.node.json new file mode 100644 index 0000000..099658c --- /dev/null +++ b/apps/demo-bridging-app/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} \ No newline at end of file diff --git a/apps/demo-bridging-app/vite.config.ts b/apps/demo-bridging-app/vite.config.ts new file mode 100644 index 0000000..5760d80 --- /dev/null +++ b/apps/demo-bridging-app/vite.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from "vite" +import react from "@vitejs/plugin-react" +import path from "path" + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, + server: { + port: 3000, + host: true, + }, + build: { + outDir: "dist", + sourcemap: true, + }, +}) \ No newline at end of file diff --git a/packages/bridging-sdk/README.md b/packages/bridging-sdk/README.md new file mode 100644 index 0000000..ed98387 --- /dev/null +++ b/packages/bridging-sdk/README.md @@ -0,0 +1,420 @@ +# GoodDollar Bridging SDK + +`@goodsdks/bridging-sdk` provides a comprehensive SDK for cross-chain G$ token bridging using Axelar and LayerZero protocols. The SDK supports bridging between Celo, Ethereum, Fuse, and XDC networks with proper fee estimation, transaction tracking, and decimal handling. + +## Installation + +```bash +yarn add @goodsdks/bridging-sdk viem +# or +npm install @goodsdks/bridging-sdk viem +``` + +For React applications, also install the peer dependencies: + +```bash +yarn add @goodsdks/bridging-sdk wagmi viem +# or +npm install @goodsdks/bridging-sdk wagmi viem +``` + +## Quick Start + +### Viem Integration + +```typescript +import { createPublicClient, createWalletClient, http } from "viem" +import { celo, mainnet, fuse } from "viem/chains" +import { BridgingSDK } from "@goodsdks/bridging-sdk" + +const publicClient = createPublicClient({ + chain: celo, + transport: http("https://forno.celo.org"), +}) + +const walletClient = createWalletClient({ + chain: celo, + transport: custom(window.ethereum), +}) + +const bridgingSDK = new BridgingSDK(publicClient, walletClient) + +// Check if user can bridge +const canBridge = await bridgingSDK.canBridge( + "0xUserAddress", + 1000000000000000000n, // 1 G$ (18 decimals for Celo) + 1 // Ethereum mainnet +) + +if (canBridge.isWithinLimit) { + // Estimate fee + const feeEstimate = await bridgingSDK.estimateFee(1, "AXELAR") + + // Bridge tokens + const receipt = await bridgingSDK.bridgeTo( + "0xRecipientAddress", + 1, // Ethereum mainnet + 1000000000000000000n, // 1 G$ + "AXELAR", + feeEstimate.fee // msg.value must cover the fee + ) + + console.log("Bridge transaction:", receipt.transactionHash) +} +``` + +### React Integration + +```tsx +import { useBridgingSDK } from "@goodsdks/bridging-sdk" + +const BridgeComponent = () => { + const { sdk, loading, error } = useBridgingSDK() + + if (loading) return

Loading SDK...

+ if (error) return

Error: {error}

+ if (!sdk) return

SDK not initialized

+ + const handleBridge = async () => { + try { + const feeEstimate = await sdk.estimateFee(1, "LAYERZERO") + const receipt = await sdk.bridgeTo( + "0xRecipientAddress", + 1, // Ethereum mainnet + 1000000000000000000n, // 1 G$ + "LAYERZERO", + feeEstimate.fee + ) + + console.log("Bridge successful:", receipt.transactionHash) + } catch (error) { + console.error("Bridge failed:", error) + } + } + + return +} +``` + +## Core Concepts + +### Decimal Handling + +The SDK handles different decimal precision across chains: + +- **Celo/XDC**: 18 decimals +- **Ethereum/Fuse**: 2 decimals + +**Important**: Bridge operations use native token decimals, while limit checks use 18-decimal normalized amounts. + +```typescript +import { normalizeAmount, denormalizeAmount } from "@goodsdks/bridging-sdk" + +// For bridging from Celo (18 decimals) to Ethereum (2 decimals) +const bridgeAmount = 1000000000000000000n // 1 G$ in Celo decimals +const normalizedAmount = normalizeAmount(bridgeAmount, 42220) // Convert to 18 decimals +const ethereumAmount = denormalizeAmount(normalizedAmount, 1) // Convert to 2 decimals +``` + +### Fee Estimation + +Fees are estimated using the GoodServer API and must be covered by `msg.value`: + +```typescript +const feeEstimate = await sdk.estimateFee(targetChainId, "AXELAR") +console.log(`Fee: ${feeEstimate.feeInNative}`) // e.g., "4.8367843657257685 Celo" + +// The fee must be provided as msg.value in the bridge transaction +await sdk.bridgeTo(recipient, targetChainId, amount, "AXELAR", feeEstimate.fee) +``` + +### Transaction Tracking + +Track bridge transactions across chains: + +```typescript +// Get transaction status +const status = await sdk.getTransactionStatus(txHash, "AXELAR") +console.log("Status:", status.status) // "pending" | "completed" | "failed" + +// Get explorer link +const explorerLink = sdk.getExplorerLink(txHash, "AXELAR") +console.log("Explorer:", explorerLink) // https://axelarscan.io/gmp/0x... + +// Get bridge history +const requests = await sdk.getBridgeRequests(userAddress) +const executed = await sdk.getExecutedTransfers(userAddress) +``` + +## API Reference + +### BridgingSDK Class + +#### Constructor + +```typescript +new BridgingSDK(publicClient, walletClient?, chainId?) +``` + +#### Methods + +##### `canBridge(from, amount, targetChainId)` + +Checks if an address can bridge a specified amount to a target chain. + +```typescript +const result = await sdk.canBridge( + "0xUserAddress", + 1000000000000000000n, + 1 // Ethereum mainnet +) +// Returns: { isWithinLimit: boolean, error?: string } +``` + +##### `estimateFee(targetChainId, protocol)` + +Estimates the fee for bridging to a target chain using a specific protocol. + +```typescript +const estimate = await sdk.estimateFee(1, "AXELAR") +// Returns: { fee: bigint, feeInNative: string, protocol: "AXELAR" } +``` + +##### `bridgeTo(target, targetChainId, amount, protocol, msgValue?)` + +Generic bridge method that automatically handles fee estimation and validation. + +```typescript +const receipt = await sdk.bridgeTo( + "0xRecipientAddress", + 1, // Ethereum mainnet + 1000000000000000000n, // 1 G$ + "AXELAR", + feeEstimate.fee // Optional, will be estimated if not provided +) +``` + +##### `bridgeToWithLz(target, targetChainId, amount, adapterParams?, msgValue?)` + +Bridge using LayerZero with custom adapter parameters. + +```typescript +const receipt = await sdk.bridgeToWithLz( + "0xRecipientAddress", + 1, // Ethereum mainnet + 1000000000000000000n, // 1 G$ + "0x000100000000000000000000000000000000000000000000000000000000000000060000", // Custom adapter params + feeEstimate.fee +) +``` + +##### `bridgeToWithAxelar(target, targetChainId, amount, gasRefundAddress?, msgValue?)` + +Bridge using Axelar with optional gas refund address. + +```typescript +const receipt = await sdk.bridgeToWithAxelar( + "0xRecipientAddress", + 1, // Ethereum mainnet + 1000000000000000000n, // 1 G$ + "0xRefundAddress", // Optional gas refund address + feeEstimate.fee +) +``` + +##### `getBridgeRequests(address, options?)` + +Fetches BridgeRequest events for an address. + +```typescript +const requests = await sdk.getBridgeRequests("0xUserAddress", { + fromBlock: 5000000n, + limit: 100 +}) +``` + +##### `getExecutedTransfers(address, options?)` + +Fetches ExecutedTransfer events for an address. + +```typescript +const executed = await sdk.getExecutedTransfers("0xUserAddress", { + fromBlock: 5000000n, + limit: 100 +}) +``` + +##### `getTransactionStatus(txHash, protocol)` + +Gets the status of a bridge transaction. + +```typescript +const status = await sdk.getTransactionStatus( + "0xTransactionHash", + "AXELAR" +) +// Returns: { status: "pending" | "completed" | "failed", srcTxHash?, dstTxHash?, timestamp?, error? } +``` + +##### `getExplorerLink(txHash, protocol)` + +Generates an explorer link for a bridge transaction. + +```typescript +const link = sdk.getExplorerLink("0xTransactionHash", "LAYERZERO") +// Returns: "https://layerzeroscan.com/tx/0xTransactionHash" +``` + +### React Hooks + +#### `useBridgingSDK()` + +Hook for accessing the BridgingSDK instance. + +```tsx +const { sdk, loading, error } = useBridgingSDK() +``` + +#### `useBridgeFee(fromChainId, toChainId, protocol)` + +Hook for getting fee estimates. + +```tsx +const { fee, loading, error } = useBridgeFee(42220, 1, "AXELAR") +``` + +#### `useBridgeTransactionStatus(txHash, protocol)` + +Hook for tracking transaction status. + +```tsx +const { status, loading, error } = useBridgeTransactionStatus("0xHash", "AXELAR") +``` + +### Utility Functions + +#### Decimal Conversion + +```typescript +import { + normalizeAmount, + denormalizeAmount, + formatAmount, + parseAmount +} from "@goodsdks/bridging-sdk" + +// Convert between native and normalized decimals +const normalized = normalizeAmount(amount, fromChainId) +const denormalized = denormalizeAmount(normalized, toChainId) + +// Format for display +const formatted = formatAmount(1000000000000000000n, 18) // "1.0" + +// Parse user input +const parsed = parseAmount("1.5", 18) // 1500000000000000000n +``` + +#### Fee Management + +```typescript +import { + validateFeeCoverage, + validateSufficientBalance, + formatFee +} from "@goodsdks/bridging-sdk" + +// Validate fee coverage +const validation = validateFeeCoverage(msgValue, requiredFee) + +// Validate sufficient balance +const balanceCheck = validateSufficientBalance( + userBalance, + bridgeAmount, + fee +) + +// Format for display +const formatted = formatFee(fee, chainId) +``` + +#### Transaction Tracking + +```typescript +import { + pollTransactionStatus, + formatTimestamp, + getTimeElapsed, + getStatusLabel +} from "@goodsdks/bridging-sdk" + +// Poll until completion +const finalStatus = await pollTransactionStatus( + txHash, + "AXELAR", + (status) => console.log("Status update:", status) +) + +// Format for display +const timestamp = formatTimestamp(status.timestamp) +const elapsed = getTimeElapsed(status.timestamp) +const label = getStatusLabel(status) +``` + +## Supported Chains + +| Chain | Chain ID | Decimals | Native Currency | +|-------|-----------|----------|-----------------| +| Celo | 42220 | 18 | CELO | +| Ethereum | 1 | 2 | ETH | +| Fuse | 122 | 2 | FUSE | +| XDC | 50 | 18 | XDC | + +## Bridge Protocols + +### Axelar +- Secure cross-chain communication +- Gas refunds supported +- Explorer: https://axelarscan.io + +### LayerZero +- Ultra-light node endpoints +- Custom adapter parameters +- Explorer: https://layerzeroscan.com + +## Error Handling + +The SDK provides detailed error messages for common issues: + +```typescript +try { + await sdk.bridgeTo(recipient, targetChain, amount, "AXELAR") +} catch (error) { + if (error.message.includes("Insufficient fee")) { + // Handle insufficient fee + } else if (error.message.includes("limit")) { + // Handle limit exceeded + } else if (error.message.includes("balance")) { + // Handle insufficient balance + } +} +``` + +## Best Practices + +1. **Always estimate fees before bridging** +2. **Validate user balance includes both amount and fees** +3. **Handle decimal conversions properly** +4. **Track transaction status for user feedback** +5. **Provide explorer links for transparency** + +## Demo Application + +See the demo application at `apps/demo-bridging-app` for a complete implementation example. + +## Contributing + +Please read our [Contributing Guidelines](https://github.com/GoodDollar/GoodSDKs/blob/main/CONTRIBUTING.md) for details. + +## License + +This project is licensed under the MIT License. See the [LICENSE](https://github.com/GoodDollar/GoodSDKs/blob/main/LICENSE) file for details. \ No newline at end of file diff --git a/packages/bridging-sdk/package.json b/packages/bridging-sdk/package.json new file mode 100644 index 0000000..4c0ae82 --- /dev/null +++ b/packages/bridging-sdk/package.json @@ -0,0 +1,43 @@ +{ + "name": "@goodsdks/bridging-sdk", + "version": "1.0.5", + "type": "module", + "scripts": { + "build": "tsup --clean", + "dev": "tsc --watch", + "bump": "yarn version patch && yarn build && git add package.json && git commit -m \"version bump\"" + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + "import": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "require": "./dist/index.cjs" + } + }, + "files": [ + "dist", + "src" + ], + "devDependencies": { + "@repo/typescript-config": "workspace:*", + "@types/react": "^18", + "react": "^18", + "typescript": "latest", + "viem": "latest", + "wagmi": "latest" + }, + "peerDependencies": { + "react": "*", + "viem": "*", + "wagmi": "*" + }, + "dependencies": { + "tsup": "^8.3.5" + } +} diff --git a/packages/bridging-sdk/src/abi.ts b/packages/bridging-sdk/src/abi.ts new file mode 100644 index 0000000..347ae90 --- /dev/null +++ b/packages/bridging-sdk/src/abi.ts @@ -0,0 +1,1111 @@ +export const MESSAGE_PASSING_BRIDGE_ABI = [ + { + "inputs": [ + { "internalType": "address", "name": "axlGateway", "type": "address" }, + { "internalType": "address", "name": "axlGasReceiver", "type": "address" }, + { "internalType": "address", "name": "lzEndpoint", "type": "address" }, + { "internalType": "bool", "name": "isTestnet", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "requestId", "type": "uint256" } + ], + "name": "ALREADY_EXECUTED", + "type": "error" + }, + { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, + { + "inputs": [{ "internalType": "string", "name": "", "type": "string" }], + "name": "BRIDGE_LIMITS", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "lzEndpoint", "type": "address" } + ], + "name": "INVALID_ENDPOINT", + "type": "error" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } + ], + "name": "INVALID_SENDER", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "chainId", "type": "uint256" } + ], + "name": "INVALID_TARGET_OR_CHAINID", + "type": "error" + }, + { "inputs": [], "name": "InvalidAddress", "type": "error" }, + { "inputs": [], "name": "InvalidAddressString", "type": "error" }, + { + "inputs": [ + { "internalType": "uint256", "name": "required", "type": "uint256" }, + { "internalType": "uint256", "name": "sent", "type": "uint256" } + ], + "name": "LZ_FEE", + "type": "error" + }, + { "inputs": [], "name": "MISSING_FEE", "type": "error" }, + { + "inputs": [ + { "internalType": "address", "name": "sender", "type": "address" } + ], + "name": "NOT_GUARDIAN", + "type": "error" + }, + { "inputs": [], "name": "NotApprovedByGateway", "type": "error" }, + { "inputs": [], "name": "TRANSFER", "type": "error" }, + { "inputs": [], "name": "TRANSFER_FROM", "type": "error" }, + { + "inputs": [ + { "internalType": "uint256", "name": "chainId", "type": "uint256" } + ], + "name": "UNSUPPORTED_CHAIN", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" } + ], + "name": "WRONG_TOKEN", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "normalizedAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum MessagePassingBridge.BridgeService", + "name": "bridge", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "BridgeRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "normalizedAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sourceChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum MessagePassingBridge.BridgeService", + "name": "bridge", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ExecutedTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "sourceChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sourceAddress", + "type": "address" + } + ], + "name": "FalseSender", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "_srcChainId", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_srcAddress", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "_nonce", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_reason", + "type": "bytes" + } + ], + "name": "MessageFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "_srcChainId", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_srcAddress", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "_nonce", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + } + ], + "name": "RetryMessageSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "_dstChainId", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "_type", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_minDstGas", + "type": "uint256" + } + ], + "name": "SetMinDstGas", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "precrime", + "type": "address" + } + ], + "name": "SetPrecrime", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "_remoteChainId", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_path", + "type": "bytes" + } + ], + "name": "SetTrustedRemote", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "_remoteChainId", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_remoteAddress", + "type": "bytes" + } + ], + "name": "SetTrustedRemoteAddress", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_PAYLOAD_SIZE_LIMIT", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TESTNET", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "accountsDailyLimit", + "outputs": [ + { "internalType": "uint256", "name": "lastTransferReset", "type": "uint256" }, + { "internalType": "uint256", "name": "bridged24Hours", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "avatar", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridgeDailyLimit", + "outputs": [ + { "internalType": "uint256", "name": "lastTransferReset", "type": "uint256" }, + { "internalType": "uint256", "name": "bridged24Hours", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridgeFees", + "outputs": [ + { "internalType": "uint256", "name": "minFee", "type": "uint256" }, + { "internalType": "uint256", "name": "maxFee", "type": "uint256" }, + { "internalType": "uint256", "name": "fee", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridgeLimits", + "outputs": [ + { "internalType": "uint256", "name": "dailyLimit", "type": "uint256" }, + { "internalType": "uint256", "name": "txLimit", "type": "uint256" }, + { "internalType": "uint256", "name": "accountDailyLimit", "type": "uint256" }, + { "internalType": "uint256", "name": "minAmount", "type": "uint256" }, + { "internalType": "bool", "name": "onlyWhitelisted", "type": "bool" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "targetChainId", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "internalType": "enum MessagePassingBridge.BridgeService", + "name": "bridge", + "type": "uint8" + } + ], + "name": "bridgeTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "targetChainId", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "bridgeToWithAxelar", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "targetChainId", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "bridgeToWithLz", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "targetChainId", "type": "uint256" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "bytes", "name": "adapterParams", "type": "bytes" } + ], + "name": "bridgeToWithLzAdapterParams", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "canBridge", + "outputs": [ + { "internalType": "bool", "name": "isWithinLimit", "type": "bool" }, + { "internalType": "string", "name": "error", "type": "string" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentId", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dao", + "outputs": [ + { "internalType": "contract Controller", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "disabledSourceBridges", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, + { "internalType": "address", "name": "_fromAddress", "type": "address" }, + { "internalType": "address", "name": "_toAddress", "type": "address" }, + { "internalType": "uint256", "name": "_normalizedAmount", "type": "uint256" }, + { "internalType": "bool", "name": "_useZro", "type": "bool" }, + { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } + ], + "name": "estimateSendFee", + "outputs": [ + { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, + { "internalType": "uint256", "name": "zroFee", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "commandId", "type": "bytes32" }, + { "internalType": "string", "name": "sourceChain", "type": "string" }, + { "internalType": "string", "name": "sourceAddress", "type": "string" }, + { "internalType": "bytes", "name": "payload", "type": "bytes" } + ], + "name": "execute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "commandId", "type": "bytes32" }, + { "internalType": "string", "name": "sourceChain", "type": "string" }, + { "internalType": "string", "name": "sourceAddress", "type": "string" }, + { "internalType": "bytes", "name": "payload", "type": "bytes" }, + { "internalType": "string", "name": "tokenSymbol", "type": "string" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "executeWithToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "executedRequests", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "", "type": "uint16" }, + { "internalType": "bytes", "name": "", "type": "bytes" }, + { "internalType": "uint64", "name": "", "type": "uint64" } + ], + "name": "failedMessages", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "faucet", + "outputs": [ + { "internalType": "contract IFaucet", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, + { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } + ], + "name": "forceResumeReceive", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gasService", + "outputs": [ + { "internalType": "contract IAxelarGasService", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gateway", + "outputs": [ + { "internalType": "contract IAxelarGateway", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_version", "type": "uint16" }, + { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "_configType", "type": "uint256" } + ], + "name": "getConfig", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" } + ], + "name": "getTrustedRemoteAddress", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "guardian", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract INameService", + "name": "nameService", + "type": "address" + }, + { + "components": [ + { "internalType": "uint256", "name": "dailyLimit", "type": "uint256" }, + { "internalType": "uint256", "name": "txLimit", "type": "uint256" }, + { + "internalType": "uint256", + "name": "accountDailyLimit", + "type": "uint256" + }, + { "internalType": "uint256", "name": "minAmount", "type": "uint256" }, + { "internalType": "bool", "name": "onlyWhitelisted", "type": "bool" } + ], + "internalType": "struct MessagePassingBridge.BridgeLimits", + "name": "limits", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "minFee", "type": "uint256" }, + { "internalType": "uint256", "name": "maxFee", "type": "uint256" }, + { "internalType": "uint256", "name": "fee", "type": "uint256" } + ], + "internalType": "struct MessagePassingBridge.BridgeFees", + "name": "fees", + "type": "tuple" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isClosed", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, + { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } + ], + "name": "isTrustedRemote", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "lzChainIdsMapping", + "outputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lzEndpoint", + "outputs": [ + { + "internalType": "contract ILayerZeroEndpointUpgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lzEndpoint_", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, + { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, + { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, + { "internalType": "bytes", "name": "_payload", "type": "bytes" } + ], + "name": "lzReceive", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "", "type": "uint16" }, + { "internalType": "uint16", "name": "", "type": "uint16" } + ], + "name": "minDstGasLookup", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nameService", + "outputs": [ + { "internalType": "contract INameService", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nativeToken", + "outputs": [ + { "internalType": "contract IGoodDollar", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, + { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, + { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, + { "internalType": "bytes", "name": "_payload", "type": "bytes" } + ], + "name": "nonblockingLzReceive", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "onTokenTransfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "isPaused", "type": "bool" }], + "name": "pauseBridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], + "name": "payloadSizeLimitLookup", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "precrime", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, + { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, + { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, + { "internalType": "bytes", "name": "_payload", "type": "bytes" } + ], + "name": "retryMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint256", "name": "minFee", "type": "uint256" }, + { "internalType": "uint256", "name": "maxFee", "type": "uint256" }, + { "internalType": "uint256", "name": "fee", "type": "uint256" } + ], + "internalType": "struct MessagePassingBridge.BridgeFees", + "name": "fees", + "type": "tuple" + } + ], + "name": "setBridgeFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint256", "name": "dailyLimit", "type": "uint256" }, + { "internalType": "uint256", "name": "txLimit", "type": "uint256" }, + { + "internalType": "uint256", + "name": "accountDailyLimit", + "type": "uint256" + }, + { "internalType": "uint256", "name": "minAmount", "type": "uint256" }, + { "internalType": "bool", "name": "onlyWhitelisted", "type": "bool" } + ], + "internalType": "struct MessagePassingBridge.BridgeLimits", + "name": "limits", + "type": "tuple" + } + ], + "name": "setBridgeLimits", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_version", "type": "uint16" }, + { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, + { "internalType": "uint256", "name": "_configType", "type": "uint256" }, + { "internalType": "bytes", "name": "_config", "type": "bytes" } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32[]", "name": "bridgeKeys", "type": "bytes32[]" }, + { "internalType": "bool[]", "name": "disabled", "type": "bool[]" } + ], + "name": "setDisabledBridges", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IFaucet", + "name": "_faucet", + "type": "address" + } + ], + "name": "setFaucet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_guardian", "type": "address" } + ], + "name": "setGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, + { "internalType": "uint16", "name": "_packetType", "type": "uint16" }, + { "internalType": "uint256", "name": "_minGas", "type": "uint256" } + ], + "name": "setMinDstGas", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, + { "internalType": "uint256", "name": "_size", "type": "uint256" } + ], + "name": "setPayloadSizeLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_precrime", "type": "address" } + ], + "name": "setPrecrime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint16", "name": "_version", "type": "uint16" }], + "name": "setReceiveVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint16", "name": "_version", "type": "uint16" }], + "name": "setSendVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, + { "internalType": "bytes", "name": "_path", "type": "bytes" } + ], + "name": "setTrustedRemote", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_remoteChainId", + "type": "uint16" + }, + { "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } + ], + "name": "setTrustedRemoteAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], + "name": "trustedRemoteLookup", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateAvatar", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] as const diff --git a/packages/bridging-sdk/src/constants.ts b/packages/bridging-sdk/src/constants.ts new file mode 100644 index 0000000..c988a5a --- /dev/null +++ b/packages/bridging-sdk/src/constants.ts @@ -0,0 +1,100 @@ +import type { BridgeChain, BridgeProtocol } from "./types" + +// Public on-chain GoodDollar (G$) token contract addresses — not secrets +export const SUPPORTED_CHAINS: Record = { + 42220: { + id: 42220, + name: "Celo", + decimals: 18, + tokenAddress: "0x62B8B11039FcfE5aB0C56E502b1C372A3d2a9c7A", + nativeCurrency: { + name: "Celo", + symbol: "CELO", + decimals: 18, + }, + }, + 122: { + id: 122, + name: "Fuse", + decimals: 2, + tokenAddress: "0x495d133B938596C9984d462F007B676bDc57eCEC", + nativeCurrency: { + name: "Fuse", + symbol: "FUSE", + decimals: 18, + }, + }, + 1: { + id: 1, + name: "Ethereum", + decimals: 2, + tokenAddress: "0x67C5870b4A41D4Ebef24d2456547A03F1f3e094B", + nativeCurrency: { + name: "Ethereum", + symbol: "ETH", + decimals: 18, + }, + }, + 50: { + id: 50, + name: "XDC", + decimals: 18, + tokenAddress: "0xEC2136843a983885AebF2feB3931F73A8eBEe50c", + nativeCurrency: { + name: "XDC Network", + symbol: "XDC", + decimals: 18, + }, + }, +} + +export const CHAIN_NAMES = { + 42220: "CELO", + 122: "FUSE", + 1: "ETH", + 50: "XDC", +} as const + +export const BRIDGE_PROTOCOLS: Record = { + AXELAR: "AXELAR", + LAYERZERO: "LAYERZERO", +} + +export const API_ENDPOINTS = { + GOODSERVER_FEES: "https://goodserver.gooddollar.org/bridge/estimatefees", + LAYERZERO_SCAN: "https://scan.layerzero-api.com/v1", + AXELARSCAN: "https://api.axelarscan.io", +} as const + +export const EXPLORER_URLS = { + LAYERZERO: (txHash: string) => `https://layerzeroscan.com/tx/${txHash}`, + AXELAR: (txHash: string) => `https://axelarscan.io/gmp/${txHash}`, +} as const + +// Contract addresses will be populated from @gooddollar/bridge-contracts +// These are placeholders that should be replaced with actual addresses +// Contract addresses for MessagePassingBridge +// Production address is verified as 0xa3247276dbcc76dd7705273f766eb3e8a5ecf4a5 across most chains +export const BRIDGE_CONTRACT_ADDRESSES: Record = { + 42220: "0xa3247276dbcc76dd7705273f766eb3e8a5ecf4a5", // Celo + 122: "0xa3247276dbcc76dd7705273f766eb3e8a5ecf4a5", // Fuse + 1: "0xa3247276dbcc76dd7705273f766eb3e8a5ecf4a5", // Ethereum + 50: "0xa3247276dbcc76dd7705273f766eb3e8a5ecf4a5", // XDC +} + + +export const DEFAULT_DECIMALS = 18 + +export const NORMALIZED_DECIMALS = 18 + +export const FEE_MULTIPLIER = 1.1 // 10% buffer for fee estimation + +export const MAX_RETRIES = 3 + +export const RETRY_DELAY = 2000 // 2 seconds + +export const EVENT_QUERY_BATCH_SIZE = 1000 + +export const BRIDGE_STATUS_POLL_INTERVAL = 30000 // 30 seconds + +export const BRIDGE_STATUS_TIMEOUT = 300000 // 5 minutes diff --git a/packages/bridging-sdk/src/index.ts b/packages/bridging-sdk/src/index.ts new file mode 100644 index 0000000..a449316 --- /dev/null +++ b/packages/bridging-sdk/src/index.ts @@ -0,0 +1,54 @@ +// Core SDK +export { BridgingSDK } from "./viem-sdk" + +// Types +export type { + BridgeProtocol, + ChainId, + BridgeChain, + BridgeRequestEvent, + ExecutedTransferEvent, + EventOptions, + FeeEstimate, + CanBridgeResult, + TransactionStatus, + BridgeHistory, + BridgeTransaction, + GoodServerFeeResponse, + LayerZeroScanResponse, + AxelarscanResponse, +} from "./types" + +// Utilities +export { + normalizeAmount, + denormalizeAmount, + formatAmount, + parseAmount, + getChainDecimals, + validateAmountDecimals, + roundAmount, +} from "./utils/decimals" + +export { + fetchFeeEstimates, + parseNativeFee, + getFeeEstimate, + getAllFeeEstimates, + validateFeeCoverage, + formatFee, + calculateTotalCost, + validateSufficientBalance, +} from "./utils/fees" + +// Constants +export { + SUPPORTED_CHAINS, + CHAIN_NAMES, + BRIDGE_PROTOCOLS, + API_ENDPOINTS, + EXPLORER_URLS, + BRIDGE_CONTRACT_ADDRESSES, + DEFAULT_DECIMALS, + NORMALIZED_DECIMALS, +} from "./constants" \ No newline at end of file diff --git a/packages/bridging-sdk/src/types.ts b/packages/bridging-sdk/src/types.ts new file mode 100644 index 0000000..fab580b --- /dev/null +++ b/packages/bridging-sdk/src/types.ts @@ -0,0 +1,137 @@ +import type { Address, Hash, TransactionReceipt } from "viem" + +export type BridgeProtocol = "AXELAR" | "LAYERZERO" + +export type ChainId = number + +export interface BridgeChain { + id: ChainId + name: string + decimals: number + tokenAddress: `0x${string}` + nativeCurrency: { + name: string + symbol: string + decimals: number + } +} + +export interface BridgeRequestEvent { + transactionHash: Hash + blockNumber: bigint + address: Address + args: { + from: Address + to: Address + amount: bigint + targetChainId: ChainId + timestamp: bigint + bridge: BridgeProtocol + id: bigint + } +} + +export interface ExecutedTransferEvent { + transactionHash: Hash + blockNumber: bigint + address: Address + args: { + from: Address + to: Address + amount: bigint + fee: bigint + sourceChainId: ChainId + bridge: BridgeProtocol + id: bigint + } +} + +export interface EventOptions { + fromBlock?: bigint + toBlock?: bigint + limit?: number +} + +export interface FeeEstimate { + fee: bigint + feeInNative: string + protocol: BridgeProtocol +} + +export interface BridgeParams { + target: Address + targetChainId: ChainId + amount: bigint + bridge: BridgeProtocol +} + +export interface BridgeParamsWithLz extends BridgeParams { + adapterParams?: `0x${string}` +} + +export interface BridgeParamsWithAxelar extends BridgeParams { + gasRefundAddress?: Address +} + +export interface CanBridgeResult { + isWithinLimit: boolean + error?: string + limit?: bigint + currentUsage?: bigint +} + +export interface TransactionStatus { + status: "pending" | "completed" | "failed" + srcTxHash?: Hash + dstTxHash?: Hash + timestamp?: number + error?: string +} + +export interface BridgeHistory { + requests: BridgeRequestEvent[] + executed: ExecutedTransferEvent[] +} + +export interface BridgeTransaction { + hash: Hash + fromChainId: ChainId + toChainId: ChainId + amount: bigint + protocol: BridgeProtocol + status: TransactionStatus + timestamp: number +} + +export interface GoodServerFeeResponse { + [protocol: string]: { + [route: string]: string + } +} + +export interface LayerZeroScanResponse { + messages: Array<{ + srcChainId: ChainId + srcUaAddress: Address + dstChainId: ChainId + dstUaAddress: Address + srcTxHash: Hash + dstTxHash?: Hash + status: "INFLIGHT" | "DELIVERED" | "FAILED" + blockNumber: number + timestamp: number + }> +} + +export interface AxelarscanResponse { + data: Array<{ + txHash: Hash + status: "pending" | "executed" | "failed" + sourceChain: string + destinationChain: string + sourceTxHash: Hash + destinationTxHash?: Hash + createdAt: string + updatedAt: string + }> +} \ No newline at end of file diff --git a/packages/bridging-sdk/src/utils/decimals.ts b/packages/bridging-sdk/src/utils/decimals.ts new file mode 100644 index 0000000..4615b5b --- /dev/null +++ b/packages/bridging-sdk/src/utils/decimals.ts @@ -0,0 +1,132 @@ +import { SUPPORTED_CHAINS, NORMALIZED_DECIMALS } from "../constants" +import type { ChainId } from "../types" + +/** + * Converts an amount from native decimals to normalized 18-decimal format + * Used for limit checks on the target chain + */ +export function normalizeAmount(amount: bigint, fromChainId: ChainId): bigint { + const fromDecimals = SUPPORTED_CHAINS[fromChainId]?.decimals || NORMALIZED_DECIMALS + + if (fromDecimals === NORMALIZED_DECIMALS) { + return amount + } + + if (fromDecimals > NORMALIZED_DECIMALS) { + const decimalShift = fromDecimals - NORMALIZED_DECIMALS + return amount / (10n ** BigInt(decimalShift)) + } + + const decimalShift = NORMALIZED_DECIMALS - fromDecimals + return amount * (10n ** BigInt(decimalShift)) +} + +/** + * Converts an amount from normalized 18-decimal format to native decimals + * Used for bridge operations on the source chain + */ +export function denormalizeAmount(amount: bigint, toChainId: ChainId): bigint { + const toDecimals = SUPPORTED_CHAINS[toChainId]?.decimals || NORMALIZED_DECIMALS + + if (toDecimals === NORMALIZED_DECIMALS) { + return amount + } + + if (toDecimals > NORMALIZED_DECIMALS) { + const decimalShift = toDecimals - NORMALIZED_DECIMALS + return amount * (10n ** BigInt(decimalShift)) + } + + const decimalShift = NORMALIZED_DECIMALS - toDecimals + return amount / (10n ** BigInt(decimalShift)) +} + +/** + * Formats a bigint amount to a human-readable string with the specified decimals + */ +export function formatAmount(amount: bigint, decimals: number): string { + const divisor = 10n ** BigInt(decimals) + const whole = amount / divisor + const fractional = amount % divisor + + if (fractional === 0n) { + return whole.toString() + } + + const fractionalStr = fractional.toString().padStart(decimals, "0") + const trimmedFractional = fractionalStr.replace(/0+$/, "") + + return `${whole}.${trimmedFractional}` +} + +/** + * Parses a human-readable amount string to a bigint with the specified decimals + */ +export function parseAmount(amount: string, decimals: number): bigint { + if (!amount || amount === "0") return 0n + + const parts = amount.split(".") + let wholeStr = parts[0] || "0" + let fractionalStr = parts[1] || "" + + // Pad or truncate fractional part to match decimals + if (fractionalStr.length > decimals) { + fractionalStr = fractionalStr.slice(0, decimals) + } else { + fractionalStr = fractionalStr.padEnd(decimals, "0") + } + + const whole = BigInt(wholeStr) + const fractional = BigInt(fractionalStr || "0") + const divisor = 10n ** BigInt(decimals) + + return whole * divisor + fractional +} + +/** + * Gets the decimal places for a chain + */ +export function getChainDecimals(chainId: ChainId): number { + return SUPPORTED_CHAINS[chainId]?.decimals || NORMALIZED_DECIMALS +} + +/** + * Validates if an amount has the correct number of decimal places for a chain + */ +export function validateAmountDecimals(amount: string, chainId: ChainId): boolean { + const decimals = getChainDecimals(chainId) + const parts = amount.split(".") + + if (parts.length > 2) return false + + const fractionalPart = parts[1] || "" + return fractionalPart.length <= decimals +} + +/** + * Rounds an amount to the specified decimal places + */ +export function roundAmount(amount: bigint, decimals: number): bigint { + const divisor = 10n ** BigInt(decimals) + return (amount + divisor / 2n - 1n) / divisor * divisor +} + +/** + * Validates if user has sufficient balance for the operation + */ +export function validateSufficientBalance( + balance: bigint, + amount: bigint, + fee: bigint = 0n +): { isValid: boolean; reason?: string } { + const totalRequired = amount + fee + + if (balance < totalRequired) { + return { + isValid: false, + reason: `Insufficient balance. Required: ${formatAmount(totalRequired, 18)}, Available: ${formatAmount(balance, 18)}` + } + } + + return { isValid: true } +} \ No newline at end of file diff --git a/packages/bridging-sdk/src/utils/fees.ts b/packages/bridging-sdk/src/utils/fees.ts new file mode 100644 index 0000000..770b188 --- /dev/null +++ b/packages/bridging-sdk/src/utils/fees.ts @@ -0,0 +1,179 @@ +import { API_ENDPOINTS, FEE_MULTIPLIER, SUPPORTED_CHAINS } from "../constants" +import { parseAmount, formatAmount } from "./decimals" +import type { + BridgeProtocol, + ChainId, + FeeEstimate, + GoodServerFeeResponse, +} from "../types" + +/** + * Fetches fee estimates from the GoodServer API + */ +export async function fetchFeeEstimates(): Promise { + try { + const response = await fetch(API_ENDPOINTS.GOODSERVER_FEES) + + if (!response.ok) { + throw new Error(`Failed to fetch fee estimates: ${response.statusText}`) + } + + return await response.json() + } catch (error) { + throw new Error( + `Fee estimation failed: ${error instanceof Error ? error.message : "Unknown error"}`, + ) + } +} + +/** + * Parses a fee string from the GoodServer API (e.g., "4.8367843657257685 Celo") + */ +export function parseNativeFee(feeString: string, chainId: ChainId): bigint { + const [amountStr] = feeString.split(" ") + if (!amountStr) { + throw new Error("Invalid fee format") + } + + const decimals = SUPPORTED_CHAINS[chainId]?.decimals || 18 + return parseAmount(amountStr, decimals) +} + +/** + * Gets the fee estimate for a specific route and protocol + */ +export async function getFeeEstimate( + fromChainId: ChainId, + toChainId: ChainId, + protocol: BridgeProtocol, +): Promise { + const feeData = await fetchFeeEstimates() + + const protocolData = feeData[protocol] + if (!protocolData) { + throw new Error(`No fee data available for protocol: ${protocol}`) + } + + const fromChainName = getChainName(fromChainId) + const toChainName = getChainName(toChainId) + + const protocolPrefix = protocol === "AXELAR" ? "AXL" : "LZ" + const routeKey = `${protocolPrefix}_${fromChainName}_TO_${toChainName}` + const feeString = protocolData[routeKey] + + if (!feeString) { + throw new Error( + `No fee data available for route: ${fromChainName} to ${toChainName}`, + ) + } + + const fee = parseNativeFee(feeString, fromChainId) + + // Add safety buffer + const feeWithBuffer = (fee * BigInt(Math.floor(FEE_MULTIPLIER * 100))) / 100n + + return { + fee: feeWithBuffer, + feeInNative: feeString, + protocol, + } +} + +/** + * Gets fee estimates for all available protocols for a route + */ +export async function getAllFeeEstimates( + fromChainId: ChainId, + toChainId: ChainId, +): Promise { + const protocols: BridgeProtocol[] = ["AXELAR", "LAYERZERO"] + const estimates: FeeEstimate[] = [] + + for (const protocol of protocols) { + try { + const estimate = await getFeeEstimate(fromChainId, toChainId, protocol) + estimates.push(estimate) + } catch (error) { + // Skip protocols that don't support this route + console.warn(`Failed to get ${protocol} fee estimate:`, error) + } + } + + if (estimates.length === 0) { + throw new Error( + `No fee estimates available for route ${fromChainId} to ${toChainId}`, + ) + } + + return estimates +} + +/** + * Validates if the provided msg.value is sufficient for the bridge fee + */ +export function validateFeeCoverage( + msgValue: bigint, + requiredFee: bigint, +): { isValid: boolean; error?: string } { + if (msgValue < requiredFee) { + return { + isValid: false, + error: `Insufficient fee. Required: ${requiredFee.toString()}, Provided: ${msgValue.toString()}`, + } + } + + return { isValid: true } +} + +/** + * Formats a fee amount for display + */ +export function formatFee(fee: bigint, chainId: ChainId): string { + const decimals = SUPPORTED_CHAINS[chainId]?.decimals || 18 + return formatAmount(fee, decimals) +} + +/** + * Gets the chain name for API requests + */ +function getChainName(chainId: ChainId): string { + switch (chainId) { + case 42220: + return "CELO" + case 122: + return "FUSE" + case 1: + return "ETH" + case 50: + return "XDC" + default: + throw new Error(`Unsupported chain ID: ${chainId}`) + } +} + +/** + * Calculates the total cost including bridge amount and fees + */ +export function calculateTotalCost(bridgeAmount: bigint, fee: bigint): bigint { + return bridgeAmount + fee +} + +/** + * Checks if a user has sufficient balance for both bridge amount and fees + */ +export function validateSufficientBalance( + userBalance: bigint, + bridgeAmount: bigint, + fee: bigint, +): { isValid: boolean; error?: string } { + const totalCost = calculateTotalCost(bridgeAmount, fee) + + if (userBalance < totalCost) { + return { + isValid: false, + error: `Insufficient balance. Required: ${totalCost.toString()}, Available: ${userBalance.toString()}`, + } + } + + return { isValid: true } +} diff --git a/packages/bridging-sdk/src/viem-sdk.ts b/packages/bridging-sdk/src/viem-sdk.ts new file mode 100644 index 0000000..2e69d09 --- /dev/null +++ b/packages/bridging-sdk/src/viem-sdk.ts @@ -0,0 +1,535 @@ +import { + PublicClient, + WalletClient, + parseAbi, + type Address, + type Hash, + type TransactionReceipt, + type SimulateContractParameters, +} from "viem" +import { normalizeAmount } from "./utils/decimals" +import { + fetchFeeEstimates, + getFeeEstimate, + validateFeeCoverage, +} from "./utils/fees" +import { + SUPPORTED_CHAINS, + BRIDGE_CONTRACT_ADDRESSES, + EVENT_QUERY_BATCH_SIZE, + API_ENDPOINTS, +} from "./constants" +import type { + BridgeProtocol, + ChainId, + CanBridgeResult, + FeeEstimate, + BridgeRequestEvent, + ExecutedTransferEvent, + EventOptions, + TransactionStatus, + GoodServerFeeResponse, + LayerZeroScanResponse, + AxelarscanResponse, +} from "./types" + +import { MESSAGE_PASSING_BRIDGE_ABI } from "./abi" + +export class BridgingSDK { + public publicClient: PublicClient + private walletClient: WalletClient | null = null + private currentChainId: ChainId + private fees: GoodServerFeeResponse | null = null + + constructor( + publicClient: PublicClient, + walletClient?: WalletClient, + chainId?: ChainId, + ) { + if (!publicClient) throw new Error("Public client is required") + + this.publicClient = publicClient + this.walletClient = walletClient || null + this.currentChainId = chainId || publicClient.chain?.id || 0 + + if (!SUPPORTED_CHAINS[this.currentChainId]) { + throw new Error(`Unsupported chain ID: ${this.currentChainId}`) + } + } + + /** + * Initializes the SDK by fetching and caching bridge fees + */ + async initialize(): Promise { + this.fees = await fetchFeeEstimates() + } + + setWalletClient(walletClient: WalletClient) { + if (!walletClient.chain?.id || !SUPPORTED_CHAINS[walletClient.chain.id]) { + throw new Error(`Unsupported chain ID: ${walletClient.chain?.id}`) + } + this.walletClient = walletClient + this.currentChainId = walletClient.chain.id + } + + /** + * Checks if an address can bridge a specified amount to a target chain + */ + async canBridge( + from: Address, + amount: bigint, + targetChainId: ChainId, + ): Promise { + if (!SUPPORTED_CHAINS[targetChainId]) { + return { + isWithinLimit: false, + error: `Unsupported target chain: ${targetChainId}`, + } + } + + try { + const contractAddress = BRIDGE_CONTRACT_ADDRESSES[this.currentChainId] + if (!contractAddress) { + return { + isWithinLimit: false, + error: `Bridge contract not deployed on chain ${this.currentChainId}`, + } + } + + // Normalize amount to 18 decimals for the contract check + const normalizedAmount = normalizeAmount(amount, this.currentChainId) + + const [isWithinLimit, canBridgeError] = + (await this.publicClient.readContract({ + address: contractAddress as Address, + abi: MESSAGE_PASSING_BRIDGE_ABI, + functionName: "canBridge", + args: [from, normalizedAmount], + })) as [boolean, string] + + return { + isWithinLimit, + error: isWithinLimit ? undefined : canBridgeError, + } + } catch (error) { + return { + isWithinLimit: false, + error: `Failed to check bridge limits: ${error instanceof Error ? error.message : "Unknown error"}`, + } + } + } + + /** + * Estimates the fee for bridging to a target chain using a specific protocol + * Uses cached fees if available, otherwise fetches them + */ + async estimateFee( + targetChainId: ChainId, + protocol: BridgeProtocol, + ): Promise { + // Protocol support validation + if (protocol === "AXELAR" && (this.currentChainId === 50 || this.currentChainId === 122 || targetChainId === 50 || targetChainId === 122)) { + throw new Error(`Axelar bridging is not supported for ${SUPPORTED_CHAINS[this.currentChainId].name} or ${SUPPORTED_CHAINS[targetChainId].name}`) + } + + if (!this.fees) { + await this.initialize() + } + + return await getFeeEstimate(this.currentChainId, targetChainId, protocol) + } + + /** + * Generic bridge method that automatically selects the best protocol + */ + async bridgeTo( + target: Address, + targetChainId: ChainId, + amount: bigint, + protocol: BridgeProtocol, + msgValue?: bigint, + ): Promise { + return this.bridgeInternal({ + targetChainId, + protocol, + msgValue, + fn: "bridgeTo", + args: [target, targetChainId, amount, protocol === "AXELAR" ? 0 : 1], + }) + } + + /** + * Gets the G$ token balance for an address on the current chain + */ + async getG$Balance(address: Address): Promise { + const tokenAddress = SUPPORTED_CHAINS[this.currentChainId]?.tokenAddress + if (!tokenAddress) throw new Error("G$ token address not found") + + return (await this.publicClient.readContract({ + address: tokenAddress as Address, + abi: parseAbi(["function balanceOf(address) view returns (uint256)"]), + functionName: "balanceOf", + args: [address], + })) as bigint + } + + /** + * Gets the current allowance for the bridge contract + */ + async getAllowance(owner: Address): Promise { + const tokenAddress = SUPPORTED_CHAINS[this.currentChainId]?.tokenAddress + const bridgeAddress = BRIDGE_CONTRACT_ADDRESSES[this.currentChainId] + + if (!tokenAddress || !bridgeAddress) throw new Error("G$ token or bridge address not found") + + return (await this.publicClient.readContract({ + address: tokenAddress as Address, + abi: parseAbi(["function allowance(address,address) view returns (uint256)"]), + functionName: "allowance", + args: [owner, bridgeAddress as Address], + })) as bigint + } + + /** + * Approves the bridge contract to spend G$ tokens + */ + async approve(amount: bigint): Promise { + if (!this.walletClient) throw new Error("Wallet client not initialized") + + const tokenAddress = SUPPORTED_CHAINS[this.currentChainId]?.tokenAddress + const bridgeAddress = BRIDGE_CONTRACT_ADDRESSES[this.currentChainId] + + if (!tokenAddress || !bridgeAddress) throw new Error("G$ token or bridge address not found") + + const account = await this.walletClient.getAddresses() + if (!account[0]) throw new Error("No account found") + + const { request } = await this.publicClient.simulateContract({ + account: account[0], + address: tokenAddress as Address, + abi: parseAbi(["function approve(address,uint256) returns (bool)"]), + functionName: "approve", + args: [bridgeAddress as Address, amount], + }) + + const hash = await this.walletClient.writeContract(request) + return await this.publicClient.waitForTransactionReceipt({ hash }) + } + + /** + * Bridge using LayerZero with custom adapter parameters + */ + async bridgeToWithLz( + target: Address, + targetChainId: ChainId, + amount: bigint, + adapterParams?: `0x${string}`, + msgValue?: bigint, + ): Promise { + return this.bridgeInternal({ + targetChainId, + protocol: "LAYERZERO", + msgValue, + fn: "bridgeToWithLzAdapterParams", + args: [target, targetChainId, amount, adapterParams || "0x"], + }) + } + + /** + * Bridge using Axelar with optional gas refund address + */ + async bridgeToWithAxelar( + target: Address, + targetChainId: ChainId, + amount: bigint, + _gasRefundAddress?: Address, + msgValue?: bigint, + ): Promise { + return this.bridgeInternal({ + targetChainId, + protocol: "AXELAR", + msgValue, + fn: "bridgeToWithAxelar", + args: [target, targetChainId, amount], + }) + } + + /** + * Internal bridge method that handles common logic for all bridge operations + */ + private async bridgeInternal(opts: { + targetChainId: ChainId + protocol: BridgeProtocol + msgValue?: bigint + fn: "bridgeTo" | "bridgeToWithLzAdapterParams" | "bridgeToWithAxelar" + args: TArgs + }): Promise { + if (!this.walletClient) { + throw new Error("Wallet client not initialized") + } + + const feeEstimate = await this.estimateFee( + opts.targetChainId, + opts.protocol, + ) + + const providedValue = opts.msgValue ?? 0n + const feeValidation = validateFeeCoverage(providedValue, feeEstimate.fee) + if (!feeValidation.isValid) { + throw new Error(feeValidation.error) + } + + const contractAddress = BRIDGE_CONTRACT_ADDRESSES[this.currentChainId] + if (!contractAddress) { + throw new Error( + `Bridge contract not deployed on chain ${this.currentChainId}`, + ) + } + + return await this.submitAndWait( + { + address: contractAddress as Address, + abi: MESSAGE_PASSING_BRIDGE_ABI, + functionName: opts.fn, + args: opts.args, + value: feeEstimate.fee, + }, + feeEstimate.fee, + ) + } + + /** + * Fetches the combined, sorted bridge history for an address + */ + async getHistory(address: Address, options?: EventOptions): Promise<(BridgeRequestEvent | ExecutedTransferEvent)[]> { + const [requests, executed] = await Promise.all([ + this.getBridgeRequests(address, options), + this.getExecutedTransfers(address, options) + ]) + + const history: (BridgeRequestEvent | ExecutedTransferEvent)[] = [...requests, ...executed] + + return history.sort((a, b) => { + if (a.blockNumber < b.blockNumber) return 1 + if (a.blockNumber > b.blockNumber) return -1 + return 0 + }) + } + + /** + * Fetches BridgeRequest events for an address with block optimization + */ + async getBridgeRequests( + address: Address, + options?: EventOptions, + ): Promise { + const contractAddress = BRIDGE_CONTRACT_ADDRESSES[this.currentChainId] + if (!contractAddress) { + throw new Error(`Bridge contract not deployed on chain ${this.currentChainId}`) + } + + const currentBlock = await this.publicClient.getBlockNumber() + const fromBlock = options?.fromBlock || (currentBlock > 50000n ? currentBlock - 50000n : 0n) + const toBlock = options?.toBlock || "latest" + const limit = options?.limit || EVENT_QUERY_BATCH_SIZE + + try { + const logs = await this.publicClient.getContractEvents({ + address: contractAddress as Address, + abi: MESSAGE_PASSING_BRIDGE_ABI, + eventName: "BridgeRequest", + args: { from: address }, + fromBlock, + toBlock, + }) + + return (logs as any[]).slice(0, limit).map((log) => ({ + transactionHash: log.transactionHash, + blockNumber: log.blockNumber, + address: log.address, + args: { + from: log.args.from as Address, + to: log.args.to as Address, + amount: log.args.normalizedAmount as bigint, + targetChainId: Number(log.args.targetChainId) as ChainId, + timestamp: log.args.timestamp as bigint, + bridge: log.args.bridge === 0 ? "AXELAR" : "LAYERZERO", + id: log.args.id as bigint, + }, + })) + } catch (error) { + throw new Error(`Failed to fetch bridge requests: ${error instanceof Error ? error.message : "Unknown error"}`) + } + } + + /** + * Fetches ExecutedTransfer events for an address with block optimization + */ + async getExecutedTransfers( + address: Address, + options?: EventOptions, + ): Promise { + const contractAddress = BRIDGE_CONTRACT_ADDRESSES[this.currentChainId] + if (!contractAddress) { + throw new Error(`Bridge contract not deployed on chain ${this.currentChainId}`) + } + + const currentBlock = await this.publicClient.getBlockNumber() + const fromBlock = options?.fromBlock || (currentBlock > 50000n ? currentBlock - 50000n : 0n) + const toBlock = options?.toBlock || "latest" + const limit = options?.limit || EVENT_QUERY_BATCH_SIZE + + try { + const logs = await this.publicClient.getContractEvents({ + address: contractAddress as Address, + abi: MESSAGE_PASSING_BRIDGE_ABI, + eventName: "ExecutedTransfer", + args: { from: address }, + fromBlock, + toBlock, + }) + + return (logs as any[]).slice(0, limit).map((log) => ({ + transactionHash: log.transactionHash, + blockNumber: log.blockNumber, + address: log.address, + args: { + from: log.args.from as Address, + to: log.args.to as Address, + amount: log.args.normalizedAmount as bigint, + fee: log.args.fee as bigint, + sourceChainId: Number(log.args.sourceChainId) as ChainId, + bridge: log.args.bridge === 0 ? "AXELAR" : "LAYERZERO", + id: log.args.id as bigint, + }, + })) + } catch (error) { + throw new Error(`Failed to fetch executed transfers: ${error instanceof Error ? error.message : "Unknown error"}`) + } + } + + /** + * Gets the status of a bridge transaction from external APIs + */ + async getTransactionStatus( + txHash: Hash, + protocol: BridgeProtocol, + ): Promise { + if (protocol === "LAYERZERO") { + return this.getLayerZeroStatus(txHash) + } else { + return this.getAxelarStatus(txHash) + } + } + + private async getLayerZeroStatus(txHash: Hash): Promise { + const response = await fetch(`${API_ENDPOINTS.LAYERZERO_SCAN}/message?txHash=${txHash}`) + const data: LayerZeroScanResponse = await response.json() + if (!data.messages || data.messages.length === 0) return { status: "pending" } + const message = data.messages[0] + return { + status: message.status === "DELIVERED" ? "completed" : message.status === "FAILED" ? "failed" : "pending", + srcTxHash: message.srcTxHash, + dstTxHash: message.dstTxHash, + timestamp: message.timestamp * 1000, + } + } + + private async getAxelarStatus(txHash: Hash): Promise { + const response = await fetch(`${API_ENDPOINTS.AXELARSCAN}/gmp?txHash=${txHash}`) + const data: AxelarscanResponse = await response.json() + if (!data.data || data.data.length === 0) return { status: "pending" } + const transaction = data.data[0] + return { + status: transaction.status === "executed" ? "completed" : transaction.status === "failed" ? "failed" : "pending", + srcTxHash: transaction.sourceTxHash, + dstTxHash: transaction.destinationTxHash, + timestamp: new Date(transaction.updatedAt).getTime(), + } + } + + /** + * Generates an explorer link for a bridge transaction + */ + explorerLink(txHash: Hash, protocol: BridgeProtocol): string { + return protocol === "LAYERZERO" + ? `https://layerzeroscan.com/tx/${txHash}` + : `https://axelarscan.io/gmp/${txHash}` + } + + /** + * Formats a chain name for display + */ + static formatChainName(chainId: ChainId): string { + switch (chainId) { + case 42220: return "Celo" + case 122: return "Fuse" + case 1: return "Ethereum" + case 50: return "XDC" + default: return `Chain ${chainId}` + } + } + + /** + * Formats a protocol name for display + */ + static formatProtocolName(protocol: BridgeProtocol): string { + return protocol === "LAYERZERO" ? "LayerZero" : "Axelar" + } + + /** + * Gets a human-readable status label + */ + static getStatusLabel(status: TransactionStatus): string { + switch (status.status) { + case "pending": return "Pending" + case "completed": return "Completed" + case "failed": return "Failed" + default: return "Unknown" + } + } + + /** + * Gets the current chain ID + */ + getCurrentChainId(): ChainId { + return this.currentChainId + } + + /** + * Gets the supported chains + */ + getSupportedChains(): Record { + return SUPPORTED_CHAINS + } + + /** + * Helper method to submit and wait for transaction receipt + */ + private async submitAndWait( + params: SimulateContractParameters, + fee: bigint, + ): Promise { + if (!this.walletClient) { + throw new Error("Wallet client not initialized") + } + + const account = await this.walletClient.getAddresses() + if (!account[0]) { + throw new Error("No account found in wallet client") + } + + // Simulate the transaction + const { request } = await this.publicClient.simulateContract({ + account: account[0], + ...params, + value: params.value || fee, + }) + + // Submit the transaction + const hash = await this.walletClient.writeContract(request) + + // Wait for the transaction receipt + return await this.publicClient.waitForTransactionReceipt({ hash }) + } +} diff --git a/packages/bridging-sdk/tsconfig.json b/packages/bridging-sdk/tsconfig.json new file mode 100644 index 0000000..d5a6541 --- /dev/null +++ b/packages/bridging-sdk/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "target": "ES2020" + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/bridging-sdk/tsup.config.ts b/packages/bridging-sdk/tsup.config.ts new file mode 100644 index 0000000..4892a67 --- /dev/null +++ b/packages/bridging-sdk/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "tsup" + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["cjs", "esm"], + dts: true, + clean: true, + external: ["viem", "wagmi", "@gooddollar/bridge-contracts"], +}) \ No newline at end of file diff --git a/packages/react-hooks/package.json b/packages/react-hooks/package.json index 4f8525e..1997ad7 100644 --- a/packages/react-hooks/package.json +++ b/packages/react-hooks/package.json @@ -36,6 +36,7 @@ "wagmi": "*" }, "dependencies": { + "@goodsdks/bridging-sdk": "workspace:*", "@goodsdks/citizen-sdk": "*", "lz-string": "^1.5.0", "react": "^19.1.1", diff --git a/packages/react-hooks/src/hooks/useBridging.ts b/packages/react-hooks/src/hooks/useBridging.ts new file mode 100644 index 0000000..b6151f2 --- /dev/null +++ b/packages/react-hooks/src/hooks/useBridging.ts @@ -0,0 +1,128 @@ +import { useEffect, useState, useMemo } from "react" +import { usePublicClient, useWalletClient, useChainId } from "wagmi" +import { BridgingSDK, type BridgeProtocol, type ChainId, type BridgeRequestEvent, type ExecutedTransferEvent } from "@goodsdks/bridging-sdk" + +export interface UseBridgingSDKResult { + sdk: BridgingSDK | null + loading: boolean + error: string | null +} + +/** + * Wagmi hook for using the BridgingSDK + */ +export function useBridgingSDK(): UseBridgingSDKResult { + const publicClient = usePublicClient() + const { data: walletClient } = useWalletClient() + const chainId = useChainId() as ChainId + + const [sdk, setSdk] = useState(null) + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + + useEffect(() => { + const initSDK = async () => { + try { + setLoading(true) + setError(null) + + if (!publicClient) { + setError("Public client not available") + return + } + + const bridgingSDK = new BridgingSDK( + publicClient as any, + (walletClient as any) || undefined, + chainId, + ) + + // Fetch fees upon initialization + await bridgingSDK.initialize() + + setSdk(bridgingSDK) + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to initialize SDK") + } finally { + setLoading(false) + } + } + + initSDK() + }, [publicClient, walletClient, chainId]) + + return { sdk, loading, error } +} + +/** + * Hook for getting fee estimates for bridging + */ +export function useBridgeFee( + fromChainId: ChainId, + toChainId: ChainId, + protocol: BridgeProtocol, +) { + const { sdk } = useBridgingSDK() + const [fee, setFee] = useState<{ amount: bigint; formatted: string } | null>(null) + const [loading, setLoading] = useState(false) + const [error, setError] = useState(null) + + useEffect(() => { + const fetchFee = async () => { + if (!sdk || !fromChainId || !toChainId || !protocol) return + + try { + setLoading(true) + setError(null) + + const feeEstimate = await sdk.estimateFee(toChainId, protocol) + + setFee({ + amount: feeEstimate.fee, + formatted: feeEstimate.feeInNative, + }) + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to fetch fee estimate") + } finally { + setLoading(false) + } + } + + fetchFee() + }, [sdk, fromChainId, toChainId, protocol]) + + return { fee, loading, error } +} + +/** + * Hook for fetching and tracking bridge history + */ +export function useBridgeHistory(address: `0x${string}` | undefined) { + const { sdk } = useBridgingSDK() + const [history, setHistory] = useState<(BridgeRequestEvent | ExecutedTransferEvent)[]>([]) + const [loading, setLoading] = useState(false) + const [error, setError] = useState(null) + + const fetchHistory = async () => { + if (!sdk || !address) return + + try { + setLoading(true) + setError(null) + const data = await sdk.getHistory(address) + setHistory(data) + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to fetch history") + } finally { + setLoading(false) + } + } + + useEffect(() => { + fetchHistory() + const interval = setInterval(fetchHistory, 30000) // Poll every 30s + return () => clearInterval(interval) + }, [sdk, address]) + + return { history, loading, error, refetch: fetchHistory } +} diff --git a/packages/react-hooks/src/index.ts b/packages/react-hooks/src/index.ts index 35b68e6..92ef29c 100644 --- a/packages/react-hooks/src/index.ts +++ b/packages/react-hooks/src/index.ts @@ -1 +1,2 @@ export * from "./citizen-sdk" +export * from "./hooks/useBridging" diff --git a/test-decimals.ts b/test-decimals.ts new file mode 100644 index 0000000..1d014ce --- /dev/null +++ b/test-decimals.ts @@ -0,0 +1,42 @@ +import { normalizeAmount, denormalizeAmount } from "./packages/bridging-sdk/src/utils/decimals.ts" +import { SUPPORTED_CHAINS } from "./packages/bridging-sdk/src/constants.ts" + +function test() { + const ETH_ID = 1 + const FUSE_ID = 122 + const CELO_ID = 42220 + + console.log("Testing Decimals Normalization...") + + // Fuse/ETH has 2 decimals, Celo has 18 + // 1.15 G$ on Fuse = 115 units + const amountFuse = 115n + const normalizedFuse = normalizeAmount(amountFuse, FUSE_ID) + console.log(`Fuse: 115 units (2 dec) -> Normalized: ${normalizedFuse} (18 dec)`) + if (normalizedFuse === 1150000000000000000n) { + console.log("✅ Fuse normalization passed") + } else { + console.error("❌ Fuse normalization failed") + } + + // 1.15 G$ on Celo = 1150000000000000000 units + const amountCelo = 1150000000000000000n + const normalizedCelo = normalizeAmount(amountCelo, CELO_ID) + console.log(`Celo: 1.15e18 units (18 dec) -> Normalized: ${normalizedCelo} (18 dec)`) + if (normalizedCelo === 1150000000000000000n) { + console.log("✅ Celo normalization passed") + } else { + console.error("❌ Celo normalization failed") + } + + // Denormalization + const denormalizedFuse = denormalizeAmount(normalizedFuse, FUSE_ID) + console.log(`Normalized: 1.15e18 -> Fuse Denormalized: ${denormalizedFuse} (2 dec)`) + if (denormalizedFuse === 115n) { + console.log("✅ Fuse denormalization passed") + } else { + console.error("❌ Fuse denormalization failed") + } +} + +test() diff --git a/yarn.lock b/yarn.lock index e83fe8c..d039aa5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,6 +19,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:^1.11.0": + version: 1.11.1 + resolution: "@adraffy/ens-normalize@npm:1.11.1" + checksum: 10c0/b364e2a57131db278ebf2f22d1a1ac6d8aea95c49dd2bbbc1825870b38aa91fd8816aba580a1f84edc50a45eb6389213dacfd1889f32893afc8549a82d304767 + languageName: node + linkType: hard + "@alloc/quick-lru@npm:^5.2.0": version: 5.2.0 resolution: "@alloc/quick-lru@npm:5.2.0" @@ -609,6 +616,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/code-frame@npm:7.29.0" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.28.5" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/d34cc504e7765dfb576a663d97067afb614525806b5cad1a5cc1a7183b916fec8ff57fa233585e3926fd5a9e6b31aae6df91aa81ae9775fb7a28f658d3346f0d + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.26.5": version: 7.26.5 resolution: "@babel/compat-data@npm:7.26.5" @@ -616,6 +634,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.28.6": + version: 7.29.0 + resolution: "@babel/compat-data@npm:7.29.0" + checksum: 10c0/08f348554989d23aa801bf1405aa34b15e841c0d52d79da7e524285c77a5f9d298e70e11d91cc578d8e2c9542efc586d50c5f5cf8e1915b254a9dcf786913a94 + languageName: node + linkType: hard + "@babel/core@npm:^7.25.2": version: 7.26.9 resolution: "@babel/core@npm:7.26.9" @@ -662,6 +687,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.28.0": + version: 7.29.0 + resolution: "@babel/core@npm:7.29.0" + dependencies: + "@babel/code-frame": "npm:^7.29.0" + "@babel/generator": "npm:^7.29.0" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helpers": "npm:^7.28.6" + "@babel/parser": "npm:^7.29.0" + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + "@jridgewell/remapping": "npm:^2.3.5" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/5127d2e8e842ae409e11bcbb5c2dff9874abf5415e8026925af7308e903f4f43397341467a130490d1a39884f461bc2b67f3063bce0be44340db89687fd852aa + languageName: node + linkType: hard + "@babel/generator@npm:^7.25.5, @babel/generator@npm:^7.26.9": version: 7.26.9 resolution: "@babel/generator@npm:7.26.9" @@ -688,6 +736,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.29.0": + version: 7.29.1 + resolution: "@babel/generator@npm:7.29.1" + dependencies: + "@babel/parser": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10c0/349086e6876258ef3fb2823030fee0f6c0eb9c3ebe35fc572e16997f8c030d765f636ddc6299edae63e760ea6658f8ee9a2edfa6d6b24c9a80c917916b973551 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" @@ -710,6 +771,26 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-compilation-targets@npm:7.28.6" + dependencies: + "@babel/compat-data": "npm:^7.28.6" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/3fcdf3b1b857a1578e99d20508859dbd3f22f3c87b8a0f3dc540627b4be539bae7f6e61e49d931542fe5b557545347272bbdacd7f58a5c77025a18b745593a50 + languageName: node + linkType: hard + +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-module-imports@npm:7.25.9" @@ -720,6 +801,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-imports@npm:7.28.6" + dependencies: + "@babel/traverse": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/b49d8d8f204d9dbfd5ac70c54e533e5269afb3cea966a9d976722b13e9922cc773a653405f53c89acb247d5aebdae4681d631a3ae3df77ec046b58da76eda2ac + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.26.0": version: 7.26.0 resolution: "@babel/helper-module-transforms@npm:7.26.0" @@ -733,6 +824,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-transforms@npm:7.28.6" + dependencies: + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/6f03e14fc30b287ce0b839474b5f271e72837d0cafe6b172d759184d998fbee3903a035e81e07c2c596449e504f453463d58baa65b6f40a37ded5bec74620b2b + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.25.9": version: 7.26.5 resolution: "@babel/helper-plugin-utils@npm:7.26.5" @@ -740,6 +844,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/helper-plugin-utils@npm:7.28.6" + checksum: 10c0/3f5f8acc152fdbb69a84b8624145ff4f9b9f6e776cb989f9f968f8606eb7185c5c3cfcf3ba08534e37e1e0e1c118ac67080610333f56baa4f7376c99b5f1143d + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-string-parser@npm:7.25.9" @@ -747,6 +858,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-identifier@npm:7.25.9" @@ -754,6 +872,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-option@npm:7.25.9" @@ -761,6 +886,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 + languageName: node + linkType: hard + "@babel/helpers@npm:^7.26.0": version: 7.26.0 resolution: "@babel/helpers@npm:7.26.0" @@ -781,6 +913,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helpers@npm:7.28.6" + dependencies: + "@babel/template": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/c4a779c66396bb0cf619402d92f1610601ff3832db2d3b86b9c9dd10983bf79502270e97ac6d5280cea1b1a37de2f06ecbac561bd2271545270407fbe64027cb + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5": version: 7.26.5 resolution: "@babel/parser@npm:7.26.5" @@ -803,6 +945,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/parser@npm:7.29.0" + dependencies: + "@babel/types": "npm:^7.29.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/333b2aa761264b91577a74bee86141ef733f9f9f6d4fc52548e4847dc35dfbf821f58c46832c637bfa761a6d9909d6a68f7d1ed59e17e4ffbb958dc510c17b62 + languageName: node + linkType: hard + "@babel/plugin-syntax-jsx@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" @@ -825,6 +978,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx-self@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/00a4f917b70a608f9aca2fb39aabe04a60aa33165a7e0105fd44b3a8531630eb85bf5572e9f242f51e6ad2fa38c2e7e780902176c863556c58b5ba6f6e164031 + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx-source@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-transform-react-jsx-source@npm:7.25.9" @@ -836,6 +1000,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx-source@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5e67b56c39c4d03e59e03ba80692b24c5a921472079b63af711b1d250fc37c1733a17069b63537f750f3e937ec44a42b1ee6a46cd23b1a0df5163b17f741f7f2 + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx@npm:^7.25.2": version: 7.25.9 resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9" @@ -869,6 +1044,13 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.25.0": + version: 7.28.6 + resolution: "@babel/runtime@npm:7.28.6" + checksum: 10c0/358cf2429992ac1c466df1a21c1601d595c46930a13c1d4662fde908d44ee78ec3c183aaff513ecb01ef8c55c3624afe0309eeeb34715672dbfadb7feedb2c0d + languageName: node + linkType: hard + "@babel/template@npm:^7.25.0, @babel/template@npm:^7.26.9": version: 7.26.9 resolution: "@babel/template@npm:7.26.9" @@ -891,6 +1073,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/template@npm:7.28.6" + dependencies: + "@babel/code-frame": "npm:^7.28.6" + "@babel/parser": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/66d87225ed0bc77f888181ae2d97845021838c619944877f7c4398c6748bcf611f216dfd6be74d39016af502bca876e6ce6873db3c49e4ac354c56d34d57e9f5 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.25.4, @babel/traverse@npm:^7.26.9": version: 7.26.9 resolution: "@babel/traverse@npm:7.26.9" @@ -921,6 +1114,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/traverse@npm:7.29.0" + dependencies: + "@babel/code-frame": "npm:^7.29.0" + "@babel/generator": "npm:^7.29.0" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.29.0" + "@babel/template": "npm:^7.28.6" + "@babel/types": "npm:^7.29.0" + debug: "npm:^4.3.1" + checksum: 10c0/f63ef6e58d02a9fbf3c0e2e5f1c877da3e0bc57f91a19d2223d53e356a76859cbaf51171c9211c71816d94a0e69efa2732fd27ffc0e1bbc84b636e60932333eb + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5": version: 7.26.5 resolution: "@babel/types@npm:7.26.5" @@ -941,6 +1149,33 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/types@npm:7.29.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + checksum: 10c0/23cc3466e83bcbfab8b9bd0edaafdb5d4efdb88b82b3be6728bbade5ba2f0996f84f63b1c5f7a8c0d67efded28300898a5f930b171bb40b311bca2029c4e9b4f + languageName: node + linkType: hard + +"@base-org/account@npm:2.4.0": + version: 2.4.0 + resolution: "@base-org/account@npm:2.4.0" + dependencies: + "@coinbase/cdp-sdk": "npm:^1.0.0" + "@noble/hashes": "npm:1.4.0" + clsx: "npm:1.2.1" + eventemitter3: "npm:5.0.1" + idb-keyval: "npm:6.2.1" + ox: "npm:0.6.9" + preact: "npm:10.24.2" + viem: "npm:^2.31.7" + zustand: "npm:5.0.3" + checksum: 10c0/570a3134b81389f13a24c64e9b30b8e786dd34dfcfd59d56717352dfd892d484d49f7c57120d936f14f2e438ea11a2af543d985c90ceb3934c0e5b3deebab1f7 + languageName: node + linkType: hard + "@bytecodealliance/preview2-shim@npm:0.17.0": version: 0.17.0 resolution: "@bytecodealliance/preview2-shim@npm:0.17.0" @@ -959,6 +1194,26 @@ __metadata: languageName: node linkType: hard +"@coinbase/cdp-sdk@npm:^1.0.0": + version: 1.44.1 + resolution: "@coinbase/cdp-sdk@npm:1.44.1" + dependencies: + "@solana-program/system": "npm:^0.10.0" + "@solana-program/token": "npm:^0.9.0" + "@solana/kit": "npm:^5.1.0" + "@solana/web3.js": "npm:^1.98.1" + abitype: "npm:1.0.6" + axios: "npm:^1.12.2" + axios-retry: "npm:^4.5.0" + jose: "npm:^6.0.8" + md5: "npm:^2.3.0" + uncrypto: "npm:^0.1.3" + viem: "npm:^2.21.26" + zod: "npm:^3.24.4" + checksum: 10c0/fc9753ae7ff13e09910ff7aac12c6fe9045f211b200f052728a56d4fab8f5056b5f46b50daedcef1f4c53ed57c5239f2ce2ac6c0bbee35e6336083b8e598541a + languageName: node + linkType: hard + "@coinbase/wallet-sdk@npm:4.3.0": version: 4.3.0 resolution: "@coinbase/wallet-sdk@npm:4.3.0" @@ -1012,6 +1267,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/aix-ppc64@npm:0.24.2" @@ -1026,6 +1288,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/android-arm64@npm:0.24.2" @@ -1040,6 +1309,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/android-arm@npm:0.24.2" @@ -1054,6 +1330,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/android-x64@npm:0.24.2" @@ -1068,6 +1351,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/darwin-arm64@npm:0.24.2" @@ -1082,6 +1372,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/darwin-x64@npm:0.24.2" @@ -1096,6 +1393,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/freebsd-arm64@npm:0.24.2" @@ -1110,6 +1414,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/freebsd-x64@npm:0.24.2" @@ -1124,6 +1435,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-arm64@npm:0.24.2" @@ -1138,6 +1456,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-arm@npm:0.24.2" @@ -1152,6 +1477,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-ia32@npm:0.24.2" @@ -1166,6 +1498,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-loong64@npm:0.24.2" @@ -1180,6 +1519,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-mips64el@npm:0.24.2" @@ -1194,6 +1540,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-ppc64@npm:0.24.2" @@ -1208,6 +1561,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-riscv64@npm:0.24.2" @@ -1222,6 +1582,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-s390x@npm:0.24.2" @@ -1236,6 +1603,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-x64@npm:0.24.2" @@ -1264,6 +1638,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/netbsd-x64@npm:0.24.2" @@ -1292,6 +1673,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/openbsd-x64@npm:0.24.2" @@ -1306,6 +1694,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/sunos-x64@npm:0.24.2" @@ -1320,6 +1715,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/win32-arm64@npm:0.24.2" @@ -1334,6 +1736,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/win32-ia32@npm:0.24.2" @@ -1348,6 +1757,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/win32-x64@npm:0.24.2" @@ -1875,6 +2291,27 @@ __metadata: languageName: node linkType: hard +"@goodsdks/bridging-sdk@workspace:*, @goodsdks/bridging-sdk@workspace:packages/bridging-sdk": + version: 0.0.0-use.local + resolution: "@goodsdks/bridging-sdk@workspace:packages/bridging-sdk" + dependencies: + "@repo/eslint-config": "workspace:*" + "@repo/typescript-config": "workspace:*" + "@types/node": "npm:^20.14.9" + "@types/react": "npm:^18" + eslint: "npm:^8.57.0" + react: "npm:^18" + tsup: "npm:^8.3.5" + typescript: "npm:latest" + viem: "npm:latest" + wagmi: "npm:latest" + peerDependencies: + react: "*" + viem: "*" + wagmi: "*" + languageName: unknown + linkType: soft + "@goodsdks/citizen-sdk@npm:*, @goodsdks/citizen-sdk@workspace:packages/citizen-sdk": version: 0.0.0-use.local resolution: "@goodsdks/citizen-sdk@workspace:packages/citizen-sdk" @@ -2145,6 +2582,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.12": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/9a7d65fb13bd9aec1fbab74cda08496839b7e2ceb31f5ab922b323e94d7c481ce0fc4fd7e12e2610915ed8af51178bdc61e168e92a8c8b8303b030b03489b13b + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.8 resolution: "@jridgewell/gen-mapping@npm:0.3.8" @@ -2156,6 +2603,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/3de494219ffeb2c5c38711d0d7bb128097edf91893090a2dbc8ee0b55d092bb7347b1fd0f478486c5eab010e855c73927b1666f2107516d472d24a73017d1194 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" @@ -2177,6 +2634,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -2197,6 +2661,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 + languageName: node + linkType: hard + "@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0, @lit-labs/ssr-dom-shim@npm:^1.2.0": version: 1.3.0 resolution: "@lit-labs/ssr-dom-shim@npm:1.3.0" @@ -2211,6 +2685,15 @@ __metadata: languageName: node linkType: hard +"@lit/react@npm:1.0.8": + version: 1.0.8 + resolution: "@lit/react@npm:1.0.8" + peerDependencies: + "@types/react": 17 || 18 || 19 + checksum: 10c0/18bf3eb6584fa989e0ad40988b349a4401da1cecd5bf1c6edfc1c5caed80037852a4ebe5685b04941e5b28ccf93e740676dae32773d7ae44b1479b96538392b1 + languageName: node + linkType: hard + "@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": version: 1.6.3 resolution: "@lit/reactive-element@npm:1.6.3" @@ -2567,6 +3050,13 @@ __metadata: languageName: node linkType: hard +"@msgpack/msgpack@npm:3.1.2": + version: 3.1.2 + resolution: "@msgpack/msgpack@npm:3.1.2" + checksum: 10c0/4fee6dbea70a485d3a787ac76dd43687f489d662f22919237db1f2abbc3c88070c1d3ad78417ce6e764bcd041051680284654021f52068e0aff82d570cb942d5 + languageName: node + linkType: hard + "@next/eslint-plugin-next@npm:^15.1.0": version: 15.2.1 resolution: "@next/eslint-plugin-next@npm:15.2.1" @@ -2583,6 +3073,13 @@ __metadata: languageName: node linkType: hard +"@noble/ciphers@npm:1.3.0, @noble/ciphers@npm:^1.3.0": + version: 1.3.0 + resolution: "@noble/ciphers@npm:1.3.0" + checksum: 10c0/3ba6da645ce45e2f35e3b2e5c87ceba86b21dfa62b9466ede9edfb397f8116dae284f06652c0cd81d99445a2262b606632e868103d54ecc99fd946ae1af8cd37 + languageName: node + linkType: hard + "@noble/curves@npm:1.2.0": version: 1.2.0 resolution: "@noble/curves@npm:1.2.0" @@ -2628,10 +3125,28 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.2.0, @noble/hashes@npm:~1.2.0": - version: 1.2.0 - resolution: "@noble/hashes@npm:1.2.0" - checksum: 10c0/8bd3edb7bb6a9068f806a9a5a208cc2144e42940a21c049d8e9a0c23db08bef5cf1cfd844a7e35489b5ab52c6fa6299352075319e7f531e0996d459c38cfe26a +"@noble/curves@npm:1.9.1": + version: 1.9.1 + resolution: "@noble/curves@npm:1.9.1" + dependencies: + "@noble/hashes": "npm:1.8.0" + checksum: 10c0/39c84dbfecdca80cfde2ecea4b06ef2ec1255a4df40158d22491d1400057a283f57b2b26c8b1331006e6e061db791f31d47764961c239437032e2f45e8888c1e + languageName: node + linkType: hard + +"@noble/curves@npm:1.9.7, @noble/curves@npm:^1.4.2, @noble/curves@npm:~1.9.0": + version: 1.9.7 + resolution: "@noble/curves@npm:1.9.7" + dependencies: + "@noble/hashes": "npm:1.8.0" + checksum: 10c0/150014751ebe8ca06a8654ca2525108452ea9ee0be23430332769f06808cddabfe84f248b6dbf836916bc869c27c2092957eec62c7506d68a1ed0a624017c2a3 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.2.0, @noble/hashes@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/hashes@npm:1.2.0" + checksum: 10c0/8bd3edb7bb6a9068f806a9a5a208cc2144e42940a21c049d8e9a0c23db08bef5cf1cfd844a7e35489b5ab52c6fa6299352075319e7f531e0996d459c38cfe26a languageName: node linkType: hard @@ -2670,6 +3185,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:1.8.0, @noble/hashes@npm:^1.8.0, @noble/hashes@npm:~1.8.0": + version: 1.8.0 + resolution: "@noble/hashes@npm:1.8.0" + checksum: 10c0/06a0b52c81a6fa7f04d67762e08b2c476a00285858150caeaaff4037356dd5e119f45b2a530f638b77a5eeca013168ec1b655db41bae3236cb2e9d511484fc77 + languageName: node + linkType: hard + "@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": version: 1.7.1 resolution: "@noble/secp256k1@npm:1.7.1" @@ -3372,6 +3894,15 @@ __metadata: languageName: node linkType: hard +"@phosphor-icons/webcomponents@npm:2.1.5": + version: 2.1.5 + resolution: "@phosphor-icons/webcomponents@npm:2.1.5" + dependencies: + lit: "npm:^3" + checksum: 10c0/547c0e3e18b0203e8b432fdbc5aa075219a4e19cffa8582e6da35f0d67ac85441f67a1bb005cadeb3601e5ecda760339fca3fbb729be66ae6ec0c9d3e4d36d38 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -4005,6 +4536,31 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-adapter-wagmi@npm:^1.0.0": + version: 1.8.18 + resolution: "@reown/appkit-adapter-wagmi@npm:1.8.18" + dependencies: + "@reown/appkit": "npm:1.8.18" + "@reown/appkit-common": "npm:1.8.18" + "@reown/appkit-controllers": "npm:1.8.18" + "@reown/appkit-polyfills": "npm:1.8.18" + "@reown/appkit-scaffold-ui": "npm:1.8.18" + "@reown/appkit-utils": "npm:1.8.18" + "@reown/appkit-wallet": "npm:1.8.18" + "@wagmi/connectors": "npm:>=5.9.9" + "@walletconnect/universal-provider": "npm:2.23.2" + valtio: "npm:2.1.7" + peerDependencies: + "@wagmi/core": ">=2.21.2" + viem: ">=2.45.0" + wagmi: ">=2.19.5" + dependenciesMeta: + "@wagmi/connectors": + optional: true + checksum: 10c0/029e1b59f63b91a2b5abb0286c3b8fdd382b28bb888cb6f9e367e070d64942962ef4947c369191b003c76c2cb676dbcae6caa806e499b3d9936235fe988cdbbd + languageName: node + linkType: hard + "@reown/appkit-adapter-wagmi@npm:^1.7.2": version: 1.7.2 resolution: "@reown/appkit-adapter-wagmi@npm:1.7.2" @@ -4041,6 +4597,17 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-common@npm:1.8.18": + version: 1.8.18 + resolution: "@reown/appkit-common@npm:1.8.18" + dependencies: + big.js: "npm:6.2.2" + dayjs: "npm:1.11.13" + viem: "npm:>=2.45.0" + checksum: 10c0/8e7c9d03d67b8836becc8aca7e10d05c1d712df8cfe2b9a92e8d89c6c0f9a2d0833261e4aeb5377ada8bc34860422a44ba21114b6e3b10de56aeee95ffe973c3 + languageName: node + linkType: hard + "@reown/appkit-controllers@npm:1.7.2": version: 1.7.2 resolution: "@reown/appkit-controllers@npm:1.7.2" @@ -4054,6 +4621,33 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-controllers@npm:1.8.18": + version: 1.8.18 + resolution: "@reown/appkit-controllers@npm:1.8.18" + dependencies: + "@reown/appkit-common": "npm:1.8.18" + "@reown/appkit-wallet": "npm:1.8.18" + "@walletconnect/universal-provider": "npm:2.23.2" + valtio: "npm:2.1.7" + viem: "npm:>=2.45.0" + checksum: 10c0/6990e8cab0be518dca37b40c84eced12275fc868d1229bbbc67bb992847d5004dacb509e34f5d2b3bf2cd706ada8cd9f80ee3e609cdd7ead6322c14be5e99628 + languageName: node + linkType: hard + +"@reown/appkit-pay@npm:1.8.18": + version: 1.8.18 + resolution: "@reown/appkit-pay@npm:1.8.18" + dependencies: + "@reown/appkit-common": "npm:1.8.18" + "@reown/appkit-controllers": "npm:1.8.18" + "@reown/appkit-ui": "npm:1.8.18" + "@reown/appkit-utils": "npm:1.8.18" + lit: "npm:3.3.0" + valtio: "npm:2.1.7" + checksum: 10c0/5d2baf0a849249fb057682a797e1a69e302b35552652debb0f7fca6e0fe678e3e146f571a3b641ccb9a5e0f8f40bc164b2763c9f11d19b06fe9f067de26d0446 + languageName: node + linkType: hard + "@reown/appkit-polyfills@npm:1.7.2": version: 1.7.2 resolution: "@reown/appkit-polyfills@npm:1.7.2" @@ -4063,6 +4657,15 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-polyfills@npm:1.8.18": + version: 1.8.18 + resolution: "@reown/appkit-polyfills@npm:1.8.18" + dependencies: + buffer: "npm:6.0.3" + checksum: 10c0/e302ef3d4c8fd600b6fa5897b91f9ea10b35854967aea8c70e67eb7192c23d7f7f6f24bb6f6e6392288a6e5d21f6c2971ae9ab95094768c6f4d81684e5757f0c + languageName: node + linkType: hard + "@reown/appkit-scaffold-ui@npm:1.7.2": version: 1.7.2 resolution: "@reown/appkit-scaffold-ui@npm:1.7.2" @@ -4077,6 +4680,21 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-scaffold-ui@npm:1.8.18": + version: 1.8.18 + resolution: "@reown/appkit-scaffold-ui@npm:1.8.18" + dependencies: + "@reown/appkit-common": "npm:1.8.18" + "@reown/appkit-controllers": "npm:1.8.18" + "@reown/appkit-pay": "npm:1.8.18" + "@reown/appkit-ui": "npm:1.8.18" + "@reown/appkit-utils": "npm:1.8.18" + "@reown/appkit-wallet": "npm:1.8.18" + lit: "npm:3.3.0" + checksum: 10c0/3bd135b203feda3d4db08e024dcb0d4523820af369591f0c10198460cde300cee993f3a741707f7e27caee3402f81a10f9ee1c2cfa526baec30aeeee34e91d56 + languageName: node + linkType: hard + "@reown/appkit-ui@npm:1.7.2": version: 1.7.2 resolution: "@reown/appkit-ui@npm:1.7.2" @@ -4090,6 +4708,20 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-ui@npm:1.8.18": + version: 1.8.18 + resolution: "@reown/appkit-ui@npm:1.8.18" + dependencies: + "@phosphor-icons/webcomponents": "npm:2.1.5" + "@reown/appkit-common": "npm:1.8.18" + "@reown/appkit-controllers": "npm:1.8.18" + "@reown/appkit-wallet": "npm:1.8.18" + lit: "npm:3.3.0" + qrcode: "npm:1.5.3" + checksum: 10c0/60458ea3b73d17601eb421f8c0e9440425ee30b79c139c22c0bb3a711bb56349b1c41e59b6dcb07f267803dc97da0f9e05a9321ee5dca7fd1dac76e86e0831ca + languageName: node + linkType: hard + "@reown/appkit-utils@npm:1.7.2": version: 1.7.2 resolution: "@reown/appkit-utils@npm:1.7.2" @@ -4108,6 +4740,35 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-utils@npm:1.8.18": + version: 1.8.18 + resolution: "@reown/appkit-utils@npm:1.8.18" + dependencies: + "@base-org/account": "npm:2.4.0" + "@reown/appkit-common": "npm:1.8.18" + "@reown/appkit-controllers": "npm:1.8.18" + "@reown/appkit-polyfills": "npm:1.8.18" + "@reown/appkit-wallet": "npm:1.8.18" + "@safe-global/safe-apps-provider": "npm:0.18.6" + "@safe-global/safe-apps-sdk": "npm:9.1.0" + "@wallet-standard/wallet": "npm:1.1.0" + "@walletconnect/logger": "npm:3.0.2" + "@walletconnect/universal-provider": "npm:2.23.2" + valtio: "npm:2.1.7" + viem: "npm:>=2.45.0" + peerDependencies: + valtio: 2.1.7 + dependenciesMeta: + "@base-org/account": + optional: true + "@safe-global/safe-apps-provider": + optional: true + "@safe-global/safe-apps-sdk": + optional: true + checksum: 10c0/b328df52abbd8f8ed3ec8cdb65d40be653e2300b75d9047928051418bbc287249181a78306ca2f55c837f16075149187c17504caa3dd5e0654c0ea9db0b9a8ab + languageName: node + linkType: hard + "@reown/appkit-wallet@npm:1.7.2, @reown/appkit-wallet@npm:^1.7.2": version: 1.7.2 resolution: "@reown/appkit-wallet@npm:1.7.2" @@ -4120,6 +4781,18 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-wallet@npm:1.8.18": + version: 1.8.18 + resolution: "@reown/appkit-wallet@npm:1.8.18" + dependencies: + "@reown/appkit-common": "npm:1.8.18" + "@reown/appkit-polyfills": "npm:1.8.18" + "@walletconnect/logger": "npm:3.0.2" + zod: "npm:3.22.4" + checksum: 10c0/fd4a819cf855c144ea93afdab81fa45d48a51bcb970a9cd966a3b1b3388e5c40f69bf3ea4c6f1cce564951b607376d3e15eede309c6e73f8ee6fe7522c42a595 + languageName: node + linkType: hard + "@reown/appkit@npm:1.7.2, @reown/appkit@npm:^1.7.2": version: 1.7.2 resolution: "@reown/appkit@npm:1.7.2" @@ -4140,7 +4813,32 @@ __metadata: languageName: node linkType: hard -"@repo/eslint-config@npm:*, @repo/eslint-config@workspace:packages/eslint-config": +"@reown/appkit@npm:1.8.18, @reown/appkit@npm:^1.0.0": + version: 1.8.18 + resolution: "@reown/appkit@npm:1.8.18" + dependencies: + "@lit/react": "npm:1.0.8" + "@reown/appkit-common": "npm:1.8.18" + "@reown/appkit-controllers": "npm:1.8.18" + "@reown/appkit-pay": "npm:1.8.18" + "@reown/appkit-polyfills": "npm:1.8.18" + "@reown/appkit-scaffold-ui": "npm:1.8.18" + "@reown/appkit-ui": "npm:1.8.18" + "@reown/appkit-utils": "npm:1.8.18" + "@reown/appkit-wallet": "npm:1.8.18" + "@walletconnect/universal-provider": "npm:2.23.2" + bs58: "npm:6.0.0" + semver: "npm:7.7.2" + valtio: "npm:2.1.7" + viem: "npm:>=2.45.0" + dependenciesMeta: + "@lit/react": + optional: true + checksum: 10c0/f18e53e73903755a155d9afdc7ab41a0687d391b5daa57e0a97390db2f7a5c1b5194175900815f7e0ebd46708137c7332a2852ee08914849743a120d9e62bc4e + languageName: node + linkType: hard + +"@repo/eslint-config@npm:*, @repo/eslint-config@workspace:*, @repo/eslint-config@workspace:packages/eslint-config": version: 0.0.0-use.local resolution: "@repo/eslint-config@workspace:packages/eslint-config" dependencies: @@ -4164,6 +4862,13 @@ __metadata: languageName: unknown linkType: soft +"@rolldown/pluginutils@npm:1.0.0-beta.27": + version: 1.0.0-beta.27 + resolution: "@rolldown/pluginutils@npm:1.0.0-beta.27" + checksum: 10c0/9658f235b345201d4f6bfb1f32da9754ca164f892d1cb68154fe5f53c1df42bd675ecd409836dff46884a7847d6c00bdc38af870f7c81e05bba5c2645eb4ab9c + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-android-arm-eabi@npm:4.34.9" @@ -4178,6 +4883,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.57.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-android-arm64@npm:4.34.9" @@ -4192,6 +4904,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-android-arm64@npm:4.57.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-darwin-arm64@npm:4.34.9" @@ -4206,6 +4925,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.57.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-darwin-x64@npm:4.34.9" @@ -4220,6 +4946,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.57.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-arm64@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-freebsd-arm64@npm:4.34.9" @@ -4234,6 +4967,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.57.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-x64@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-freebsd-x64@npm:4.34.9" @@ -4248,6 +4988,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.57.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.34.9" @@ -4262,6 +5009,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-musleabihf@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.34.9" @@ -4276,6 +5030,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.57.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.34.9" @@ -4290,6 +5051,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.57.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.34.9" @@ -4304,6 +5072,27 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.57.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.57.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.57.1" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-loongarch64-gnu@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.34.9" @@ -4332,6 +5121,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-ppc64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.57.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.57.1" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.34.9" @@ -4346,6 +5149,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.57.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-musl@npm:4.44.2": version: 4.44.2 resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.44.2" @@ -4353,6 +5163,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.57.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-s390x-gnu@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.34.9" @@ -4367,6 +5184,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.57.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.34.9" @@ -4381,6 +5205,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.57.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-linux-x64-musl@npm:4.34.9" @@ -4395,6 +5226,27 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.57.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-openbsd-x64@npm:4.57.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.57.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.34.9" @@ -4409,6 +5261,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.57.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.34.9" @@ -4423,6 +5282,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.57.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.57.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.34.9": version: 4.34.9 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.34.9" @@ -4437,6 +5310,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.57.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@safe-global/safe-apps-provider@npm:0.18.5": version: 0.18.5 resolution: "@safe-global/safe-apps-provider@npm:0.18.5" @@ -4447,6 +5327,16 @@ __metadata: languageName: node linkType: hard +"@safe-global/safe-apps-provider@npm:0.18.6": + version: 0.18.6 + resolution: "@safe-global/safe-apps-provider@npm:0.18.6" + dependencies: + "@safe-global/safe-apps-sdk": "npm:^9.1.0" + events: "npm:^3.3.0" + checksum: 10c0/e8567a97e43740bfe21b6f8a7759cabed2bc96eb50fd494118cab13a20f14797fbca3e02d18f0395054fcfbf2fd86315e5433d5b26f73bed6c3c86881087716c + languageName: node + linkType: hard + "@safe-global/safe-apps-sdk@npm:9.1.0, @safe-global/safe-apps-sdk@npm:^9.1.0": version: 9.1.0 resolution: "@safe-global/safe-apps-sdk@npm:9.1.0" @@ -4464,6 +5354,13 @@ __metadata: languageName: node linkType: hard +"@scure/base@npm:1.2.6, @scure/base@npm:~1.2.5": + version: 1.2.6 + resolution: "@scure/base@npm:1.2.6" + checksum: 10c0/49bd5293371c4e062cb6ba689c8fe3ea3981b7bb9c000400dc4eafa29f56814cdcdd27c04311c2fec34de26bc373c593a1d6ca6d754398a488d587943b7c128a + languageName: node + linkType: hard + "@scure/base@npm:^1.1.3, @scure/base@npm:~1.2.2, @scure/base@npm:~1.2.4": version: 1.2.4 resolution: "@scure/base@npm:1.2.4" @@ -4511,6 +5408,17 @@ __metadata: languageName: node linkType: hard +"@scure/bip32@npm:^1.7.0": + version: 1.7.0 + resolution: "@scure/bip32@npm:1.7.0" + dependencies: + "@noble/curves": "npm:~1.9.0" + "@noble/hashes": "npm:~1.8.0" + "@scure/base": "npm:~1.2.5" + checksum: 10c0/e3d4c1f207df16abcd79babcdb74d36f89bdafc90bf02218a5140cc5cba25821d80d42957c6705f35210cc5769714ea9501d4ae34732cdd1c26c9ff182a219f7 + languageName: node + linkType: hard + "@scure/bip39@npm:1.1.1": version: 1.1.1 resolution: "@scure/bip39@npm:1.1.1" @@ -4541,6 +5449,16 @@ __metadata: languageName: node linkType: hard +"@scure/bip39@npm:^1.6.0": + version: 1.6.0 + resolution: "@scure/bip39@npm:1.6.0" + dependencies: + "@noble/hashes": "npm:~1.8.0" + "@scure/base": "npm:~1.2.5" + checksum: 10c0/73a54b5566a50a3f8348a5cfd74d2092efeefc485efbed83d7a7374ffd9a75defddf446e8e5ea0385e4adb49a94b8ae83c5bad3e16333af400e932f7da3aaff8 + languageName: node + linkType: hard + "@sentry/core@npm:5.30.0": version: 5.30.0 resolution: "@sentry/core@npm:5.30.0" @@ -5099,77 +6017,856 @@ __metadata: languageName: node linkType: hard -"@smithy/util-retry@npm:^4.0.0, @smithy/util-retry@npm:^4.0.1": - version: 4.0.1 - resolution: "@smithy/util-retry@npm:4.0.1" +"@smithy/util-retry@npm:^4.0.0, @smithy/util-retry@npm:^4.0.1": + version: 4.0.1 + resolution: "@smithy/util-retry@npm:4.0.1" + dependencies: + "@smithy/service-error-classification": "npm:^4.0.1" + "@smithy/types": "npm:^4.1.0" + tslib: "npm:^2.6.2" + checksum: 10c0/93ef89572651b8a30b9a648292660ae9532508ec6d2577afc62e1d9125fe6d14086e0f70a2981bf9f12256b41a57152368b5ed839cdd2df47ba78dd005615173 + languageName: node + linkType: hard + +"@smithy/util-stream@npm:^4.0.0, @smithy/util-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "@smithy/util-stream@npm:4.0.1" + dependencies: + "@smithy/fetch-http-handler": "npm:^5.0.1" + "@smithy/node-http-handler": "npm:^4.0.1" + "@smithy/types": "npm:^4.1.0" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-buffer-from": "npm:^4.0.0" + "@smithy/util-hex-encoding": "npm:^4.0.0" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/066d54981bc2d4aa5aa4026b88a5bfd79605c57c86c279c1811735d9f7fdd0e0fecacaecb727679d360101d5f31f5d68b463ce76fd8f25a38b274bfa62a6c7a5 + languageName: node + linkType: hard + +"@smithy/util-uri-escape@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-uri-escape@npm:4.0.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10c0/23984624060756adba8aa4ab1693fe6b387ee5064d8ec4dfd39bb5908c4ee8b9c3f2dc755da9b07505d8e3ce1338c1867abfa74158931e4728bf3cfcf2c05c3d + languageName: node + linkType: hard + +"@smithy/util-utf8@npm:^2.0.0": + version: 2.3.0 + resolution: "@smithy/util-utf8@npm:2.3.0" + dependencies: + "@smithy/util-buffer-from": "npm:^2.2.0" + tslib: "npm:^2.6.2" + checksum: 10c0/e18840c58cc507ca57fdd624302aefd13337ee982754c9aa688463ffcae598c08461e8620e9852a424d662ffa948fc64919e852508028d09e89ced459bd506ab + languageName: node + linkType: hard + +"@smithy/util-utf8@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/util-utf8@npm:4.0.0" + dependencies: + "@smithy/util-buffer-from": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/28a5a5372cbf0b3d2e32dd16f79b04c2aec6f704cf13789db922e9686fde38dde0171491cfa4c2c201595d54752a319faaeeed3c325329610887694431e28c98 + languageName: node + linkType: hard + +"@smithy/util-waiter@npm:^4.0.0": + version: 4.0.2 + resolution: "@smithy/util-waiter@npm:4.0.2" + dependencies: + "@smithy/abort-controller": "npm:^4.0.1" + "@smithy/types": "npm:^4.1.0" + tslib: "npm:^2.6.2" + checksum: 10c0/36ee71b41923ae58d9246745e3b7497fe45577dbb97f6e15dd07b4fddb4f82f32e0b7604c7b388fc92d5cbe49d9499998eda979a77a4a770c1b25686a5aed4ce + languageName: node + linkType: hard + +"@socket.io/component-emitter@npm:~3.1.0": + version: 3.1.2 + resolution: "@socket.io/component-emitter@npm:3.1.2" + checksum: 10c0/c4242bad66f67e6f7b712733d25b43cbb9e19a595c8701c3ad99cbeb5901555f78b095e24852f862fffb43e96f1d8552e62def885ca82ae1bb05da3668fd87d7 + languageName: node + linkType: hard + +"@solana-program/system@npm:^0.10.0": + version: 0.10.0 + resolution: "@solana-program/system@npm:0.10.0" + peerDependencies: + "@solana/kit": ^5.0 + checksum: 10c0/4cc3164d49fe7b10e9c0c89493f738e2d4294e2eae40fafee56b01dfb50b939c88f82eb06d5393333743b0edee961b03e947afcc20e6965252576900266ec52e + languageName: node + linkType: hard + +"@solana-program/token@npm:^0.9.0": + version: 0.9.0 + resolution: "@solana-program/token@npm:0.9.0" + peerDependencies: + "@solana/kit": ^5.0 + checksum: 10c0/f23b591e0ad27aa05e940429de73ebc0b9cbb65542e5aae775ac616577307d341d3335e36e24a38ba7612bcc584e50bd7cec360ca4904f42219f2708a9d453aa + languageName: node + linkType: hard + +"@solana/accounts@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/accounts@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/rpc-spec": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/9851005767107f198a7d4dbd5498b271236d83527b25fc05d7beb5b347ac072fb51119b9863d2033e89bb9ee06e78289a1a71b0147d19a444c28ba36f19f970b + languageName: node + linkType: hard + +"@solana/addresses@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/addresses@npm:5.5.1" + dependencies: + "@solana/assertions": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4908e3019c930c2c4a13528eae7a5bfac25400b4173144180a68bcbac43d1b90b0771bf952711503814440547ed45d32c3b450bac0aff19974035111e0f79865 + languageName: node + linkType: hard + +"@solana/assertions@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/assertions@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d1a8fbfdd8e551d84b7624d645fcae66a26d9022828795f10b252f45fb84299088cec75e8f156895bb930c977db1bcbdda8ceb011f373fb288f0adb5ea4ecd31 + languageName: node + linkType: hard + +"@solana/buffer-layout@npm:^4.0.1": + version: 4.0.1 + resolution: "@solana/buffer-layout@npm:4.0.1" + dependencies: + buffer: "npm:~6.0.3" + checksum: 10c0/6535f3908cf6dfc405b665795f0c2eaa0482a8c6b1811403945cf7b450e7eb7b40acce3e8af046f2fcc3eea1a15e61d48c418315d813bee4b720d56b00053305 + languageName: node + linkType: hard + +"@solana/codecs-core@npm:2.3.0": + version: 2.3.0 + resolution: "@solana/codecs-core@npm:2.3.0" + dependencies: + "@solana/errors": "npm:2.3.0" + peerDependencies: + typescript: ">=5.3.3" + checksum: 10c0/efef080b94fe572bcfeac9f1c0b222700203bd2b45c9590e77445b35335d0ed2582d1cc4e533003d2090c385c06eb93dfa05388f9766182aa60ce85eacfd8042 + languageName: node + linkType: hard + +"@solana/codecs-core@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs-core@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/a66cd3e3c9a0fcf369be5c3369463db03f4b1e1aa0d322d6cb8440613dcc83608dd52501ff2ee3c56daed2b1f2b07751cfa1fe1aeb584a306a9e14175b0ca994 + languageName: node + linkType: hard + +"@solana/codecs-data-structures@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs-data-structures@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/db88246a2fc3d4c3c7d69d5e9ce7fab815be4e10e0b1519ed00454c7ac2189fc3dd2d2ae0cb05a77d560ccdc615652122cfada59e34285ce08545474542e4874 + languageName: node + linkType: hard + +"@solana/codecs-numbers@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs-numbers@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1802ec289a912b086c031c8da7f856ffb2c5a581b2fef9de5bd0ea23e192ca472cc01f1a46747e0f9c1505c826f404bf2862d7403175688136b87056d22fc441 + languageName: node + linkType: hard + +"@solana/codecs-numbers@npm:^2.1.0": + version: 2.3.0 + resolution: "@solana/codecs-numbers@npm:2.3.0" + dependencies: + "@solana/codecs-core": "npm:2.3.0" + "@solana/errors": "npm:2.3.0" + peerDependencies: + typescript: ">=5.3.3" + checksum: 10c0/0780d60771e451cfe22ea614315fed2f37507aa62f83cddb900186f88d4d4532eea298d74796d1dbc8c34321a570b5d9ada25e8f4a5aeadd57aa4e688b4465f5 + languageName: node + linkType: hard + +"@solana/codecs-strings@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs-strings@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: ^5.0.0 + peerDependenciesMeta: + fastestsmallesttextencoderdecoder: + optional: true + typescript: + optional: true + checksum: 10c0/16cf7f6edee96a11862bf41cc31e0162848ecd5ba67826eee3e5fe9f10007631db5f34f794fcf44bb075cbcaf43843e34632659105f75a02c7ff3d703ee49325 + languageName: node + linkType: hard + +"@solana/codecs@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/options": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/bf576cb014f342edddb4b77f83a111ceecfc5709ecaa6225c71cbb40b3d31aba26f3c3f5787684d472b1ed0c705df10be517fdbab659cf43cd7a6e21bea9a9c1 + languageName: node + linkType: hard + +"@solana/errors@npm:2.3.0": + version: 2.3.0 + resolution: "@solana/errors@npm:2.3.0" + dependencies: + chalk: "npm:^5.4.1" + commander: "npm:^14.0.0" + peerDependencies: + typescript: ">=5.3.3" + bin: + errors: bin/cli.mjs + checksum: 10c0/55bef8828b4a6bb5222d3dbfe27162684906ba90753126b9cfd1e8e39c6c29209c0f4f331cfb1d3d1cf43fd456022af92337b4234a145d8de292588197c12c71 + languageName: node + linkType: hard + +"@solana/errors@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/errors@npm:5.5.1" + dependencies: + chalk: "npm:5.6.2" + commander: "npm:14.0.2" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + errors: bin/cli.mjs + checksum: 10c0/cafa60aa4ca91c78b0d85e5d296c9080fc537b0c62ba1bc3d3d00eaad96d2894178849be478e653cf963a2d18d71b54e0f58f319a7d77f6dbfdd5845af4c6a08 + languageName: node + linkType: hard + +"@solana/fast-stable-stringify@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/fast-stable-stringify@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/b116c515e71cdace7a2e45c001de486c528e178f6170dc6faaea33a3a076a5ddd7806302584e480ef0dbf9f84c9a808cbc99a068c48b0e777bc5b5e178291ed9 + languageName: node + linkType: hard + +"@solana/functional@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/functional@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/17f60572407006b8913529019d928b0b43b6c24798fd743673a7878e8b8db25ebe27b7eb9ef0e28cc24773d34acbb1d5fe617f9096d527efc62c9e6719f7ada2 + languageName: node + linkType: hard + +"@solana/instruction-plans@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/instruction-plans@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/promises": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/9f1cde9b925f1ecc01f3ceb6b87ba6154befb991ad58b176f58f2f210d75968d2dc26adada623d54eb5039a4116c5f8bf48e5153b813720dfc91301c2e37eb42 + languageName: node + linkType: hard + +"@solana/instructions@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/instructions@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/72b3d599e8016ec6fdb34b3cdbc9cca76a8153e911fd18bee3ea9af8caf19591615425eb3c24aa04ee5da16f87fc568a17574532859b7a50c829c49397458dc4 + languageName: node + linkType: hard + +"@solana/keys@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/keys@npm:5.5.1" + dependencies: + "@solana/assertions": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1b76a7c5b15a331ebc51c003f2f2e248c91a0f3c09659de855b05757c203c7a0e165c18c3a1b3636fd919859eb58b3e51afac234aa186e01305d4c5a38a3255d + languageName: node + linkType: hard + +"@solana/kit@npm:^5.1.0": + version: 5.5.1 + resolution: "@solana/kit@npm:5.5.1" + dependencies: + "@solana/accounts": "npm:5.5.1" + "@solana/addresses": "npm:5.5.1" + "@solana/codecs": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/instruction-plans": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/offchain-messages": "npm:5.5.1" + "@solana/plugin-core": "npm:5.5.1" + "@solana/programs": "npm:5.5.1" + "@solana/rpc": "npm:5.5.1" + "@solana/rpc-api": "npm:5.5.1" + "@solana/rpc-parsed-types": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/rpc-subscriptions": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/signers": "npm:5.5.1" + "@solana/sysvars": "npm:5.5.1" + "@solana/transaction-confirmation": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/391fd781c28c2550dae77395b0bc4e37799da13695be03c5c57e82c31b4556c29b8ac4853087908549415c419ed758c34c1ac9cdae37c4e0d28b4c9be6867b81 + languageName: node + linkType: hard + +"@solana/nominal-types@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/nominal-types@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/aa0f5b850c6e74d6f883d9a2513f561112d531cda750ba75efbc84a524ffc69e014740f5fac308b42499b5ea4fcaa5d34fe3acd334ef65dffe22ba822c476fbc + languageName: node + linkType: hard + +"@solana/offchain-messages@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/offchain-messages@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/93ba0fec4a3387e4809d8ebbdeb71901d69821cdd4b3645ee054197f9d564227cb76d66b509b98f1902fe522575662824ea58e583665c624dfb05e9a0d52b6dc + languageName: node + linkType: hard + +"@solana/options@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/options@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d4ab205e1286ba02a2ad97d8a3ad22e57798ce8f0fd77f3734f2c4a923c9fc7f0f949d5ceeb8b33eaf5484460c49ed0d9138f3eff5a571e754488f8aa4819269 + languageName: node + linkType: hard + +"@solana/plugin-core@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/plugin-core@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/6d981acfde238517692126f66594598b203eec84753677851f0dc038d01a8c55603aff1319513ba5306a29bf6b0018a1ad2d3b9de49d984acc0ecf76abfffbaa + languageName: node + linkType: hard + +"@solana/programs@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/programs@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4d31ca06655366d368a853772559d5853494e82c559a02b8f6c4f90d390fb196df50b2d0d0540c2f7bbb7cc0abb3ac2e5694c2148a2bcc034a33dd64b7a105f4 + languageName: node + linkType: hard + +"@solana/promises@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/promises@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d9818a5d38b85a17f74782457d8953c95835cc1190a63ff6749610e5f6272ee50d08f5720a84f9a5885e0faa94390210b86d927cf81c95f63707a122dfae100d + languageName: node + linkType: hard + +"@solana/rpc-api@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-api@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/rpc-parsed-types": "npm:5.5.1" + "@solana/rpc-spec": "npm:5.5.1" + "@solana/rpc-transformers": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/7ac47bc771d825c251f18d92e0eaef8a1f90542e5313249f88970aff666e8aa4ba446d9efc0ded2188d60c41512c09aa285bf1847bd0c439e1a4ddcb20748fc4 + languageName: node + linkType: hard + +"@solana/rpc-parsed-types@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-parsed-types@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/b042b4d252e7b31a2e2cdc957711f0ecc438d1667da7414c0da25218fb439b1de2de0c1845a2ca776cddd8e399ba886a43a1f72a50e1ae0790ea6a500c90cfdb + languageName: node + linkType: hard + +"@solana/rpc-spec-types@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-spec-types@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/19b4c0e3de748db5520ab4f21a97e7ddf8e5f7a722bf635eb62aacd72ee334b2b8ab8f9343bf660055ad61f4ff71cc402e52dd41b3742944e71f54e67bf82f5a + languageName: node + linkType: hard + +"@solana/rpc-spec@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-spec@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/634d5cd3ea7789ff20ca82782ce2fde6bb96c09fcd49dc9d113ade98a4516d2d080f771f3247454e9d4478933a3c1f1380a8409817c12cd40ef6e3579faa1d0d + languageName: node + linkType: hard + +"@solana/rpc-subscriptions-api@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-subscriptions-api@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/rpc-subscriptions-spec": "npm:5.5.1" + "@solana/rpc-transformers": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/3ad059f20c361d5ced84f1d584ff5513d78559497c7cf8855703a7c1437dcb3024fc1dfe9d1be65e8241a4d1a4d0c272ed2ddca7e1aca3086f204546836503f9 + languageName: node + linkType: hard + +"@solana/rpc-subscriptions-channel-websocket@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-subscriptions-channel-websocket@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/rpc-subscriptions-spec": "npm:5.5.1" + "@solana/subscribable": "npm:5.5.1" + ws: "npm:^8.19.0" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/37619caefa2f36fdbbbdab0478965a0bc14f72254caa511ecc067700d9c23f4ac221a61079974b8f6286aa2b71bb4ae5fa106297e7044ef0ed7ceb2d816c74a2 + languageName: node + linkType: hard + +"@solana/rpc-subscriptions-spec@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-subscriptions-spec@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/promises": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/subscribable": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/9b9e3a81977ee4deac918226a6f6d41fb524563a027d09da4439e18d3c99dd79b2af5a022a16ac97744f8e93ec9dd409714d5c371a313cb811c22194b94f28cc + languageName: node + linkType: hard + +"@solana/rpc-subscriptions@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-subscriptions@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/fast-stable-stringify": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/promises": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/rpc-subscriptions-api": "npm:5.5.1" + "@solana/rpc-subscriptions-channel-websocket": "npm:5.5.1" + "@solana/rpc-subscriptions-spec": "npm:5.5.1" + "@solana/rpc-transformers": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/subscribable": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4dda3a418bae0eff6f7da59cc21840e45bd80f3e5fee9edd32ad66b4d128490838017e2ade245fbcd8f4f765bb67350bace41fc56e00a82b739be6d24fd00bbd + languageName: node + linkType: hard + +"@solana/rpc-transformers@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-transformers@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/3500e42b486627be8e39838f02f2f28c759b0183c1bc34e28d2f2289e9ae2e58d5d0825973da601f9f29b1ab366b0017b49df5329c1dcc9932724b9bfdfafafd + languageName: node + linkType: hard + +"@solana/rpc-transport-http@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-transport-http@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/rpc-spec": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + undici-types: "npm:^7.19.2" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4300e1a334e2ea8deb66542dabff835ae3dbccbaba0011c1cb027f55219cb3144c7fcd5220da06565ef5fa87a25e73a43497caeb7100ff9f1a947792b2325489 + languageName: node + linkType: hard + +"@solana/rpc-types@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-types@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/84fcad12f65c88bfbbe0689d1fb6715e37c41454b85f50ae0963f2626c45a26155f2395b03ab48f261966f1a5c02b1c96ad42ba0b1ca80c5fe22f08757401b1b + languageName: node + linkType: hard + +"@solana/rpc@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/fast-stable-stringify": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/rpc-api": "npm:5.5.1" + "@solana/rpc-spec": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/rpc-transformers": "npm:5.5.1" + "@solana/rpc-transport-http": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/c469655555013f5dcfa67ef3285c9abe48929a34bdc8a3c7c21823f86f58f07f91980ee59d48190bcda5b427399a81cb180ae0ca2542e9dd47e39407f62c7458 + languageName: node + linkType: hard + +"@solana/signers@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/signers@npm:5.5.1" dependencies: - "@smithy/service-error-classification": "npm:^4.0.1" - "@smithy/types": "npm:^4.1.0" - tslib: "npm:^2.6.2" - checksum: 10c0/93ef89572651b8a30b9a648292660ae9532508ec6d2577afc62e1d9125fe6d14086e0f70a2981bf9f12256b41a57152368b5ed839cdd2df47ba78dd005615173 + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + "@solana/offchain-messages": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/53957109e4a99122b1225b04d477760e0c557fa9c66095e334de543e78f79c4b35b280dde942a0d7725dc3e61ee63c41d52b7fe5ddfc28967c3db009856573aa languageName: node linkType: hard -"@smithy/util-stream@npm:^4.0.0, @smithy/util-stream@npm:^4.0.1": - version: 4.0.1 - resolution: "@smithy/util-stream@npm:4.0.1" +"@solana/subscribable@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/subscribable@npm:5.5.1" dependencies: - "@smithy/fetch-http-handler": "npm:^5.0.1" - "@smithy/node-http-handler": "npm:^4.0.1" - "@smithy/types": "npm:^4.1.0" - "@smithy/util-base64": "npm:^4.0.0" - "@smithy/util-buffer-from": "npm:^4.0.0" - "@smithy/util-hex-encoding": "npm:^4.0.0" - "@smithy/util-utf8": "npm:^4.0.0" - tslib: "npm:^2.6.2" - checksum: 10c0/066d54981bc2d4aa5aa4026b88a5bfd79605c57c86c279c1811735d9f7fdd0e0fecacaecb727679d360101d5f31f5d68b463ce76fd8f25a38b274bfa62a6c7a5 + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/ff9f4af066488448276a439a9299f481cd70c1866b4ab4cce7c3486d6c950bab092f4f678b8b79b45681942c99090cd624b3eaa2a6c2820079d44c2502e7c77b languageName: node linkType: hard -"@smithy/util-uri-escape@npm:^4.0.0": - version: 4.0.0 - resolution: "@smithy/util-uri-escape@npm:4.0.0" +"@solana/sysvars@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/sysvars@npm:5.5.1" dependencies: - tslib: "npm:^2.6.2" - checksum: 10c0/23984624060756adba8aa4ab1693fe6b387ee5064d8ec4dfd39bb5908c4ee8b9c3f2dc755da9b07505d8e3ce1338c1867abfa74158931e4728bf3cfcf2c05c3d + "@solana/accounts": "npm:5.5.1" + "@solana/codecs": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/773e4ae956ed29999a5e0c76e44c3b390330325b03827a5a5092292678e3d1d46c2958911faf8b94b350bf42db02874b8942bd7679fc63519a259520c269883a languageName: node linkType: hard -"@smithy/util-utf8@npm:^2.0.0": - version: 2.3.0 - resolution: "@smithy/util-utf8@npm:2.3.0" +"@solana/transaction-confirmation@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/transaction-confirmation@npm:5.5.1" dependencies: - "@smithy/util-buffer-from": "npm:^2.2.0" - tslib: "npm:^2.6.2" - checksum: 10c0/e18840c58cc507ca57fdd624302aefd13337ee982754c9aa688463ffcae598c08461e8620e9852a424d662ffa948fc64919e852508028d09e89ced459bd506ab + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/promises": "npm:5.5.1" + "@solana/rpc": "npm:5.5.1" + "@solana/rpc-subscriptions": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/01b96aa0518417bf257f8691e02aba5ce8a7144c64d1b96b0b17045bfe34dfa00b2035e6a930f3e36bb689dd2f00c56fc6b8a521711b2fcd262dcdabd3187966 languageName: node linkType: hard -"@smithy/util-utf8@npm:^4.0.0": - version: 4.0.0 - resolution: "@smithy/util-utf8@npm:4.0.0" +"@solana/transaction-messages@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/transaction-messages@npm:5.5.1" dependencies: - "@smithy/util-buffer-from": "npm:^4.0.0" - tslib: "npm:^2.6.2" - checksum: 10c0/28a5a5372cbf0b3d2e32dd16f79b04c2aec6f704cf13789db922e9686fde38dde0171491cfa4c2c201595d54752a319faaeeed3c325329610887694431e28c98 + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/711503174284bf449b5ffbf32ae149a82a097781f0eac1cc777d941b3cc3b9de19a6daa9993c77650e001d8f8e9e2f749bd232a4da6e09fa9c856a03a6ec1cc8 languageName: node linkType: hard -"@smithy/util-waiter@npm:^4.0.0": - version: 4.0.2 - resolution: "@smithy/util-waiter@npm:4.0.2" +"@solana/transactions@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/transactions@npm:5.5.1" dependencies: - "@smithy/abort-controller": "npm:^4.0.1" - "@smithy/types": "npm:^4.1.0" - tslib: "npm:^2.6.2" - checksum: 10c0/36ee71b41923ae58d9246745e3b7497fe45577dbb97f6e15dd07b4fddb4f82f32e0b7604c7b388fc92d5cbe49d9499998eda979a77a4a770c1b25686a5aed4ce + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1dc87a6599ee60e6026b7de917b1e85a2bc2ec2e13732f872453bed597c86002c8b50ae3a4f2ea5725c969fbebe7f4987c5a2f17b02722a40f0b34191f1c7cf2 languageName: node linkType: hard -"@socket.io/component-emitter@npm:~3.1.0": - version: 3.1.2 - resolution: "@socket.io/component-emitter@npm:3.1.2" - checksum: 10c0/c4242bad66f67e6f7b712733d25b43cbb9e19a595c8701c3ad99cbeb5901555f78b095e24852f862fffb43e96f1d8552e62def885ca82ae1bb05da3668fd87d7 +"@solana/web3.js@npm:^1.98.1": + version: 1.98.4 + resolution: "@solana/web3.js@npm:1.98.4" + dependencies: + "@babel/runtime": "npm:^7.25.0" + "@noble/curves": "npm:^1.4.2" + "@noble/hashes": "npm:^1.4.0" + "@solana/buffer-layout": "npm:^4.0.1" + "@solana/codecs-numbers": "npm:^2.1.0" + agentkeepalive: "npm:^4.5.0" + bn.js: "npm:^5.2.1" + borsh: "npm:^0.7.0" + bs58: "npm:^4.0.1" + buffer: "npm:6.0.3" + fast-stable-stringify: "npm:^1.0.0" + jayson: "npm:^4.1.1" + node-fetch: "npm:^2.7.0" + rpc-websockets: "npm:^9.0.2" + superstruct: "npm:^2.0.2" + checksum: 10c0/73bf7b6b5b65c7f264587182bbfd65327775b4f3e4831750de6356f58858e57d49213098eec671650940bb7a9bbaa1f352e0710c4075f126d903d72ddddcbdbc languageName: node linkType: hard @@ -7170,6 +8867,15 @@ __metadata: languageName: node linkType: hard +"@types/connect@npm:^3.4.33": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c + languageName: node + linkType: hard + "@types/cookie@npm:^0.6.0": version: 0.6.0 resolution: "@types/cookie@npm:0.6.0" @@ -7362,6 +9068,22 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^12.12.54": + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: 10c0/3b190bb0410047d489c49bbaab592d2e6630de6a50f00ba3d7d513d59401d279972a8f5a598b5bb8ddc1702f8a2f4ec57a65d93852f9c329639738e7053637d1 + languageName: node + linkType: hard + +"@types/node@npm:^20.14.9": + version: 20.19.33 + resolution: "@types/node@npm:20.19.33" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/a1a6234a2b6fa577fbb1ccc471e5e54a79c6e1a51be10a67b034461b752a50017854810e943494f20b3c3c6d14df84c93757e0a2ec57aa81c830d6faeab72cf2 + languageName: node + linkType: hard + "@types/pbkdf2@npm:^3.0.0": version: 3.1.2 resolution: "@types/pbkdf2@npm:3.1.2" @@ -7392,6 +9114,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.2.22": + version: 18.3.7 + resolution: "@types/react-dom@npm:18.3.7" + peerDependencies: + "@types/react": ^18.0.0 + checksum: 10c0/8bd309e2c3d1604a28a736a24f96cbadf6c05d5288cfef8883b74f4054c961b6b3a5e997fd5686e492be903c8f3380dba5ec017eff3906b1256529cd2d39603e + languageName: node + linkType: hard + "@types/react-dom@npm:^18.3.5": version: 18.3.5 resolution: "@types/react-dom@npm:18.3.5" @@ -7411,6 +9142,16 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^18.2.66": + version: 18.3.28 + resolution: "@types/react@npm:18.3.28" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.2.2" + checksum: 10c0/683e19cd12b5c691215529af2e32b5ffbaccae3bf0ba93bfafa0e460e8dfee18423afed568be2b8eadf4b837c3749dd296a4f64e2d79f68fa66962c05f5af661 + languageName: node + linkType: hard + "@types/react@npm:^18.3.18": version: 18.3.18 resolution: "@types/react@npm:18.3.18" @@ -7460,6 +9201,31 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^8.3.4": + version: 8.3.4 + resolution: "@types/uuid@npm:8.3.4" + checksum: 10c0/b9ac98f82fcf35962317ef7dc44d9ac9e0f6fdb68121d384c88fe12ea318487d5585d3480fa003cf28be86a3bbe213ca688ba786601dce4a97724765eb5b1cf2 + languageName: node + linkType: hard + +"@types/ws@npm:^7.4.4": + version: 7.4.7 + resolution: "@types/ws@npm:7.4.7" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/f1f53febd8623a85cef2652949acd19d83967e350ea15a851593e3033501750a1e04f418552e487db90a3d48611a1cff3ffcf139b94190c10f2fd1e1dc95ff10 + languageName: node + linkType: hard + +"@types/ws@npm:^8.2.2": + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/61aff1129143fcc4312f083bc9e9e168aa3026b7dd6e70796276dcfb2c8211c4292603f9c4864fae702f2ed86e4abd4d38aa421831c2fd7f856c931a481afbab + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:8.26.0": version: 8.26.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.26.0" @@ -7505,6 +9271,29 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^7.2.0": + version: 7.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/type-utils": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.3.1" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:8.26.0": version: 8.26.0 resolution: "@typescript-eslint/parser@npm:8.26.0" @@ -7538,6 +9327,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^7.2.0": + version: 7.18.0 + resolution: "@typescript-eslint/parser@npm:7.18.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/scope-manager@npm:5.62.0" @@ -7548,6 +9355,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/scope-manager@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:8.26.0": version: 8.26.0 resolution: "@typescript-eslint/scope-manager@npm:8.26.0" @@ -7575,6 +9392,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/type-utils@npm:7.18.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:8.26.0": version: 8.26.0 resolution: "@typescript-eslint/type-utils@npm:8.26.0" @@ -7597,6 +9431,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:8.26.0": version: 8.26.0 resolution: "@typescript-eslint/types@npm:8.26.0" @@ -7622,6 +9463,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:8.26.0": version: 8.26.0 resolution: "@typescript-eslint/typescript-estree@npm:8.26.0" @@ -7658,6 +9518,20 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/utils@npm:7.18.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + peerDependencies: + eslint: ^8.56.0 + checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:8.26.0": version: 8.26.0 resolution: "@typescript-eslint/utils@npm:8.26.0" @@ -7683,6 +9557,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:8.26.0": version: 8.26.0 resolution: "@typescript-eslint/visitor-keys@npm:8.26.0" @@ -7700,6 +9584,22 @@ __metadata: languageName: node linkType: hard +"@vitejs/plugin-react@npm:^4.2.1": + version: 4.7.0 + resolution: "@vitejs/plugin-react@npm:4.7.0" + dependencies: + "@babel/core": "npm:^7.28.0" + "@babel/plugin-transform-react-jsx-self": "npm:^7.27.1" + "@babel/plugin-transform-react-jsx-source": "npm:^7.27.1" + "@rolldown/pluginutils": "npm:1.0.0-beta.27" + "@types/babel__core": "npm:^7.20.5" + react-refresh: "npm:^0.17.0" + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + checksum: 10c0/692f23960972879485d647713663ec299c478222c96567d60285acf7c7dc5c178e71abfe9d2eefddef1eeb01514dacbc2ed68aad84628debf9c7116134734253 + languageName: node + linkType: hard + "@vitejs/plugin-react@npm:^4.3.4": version: 4.3.4 resolution: "@vitejs/plugin-react@npm:4.3.4" @@ -7757,6 +9657,44 @@ __metadata: languageName: node linkType: hard +"@wagmi/connectors@npm:>=5.9.9": + version: 7.1.7 + resolution: "@wagmi/connectors@npm:7.1.7" + peerDependencies: + "@base-org/account": ^2.5.1 + "@coinbase/wallet-sdk": ^4.3.6 + "@gemini-wallet/core": ~0.3.1 + "@metamask/sdk": ~0.33.1 + "@safe-global/safe-apps-provider": ~0.18.6 + "@safe-global/safe-apps-sdk": ^9.1.0 + "@wagmi/core": 3.3.3 + "@walletconnect/ethereum-provider": ^2.21.1 + porto: ~0.2.35 + typescript: ">=5.7.3" + viem: 2.x + peerDependenciesMeta: + "@base-org/account": + optional: true + "@coinbase/wallet-sdk": + optional: true + "@gemini-wallet/core": + optional: true + "@metamask/sdk": + optional: true + "@safe-global/safe-apps-provider": + optional: true + "@safe-global/safe-apps-sdk": + optional: true + "@walletconnect/ethereum-provider": + optional: true + porto: + optional: true + typescript: + optional: true + checksum: 10c0/dfe7ceed808ba430ac4a43510e9c2de57faa2af81b49d150f1d6a48b79ea731980ef2827ea790a25778f68d7619e39593dcd4d81a40ff8e609420fa54970ad7f + languageName: node + linkType: hard + "@wagmi/core@npm:2.16.4": version: 2.16.4 resolution: "@wagmi/core@npm:2.16.4" @@ -7777,6 +9715,22 @@ __metadata: languageName: node linkType: hard +"@wallet-standard/base@npm:^1.1.0": + version: 1.1.0 + resolution: "@wallet-standard/base@npm:1.1.0" + checksum: 10c0/4cae344d5a74ba4b7d063b649b191f2267bd11ea9573ebb9e78874163c03b58e3ec531bb296d0a8d7941bc09231761d97afb4c6ca8c0dc399c81d39884b4e408 + languageName: node + linkType: hard + +"@wallet-standard/wallet@npm:1.1.0": + version: 1.1.0 + resolution: "@wallet-standard/wallet@npm:1.1.0" + dependencies: + "@wallet-standard/base": "npm:^1.1.0" + checksum: 10c0/aa53460568f209d4e38030ee5e98d4f6ea6fec159a1e7fb5a3ee81cf8d91c89f0be86b7188dbf0bb9803d10608bf88bd824f73cd6800823279738827304038e5 + languageName: node + linkType: hard + "@walletconnect/core@npm:2.17.0": version: 2.17.0 resolution: "@walletconnect/core@npm:2.17.0" @@ -7851,6 +9805,31 @@ __metadata: languageName: node linkType: hard +"@walletconnect/core@npm:2.23.2": + version: 2.23.2 + resolution: "@walletconnect/core@npm:2.23.2" + dependencies: + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/jsonrpc-ws-connection": "npm:1.0.16" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:3.0.2" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.1.0" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.23.2" + "@walletconnect/utils": "npm:2.23.2" + "@walletconnect/window-getters": "npm:1.0.1" + es-toolkit: "npm:1.39.3" + events: "npm:3.3.0" + uint8arrays: "npm:3.1.1" + checksum: 10c0/ce6e293e0bf17cd70171cd0e35b71f48fd96137d67b8ee29812359c6eb67bad9eb6db5ac3e953afe462514e7f8852f5f86c72cd1b697b11335cb6ae7cb251ad1 + languageName: node + linkType: hard + "@walletconnect/environment@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/environment@npm:1.0.1" @@ -8012,6 +9991,16 @@ __metadata: languageName: node linkType: hard +"@walletconnect/logger@npm:3.0.2": + version: 3.0.2 + resolution: "@walletconnect/logger@npm:3.0.2" + dependencies: + "@walletconnect/safe-json": "npm:^1.0.2" + pino: "npm:10.0.0" + checksum: 10c0/9a8dc232a3c9f7a6d35149c910326cfbef220677790e9e1c476c597be84db9ac19cf9df8ca835f04ad6facd0a2c83f056c90530e9b5a7c77d0e91a786027190c + languageName: node + linkType: hard + "@walletconnect/modal-core@npm:2.7.0": version: 2.7.0 resolution: "@walletconnect/modal-core@npm:2.7.0" @@ -8139,6 +10128,23 @@ __metadata: languageName: node linkType: hard +"@walletconnect/sign-client@npm:2.23.2": + version: 2.23.2 + resolution: "@walletconnect/sign-client@npm:2.23.2" + dependencies: + "@walletconnect/core": "npm:2.23.2" + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:3.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.23.2" + "@walletconnect/utils": "npm:2.23.2" + events: "npm:3.3.0" + checksum: 10c0/dac7b38364a12c8d2ec8491c79abdf3038b4ad5b8c46f512a40d4d7c2dde47ca39919b297dc54ec5d909a5015f3eafb567c4d7125374b3e803611932ea9ff0de + languageName: node + linkType: hard + "@walletconnect/time@npm:1.0.2, @walletconnect/time@npm:^1.0.2": version: 1.0.2 resolution: "@walletconnect/time@npm:1.0.2" @@ -8190,6 +10196,20 @@ __metadata: languageName: node linkType: hard +"@walletconnect/types@npm:2.23.2": + version: 2.23.2 + resolution: "@walletconnect/types@npm:2.23.2" + dependencies: + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:3.0.2" + events: "npm:3.3.0" + checksum: 10c0/bea88b992bc0068826cd60f8121a72505a3a49b7790830b7abedd2cee2a808ba6edcbdd7c93f9dd811e6282296168a677ebdc3bae981b801ca3c17920716cf0c + languageName: node + linkType: hard + "@walletconnect/universal-provider@npm:2.17.0": version: 2.17.0 resolution: "@walletconnect/universal-provider@npm:2.17.0" @@ -8243,7 +10263,27 @@ __metadata: "@walletconnect/utils": "npm:2.19.2" es-toolkit: "npm:1.33.0" events: "npm:3.3.0" - checksum: 10c0/e4d64e5e95ee56a0babe62242c636d1bc691ee9acd2d46c1632117bf88ec0f48387224493387c3d397f2e0c030d2c64385f592ad0e92d8f4a50406058697ddb5 + checksum: 10c0/e4d64e5e95ee56a0babe62242c636d1bc691ee9acd2d46c1632117bf88ec0f48387224493387c3d397f2e0c030d2c64385f592ad0e92d8f4a50406058697ddb5 + languageName: node + linkType: hard + +"@walletconnect/universal-provider@npm:2.23.2": + version: 2.23.2 + resolution: "@walletconnect/universal-provider@npm:2.23.2" + dependencies: + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:3.0.2" + "@walletconnect/sign-client": "npm:2.23.2" + "@walletconnect/types": "npm:2.23.2" + "@walletconnect/utils": "npm:2.23.2" + es-toolkit: "npm:1.39.3" + events: "npm:3.3.0" + checksum: 10c0/9e0dd9a0418a969dbf07ae2475328ba03b46dc5cc3c3b2b5fdfcaa100a3701d15b1a8c098b325f0a3e52197139f99f88f36da0951b794c369a367ee9bc2a5e1f languageName: node linkType: hard @@ -8322,6 +10362,34 @@ __metadata: languageName: node linkType: hard +"@walletconnect/utils@npm:2.23.2": + version: 2.23.2 + resolution: "@walletconnect/utils@npm:2.23.2" + dependencies: + "@msgpack/msgpack": "npm:3.1.2" + "@noble/ciphers": "npm:1.3.0" + "@noble/curves": "npm:1.9.7" + "@noble/hashes": "npm:1.8.0" + "@scure/base": "npm:1.2.6" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:3.0.2" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.1.0" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.23.2" + "@walletconnect/window-getters": "npm:1.0.1" + "@walletconnect/window-metadata": "npm:1.0.1" + blakejs: "npm:1.2.1" + bs58: "npm:6.0.0" + detect-browser: "npm:5.3.0" + ox: "npm:0.9.3" + uint8arrays: "npm:3.1.1" + checksum: 10c0/72d3e450d5e18759f4abc047c8e4c224063178d44f863d6921cfd84f533a52e3b8360ea19c1fd8c83484b6b58f91d74aeb524f881030d66b3c65f3e7d7cd8b33 + languageName: node + linkType: hard + "@walletconnect/window-getters@npm:1.0.1, @walletconnect/window-getters@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/window-getters@npm:1.0.1" @@ -8373,6 +10441,21 @@ __metadata: languageName: node linkType: hard +"abitype@npm:1.0.6": + version: 1.0.6 + resolution: "abitype@npm:1.0.6" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: 10c0/30ca97010bbf34b9aaed401858eeb6bc30419f7ff11eb34adcb243522dd56c9d8a9d3d406aa5d4f60a7c263902f5136043005698e3f073ea882a4922d43a2929 + languageName: node + linkType: hard + "abitype@npm:1.0.8, abitype@npm:^1.0.6": version: 1.0.8 resolution: "abitype@npm:1.0.8" @@ -8388,6 +10471,21 @@ __metadata: languageName: node linkType: hard +"abitype@npm:^1.0.9": + version: 1.2.3 + resolution: "abitype@npm:1.2.3" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: 10c0/c8740de1ae4961723a153224a52cb9a34a57903fb5c2ad61d5082b0b79b53033c9335381aa8c663c7ec213c9955a9853f694d51e95baceedef27356f7745c634 + languageName: node + linkType: hard + "abort-controller@npm:^3.0.0": version: 3.0.0 resolution: "abort-controller@npm:3.0.0" @@ -8454,6 +10552,15 @@ __metadata: languageName: node linkType: hard +"agentkeepalive@npm:^4.5.0": + version: 4.6.0 + resolution: "agentkeepalive@npm:4.6.0" + dependencies: + humanize-ms: "npm:^1.2.1" + checksum: 10c0/235c182432f75046835b05f239708107138a40103deee23b6a08caee5136873709155753b394ec212e49e60e94a378189562cb01347765515cff61b692c69187 + languageName: node + linkType: hard + "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -8833,6 +10940,28 @@ __metadata: languageName: node linkType: hard +"axios-retry@npm:^4.5.0": + version: 4.5.0 + resolution: "axios-retry@npm:4.5.0" + dependencies: + is-retry-allowed: "npm:^2.2.0" + peerDependencies: + axios: 0.x || 1.x + checksum: 10c0/574e7b1bf24aad99b560042d232a932d51bfaa29b5a6d4612d748ed799a6f11a5afb2582792492c55d95842200cbdfbe3454027a8c1b9a2d3e895d13c3d03c10 + languageName: node + linkType: hard + +"axios@npm:^1.12.2": + version: 1.13.5 + resolution: "axios@npm:1.13.5" + dependencies: + follow-redirects: "npm:^1.15.11" + form-data: "npm:^4.0.5" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/abf468c34f2d145f3dc7dbc0f1be67e520630624307bda69a41bbe8d386bd672d87b4405c4ee77f9ff54b235ab02f96a9968fb00e75b13ce64706e352a3068fd + languageName: node + linkType: hard + "axios@npm:^1.6.7, axios@npm:^1.7.4": version: 1.7.9 resolution: "axios@npm:1.7.9" @@ -8901,7 +11030,7 @@ __metadata: languageName: node linkType: hard -"blakejs@npm:^1.1.0": +"blakejs@npm:1.2.1, blakejs@npm:^1.1.0": version: 1.2.1 resolution: "blakejs@npm:1.2.1" checksum: 10c0/c284557ce55b9c70203f59d381f1b85372ef08ee616a90162174d1291a45d3e5e809fdf9edab6e998740012538515152471dc4f1f9dbfa974ba2b9c1f7b9aad7 @@ -8929,6 +11058,17 @@ __metadata: languageName: node linkType: hard +"borsh@npm:^0.7.0": + version: 0.7.0 + resolution: "borsh@npm:0.7.0" + dependencies: + bn.js: "npm:^5.2.0" + bs58: "npm:^4.0.0" + text-encoding-utf-8: "npm:^1.0.2" + checksum: 10c0/513b3e51823d2bf5be77cec27742419d2b0427504825dd7ceb00dedb820f246a4762f04b83d5e3aa39c8e075b3cbaeb7ca3c90bd1cbeecccb4a510575be8c581 + languageName: node + linkType: hard + "bowser@npm:^2.11.0, bowser@npm:^2.9.0": version: 2.11.0 resolution: "bowser@npm:2.11.0" @@ -9038,7 +11178,7 @@ __metadata: languageName: node linkType: hard -"bs58@npm:^4.0.0": +"bs58@npm:^4.0.0, bs58@npm:^4.0.1": version: 4.0.1 resolution: "bs58@npm:4.0.1" dependencies: @@ -9083,7 +11223,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:6.0.3, buffer@npm:^6.0.3": +"buffer@npm:6.0.3, buffer@npm:^6.0.3, buffer@npm:~6.0.3": version: 6.0.3 resolution: "buffer@npm:6.0.3" dependencies: @@ -9093,6 +11233,16 @@ __metadata: languageName: node linkType: hard +"bufferutil@npm:^4.0.1": + version: 4.1.0 + resolution: "bufferutil@npm:4.1.0" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10c0/12d63bbc80a3b6525bc62a28387fca0a5aed09e41b74375c500e60721b6a1ab2960b82e48f1773eddea2b14e490f129214b8b57bd6e1a5078b6235857d658508 + languageName: node + linkType: hard + "bufferutil@npm:^4.0.8": version: 4.0.9 resolution: "bufferutil@npm:4.0.9" @@ -9286,6 +11436,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:5.6.2, chalk@npm:^5.4.1": + version: 5.6.2 + resolution: "chalk@npm:5.6.2" + checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 + languageName: node + linkType: hard + "chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -9304,7 +11461,7 @@ __metadata: languageName: node linkType: hard -"charenc@npm:>= 0.0.1": +"charenc@npm:0.0.2, charenc@npm:>= 0.0.1": version: 0.0.2 resolution: "charenc@npm:0.0.2" checksum: 10c0/a45ec39363a16799d0f9365c8dd0c78e711415113c6f14787a22462ef451f5013efae8a28f1c058f81fc01f2a6a16955f7a5fd0cd56247ce94a45349c89877d8 @@ -9460,7 +11617,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.2.1": +"clsx@npm:1.2.1, clsx@npm:^1.2.1": version: 1.2.1 resolution: "clsx@npm:1.2.1" checksum: 10c0/34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27 @@ -9553,6 +11710,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:14.0.2": + version: 14.0.2 + resolution: "commander@npm:14.0.2" + checksum: 10c0/245abd1349dbad5414cb6517b7b5c584895c02c4f7836ff5395f301192b8566f9796c82d7bd6c92d07eba8775fe4df86602fca5d86d8d10bcc2aded1e21c2aeb + languageName: node + linkType: hard + "commander@npm:^11.0.0": version: 11.1.0 resolution: "commander@npm:11.1.0" @@ -9560,6 +11724,20 @@ __metadata: languageName: node linkType: hard +"commander@npm:^14.0.0": + version: 14.0.3 + resolution: "commander@npm:14.0.3" + checksum: 10c0/755652564bbf56ff2ff083313912b326450d3f8d8c85f4b71416539c9a05c3c67dbd206821ca72635bf6b160e2afdefcb458e86b317827d5cb333b69ce7f1a24 + languageName: node + linkType: hard + +"commander@npm:^2.20.3": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + "commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -9730,7 +11908,7 @@ __metadata: languageName: node linkType: hard -"crypt@npm:>= 0.0.1": +"crypt@npm:0.0.2, crypt@npm:>= 0.0.1": version: 0.0.2 resolution: "crypt@npm:0.0.2" checksum: 10c0/adbf263441dd801665d5425f044647533f39f4612544071b1471962209d235042fb703c27eea2795c7c53e1dfc242405173003f83cf4f4761a633d11f9653f18 @@ -9762,6 +11940,13 @@ __metadata: languageName: node linkType: hard +"csstype@npm:^3.2.2": + version: 3.2.3 + resolution: "csstype@npm:3.2.3" + checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce + languageName: node + linkType: hard + "d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6": version: 3.2.4 resolution: "d3-array@npm:3.2.4" @@ -10022,6 +12207,13 @@ __metadata: languageName: node linkType: hard +"delay@npm:^5.0.0": + version: 5.0.0 + resolution: "delay@npm:5.0.0" + checksum: 10c0/01cdc4cd0cd35fb622518a3df848e67e09763a38e7cdada2232b6fda9ddda72eddcf74f0e24211200fbe718434f2335f2a2633875a6c96037fefa6de42896ad7 + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -10029,6 +12221,30 @@ __metadata: languageName: node linkType: hard +"demo-bridging-app@workspace:apps/demo-bridging-app": + version: 0.0.0-use.local + resolution: "demo-bridging-app@workspace:apps/demo-bridging-app" + dependencies: + "@goodsdks/bridging-sdk": "workspace:*" + "@reown/appkit": "npm:^1.0.0" + "@reown/appkit-adapter-wagmi": "npm:^1.0.0" + "@types/react": "npm:^18.2.66" + "@types/react-dom": "npm:^18.2.22" + "@typescript-eslint/eslint-plugin": "npm:^7.2.0" + "@typescript-eslint/parser": "npm:^7.2.0" + "@vitejs/plugin-react": "npm:^4.2.1" + eslint: "npm:^8.57.0" + eslint-plugin-react-hooks: "npm:^4.6.0" + eslint-plugin-react-refresh: "npm:^0.4.6" + react: "npm:^18.2.0" + react-dom: "npm:^18.2.0" + typescript: "npm:^5.2.2" + viem: "npm:^2.28.0" + vite: "npm:^5.2.0" + wagmi: "npm:^2.14.8" + languageName: unknown + linkType: soft + "demo-identity-app@workspace:apps/demo-identity-app": version: 0.0.0-use.local resolution: "demo-identity-app@workspace:apps/demo-identity-app" @@ -10530,6 +12746,18 @@ __metadata: languageName: node linkType: hard +"es-toolkit@npm:1.39.3": + version: 1.39.3 + resolution: "es-toolkit@npm:1.39.3" + dependenciesMeta: + "@trivago/prettier-plugin-sort-imports@4.3.0": + unplugged: true + prettier-plugin-sort-re-exports@0.0.1: + unplugged: true + checksum: 10c0/1c85e518b1d129d38fdc5796af353f45e8dcb8a20968ff25da1ae1749fc4a36f914570fcd992df33b47c7bca9f3866d53e4e6fa6411c21eb424e99a3e479c96e + languageName: node + linkType: hard + "es-toolkit@npm:^1.39.3": version: 1.43.0 resolution: "es-toolkit@npm:1.43.0" @@ -10542,6 +12770,22 @@ __metadata: languageName: node linkType: hard +"es6-promise@npm:^4.0.3": + version: 4.2.8 + resolution: "es6-promise@npm:4.2.8" + checksum: 10c0/2373d9c5e9a93bdd9f9ed32ff5cb6dd3dd785368d1c21e9bbbfd07d16345b3774ae260f2bd24c8f836a6903f432b4151e7816a7fa8891ccb4e1a55a028ec42c3 + languageName: node + linkType: hard + +"es6-promisify@npm:^5.0.0": + version: 5.0.0 + resolution: "es6-promisify@npm:5.0.0" + dependencies: + es6-promise: "npm:^4.0.3" + checksum: 10c0/23284c6a733cbf7842ec98f41eac742c9f288a78753c4fe46652bae826446ced7615b9e8a5c5f121a08812b1cd478ea58630f3e1c3d70835bd5dcd69c7cd75c9 + languageName: node + linkType: hard + "esbuild-plugin-es5@npm:^2.1.1": version: 2.1.1 resolution: "esbuild-plugin-es5@npm:2.1.1" @@ -10566,6 +12810,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + "esbuild@npm:^0.24.2": version: 0.24.2 resolution: "esbuild@npm:0.24.2" @@ -10807,6 +13131,15 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-hooks@npm:^4.6.0": + version: 4.6.2 + resolution: "eslint-plugin-react-hooks@npm:4.6.2" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 10c0/4844e58c929bc05157fb70ba1e462e34f1f4abcbc8dd5bbe5b04513d33e2699effb8bca668297976ceea8e7ebee4e8fc29b9af9d131bcef52886feaa2308b2cc + languageName: node + linkType: hard + "eslint-plugin-react-hooks@npm:^5.0.0, eslint-plugin-react-hooks@npm:^5.2.0": version: 5.2.0 resolution: "eslint-plugin-react-hooks@npm:5.2.0" @@ -10825,6 +13158,15 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-refresh@npm:^0.4.6": + version: 0.4.26 + resolution: "eslint-plugin-react-refresh@npm:0.4.26" + peerDependencies: + eslint: ">=8.40" + checksum: 10c0/11c2b25b7a7025e621b02970c4cf3815b0b77486027df9f8bb731cc52972156804fd163b0f99404b33e36a3c60cd1a1be8199ba64c66b5276da3173bbb5ab6e7 + languageName: node + linkType: hard + "eslint-plugin-react@npm:^7.37.2, eslint-plugin-react@npm:^7.37.4": version: 7.37.4 resolution: "eslint-plugin-react@npm:7.37.4" @@ -10909,7 +13251,7 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.57.1": +"eslint@npm:^8.57.0, eslint@npm:^8.57.1": version: 8.57.1 resolution: "eslint@npm:8.57.1" dependencies: @@ -11348,6 +13690,13 @@ __metadata: languageName: node linkType: hard +"eyes@npm:^0.1.8": + version: 0.1.8 + resolution: "eyes@npm:0.1.8" + checksum: 10c0/4c79a9cbf45746d8c9f48cc957e35ad8ea336add1c7b8d5a0e002efc791a7a62b27b2188184ef1a1eea7bc3cd06b161791421e0e6c5fe78309705a162c53eea8 + languageName: node + linkType: hard + "fast-base64-decode@npm:^1.0.0": version: 1.0.0 resolution: "fast-base64-decode@npm:1.0.0" @@ -11423,6 +13772,13 @@ __metadata: languageName: node linkType: hard +"fast-stable-stringify@npm:^1.0.0": + version: 1.0.0 + resolution: "fast-stable-stringify@npm:1.0.0" + checksum: 10c0/1d773440c7a9615950577665074746c2e92edafceefa789616ecb6166229e0ccc6dae206ca9b9f7da0d274ba5779162aab2d07940a0f6e52a41a4e555392eb3b + languageName: node + linkType: hard + "fast-uri@npm:^3.0.1": version: 3.0.5 resolution: "fast-uri@npm:3.0.5" @@ -11643,6 +13999,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.11": + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -11673,6 +14039,19 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.5": + version: 4.0.5 + resolution: "form-data@npm:4.0.5" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b + languageName: node + linkType: hard + "fp-ts@npm:1.19.3": version: 1.19.3 resolution: "fp-ts@npm:1.19.3" @@ -12447,6 +14826,15 @@ __metadata: languageName: node linkType: hard +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: "npm:^2.0.0" + checksum: 10c0/f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a + languageName: node + linkType: hard + "hyphenate-style-name@npm:^1.0.3": version: 1.1.0 resolution: "hyphenate-style-name@npm:1.1.0" @@ -12472,7 +14860,7 @@ __metadata: languageName: node linkType: hard -"idb-keyval@npm:^6.2.1": +"idb-keyval@npm:6.2.1, idb-keyval@npm:^6.2.1": version: 6.2.1 resolution: "idb-keyval@npm:6.2.1" checksum: 10c0/9f0c83703a365e00bd0b4ed6380ce509a06dedfc6ec39b2ba5740085069fd2f2ff5c14ba19356488e3612a2f9c49985971982d836460a982a5d0b4019eeba48a @@ -12707,6 +15095,13 @@ __metadata: languageName: node linkType: hard +"is-buffer@npm:~1.1.6": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 10c0/ae18aa0b6e113d6c490ad1db5e8df9bdb57758382b313f5a22c9c61084875c6396d50bbf49315f5b1926d142d74dfb8d31b40d993a383e0a158b15fea7a82234 + languageName: node + linkType: hard + "is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -12861,6 +15256,13 @@ __metadata: languageName: node linkType: hard +"is-retry-allowed@npm:^2.2.0": + version: 2.2.0 + resolution: "is-retry-allowed@npm:2.2.0" + checksum: 10c0/013be4f8a0a06a49ed1fe495242952e898325d496202a018f6f9fb3fb9ac8fe3b957a9bd62463d68299ae35dbbda680473c85a9bcefca731b49d500d3ccc08ff + languageName: node + linkType: hard + "is-set@npm:^2.0.3": version: 2.0.3 resolution: "is-set@npm:2.0.3" @@ -12992,6 +15394,15 @@ __metadata: languageName: node linkType: hard +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: 10c0/7cb90dc2f0eb409825558982fb15d7c1d757a88595efbab879592f9d2b63820d6bbfb5571ab8abe36c715946e165a413a99f6aafd9f40ab1f514d73487bc9996 + languageName: node + linkType: hard + "isows@npm:1.0.6": version: 1.0.6 resolution: "isows@npm:1.0.6" @@ -13035,6 +15446,28 @@ __metadata: languageName: node linkType: hard +"jayson@npm:^4.1.1": + version: 4.3.0 + resolution: "jayson@npm:4.3.0" + dependencies: + "@types/connect": "npm:^3.4.33" + "@types/node": "npm:^12.12.54" + "@types/ws": "npm:^7.4.4" + commander: "npm:^2.20.3" + delay: "npm:^5.0.0" + es6-promisify: "npm:^5.0.0" + eyes: "npm:^0.1.8" + isomorphic-ws: "npm:^4.0.1" + json-stringify-safe: "npm:^5.0.1" + stream-json: "npm:^1.9.1" + uuid: "npm:^8.3.2" + ws: "npm:^7.5.10" + bin: + jayson: bin/jayson.js + checksum: 10c0/d3d1ee1bd9d8b57eb6c13da83965e6052b030b24ee9ee6b8763ea33e986d7f161428bda8a3f5e4b30e0194867fe48ef0652db521363ccc6227b89d7998f0dbda + languageName: node + linkType: hard + "jiti@npm:^1.21.6": version: 1.21.7 resolution: "jiti@npm:1.21.7" @@ -13044,6 +15477,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^6.0.8": + version: 6.1.3 + resolution: "jose@npm:6.1.3" + checksum: 10c0/b9577b4a7a5e84131011c23823db9f5951eae3ba796771a6a2401ae5dd50daf71104febc8ded9c38146aa5ebe94a92ac09c725e699e613ef26949b9f5a8bc30f + languageName: node + linkType: hard + "joycon@npm:^3.1.1": version: 3.1.1 resolution: "joycon@npm:3.1.1" @@ -13381,6 +15821,28 @@ __metadata: languageName: node linkType: hard +"lit@npm:3.3.0": + version: 3.3.0 + resolution: "lit@npm:3.3.0" + dependencies: + "@lit/reactive-element": "npm:^2.1.0" + lit-element: "npm:^4.2.0" + lit-html: "npm:^3.3.0" + checksum: 10c0/27e6d109c04c8995f47c82a546407c5ed8d399705f9511d1f3ee562eb1ab4bc00fae5ec897da55fb50f202b2a659466e23cccd809d039e7d4f935fcecb2bc6a7 + languageName: node + linkType: hard + +"lit@npm:^3": + version: 3.3.2 + resolution: "lit@npm:3.3.2" + dependencies: + "@lit/reactive-element": "npm:^2.1.0" + lit-element: "npm:^4.2.0" + lit-html: "npm:^3.3.0" + checksum: 10c0/50563fd9c7bf546f8fdc6a936321b5be581ce440a359b06048ae5d44c1ecf6c38c2ded708e97d36a1ce70da1a7ad569890e40e0fb5ed040ec42d5ed2365f468d + languageName: node + linkType: hard + "lit@npm:^3.1.0": version: 3.3.1 resolution: "lit@npm:3.3.1" @@ -13617,6 +16079,17 @@ __metadata: languageName: node linkType: hard +"md5@npm:^2.3.0": + version: 2.3.0 + resolution: "md5@npm:2.3.0" + dependencies: + charenc: "npm:0.0.2" + crypt: "npm:0.0.2" + is-buffer: "npm:~1.1.6" + checksum: 10c0/14a21d597d92e5b738255fbe7fe379905b8cb97e0a49d44a20b58526a646ec5518c337b817ce0094ca94d3e81a3313879c4c7b510d250c282d53afbbdede9110 + languageName: node + linkType: hard + "memoize-one@npm:^6.0.0": version: 6.0.0 resolution: "memoize-one@npm:6.0.0" @@ -13932,7 +16405,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.1.3": +"ms@npm:^2.0.0, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -13957,6 +16430,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + "nanoid@npm:^3.3.8": version: 3.3.8 resolution: "nanoid@npm:3.3.8" @@ -14293,6 +16775,13 @@ __metadata: languageName: node linkType: hard +"on-exit-leak-free@npm:^2.1.0": + version: 2.1.2 + resolution: "on-exit-leak-free@npm:2.1.2" + checksum: 10c0/faea2e1c9d696ecee919026c32be8d6a633a7ac1240b3b87e944a380e8a11dc9c95c4a1f8fb0568de7ab8db3823e790f12bda45296b1d111e341aad3922a0570 + languageName: node + linkType: hard + "once@npm:1.x, once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -14391,6 +16880,27 @@ __metadata: languageName: node linkType: hard +"ox@npm:0.9.3": + version: 0.9.3 + resolution: "ox@npm:0.9.3" + dependencies: + "@adraffy/ens-normalize": "npm:^1.11.0" + "@noble/ciphers": "npm:^1.3.0" + "@noble/curves": "npm:1.9.1" + "@noble/hashes": "npm:^1.8.0" + "@scure/bip32": "npm:^1.7.0" + "@scure/bip39": "npm:^1.6.0" + abitype: "npm:^1.0.9" + eventemitter3: "npm:5.0.1" + peerDependencies: + typescript: ">=5.4.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/e04f8f5d6de4fbc65d18e8388bbb4c6a09e7b69e6d51c45985bd2ed01414fda154a78dfb8fcd46e53842794a10ef37fff2b4d8b786bd7a7476a3772e8cc8e64a + languageName: node + linkType: hard + "oxc-transform@npm:^0.47.1": version: 0.47.1 resolution: "oxc-transform@npm:0.47.1" @@ -14620,6 +17130,15 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:^2.0.0": + version: 2.0.0 + resolution: "pino-abstract-transport@npm:2.0.0" + dependencies: + split2: "npm:^4.0.0" + checksum: 10c0/02c05b8f2ffce0d7c774c8e588f61e8b77de8ccb5f8125afd4a7325c9ea0e6af7fb78168999657712ae843e4462bb70ac550dfd6284f930ee57f17f486f25a9f + languageName: node + linkType: hard + "pino-abstract-transport@npm:v0.5.0": version: 0.5.0 resolution: "pino-abstract-transport@npm:0.5.0" @@ -14637,6 +17156,34 @@ __metadata: languageName: node linkType: hard +"pino-std-serializers@npm:^7.0.0": + version: 7.1.0 + resolution: "pino-std-serializers@npm:7.1.0" + checksum: 10c0/d158615aa93ebdeac2d3912ad4227a23ef78cf14229e886214771f581e96eff312257f2d6368c75b2fbf53e5024eda475d81305014f4ed1a6d5eeab9107f6ef0 + languageName: node + linkType: hard + +"pino@npm:10.0.0": + version: 10.0.0 + resolution: "pino@npm:10.0.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + on-exit-leak-free: "npm:^2.1.0" + pino-abstract-transport: "npm:^2.0.0" + pino-std-serializers: "npm:^7.0.0" + process-warning: "npm:^5.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.2.0" + safe-stable-stringify: "npm:^2.3.1" + slow-redact: "npm:^0.3.0" + sonic-boom: "npm:^4.0.1" + thread-stream: "npm:^3.0.0" + bin: + pino: bin.js + checksum: 10c0/f95fcc51523310e9ece1822f8ef4d8e6c2b35f67eca9805fe18fdef21dfac81fa128f1ebaa3c9a11571120854391b10b3b339f2e5836f805edaf6936781c6e6f + languageName: node + linkType: hard + "pino@npm:7.11.0": version: 7.11.0 resolution: "pino@npm:7.11.0" @@ -14800,6 +17347,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.43": + version: 8.5.6 + resolution: "postcss@npm:8.5.6" + dependencies: + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/5127cc7c91ed7a133a1b7318012d8bfa112da9ef092dddf369ae699a1f10ebbd89b1b9f25f3228795b84585c72aabd5ced5fc11f2ba467eedf7b081a66fad024 + languageName: node + linkType: hard + "postcss@npm:^8.4.47": version: 8.5.1 resolution: "postcss@npm:8.5.1" @@ -14822,6 +17380,13 @@ __metadata: languageName: node linkType: hard +"preact@npm:10.24.2": + version: 10.24.2 + resolution: "preact@npm:10.24.2" + checksum: 10c0/d1d22c5e1abc10eb8f83501857ef22c54a3fda2d20449d06f5b3c7d5ae812bd702c16c05b672138b8906504f9c893e072e9cebcbcada8cac320edf36265788fb + languageName: node + linkType: hard + "preact@npm:^10.16.0, preact@npm:^10.24.2": version: 10.25.4 resolution: "preact@npm:10.25.4" @@ -14889,6 +17454,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^5.0.0": + version: 5.0.0 + resolution: "process-warning@npm:5.0.0" + checksum: 10c0/941f48863d368ec161e0b5890ba0c6af94170078f3d6b5e915c19b36fb59edb0dc2f8e834d25e0d375a8bf368a49d490f080508842168832b93489d17843ec29 + languageName: node + linkType: hard + "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -14961,6 +17533,13 @@ __metadata: languageName: node linkType: hard +"proxy-compare@npm:^3.0.1": + version: 3.0.1 + resolution: "proxy-compare@npm:3.0.1" + checksum: 10c0/1e3631ef32603d4de263860ce02d84b48384dce9b62238b2148b3c58a4e4ec5b06644615dcc196a339f73b9695443317099d55a9173e02ce8492088c9330c00b + languageName: node + linkType: hard + "proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -15062,7 +17641,7 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.3.1": +"react-dom@npm:^18.2.0, react-dom@npm:^18.3.1": version: 18.3.1 resolution: "react-dom@npm:18.3.1" dependencies: @@ -15144,6 +17723,13 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.17.0": + version: 0.17.0 + resolution: "react-refresh@npm:0.17.0" + checksum: 10c0/002cba940384c9930008c0bce26cac97a9d5682bc623112c2268ba0c155127d9c178a9a5cc2212d560088d60dfd503edd808669a25f9b377f316a32361d0b23c + languageName: node + linkType: hard + "react-remove-scroll-bar@npm:^2.3.7": version: 2.3.8 resolution: "react-remove-scroll-bar@npm:2.3.8" @@ -15234,7 +17820,7 @@ __metadata: languageName: node linkType: hard -"react@npm:^18, react@npm:^18.3.1": +"react@npm:^18, react@npm:^18.2.0, react@npm:^18.3.1": version: 18.3.1 resolution: "react@npm:18.3.1" dependencies: @@ -15321,6 +17907,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.2.0": + version: 0.2.0 + resolution: "real-require@npm:0.2.0" + checksum: 10c0/23eea5623642f0477412ef8b91acd3969015a1501ed34992ada0e3af521d3c865bb2fe4cdbfec5fe4b505f6d1ef6a03e5c3652520837a8c3b53decff7e74b6a0 + languageName: node + linkType: hard + "recharts@npm:^3.6.0": version: 3.6.0 resolution: "recharts@npm:3.6.0" @@ -15619,6 +18212,96 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.20.0": + version: 4.57.1 + resolution: "rollup@npm:4.57.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.57.1" + "@rollup/rollup-android-arm64": "npm:4.57.1" + "@rollup/rollup-darwin-arm64": "npm:4.57.1" + "@rollup/rollup-darwin-x64": "npm:4.57.1" + "@rollup/rollup-freebsd-arm64": "npm:4.57.1" + "@rollup/rollup-freebsd-x64": "npm:4.57.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.57.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.57.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.57.1" + "@rollup/rollup-linux-loong64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-loong64-musl": "npm:4.57.1" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-ppc64-musl": "npm:4.57.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-riscv64-musl": "npm:4.57.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.57.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-x64-musl": "npm:4.57.1" + "@rollup/rollup-openbsd-x64": "npm:4.57.1" + "@rollup/rollup-openharmony-arm64": "npm:4.57.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.57.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.57.1" + "@rollup/rollup-win32-x64-gnu": "npm:4.57.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.57.1" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/a90aaf1166fc495920e44e52dced0b12283aaceb0924abd6f863102128dd428bbcbf85970f792c06bc63d2a2168e7f073b73e05f6f8d76fdae17b7ac6cacba06 + languageName: node + linkType: hard + "rollup@npm:^4.34.8": version: 4.34.9 resolution: "rollup@npm:4.34.9" @@ -15766,6 +18449,28 @@ __metadata: languageName: node linkType: hard +"rpc-websockets@npm:^9.0.2": + version: 9.3.3 + resolution: "rpc-websockets@npm:9.3.3" + dependencies: + "@swc/helpers": "npm:^0.5.11" + "@types/uuid": "npm:^8.3.4" + "@types/ws": "npm:^8.2.2" + buffer: "npm:^6.0.3" + bufferutil: "npm:^4.0.1" + eventemitter3: "npm:^5.0.1" + utf-8-validate: "npm:^5.0.2" + uuid: "npm:^8.3.2" + ws: "npm:^8.5.0" + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/7cd17dcf0e72608567e893dc41f196f329b427ece45507089fb743df4bc50136e03c8c379d3cf9e0cb7b6d8a89d443f26a4caee94105377d3cea905788685873 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -15823,7 +18528,7 @@ __metadata: languageName: node linkType: hard -"safe-stable-stringify@npm:^2.1.0": +"safe-stable-stringify@npm:^2.1.0, safe-stable-stringify@npm:^2.3.1": version: 2.5.0 resolution: "safe-stable-stringify@npm:2.5.0" checksum: 10c0/baea14971858cadd65df23894a40588ed791769db21bafb7fd7608397dbdce9c5aac60748abae9995e0fc37e15f2061980501e012cd48859740796bea2987f49 @@ -15906,6 +18611,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:7.7.2": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + "semver@npm:^5.5.0": version: 5.7.2 resolution: "semver@npm:5.7.2" @@ -16180,6 +18894,13 @@ __metadata: languageName: node linkType: hard +"slow-redact@npm:^0.3.0": + version: 0.3.2 + resolution: "slow-redact@npm:0.3.2" + checksum: 10c0/d6611e518461d918eda9a77903100e097870035c8ef8ce95eec7d7a2eafc6c0cdfc37476a1fecf9d70e0b6b36eb9d862f4ac58e931c305b3fc010939226fa803 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -16294,6 +19015,15 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^4.0.1": + version: 4.2.1 + resolution: "sonic-boom@npm:4.2.1" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 10c0/f374e9c3dfe194d706d8ef8aed4e28bc10638f9952fd19bcbddf2cef05d53334ad9e9dca3e01e24e88dd88fb278c6b8c5b2ae5002494b289c4914aaea3d9eae9 + languageName: node + linkType: hard + "source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" @@ -16398,6 +19128,22 @@ __metadata: languageName: node linkType: hard +"stream-chain@npm:^2.2.5": + version: 2.2.5 + resolution: "stream-chain@npm:2.2.5" + checksum: 10c0/c512f50190d7c92d688fa64e7af540c51b661f9c2b775fc72bca38ea9bca515c64c22c2197b1be463741daacbaaa2dde8a8ea24ebda46f08391224f15249121a + languageName: node + linkType: hard + +"stream-json@npm:^1.9.1": + version: 1.9.1 + resolution: "stream-json@npm:1.9.1" + dependencies: + stream-chain: "npm:^2.2.5" + checksum: 10c0/0521e5cb3fb6b0e2561d715975e891bd81fa77d0239c8d0b1756846392bc3c7cdd7f1ddb0fe7ed77e6fdef58daab9e665d3b39f7d677bd0859e65a2bff59b92c + languageName: node + linkType: hard + "stream-shift@npm:^1.0.2": version: 1.0.3 resolution: "stream-shift@npm:1.0.3" @@ -16618,6 +19364,13 @@ __metadata: languageName: node linkType: hard +"superstruct@npm:^2.0.2": + version: 2.0.2 + resolution: "superstruct@npm:2.0.2" + checksum: 10c0/c6853db5240b4920f47b3c864dd1e23ede6819ea399ad29a65387d746374f6958c5f1c5b7e5bb152d9db117a74973e5005056d9bb83c24e26f18ec6bfae4a718 + languageName: node + linkType: hard + "supports-color@npm:^3.1.0": version: 3.2.3 resolution: "supports-color@npm:3.2.3" @@ -16819,6 +19572,13 @@ __metadata: languageName: node linkType: hard +"text-encoding-utf-8@npm:^1.0.2": + version: 1.0.2 + resolution: "text-encoding-utf-8@npm:1.0.2" + checksum: 10c0/87a64b394c850e8387c2ca7fc6929a26ce97fb598f1c55cd0fdaec4b8e2c3ed6770f65b2f3309c9175ef64ac5e403c8e48b53ceeb86d2897940c5e19cc00bb99 + languageName: node + linkType: hard + "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -16853,6 +19613,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^3.0.0": + version: 3.1.0 + resolution: "thread-stream@npm:3.1.0" + dependencies: + real-require: "npm:^0.2.0" + checksum: 10c0/c36118379940b77a6ef3e6f4d5dd31e97b8210c3f7b9a54eb8fe6358ab173f6d0acfaf69b9c3db024b948c0c5fd2a7df93e2e49151af02076b35ada3205ec9a6 + languageName: node + linkType: hard + "through2@npm:^4.0.0": version: 4.0.2 resolution: "through2@npm:4.0.2" @@ -16956,6 +19725,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.3.0": + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a + languageName: node + linkType: hard + "ts-api-utils@npm:^2.0.1": version: 2.0.1 resolution: "ts-api-utils@npm:2.0.1" @@ -17357,6 +20135,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.2.2": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + "typescript@npm:^5.3.3, typescript@npm:^5.7.2, typescript@npm:^5.7.3, typescript@npm:^5.8.2": version: 5.8.2 resolution: "typescript@npm:5.8.2" @@ -17397,6 +20185,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A^5.3.3#optional!builtin, typescript@patch:typescript@npm%3A^5.7.2#optional!builtin, typescript@patch:typescript@npm%3A^5.7.3#optional!builtin, typescript@patch:typescript@npm%3A^5.8.2#optional!builtin": version: 5.8.2 resolution: "typescript@patch:typescript@npm%3A5.8.2#optional!builtin::version=5.8.2&hash=5786d5" @@ -17475,7 +20273,7 @@ __metadata: languageName: node linkType: hard -"uint8arrays@npm:^3.0.0": +"uint8arrays@npm:3.1.1, uint8arrays@npm:^3.0.0": version: 3.1.1 resolution: "uint8arrays@npm:3.1.1" dependencies: @@ -17503,6 +20301,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:^7.19.2": + version: 7.22.0 + resolution: "undici-types@npm:7.22.0" + checksum: 10c0/5e6f2513c41d07404c719eb7c1c499b8d4cde042f1269b3bc2be335f059e6ef53eb04f316696c728d5e8064c4d522b98f63d7ae8938adf6317351e07ae9c943e + languageName: node + linkType: hard + "undici-types@npm:~6.19.2": version: 6.19.8 resolution: "undici-types@npm:6.19.8" @@ -17517,6 +20322,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + "undici@npm:^5.14.0": version: 5.28.4 resolution: "undici@npm:5.28.4" @@ -17844,6 +20656,23 @@ __metadata: languageName: node linkType: hard +"valtio@npm:2.1.7": + version: 2.1.7 + resolution: "valtio@npm:2.1.7" + dependencies: + proxy-compare: "npm:^3.0.1" + peerDependencies: + "@types/react": ">=18.0.0" + react: ">=18.0.0" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: 10c0/727976e35c7b8853b37cfc5ab14dd5be46ddf572482aa2d888c7e41e9b2d54bb5962c8dd7e26bd9ae69687c818464daf0a814098c3bc64b47e1363f0f7109423 + languageName: node + linkType: hard + "victory-vendor@npm:^37.0.2": version: 37.3.6 resolution: "victory-vendor@npm:37.3.6" @@ -17942,6 +20771,49 @@ __metadata: languageName: node linkType: hard +"vite@npm:^5.2.0": + version: 5.4.21 + resolution: "vite@npm:5.4.21" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/468336a1409f728b464160cbf02672e72271fb688d0e605e776b74a89d27e1029509eef3a3a6c755928d8011e474dbf234824d054d07960be5f23cd176bc72de + languageName: node + linkType: hard + "w-json@npm:1.3.10": version: 1.3.10 resolution: "w-json@npm:1.3.10" @@ -18250,7 +21122,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.4.6, ws@npm:^7.5.1": +"ws@npm:^7.4.6, ws@npm:^7.5.1, ws@npm:^7.5.10": version: 7.5.10 resolution: "ws@npm:7.5.10" peerDependencies: @@ -18265,6 +21137,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.19.0, ws@npm:^8.5.0": + version: 8.19.0 + resolution: "ws@npm:8.19.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/4741d9b9bc3f9c791880882414f96e36b8b254e34d4b503279d6400d9a4b87a033834856dbdd94ee4b637944df17ea8afc4bce0ff4a1560d2166be8855da5b04 + languageName: node + linkType: hard + "xmlhttprequest-ssl@npm:~2.1.1": version: 2.1.2 resolution: "xmlhttprequest-ssl@npm:2.1.2" @@ -18436,6 +21323,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^3.24.4": + version: 3.25.76 + resolution: "zod@npm:3.25.76" + checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c + languageName: node + linkType: hard + "zustand@npm:5.0.0": version: 5.0.0 resolution: "zustand@npm:5.0.0" @@ -18456,3 +21350,24 @@ __metadata: checksum: 10c0/7546df78aa512f1d2271e238c44699c0ac4bc57f12ae46fcfe8ba1e8a97686fc690596e654101acfabcd706099aa5d3519fc3f22d32b3082baa60699bb333e9a languageName: node linkType: hard + +"zustand@npm:5.0.3": + version: 5.0.3 + resolution: "zustand@npm:5.0.3" + peerDependencies: + "@types/react": ">=18.0.0" + immer: ">=9.0.6" + react: ">=18.0.0" + use-sync-external-store: ">=1.2.0" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + checksum: 10c0/dad96c6c123fda088c583d5df6692e9245cd207583078dc15f93d255a67b0f346bad4535545c98852ecde93d254812a0c799579dfde2ab595016b99fbe20e4d5 + languageName: node + linkType: hard