agentwallet-sdk 5.0.0 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +221 -0
- package/dist/abi.d.ts +397 -0
- package/dist/abi.d.ts.map +1 -0
- package/dist/abi.js +255 -0
- package/dist/abi.js.map +1 -0
- package/dist/ap2/index.d.ts +185 -0
- package/dist/ap2/index.d.ts.map +1 -0
- package/dist/ap2/index.js +255 -0
- package/dist/ap2/index.js.map +1 -0
- package/dist/bridge/abis.d.ts +64 -0
- package/dist/bridge/abis.d.ts.map +1 -0
- package/dist/bridge/abis.js +129 -0
- package/dist/bridge/abis.js.map +1 -0
- package/dist/bridge/client.d.ts +35 -0
- package/dist/bridge/client.d.ts.map +1 -0
- package/dist/bridge/client.js +245 -0
- package/dist/bridge/client.js.map +1 -0
- package/dist/bridge/index.d.ts +4 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +3 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/types.d.ts +68 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +93 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/bridge/unified.d.ts +101 -0
- package/dist/bridge/unified.d.ts.map +1 -0
- package/dist/bridge/unified.js +284 -0
- package/dist/bridge/unified.js.map +1 -0
- package/dist/chains.d.ts +62 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +108 -0
- package/dist/chains.js.map +1 -0
- package/dist/escrow/MutualStakeEscrow.d.ts +75 -0
- package/dist/escrow/MutualStakeEscrow.d.ts.map +1 -0
- package/dist/escrow/MutualStakeEscrow.js +339 -0
- package/dist/escrow/MutualStakeEscrow.js.map +1 -0
- package/dist/escrow/types.d.ts +59 -0
- package/dist/escrow/types.d.ts.map +1 -0
- package/dist/escrow/types.js +11 -0
- package/dist/escrow/types.js.map +1 -0
- package/dist/escrow/verifiers.d.ts +26 -0
- package/dist/escrow/verifiers.d.ts.map +1 -0
- package/dist/escrow/verifiers.js +53 -0
- package/dist/escrow/verifiers.js.map +1 -0
- package/dist/fiat/index.d.ts +10 -0
- package/dist/fiat/index.d.ts.map +1 -0
- package/dist/fiat/index.js +9 -0
- package/dist/fiat/index.js.map +1 -0
- package/dist/fiat/onramp.d.ts +101 -0
- package/dist/fiat/onramp.d.ts.map +1 -0
- package/dist/fiat/onramp.js +155 -0
- package/dist/fiat/onramp.js.map +1 -0
- package/dist/fiat/providers/index.d.ts +16 -0
- package/dist/fiat/providers/index.d.ts.map +1 -0
- package/dist/fiat/providers/index.js +30 -0
- package/dist/fiat/providers/index.js.map +1 -0
- package/dist/fiat/providers/moonpay.d.ts +22 -0
- package/dist/fiat/providers/moonpay.d.ts.map +1 -0
- package/dist/fiat/providers/moonpay.js +107 -0
- package/dist/fiat/providers/moonpay.js.map +1 -0
- package/dist/fiat/providers/stripe.d.ts +26 -0
- package/dist/fiat/providers/stripe.d.ts.map +1 -0
- package/dist/fiat/providers/stripe.js +135 -0
- package/dist/fiat/providers/stripe.js.map +1 -0
- package/dist/fiat/providers/transak.d.ts +26 -0
- package/dist/fiat/providers/transak.d.ts.map +1 -0
- package/dist/fiat/providers/transak.js +119 -0
- package/dist/fiat/providers/transak.js.map +1 -0
- package/dist/fiat/types.d.ts +106 -0
- package/dist/fiat/types.d.ts.map +1 -0
- package/dist/fiat/types.js +13 -0
- package/dist/fiat/types.js.map +1 -0
- package/dist/flash/executor.d.ts +119 -0
- package/dist/flash/executor.d.ts.map +1 -0
- package/dist/flash/executor.js +195 -0
- package/dist/flash/executor.js.map +1 -0
- package/dist/flash/index.d.ts +28 -0
- package/dist/flash/index.d.ts.map +1 -0
- package/dist/flash/index.js +29 -0
- package/dist/flash/index.js.map +1 -0
- package/dist/flash/scanner.d.ts +133 -0
- package/dist/flash/scanner.d.ts.map +1 -0
- package/dist/flash/scanner.js +212 -0
- package/dist/flash/scanner.js.map +1 -0
- package/dist/flash/types.d.ts +136 -0
- package/dist/flash/types.d.ts.map +1 -0
- package/dist/flash/types.js +23 -0
- package/dist/flash/types.js.map +1 -0
- package/dist/gas/index.d.ts +4 -0
- package/dist/gas/index.d.ts.map +1 -0
- package/dist/gas/index.js +3 -0
- package/dist/gas/index.js.map +1 -0
- package/dist/gas/sponsor.d.ts +70 -0
- package/dist/gas/sponsor.d.ts.map +1 -0
- package/dist/gas/sponsor.js +193 -0
- package/dist/gas/sponsor.js.map +1 -0
- package/dist/gas/types.d.ts +76 -0
- package/dist/gas/types.d.ts.map +1 -0
- package/dist/gas/types.js +21 -0
- package/dist/gas/types.js.map +1 -0
- package/dist/identity/agent-identity.d.ts +276 -0
- package/dist/identity/agent-identity.d.ts.map +1 -0
- package/dist/identity/agent-identity.js +300 -0
- package/dist/identity/agent-identity.js.map +1 -0
- package/dist/identity/erc6551.d.ts +441 -0
- package/dist/identity/erc6551.d.ts.map +1 -0
- package/dist/identity/erc6551.js +517 -0
- package/dist/identity/erc6551.js.map +1 -0
- package/dist/identity/erc8004.d.ts +305 -0
- package/dist/identity/erc8004.d.ts.map +1 -0
- package/dist/identity/erc8004.js +413 -0
- package/dist/identity/erc8004.js.map +1 -0
- package/dist/identity/index.d.ts +7 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +4 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/reputation.d.ts +318 -0
- package/dist/identity/reputation.d.ts.map +1 -0
- package/dist/identity/reputation.js +272 -0
- package/dist/identity/reputation.js.map +1 -0
- package/dist/identity/validation.d.ts +284 -0
- package/dist/identity/validation.d.ts.map +1 -0
- package/dist/identity/validation.js +226 -0
- package/dist/identity/validation.js.map +1 -0
- package/dist/index.d.ts +38803 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +376 -0
- package/dist/index.js.map +1 -0
- package/dist/mev/index.d.ts +4 -0
- package/dist/mev/index.d.ts.map +1 -0
- package/dist/mev/index.js +8 -0
- package/dist/mev/index.js.map +1 -0
- package/dist/mev/protection.d.ts +54 -0
- package/dist/mev/protection.d.ts.map +1 -0
- package/dist/mev/protection.js +185 -0
- package/dist/mev/protection.js.map +1 -0
- package/dist/mev/risk.d.ts +19 -0
- package/dist/mev/risk.d.ts.map +1 -0
- package/dist/mev/risk.js +95 -0
- package/dist/mev/risk.js.map +1 -0
- package/dist/mev/types.d.ts +49 -0
- package/dist/mev/types.d.ts.map +1 -0
- package/dist/mev/types.js +2 -0
- package/dist/mev/types.js.map +1 -0
- package/dist/plugins/elizaos.d.ts +52 -0
- package/dist/plugins/elizaos.d.ts.map +1 -0
- package/dist/plugins/elizaos.js +89 -0
- package/dist/plugins/elizaos.js.map +1 -0
- package/dist/policy/SpendingPolicy.d.ts +106 -0
- package/dist/policy/SpendingPolicy.d.ts.map +1 -0
- package/dist/policy/SpendingPolicy.js +155 -0
- package/dist/policy/SpendingPolicy.js.map +1 -0
- package/dist/policy/SpendingPolicy.test.d.ts +2 -0
- package/dist/policy/SpendingPolicy.test.d.ts.map +1 -0
- package/dist/policy/SpendingPolicy.test.js +143 -0
- package/dist/policy/SpendingPolicy.test.js.map +1 -0
- package/dist/settlement/index.d.ts +4 -0
- package/dist/settlement/index.d.ts.map +1 -0
- package/dist/settlement/index.js +3 -0
- package/dist/settlement/index.js.map +1 -0
- package/dist/settlement/types.d.ts +66 -0
- package/dist/settlement/types.d.ts.map +1 -0
- package/dist/settlement/types.js +37 -0
- package/dist/settlement/types.js.map +1 -0
- package/dist/settlement/verifier.d.ts +75 -0
- package/dist/settlement/verifier.d.ts.map +1 -0
- package/dist/settlement/verifier.js +354 -0
- package/dist/settlement/verifier.js.map +1 -0
- package/dist/solana/bridge.d.ts +144 -0
- package/dist/solana/bridge.d.ts.map +1 -0
- package/dist/solana/bridge.js +352 -0
- package/dist/solana/bridge.js.map +1 -0
- package/dist/solana/index.d.ts +8 -0
- package/dist/solana/index.d.ts.map +1 -0
- package/dist/solana/index.js +6 -0
- package/dist/solana/index.js.map +1 -0
- package/dist/solana/swap.d.ts +85 -0
- package/dist/solana/swap.d.ts.map +1 -0
- package/dist/solana/swap.js +173 -0
- package/dist/solana/swap.js.map +1 -0
- package/dist/solana/types.d.ts +126 -0
- package/dist/solana/types.d.ts.map +1 -0
- package/dist/solana/types.js +10 -0
- package/dist/solana/types.js.map +1 -0
- package/dist/solana/wallet.d.ts +83 -0
- package/dist/solana/wallet.d.ts.map +1 -0
- package/dist/solana/wallet.js +164 -0
- package/dist/solana/wallet.js.map +1 -0
- package/dist/solana/x402.d.ts +69 -0
- package/dist/solana/x402.d.ts.map +1 -0
- package/dist/solana/x402.js +154 -0
- package/dist/solana/x402.js.map +1 -0
- package/dist/solver/adapter.d.ts +47 -0
- package/dist/solver/adapter.d.ts.map +1 -0
- package/dist/solver/adapter.js +146 -0
- package/dist/solver/adapter.js.map +1 -0
- package/dist/solver/analyzer.d.ts +48 -0
- package/dist/solver/analyzer.d.ts.map +1 -0
- package/dist/solver/analyzer.js +171 -0
- package/dist/solver/analyzer.js.map +1 -0
- package/dist/solver/builder.d.ts +31 -0
- package/dist/solver/builder.d.ts.map +1 -0
- package/dist/solver/builder.js +60 -0
- package/dist/solver/builder.js.map +1 -0
- package/dist/solver/index.d.ts +22 -0
- package/dist/solver/index.d.ts.map +1 -0
- package/dist/solver/index.js +25 -0
- package/dist/solver/index.js.map +1 -0
- package/dist/solver/types.d.ts +115 -0
- package/dist/solver/types.d.ts.map +1 -0
- package/dist/solver/types.js +10 -0
- package/dist/solver/types.js.map +1 -0
- package/dist/spend-guard/index.d.ts +125 -0
- package/dist/spend-guard/index.d.ts.map +1 -0
- package/dist/spend-guard/index.js +150 -0
- package/dist/spend-guard/index.js.map +1 -0
- package/dist/swap/SwapModule.d.ts +34 -0
- package/dist/swap/SwapModule.d.ts.map +1 -0
- package/dist/swap/SwapModule.js +144 -0
- package/dist/swap/SwapModule.js.map +1 -0
- package/dist/swap/abi.d.ts +51 -0
- package/dist/swap/abi.d.ts.map +1 -0
- package/dist/swap/abi.js +118 -0
- package/dist/swap/abi.js.map +1 -0
- package/dist/swap/index.d.ts +5 -0
- package/dist/swap/index.d.ts.map +1 -0
- package/dist/swap/index.js +4 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/swap/router/cache.d.ts +13 -0
- package/dist/swap/router/cache.d.ts.map +1 -0
- package/dist/swap/router/cache.js +30 -0
- package/dist/swap/router/cache.js.map +1 -0
- package/dist/swap/router/flashbots.d.ts +10 -0
- package/dist/swap/router/flashbots.d.ts.map +1 -0
- package/dist/swap/router/flashbots.js +43 -0
- package/dist/swap/router/flashbots.js.map +1 -0
- package/dist/swap/router/health.d.ts +17 -0
- package/dist/swap/router/health.d.ts.map +1 -0
- package/dist/swap/router/health.js +38 -0
- package/dist/swap/router/health.js.map +1 -0
- package/dist/swap/router/index.d.ts +10 -0
- package/dist/swap/router/index.d.ts.map +1 -0
- package/dist/swap/router/index.js +10 -0
- package/dist/swap/router/index.js.map +1 -0
- package/dist/swap/router/providers/cowswap.d.ts +11 -0
- package/dist/swap/router/providers/cowswap.d.ts.map +1 -0
- package/dist/swap/router/providers/cowswap.js +79 -0
- package/dist/swap/router/providers/cowswap.js.map +1 -0
- package/dist/swap/router/providers/index.d.ts +20 -0
- package/dist/swap/router/providers/index.d.ts.map +1 -0
- package/dist/swap/router/providers/index.js +32 -0
- package/dist/swap/router/providers/index.js.map +1 -0
- package/dist/swap/router/providers/jupiter.d.ts +12 -0
- package/dist/swap/router/providers/jupiter.d.ts.map +1 -0
- package/dist/swap/router/providers/jupiter.js +73 -0
- package/dist/swap/router/providers/jupiter.js.map +1 -0
- package/dist/swap/router/providers/lifi.d.ts +11 -0
- package/dist/swap/router/providers/lifi.d.ts.map +1 -0
- package/dist/swap/router/providers/lifi.js +123 -0
- package/dist/swap/router/providers/lifi.js.map +1 -0
- package/dist/swap/router/providers/oneinch.d.ts +13 -0
- package/dist/swap/router/providers/oneinch.d.ts.map +1 -0
- package/dist/swap/router/providers/oneinch.js +71 -0
- package/dist/swap/router/providers/oneinch.js.map +1 -0
- package/dist/swap/router/providers/paraswap.d.ts +11 -0
- package/dist/swap/router/providers/paraswap.d.ts.map +1 -0
- package/dist/swap/router/providers/paraswap.js +73 -0
- package/dist/swap/router/providers/paraswap.js.map +1 -0
- package/dist/swap/router/providers/uniswap.d.ts +31 -0
- package/dist/swap/router/providers/uniswap.d.ts.map +1 -0
- package/dist/swap/router/providers/uniswap.js +237 -0
- package/dist/swap/router/providers/uniswap.js.map +1 -0
- package/dist/swap/router/providers/zerox.d.ts +13 -0
- package/dist/swap/router/providers/zerox.d.ts.map +1 -0
- package/dist/swap/router/providers/zerox.js +94 -0
- package/dist/swap/router/providers/zerox.js.map +1 -0
- package/dist/swap/router/router.d.ts +86 -0
- package/dist/swap/router/router.d.ts.map +1 -0
- package/dist/swap/router/router.js +224 -0
- package/dist/swap/router/router.js.map +1 -0
- package/dist/swap/router/rsi/engine.d.ts +60 -0
- package/dist/swap/router/rsi/engine.d.ts.map +1 -0
- package/dist/swap/router/rsi/engine.js +483 -0
- package/dist/swap/router/rsi/engine.js.map +1 -0
- package/dist/swap/router/rsi/index.d.ts +3 -0
- package/dist/swap/router/rsi/index.d.ts.map +1 -0
- package/dist/swap/router/rsi/index.js +3 -0
- package/dist/swap/router/rsi/index.js.map +1 -0
- package/dist/swap/router/rsi/types.d.ts +106 -0
- package/dist/swap/router/rsi/types.d.ts.map +1 -0
- package/dist/swap/router/rsi/types.js +3 -0
- package/dist/swap/router/rsi/types.js.map +1 -0
- package/dist/swap/router/types.d.ts +120 -0
- package/dist/swap/router/types.d.ts.map +1 -0
- package/dist/swap/router/types.js +16 -0
- package/dist/swap/router/types.js.map +1 -0
- package/dist/swap/types.d.ts +51 -0
- package/dist/swap/types.d.ts.map +1 -0
- package/dist/swap/types.js +17 -0
- package/dist/swap/types.js.map +1 -0
- package/dist/tax/engine.d.ts +131 -0
- package/dist/tax/engine.d.ts.map +1 -0
- package/dist/tax/engine.js +307 -0
- package/dist/tax/engine.js.map +1 -0
- package/dist/tax/index.d.ts +9 -0
- package/dist/tax/index.d.ts.map +1 -0
- package/dist/tax/index.js +12 -0
- package/dist/tax/index.js.map +1 -0
- package/dist/tax/lots.d.ts +60 -0
- package/dist/tax/lots.d.ts.map +1 -0
- package/dist/tax/lots.js +129 -0
- package/dist/tax/lots.js.map +1 -0
- package/dist/tax/types.d.ts +113 -0
- package/dist/tax/types.d.ts.map +1 -0
- package/dist/tax/types.js +18 -0
- package/dist/tax/types.js.map +1 -0
- package/dist/types.d.ts +110 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/x402/__tests__/budget.test.d.ts +2 -0
- package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
- package/dist/x402/__tests__/budget.test.js +114 -0
- package/dist/x402/__tests__/budget.test.js.map +1 -0
- package/dist/x402/__tests__/client.test.d.ts +2 -0
- package/dist/x402/__tests__/client.test.d.ts.map +1 -0
- package/dist/x402/__tests__/client.test.js +107 -0
- package/dist/x402/__tests__/client.test.js.map +1 -0
- package/dist/x402/budget.d.ts +52 -0
- package/dist/x402/budget.d.ts.map +1 -0
- package/dist/x402/budget.js +113 -0
- package/dist/x402/budget.js.map +1 -0
- package/dist/x402/chains/abstract/index.d.ts +135 -0
- package/dist/x402/chains/abstract/index.d.ts.map +1 -0
- package/dist/x402/chains/abstract/index.js +190 -0
- package/dist/x402/chains/abstract/index.js.map +1 -0
- package/dist/x402/client.d.ts +60 -0
- package/dist/x402/client.d.ts.map +1 -0
- package/dist/x402/client.js +205 -0
- package/dist/x402/client.js.map +1 -0
- package/dist/x402/index.d.ts +8 -0
- package/dist/x402/index.d.ts.map +1 -0
- package/dist/x402/index.js +8 -0
- package/dist/x402/index.js.map +1 -0
- package/dist/x402/middleware.d.ts +37 -0
- package/dist/x402/middleware.d.ts.map +1 -0
- package/dist/x402/middleware.js +65 -0
- package/dist/x402/middleware.js.map +1 -0
- package/dist/x402/types.d.ts +91 -0
- package/dist/x402/types.d.ts.map +1 -0
- package/dist/x402/types.js +9 -0
- package/dist/x402/types.js.map +1 -0
- package/dist/yield/index.d.ts +26 -0
- package/dist/yield/index.d.ts.map +1 -0
- package/dist/yield/index.js +29 -0
- package/dist/yield/index.js.map +1 -0
- package/dist/yield/rates.d.ts +114 -0
- package/dist/yield/rates.d.ts.map +1 -0
- package/dist/yield/rates.js +351 -0
- package/dist/yield/rates.js.map +1 -0
- package/dist/yield/types.d.ts +134 -0
- package/dist/yield/types.d.ts.map +1 -0
- package/dist/yield/types.js +24 -0
- package/dist/yield/types.js.map +1 -0
- package/dist/yield/vault.d.ts +112 -0
- package/dist/yield/vault.d.ts.map +1 -0
- package/dist/yield/vault.js +264 -0
- package/dist/yield/vault.js.map +1 -0
- package/package.json +46 -7
- package/index.js +0 -2
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AP2Client — ISO 20022 / AP2 European Payment Module for agentwallet-sdk
|
|
3
|
+
*
|
|
4
|
+
* Non-custodial AI agent bridge for AP2 payments:
|
|
5
|
+
* - Parse ISO 20022 pacs.008 XML → bridge quote
|
|
6
|
+
* - Sign x402 payment header locally (private key never leaves agent)
|
|
7
|
+
* - Execute USDC → EUR settlement via CCTP V2 (Base → EUR off-ramp)
|
|
8
|
+
*
|
|
9
|
+
* AP2 context:
|
|
10
|
+
* Nexi + Google Cloud MoU (2026): AP2 processes ~2.9T EUR/year across Europe.
|
|
11
|
+
* ISO 20022 is the wire standard. This module makes AI agents first-class
|
|
12
|
+
* European payment participants — non-custodially.
|
|
13
|
+
*
|
|
14
|
+
* @module ap2
|
|
15
|
+
*/
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Constants
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/** USDC decimals (6) */
|
|
20
|
+
const USDC_DECIMALS = 6n;
|
|
21
|
+
const USDC_MULTIPLIER = 10n ** USDC_DECIMALS;
|
|
22
|
+
/** EUR → USDC rate (fallback; production uses Chainlink oracle) */
|
|
23
|
+
const EUR_TO_USDC_RATE = 1.08;
|
|
24
|
+
/** Default facilitator URL */
|
|
25
|
+
const DEFAULT_FACILITATOR_URL = 'http://localhost:8420';
|
|
26
|
+
/** Estimated CCTP V2 settlement time (~20 min) */
|
|
27
|
+
const ESTIMATED_SETTLEMENT_SECONDS = 1200;
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// ISO 20022 pacs.008 XML Builder
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* Build a valid ISO 20022 pacs.008 (FIToFICstmrCdtTrf) XML string
|
|
33
|
+
* from simple agent-friendly parameters.
|
|
34
|
+
*
|
|
35
|
+
* @param params - Payment parameters
|
|
36
|
+
* @returns ISO 20022 pacs.008 XML string
|
|
37
|
+
*/
|
|
38
|
+
function buildPacs008(params) {
|
|
39
|
+
const now = params.creationDateTime ?? new Date().toISOString().replace(/\.\d+Z$/, '+00:00');
|
|
40
|
+
const currency = params.currency ?? 'EUR';
|
|
41
|
+
const e2eId = params.endToEndId ?? params.messageId;
|
|
42
|
+
const amount = params.amount.toFixed(2);
|
|
43
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
44
|
+
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08">
|
|
45
|
+
<FIToFICstmrCdtTrf>
|
|
46
|
+
<GrpHdr>
|
|
47
|
+
<MsgId>${escapeXml(params.messageId)}</MsgId>
|
|
48
|
+
<CreDtTm>${escapeXml(now)}</CreDtTm>
|
|
49
|
+
<NbOfTxs>1</NbOfTxs>
|
|
50
|
+
<SttlmInf>
|
|
51
|
+
<SttlmMtd>CLRG</SttlmMtd>
|
|
52
|
+
</SttlmInf>
|
|
53
|
+
</GrpHdr>
|
|
54
|
+
<CdtTrfTxInf>
|
|
55
|
+
<PmtId>
|
|
56
|
+
<EndToEndId>${escapeXml(e2eId)}</EndToEndId>
|
|
57
|
+
</PmtId>
|
|
58
|
+
<IntrBkSttlmAmt Ccy="${escapeXml(currency)}">${amount}</IntrBkSttlmAmt>
|
|
59
|
+
<ChrgBr>SHAR</ChrgBr>
|
|
60
|
+
<Dbtr>
|
|
61
|
+
<Nm>${escapeXml(params.debtorName)}</Nm>
|
|
62
|
+
</Dbtr>
|
|
63
|
+
<DbtrAcct>
|
|
64
|
+
<Id>
|
|
65
|
+
<IBAN>${escapeXml(params.debtorIban.replace(/\s/g, '').toUpperCase())}</IBAN>
|
|
66
|
+
</Id>
|
|
67
|
+
</DbtrAcct>
|
|
68
|
+
<DbtrAgt>
|
|
69
|
+
<FinInstnId>
|
|
70
|
+
<BICFI>${escapeXml(params.debtorBic.toUpperCase())}</BICFI>
|
|
71
|
+
</FinInstnId>
|
|
72
|
+
</DbtrAgt>
|
|
73
|
+
<Cdtr>
|
|
74
|
+
<Nm>${escapeXml(params.creditorName)}</Nm>
|
|
75
|
+
</Cdtr>
|
|
76
|
+
<CdtrAcct>
|
|
77
|
+
<Id>
|
|
78
|
+
<IBAN>${escapeXml(params.creditorIban.replace(/\s/g, '').toUpperCase())}</IBAN>
|
|
79
|
+
</Id>
|
|
80
|
+
</CdtrAcct>
|
|
81
|
+
<CdtrAgt>
|
|
82
|
+
<FinInstnId>
|
|
83
|
+
<BICFI>${escapeXml(params.creditorBic.toUpperCase())}</BICFI>
|
|
84
|
+
</FinInstnId>
|
|
85
|
+
</CdtrAgt>${params.purposeCode ? `
|
|
86
|
+
<Purp>
|
|
87
|
+
<Cd>${escapeXml(params.purposeCode)}</Cd>
|
|
88
|
+
</Purp>` : ''}${params.remittanceInfo ? `
|
|
89
|
+
<RmtInf>
|
|
90
|
+
<Ustrd>${escapeXml(params.remittanceInfo)}</Ustrd>
|
|
91
|
+
</RmtInf>` : ''}
|
|
92
|
+
</CdtTrfTxInf>
|
|
93
|
+
</FIToFICstmrCdtTrf>
|
|
94
|
+
</Document>`;
|
|
95
|
+
}
|
|
96
|
+
/** Escape XML special characters. */
|
|
97
|
+
function escapeXml(str) {
|
|
98
|
+
return str
|
|
99
|
+
.replace(/&/g, '&')
|
|
100
|
+
.replace(/</g, '<')
|
|
101
|
+
.replace(/>/g, '>')
|
|
102
|
+
.replace(/"/g, '"')
|
|
103
|
+
.replace(/'/g, ''');
|
|
104
|
+
}
|
|
105
|
+
/** Convert a decimal USDC string to bigint μUSDC. */
|
|
106
|
+
function usdcToBigInt(usdcStr) {
|
|
107
|
+
const [whole, frac = ''] = usdcStr.split('.');
|
|
108
|
+
const fracPadded = frac.padEnd(Number(USDC_DECIMALS), '0').slice(0, Number(USDC_DECIMALS));
|
|
109
|
+
return BigInt(whole) * USDC_MULTIPLIER + BigInt(fracPadded);
|
|
110
|
+
}
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// AP2Client
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
/**
|
|
115
|
+
* AP2Client — Non-custodial ISO 20022 / AP2 payment client for AI agents.
|
|
116
|
+
*
|
|
117
|
+
* Connects to the AP2 facilitator (ap2_handler.py FastAPI service) to
|
|
118
|
+
* get bridge quotes and execute payments via CCTP V2 / x402.
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```typescript
|
|
122
|
+
* const client = new AP2Client({ facilitatorUrl: 'http://localhost:8420' });
|
|
123
|
+
*
|
|
124
|
+
* const xml = AP2Client.buildPacs008({
|
|
125
|
+
* messageId: 'MSG-2026-0001',
|
|
126
|
+
* amount: 1000,
|
|
127
|
+
* debtorName: 'Agent Zero',
|
|
128
|
+
* debtorIban: 'DE89370400440532013000',
|
|
129
|
+
* debtorBic: 'COBADEFFXXX',
|
|
130
|
+
* creditorName: 'Acme GmbH',
|
|
131
|
+
* creditorIban: 'FR7630006000011234567890189',
|
|
132
|
+
* creditorBic: 'BNPAFRPPXXX',
|
|
133
|
+
* });
|
|
134
|
+
*
|
|
135
|
+
* const quote = await client.quote(xml);
|
|
136
|
+
* const receipt = await client.pay(xml);
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export class AP2Client {
|
|
140
|
+
constructor(config = {}) {
|
|
141
|
+
this.facilitatorUrl = (config.facilitatorUrl ?? DEFAULT_FACILITATOR_URL).replace(/\/$/, '');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Parse ISO 20022 pacs.008 XML and get a bridge quote from the facilitator.
|
|
145
|
+
*
|
|
146
|
+
* @param iso20022Xml - Raw pacs.008 XML string
|
|
147
|
+
* @returns AP2Quote with USDC amounts and x402 calldata
|
|
148
|
+
* @throws Error if the facilitator returns an error or the XML is invalid
|
|
149
|
+
*/
|
|
150
|
+
async quote(iso20022Xml) {
|
|
151
|
+
const response = await fetch(`${this.facilitatorUrl}/ap2/payment`, {
|
|
152
|
+
method: 'POST',
|
|
153
|
+
headers: { 'Content-Type': 'application/xml' },
|
|
154
|
+
body: iso20022Xml,
|
|
155
|
+
});
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
const body = await response.text();
|
|
158
|
+
throw new AP2Error(`Quote failed (${response.status}): ${body}`);
|
|
159
|
+
}
|
|
160
|
+
const json = (await response.json());
|
|
161
|
+
const bq = json.bridge_quote;
|
|
162
|
+
const payment = json.payment;
|
|
163
|
+
return {
|
|
164
|
+
messageId: payment.message_id,
|
|
165
|
+
creditorIban: payment.creditor.iban,
|
|
166
|
+
amountEur: parseFloat(payment.amount),
|
|
167
|
+
usdcRequired: usdcToBigInt(bq.usdc_amount),
|
|
168
|
+
bridgeFeeUsdc: usdcToBigInt(bq.bridge_fee_usdc),
|
|
169
|
+
estimatedSettlementSeconds: ESTIMATED_SETTLEMENT_SECONDS,
|
|
170
|
+
x402PaymentHeader: bq.x402_payment_header,
|
|
171
|
+
agentWalletCalldata: bq.agent_wallet_calldata,
|
|
172
|
+
expiresAt: bq.expires_at,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Execute the full AP2 payment: sign x402 header + bridge USDC + settle.
|
|
177
|
+
*
|
|
178
|
+
* Calls the /ap2/execute endpoint on the facilitator, which:
|
|
179
|
+
* 1. Parses the XML
|
|
180
|
+
* 2. Signs x402 header with agent's private key (server-side in this flow)
|
|
181
|
+
* 3. Submits USDC to CCTP V2 bridge
|
|
182
|
+
* 4. Returns receipt
|
|
183
|
+
*
|
|
184
|
+
* @param iso20022Xml - Raw pacs.008 XML string
|
|
185
|
+
* @returns AP2Receipt with txHash and SEPA reference
|
|
186
|
+
* @throws AP2Error on execution failure
|
|
187
|
+
*/
|
|
188
|
+
async pay(iso20022Xml) {
|
|
189
|
+
const response = await fetch(`${this.facilitatorUrl}/ap2/execute`, {
|
|
190
|
+
method: 'POST',
|
|
191
|
+
headers: { 'Content-Type': 'application/xml' },
|
|
192
|
+
body: iso20022Xml,
|
|
193
|
+
});
|
|
194
|
+
if (!response.ok) {
|
|
195
|
+
const body = await response.text();
|
|
196
|
+
throw new AP2Error(`Execution failed (${response.status}): ${body}`);
|
|
197
|
+
}
|
|
198
|
+
const json = (await response.json());
|
|
199
|
+
const r = json.receipt;
|
|
200
|
+
return {
|
|
201
|
+
messageId: r.message_id,
|
|
202
|
+
txHash: r.tx_hash,
|
|
203
|
+
usdcBridged: usdcToBigInt(r.usdc_bridged),
|
|
204
|
+
sepaReference: r.sepa_reference,
|
|
205
|
+
status: r.status,
|
|
206
|
+
dryRun: r.dry_run,
|
|
207
|
+
x402Signature: r.x402_signature,
|
|
208
|
+
agentAddress: r.agent_address,
|
|
209
|
+
nonce: r.nonce,
|
|
210
|
+
executedAt: r.executed_at,
|
|
211
|
+
creditorIban: r.creditor_iban,
|
|
212
|
+
bridgeFeeUsdc: usdcToBigInt(r.bridge_fee_usdc),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Generate a valid ISO 20022 pacs.008 XML string from simple parameters.
|
|
217
|
+
*
|
|
218
|
+
* Handles XML escaping, IBAN normalization, and timestamp formatting.
|
|
219
|
+
* Makes AP2 payments agent-friendly — no ISO 20022 expertise required.
|
|
220
|
+
*
|
|
221
|
+
* @param params - Simple payment parameters
|
|
222
|
+
* @returns Valid pacs.008 XML string
|
|
223
|
+
*/
|
|
224
|
+
static buildPacs008(params) {
|
|
225
|
+
return buildPacs008(params);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Estimate USDC required for a given EUR amount.
|
|
229
|
+
*
|
|
230
|
+
* Uses the default EUR/USDC rate. For accurate quotes, call quote() instead.
|
|
231
|
+
*
|
|
232
|
+
* @param amountEur - Amount in EUR
|
|
233
|
+
* @returns Estimated USDC amount as bigint (μUSDC, 6 decimals)
|
|
234
|
+
*/
|
|
235
|
+
static estimateUsdc(amountEur) {
|
|
236
|
+
const usdc = amountEur * EUR_TO_USDC_RATE;
|
|
237
|
+
return BigInt(Math.round(usdc * Number(USDC_MULTIPLIER)));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// ---------------------------------------------------------------------------
|
|
241
|
+
// Error class
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
/** AP2-specific error with structured context. */
|
|
244
|
+
export class AP2Error extends Error {
|
|
245
|
+
constructor(message, context) {
|
|
246
|
+
super(message);
|
|
247
|
+
this.context = context;
|
|
248
|
+
this.name = 'AP2Error';
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// ---------------------------------------------------------------------------
|
|
252
|
+
// Re-export builder as standalone function
|
|
253
|
+
// ---------------------------------------------------------------------------
|
|
254
|
+
export { buildPacs008 };
|
|
255
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ap2/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CCTP V2 TokenMessengerV2 ABI (source chain)
|
|
3
|
+
* Key function: depositForBurn — burns USDC and emits a MessageSent event
|
|
4
|
+
*/
|
|
5
|
+
export declare const TokenMessengerV2Abi: {
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
stateMutability: string;
|
|
9
|
+
inputs: {
|
|
10
|
+
name: string;
|
|
11
|
+
type: string;
|
|
12
|
+
}[];
|
|
13
|
+
outputs: {
|
|
14
|
+
name: string;
|
|
15
|
+
type: string;
|
|
16
|
+
}[];
|
|
17
|
+
}[];
|
|
18
|
+
/**
|
|
19
|
+
* CCTP V2 MessageTransmitterV2 ABI (destination chain)
|
|
20
|
+
* Key function: receiveMessage — mints USDC using attested message
|
|
21
|
+
*/
|
|
22
|
+
export declare const MessageTransmitterV2Abi: {
|
|
23
|
+
name: string;
|
|
24
|
+
type: string;
|
|
25
|
+
stateMutability: string;
|
|
26
|
+
inputs: {
|
|
27
|
+
name: string;
|
|
28
|
+
type: string;
|
|
29
|
+
}[];
|
|
30
|
+
outputs: {
|
|
31
|
+
name: string;
|
|
32
|
+
type: string;
|
|
33
|
+
}[];
|
|
34
|
+
}[];
|
|
35
|
+
/**
|
|
36
|
+
* Minimal ERC20 ABI — approve + allowance + balanceOf
|
|
37
|
+
*/
|
|
38
|
+
export declare const ERC20BridgeAbi: {
|
|
39
|
+
name: string;
|
|
40
|
+
type: string;
|
|
41
|
+
stateMutability: string;
|
|
42
|
+
inputs: {
|
|
43
|
+
name: string;
|
|
44
|
+
type: string;
|
|
45
|
+
}[];
|
|
46
|
+
outputs: {
|
|
47
|
+
name: string;
|
|
48
|
+
type: string;
|
|
49
|
+
}[];
|
|
50
|
+
}[];
|
|
51
|
+
/**
|
|
52
|
+
* MessageTransmitter MessageSent event ABI — emitted during depositForBurn
|
|
53
|
+
* Used to extract the CCTP message bytes and hash for attestation polling.
|
|
54
|
+
*/
|
|
55
|
+
export declare const MessageSentEventAbi: {
|
|
56
|
+
name: string;
|
|
57
|
+
type: string;
|
|
58
|
+
inputs: {
|
|
59
|
+
name: string;
|
|
60
|
+
type: string;
|
|
61
|
+
indexed: boolean;
|
|
62
|
+
}[];
|
|
63
|
+
}[];
|
|
64
|
+
//# sourceMappingURL=abis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../../src/bridge/abis.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;GA8C/B,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;GAyBnC,CAAC;AACF;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;GA4B1B,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;GAQ/B,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// [MAX-ADDED] CCTP V2 Contract ABIs — Circle Cross-Chain Transfer Protocol V2
|
|
2
|
+
// Sources: https://developers.circle.com/stablecoins/cctp-protocol-contract
|
|
3
|
+
/**
|
|
4
|
+
* CCTP V2 TokenMessengerV2 ABI (source chain)
|
|
5
|
+
* Key function: depositForBurn — burns USDC and emits a MessageSent event
|
|
6
|
+
*/
|
|
7
|
+
export const TokenMessengerV2Abi = [
|
|
8
|
+
{
|
|
9
|
+
name: 'depositForBurn',
|
|
10
|
+
type: 'function',
|
|
11
|
+
stateMutability: 'nonpayable',
|
|
12
|
+
inputs: [
|
|
13
|
+
{ name: 'amount', type: 'uint256' },
|
|
14
|
+
{ name: 'destinationDomain', type: 'uint32' },
|
|
15
|
+
{ name: 'mintRecipient', type: 'bytes32' },
|
|
16
|
+
{ name: 'burnToken', type: 'address' },
|
|
17
|
+
{ name: 'destinationCaller', type: 'bytes32' },
|
|
18
|
+
{ name: 'maxFee', type: 'uint256' },
|
|
19
|
+
{ name: 'minFinalityThreshold', type: 'uint32' },
|
|
20
|
+
],
|
|
21
|
+
outputs: [{ name: 'nonce', type: 'uint64' }],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'depositForBurnWithHook',
|
|
25
|
+
type: 'function',
|
|
26
|
+
stateMutability: 'nonpayable',
|
|
27
|
+
inputs: [
|
|
28
|
+
{ name: 'amount', type: 'uint256' },
|
|
29
|
+
{ name: 'destinationDomain', type: 'uint32' },
|
|
30
|
+
{ name: 'mintRecipient', type: 'bytes32' },
|
|
31
|
+
{ name: 'burnToken', type: 'address' },
|
|
32
|
+
{ name: 'destinationCaller', type: 'bytes32' },
|
|
33
|
+
{ name: 'maxFee', type: 'uint256' },
|
|
34
|
+
{ name: 'minFinalityThreshold', type: 'uint32' },
|
|
35
|
+
{ name: 'hookData', type: 'bytes' },
|
|
36
|
+
],
|
|
37
|
+
outputs: [{ name: 'nonce', type: 'uint64' }],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'localMessageTransmitter',
|
|
41
|
+
type: 'function',
|
|
42
|
+
stateMutability: 'view',
|
|
43
|
+
inputs: [],
|
|
44
|
+
outputs: [{ name: '', type: 'address' }],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'localDomain',
|
|
48
|
+
type: 'function',
|
|
49
|
+
stateMutability: 'view',
|
|
50
|
+
inputs: [],
|
|
51
|
+
outputs: [{ name: '', type: 'uint32' }],
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
/**
|
|
55
|
+
* CCTP V2 MessageTransmitterV2 ABI (destination chain)
|
|
56
|
+
* Key function: receiveMessage — mints USDC using attested message
|
|
57
|
+
*/
|
|
58
|
+
export const MessageTransmitterV2Abi = [
|
|
59
|
+
{
|
|
60
|
+
name: 'receiveMessage',
|
|
61
|
+
type: 'function',
|
|
62
|
+
stateMutability: 'nonpayable',
|
|
63
|
+
inputs: [
|
|
64
|
+
{ name: 'message', type: 'bytes' },
|
|
65
|
+
{ name: 'attestation', type: 'bytes' },
|
|
66
|
+
],
|
|
67
|
+
outputs: [{ name: 'success', type: 'bool' }],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'usedNonces',
|
|
71
|
+
type: 'function',
|
|
72
|
+
stateMutability: 'view',
|
|
73
|
+
inputs: [{ name: '', type: 'bytes32' }],
|
|
74
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'localDomain',
|
|
78
|
+
type: 'function',
|
|
79
|
+
stateMutability: 'view',
|
|
80
|
+
inputs: [],
|
|
81
|
+
outputs: [{ name: '', type: 'uint32' }],
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
/**
|
|
85
|
+
* Minimal ERC20 ABI — approve + allowance + balanceOf
|
|
86
|
+
*/
|
|
87
|
+
export const ERC20BridgeAbi = [
|
|
88
|
+
{
|
|
89
|
+
name: 'approve',
|
|
90
|
+
type: 'function',
|
|
91
|
+
stateMutability: 'nonpayable',
|
|
92
|
+
inputs: [
|
|
93
|
+
{ name: 'spender', type: 'address' },
|
|
94
|
+
{ name: 'amount', type: 'uint256' },
|
|
95
|
+
],
|
|
96
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'allowance',
|
|
100
|
+
type: 'function',
|
|
101
|
+
stateMutability: 'view',
|
|
102
|
+
inputs: [
|
|
103
|
+
{ name: 'owner', type: 'address' },
|
|
104
|
+
{ name: 'spender', type: 'address' },
|
|
105
|
+
],
|
|
106
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'balanceOf',
|
|
110
|
+
type: 'function',
|
|
111
|
+
stateMutability: 'view',
|
|
112
|
+
inputs: [{ name: 'account', type: 'address' }],
|
|
113
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
/**
|
|
117
|
+
* MessageTransmitter MessageSent event ABI — emitted during depositForBurn
|
|
118
|
+
* Used to extract the CCTP message bytes and hash for attestation polling.
|
|
119
|
+
*/
|
|
120
|
+
export const MessageSentEventAbi = [
|
|
121
|
+
{
|
|
122
|
+
name: 'MessageSent',
|
|
123
|
+
type: 'event',
|
|
124
|
+
inputs: [
|
|
125
|
+
{ name: 'message', type: 'bytes', indexed: false },
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
//# sourceMappingURL=abis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abis.js","sourceRoot":"","sources":["../../src/bridge/abis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Hash, type Hex, type WalletClient } from 'viem';
|
|
2
|
+
import type { BridgeChain, BridgeOptions, BurnResult, BridgeResult } from './types.js';
|
|
3
|
+
import { CCTP_DOMAIN_IDS, BRIDGE_CHAIN_IDS, USDC_CONTRACT, TOKEN_MESSENGER_V2, MESSAGE_TRANSMITTER_V2, FINALITY_THRESHOLD } from './types.js';
|
|
4
|
+
export declare class BridgeModule {
|
|
5
|
+
private readonly walletClient;
|
|
6
|
+
private readonly publicClient;
|
|
7
|
+
private readonly fromChain;
|
|
8
|
+
private readonly fromRpcUrl;
|
|
9
|
+
constructor(walletClient: WalletClient, fromChain?: BridgeChain, options?: {
|
|
10
|
+
rpcUrl?: string;
|
|
11
|
+
});
|
|
12
|
+
bridge(amount: bigint, toChain: BridgeChain, options?: BridgeOptions): Promise<BridgeResult>;
|
|
13
|
+
burn(amount: bigint, toChain: BridgeChain, options?: BridgeOptions): Promise<BurnResult>;
|
|
14
|
+
waitForAttestation(messageHash: Hex, apiUrl?: string): Promise<Hex>;
|
|
15
|
+
mint(messageBytes: Hex, attestation: Hex, toChain: BridgeChain, destinationRpcUrl?: string): Promise<Hash>;
|
|
16
|
+
getUsdcBalance(): Promise<bigint>;
|
|
17
|
+
getUsdcAllowance(): Promise<bigint>;
|
|
18
|
+
private approveUsdc;
|
|
19
|
+
private depositForBurn;
|
|
20
|
+
private extractMessageSent;
|
|
21
|
+
private pollForAttestation;
|
|
22
|
+
private receiveMessage;
|
|
23
|
+
private validateBridgeParams;
|
|
24
|
+
private sleep;
|
|
25
|
+
}
|
|
26
|
+
export declare class BridgeError extends Error {
|
|
27
|
+
readonly code: string;
|
|
28
|
+
constructor(code: string, message: string);
|
|
29
|
+
}
|
|
30
|
+
export declare function createBridge(walletClient: WalletClient, fromChain?: BridgeChain, options?: {
|
|
31
|
+
rpcUrl?: string;
|
|
32
|
+
}): BridgeModule;
|
|
33
|
+
export type { BridgeChain, BridgeOptions, BurnResult, BridgeResult };
|
|
34
|
+
export { CCTP_DOMAIN_IDS, BRIDGE_CHAIN_IDS, USDC_CONTRACT, TOKEN_MESSENGER_V2, MESSAGE_TRANSMITTER_V2, FINALITY_THRESHOLD, };
|
|
35
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bridge/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,IAAI,EACT,KAAK,GAAG,EAER,KAAK,YAAY,EAElB,MAAM,MAAM,CAAC;AAOd,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAmBpB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAG9C,YAAY,EAAE,YAAY,EAC1B,SAAS,GAAE,WAAoB,EAC/B,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAiB7B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IA0BhG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAU5F,kBAAkB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,GAAE,MAA+B,GAAG,OAAO,CAAC,GAAG,CAAC;IAI3F,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1G,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAUjC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;YAU3B,WAAW;YAuBX,cAAc;IAwC5B,OAAO,CAAC,kBAAkB;YAqBZ,kBAAkB;YA8BlB,cAAc;IA2B5B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,KAAK;CAGd;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,wBAAgB,YAAY,CAC1B,YAAY,EAAE,YAAY,EAC1B,SAAS,GAAE,WAAoB,EAC/B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,YAAY,CAEd;AAED,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACrE,OAAO,EACL,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAChD,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,GAC/D,CAAC"}
|