agentwallet-sdk 5.1.1 → 6.0.0
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/LICENSE +21 -0
- package/README.md +463 -24
- package/dist/bridge/__tests__/solana.test.d.ts +2 -0
- package/dist/bridge/__tests__/solana.test.d.ts.map +1 -0
- package/dist/bridge/__tests__/solana.test.js +106 -0
- package/dist/bridge/__tests__/solana.test.js.map +1 -0
- package/dist/bridge/client.d.ts +21 -7
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +16 -1
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +12 -1
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +11 -0
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/solana.d.ts +132 -0
- package/dist/bridge/solana.d.ts.map +1 -0
- package/dist/bridge/solana.js +313 -0
- package/dist/bridge/solana.js.map +1 -0
- package/dist/bridge/types.d.ts +35 -10
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +16 -4
- package/dist/bridge/types.js.map +1 -1
- package/dist/escrow/MutualStakeEscrow.d.ts.map +1 -1
- package/dist/escrow/MutualStakeEscrow.js +3 -5
- package/dist/escrow/MutualStakeEscrow.js.map +1 -1
- package/dist/index.d.ts +192 -469
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -8
- package/dist/index.js.map +1 -1
- package/dist/policy/SpendingPolicy.test.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +17 -3
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +21 -5
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/index.d.ts +9 -2
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +8 -1
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/types.d.ts +58 -1
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +56 -1
- package/dist/swap/types.js.map +1 -1
- package/dist/tokens/__tests__/decimals.test.d.ts +2 -0
- package/dist/tokens/__tests__/decimals.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/decimals.test.js +107 -0
- package/dist/tokens/__tests__/decimals.test.js.map +1 -0
- package/dist/tokens/__tests__/registry.test.d.ts +2 -0
- package/dist/tokens/__tests__/registry.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/registry.test.js +191 -0
- package/dist/tokens/__tests__/registry.test.js.map +1 -0
- package/dist/tokens/__tests__/transfers.test.d.ts +2 -0
- package/dist/tokens/__tests__/transfers.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/transfers.test.js +103 -0
- package/dist/tokens/__tests__/transfers.test.js.map +1 -0
- package/dist/tokens/decimals.d.ts +65 -0
- package/dist/tokens/decimals.d.ts.map +1 -0
- package/dist/tokens/decimals.js +112 -0
- package/dist/tokens/decimals.js.map +1 -0
- package/dist/tokens/index.d.ts +14 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +14 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/registry.d.ts +82 -0
- package/dist/tokens/registry.d.ts.map +1 -0
- package/dist/tokens/registry.js +293 -0
- package/dist/tokens/registry.js.map +1 -0
- package/dist/tokens/solana.d.ts +108 -0
- package/dist/tokens/solana.d.ts.map +1 -0
- package/dist/tokens/solana.js +306 -0
- package/dist/tokens/solana.js.map +1 -0
- package/dist/tokens/transfers.d.ts +95 -0
- package/dist/tokens/transfers.d.ts.map +1 -0
- package/dist/tokens/transfers.js +196 -0
- package/dist/tokens/transfers.js.map +1 -0
- package/dist/types.d.ts +20 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -1
- package/dist/x402/__tests__/client.test.js +77 -5
- package/dist/x402/__tests__/client.test.js.map +1 -1
- package/dist/x402/chains/abstract/index.d.ts.map +1 -1
- package/dist/x402/chains/abstract/index.js.map +1 -1
- package/dist/x402/chains/stellar/index.d.ts +149 -0
- package/dist/x402/chains/stellar/index.d.ts.map +1 -0
- package/dist/x402/chains/stellar/index.js +199 -0
- package/dist/x402/chains/stellar/index.js.map +1 -0
- package/dist/x402/client.d.ts +7 -1
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +24 -13
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/index.d.ts +1 -0
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +2 -0
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/middleware.d.ts.map +1 -1
- package/dist/x402/middleware.js +0 -3
- package/dist/x402/middleware.js.map +1 -1
- package/dist/x402/multi-asset.d.ts +54 -0
- package/dist/x402/multi-asset.d.ts.map +1 -0
- package/dist/x402/multi-asset.js +123 -0
- package/dist/x402/multi-asset.js.map +1 -0
- package/dist/x402/types.d.ts +22 -3
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +34 -4
- package/dist/x402/types.js.map +1 -1
- package/package.json +21 -6
- package/dist/ap2/index.d.ts +0 -185
- package/dist/ap2/index.d.ts.map +0 -1
- package/dist/ap2/index.js +0 -255
- package/dist/ap2/index.js.map +0 -1
- package/dist/bridge/unified.d.ts +0 -101
- package/dist/bridge/unified.d.ts.map +0 -1
- package/dist/bridge/unified.js +0 -284
- package/dist/bridge/unified.js.map +0 -1
- package/dist/chains.d.ts +0 -62
- package/dist/chains.d.ts.map +0 -1
- package/dist/chains.js +0 -108
- package/dist/chains.js.map +0 -1
- package/dist/fiat/index.d.ts +0 -10
- package/dist/fiat/index.d.ts.map +0 -1
- package/dist/fiat/index.js +0 -9
- package/dist/fiat/index.js.map +0 -1
- package/dist/fiat/onramp.d.ts +0 -101
- package/dist/fiat/onramp.d.ts.map +0 -1
- package/dist/fiat/onramp.js +0 -155
- package/dist/fiat/onramp.js.map +0 -1
- package/dist/fiat/providers/index.d.ts +0 -16
- package/dist/fiat/providers/index.d.ts.map +0 -1
- package/dist/fiat/providers/index.js +0 -30
- package/dist/fiat/providers/index.js.map +0 -1
- package/dist/fiat/providers/moonpay.d.ts +0 -22
- package/dist/fiat/providers/moonpay.d.ts.map +0 -1
- package/dist/fiat/providers/moonpay.js +0 -107
- package/dist/fiat/providers/moonpay.js.map +0 -1
- package/dist/fiat/providers/stripe.d.ts +0 -26
- package/dist/fiat/providers/stripe.d.ts.map +0 -1
- package/dist/fiat/providers/stripe.js +0 -135
- package/dist/fiat/providers/stripe.js.map +0 -1
- package/dist/fiat/providers/transak.d.ts +0 -26
- package/dist/fiat/providers/transak.d.ts.map +0 -1
- package/dist/fiat/providers/transak.js +0 -119
- package/dist/fiat/providers/transak.js.map +0 -1
- package/dist/fiat/types.d.ts +0 -106
- package/dist/fiat/types.d.ts.map +0 -1
- package/dist/fiat/types.js +0 -13
- package/dist/fiat/types.js.map +0 -1
- package/dist/flash/executor.d.ts +0 -119
- package/dist/flash/executor.d.ts.map +0 -1
- package/dist/flash/executor.js +0 -195
- package/dist/flash/executor.js.map +0 -1
- package/dist/flash/index.d.ts +0 -28
- package/dist/flash/index.d.ts.map +0 -1
- package/dist/flash/index.js +0 -29
- package/dist/flash/index.js.map +0 -1
- package/dist/flash/scanner.d.ts +0 -133
- package/dist/flash/scanner.d.ts.map +0 -1
- package/dist/flash/scanner.js +0 -212
- package/dist/flash/scanner.js.map +0 -1
- package/dist/flash/types.d.ts +0 -136
- package/dist/flash/types.d.ts.map +0 -1
- package/dist/flash/types.js +0 -23
- package/dist/flash/types.js.map +0 -1
- package/dist/gas/index.d.ts +0 -4
- package/dist/gas/index.d.ts.map +0 -1
- package/dist/gas/index.js +0 -3
- package/dist/gas/index.js.map +0 -1
- package/dist/gas/sponsor.d.ts +0 -70
- package/dist/gas/sponsor.d.ts.map +0 -1
- package/dist/gas/sponsor.js +0 -193
- package/dist/gas/sponsor.js.map +0 -1
- package/dist/gas/types.d.ts +0 -76
- package/dist/gas/types.d.ts.map +0 -1
- package/dist/gas/types.js +0 -21
- package/dist/gas/types.js.map +0 -1
- package/dist/identity/agent-identity.d.ts +0 -276
- package/dist/identity/agent-identity.d.ts.map +0 -1
- package/dist/identity/agent-identity.js +0 -300
- package/dist/identity/agent-identity.js.map +0 -1
- package/dist/identity/email-resolver.d.ts +0 -235
- package/dist/identity/email-resolver.js +0 -283
- package/dist/identity/erc6551.d.ts +0 -441
- package/dist/identity/erc6551.d.ts.map +0 -1
- package/dist/identity/erc6551.js +0 -517
- package/dist/identity/erc6551.js.map +0 -1
- package/dist/mev/index.d.ts +0 -4
- package/dist/mev/index.d.ts.map +0 -1
- package/dist/mev/index.js +0 -8
- package/dist/mev/index.js.map +0 -1
- package/dist/mev/protection.d.ts +0 -54
- package/dist/mev/protection.d.ts.map +0 -1
- package/dist/mev/protection.js +0 -185
- package/dist/mev/protection.js.map +0 -1
- package/dist/mev/risk.d.ts +0 -19
- package/dist/mev/risk.d.ts.map +0 -1
- package/dist/mev/risk.js +0 -95
- package/dist/mev/risk.js.map +0 -1
- package/dist/mev/types.d.ts +0 -49
- package/dist/mev/types.d.ts.map +0 -1
- package/dist/mev/types.js +0 -2
- package/dist/mev/types.js.map +0 -1
- package/dist/plugins/elizaos.d.ts +0 -52
- package/dist/plugins/elizaos.d.ts.map +0 -1
- package/dist/plugins/elizaos.js +0 -89
- package/dist/plugins/elizaos.js.map +0 -1
- package/dist/settlement/index.d.ts +0 -4
- package/dist/settlement/index.d.ts.map +0 -1
- package/dist/settlement/index.js +0 -3
- package/dist/settlement/index.js.map +0 -1
- package/dist/settlement/types.d.ts +0 -66
- package/dist/settlement/types.d.ts.map +0 -1
- package/dist/settlement/types.js +0 -37
- package/dist/settlement/types.js.map +0 -1
- package/dist/settlement/verifier.d.ts +0 -75
- package/dist/settlement/verifier.d.ts.map +0 -1
- package/dist/settlement/verifier.js +0 -354
- package/dist/settlement/verifier.js.map +0 -1
- package/dist/solana/bridge.d.ts +0 -144
- package/dist/solana/bridge.d.ts.map +0 -1
- package/dist/solana/bridge.js +0 -352
- package/dist/solana/bridge.js.map +0 -1
- package/dist/solana/index.d.ts +0 -8
- package/dist/solana/index.d.ts.map +0 -1
- package/dist/solana/index.js +0 -6
- package/dist/solana/index.js.map +0 -1
- package/dist/solana/swap.d.ts +0 -85
- package/dist/solana/swap.d.ts.map +0 -1
- package/dist/solana/swap.js +0 -173
- package/dist/solana/swap.js.map +0 -1
- package/dist/solana/types.d.ts +0 -126
- package/dist/solana/types.d.ts.map +0 -1
- package/dist/solana/types.js +0 -10
- package/dist/solana/types.js.map +0 -1
- package/dist/solana/wallet.d.ts +0 -83
- package/dist/solana/wallet.d.ts.map +0 -1
- package/dist/solana/wallet.js +0 -164
- package/dist/solana/wallet.js.map +0 -1
- package/dist/solana/x402.d.ts +0 -69
- package/dist/solana/x402.d.ts.map +0 -1
- package/dist/solana/x402.js +0 -154
- package/dist/solana/x402.js.map +0 -1
- package/dist/solver/adapter.d.ts +0 -47
- package/dist/solver/adapter.d.ts.map +0 -1
- package/dist/solver/adapter.js +0 -146
- package/dist/solver/adapter.js.map +0 -1
- package/dist/solver/analyzer.d.ts +0 -48
- package/dist/solver/analyzer.d.ts.map +0 -1
- package/dist/solver/analyzer.js +0 -171
- package/dist/solver/analyzer.js.map +0 -1
- package/dist/solver/builder.d.ts +0 -31
- package/dist/solver/builder.d.ts.map +0 -1
- package/dist/solver/builder.js +0 -60
- package/dist/solver/builder.js.map +0 -1
- package/dist/solver/index.d.ts +0 -22
- package/dist/solver/index.d.ts.map +0 -1
- package/dist/solver/index.js +0 -25
- package/dist/solver/index.js.map +0 -1
- package/dist/solver/types.d.ts +0 -115
- package/dist/solver/types.d.ts.map +0 -1
- package/dist/solver/types.js +0 -10
- package/dist/solver/types.js.map +0 -1
- package/dist/spend-guard/index.d.ts +0 -125
- package/dist/spend-guard/index.d.ts.map +0 -1
- package/dist/spend-guard/index.js +0 -150
- package/dist/spend-guard/index.js.map +0 -1
- package/dist/swap/router/cache.d.ts +0 -13
- package/dist/swap/router/cache.d.ts.map +0 -1
- package/dist/swap/router/cache.js +0 -30
- package/dist/swap/router/cache.js.map +0 -1
- package/dist/swap/router/flashbots.d.ts +0 -10
- package/dist/swap/router/flashbots.d.ts.map +0 -1
- package/dist/swap/router/flashbots.js +0 -43
- package/dist/swap/router/flashbots.js.map +0 -1
- package/dist/swap/router/health.d.ts +0 -17
- package/dist/swap/router/health.d.ts.map +0 -1
- package/dist/swap/router/health.js +0 -38
- package/dist/swap/router/health.js.map +0 -1
- package/dist/swap/router/index.d.ts +0 -10
- package/dist/swap/router/index.d.ts.map +0 -1
- package/dist/swap/router/index.js +0 -10
- package/dist/swap/router/index.js.map +0 -1
- package/dist/swap/router/providers/cowswap.d.ts +0 -11
- package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
- package/dist/swap/router/providers/cowswap.js +0 -79
- package/dist/swap/router/providers/cowswap.js.map +0 -1
- package/dist/swap/router/providers/index.d.ts +0 -20
- package/dist/swap/router/providers/index.d.ts.map +0 -1
- package/dist/swap/router/providers/index.js +0 -32
- package/dist/swap/router/providers/index.js.map +0 -1
- package/dist/swap/router/providers/jupiter.d.ts +0 -12
- package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
- package/dist/swap/router/providers/jupiter.js +0 -73
- package/dist/swap/router/providers/jupiter.js.map +0 -1
- package/dist/swap/router/providers/lifi.d.ts +0 -11
- package/dist/swap/router/providers/lifi.d.ts.map +0 -1
- package/dist/swap/router/providers/lifi.js +0 -123
- package/dist/swap/router/providers/lifi.js.map +0 -1
- package/dist/swap/router/providers/oneinch.d.ts +0 -13
- package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
- package/dist/swap/router/providers/oneinch.js +0 -71
- package/dist/swap/router/providers/oneinch.js.map +0 -1
- package/dist/swap/router/providers/paraswap.d.ts +0 -11
- package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
- package/dist/swap/router/providers/paraswap.js +0 -73
- package/dist/swap/router/providers/paraswap.js.map +0 -1
- package/dist/swap/router/providers/uniswap.d.ts +0 -31
- package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
- package/dist/swap/router/providers/uniswap.js +0 -237
- package/dist/swap/router/providers/uniswap.js.map +0 -1
- package/dist/swap/router/providers/zerox.d.ts +0 -13
- package/dist/swap/router/providers/zerox.d.ts.map +0 -1
- package/dist/swap/router/providers/zerox.js +0 -94
- package/dist/swap/router/providers/zerox.js.map +0 -1
- package/dist/swap/router/router.d.ts +0 -86
- package/dist/swap/router/router.d.ts.map +0 -1
- package/dist/swap/router/router.js +0 -224
- package/dist/swap/router/router.js.map +0 -1
- package/dist/swap/router/rsi/engine.d.ts +0 -60
- package/dist/swap/router/rsi/engine.d.ts.map +0 -1
- package/dist/swap/router/rsi/engine.js +0 -483
- package/dist/swap/router/rsi/engine.js.map +0 -1
- package/dist/swap/router/rsi/index.d.ts +0 -3
- package/dist/swap/router/rsi/index.d.ts.map +0 -1
- package/dist/swap/router/rsi/index.js +0 -3
- package/dist/swap/router/rsi/index.js.map +0 -1
- package/dist/swap/router/rsi/types.d.ts +0 -106
- package/dist/swap/router/rsi/types.d.ts.map +0 -1
- package/dist/swap/router/rsi/types.js +0 -3
- package/dist/swap/router/rsi/types.js.map +0 -1
- package/dist/swap/router/types.d.ts +0 -120
- package/dist/swap/router/types.d.ts.map +0 -1
- package/dist/swap/router/types.js +0 -16
- package/dist/swap/router/types.js.map +0 -1
- package/dist/tax/engine.d.ts +0 -131
- package/dist/tax/engine.d.ts.map +0 -1
- package/dist/tax/engine.js +0 -307
- package/dist/tax/engine.js.map +0 -1
- package/dist/tax/index.d.ts +0 -9
- package/dist/tax/index.d.ts.map +0 -1
- package/dist/tax/index.js +0 -12
- package/dist/tax/index.js.map +0 -1
- package/dist/tax/lots.d.ts +0 -60
- package/dist/tax/lots.d.ts.map +0 -1
- package/dist/tax/lots.js +0 -129
- package/dist/tax/lots.js.map +0 -1
- package/dist/tax/types.d.ts +0 -113
- package/dist/tax/types.d.ts.map +0 -1
- package/dist/tax/types.js +0 -18
- package/dist/tax/types.js.map +0 -1
- package/dist/verifiable-intent/index.d.ts +0 -84
- package/dist/verifiable-intent/index.js +0 -385
- package/dist/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -29
- package/dist/yield/index.js.map +0 -1
- package/dist/yield/rates.d.ts +0 -114
- package/dist/yield/rates.d.ts.map +0 -1
- package/dist/yield/rates.js +0 -351
- package/dist/yield/rates.js.map +0 -1
- package/dist/yield/types.d.ts +0 -134
- package/dist/yield/types.d.ts.map +0 -1
- package/dist/yield/types.js +0 -24
- package/dist/yield/types.js.map +0 -1
- package/dist/yield/vault.d.ts +0 -112
- package/dist/yield/vault.d.ts.map +0 -1
- package/dist/yield/vault.js +0 -264
- package/dist/yield/vault.js.map +0 -1
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stellar x402 Payment Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements x402 payment protocol on Stellar network.
|
|
5
|
+
* Stellar x402 support went live March 11, 2026.
|
|
6
|
+
*
|
|
7
|
+
* Chain identifiers:
|
|
8
|
+
* - Stellar Mainnet: "stellar:pubnet"
|
|
9
|
+
* - Stellar Testnet: "stellar:testnet"
|
|
10
|
+
*
|
|
11
|
+
* Key differences from EVM chains:
|
|
12
|
+
* - Uses Ed25519 keypairs (not secp256k1)
|
|
13
|
+
* - Transaction format: Stellar XDR (not EVM tx)
|
|
14
|
+
* - Settlement: ~5 seconds (1 ledger close)
|
|
15
|
+
* - Fees: ~0.00001 XLM per operation (effectively free at scale)
|
|
16
|
+
* - USDC: Circle-issued USDC on Stellar
|
|
17
|
+
*/
|
|
18
|
+
// ─── Stellar Chain Constants ─────────────────────────────────────────────────
|
|
19
|
+
export const STELLAR_NETWORK = {
|
|
20
|
+
pubnet: {
|
|
21
|
+
horizonUrl: 'https://horizon.stellar.org',
|
|
22
|
+
networkPassphrase: 'Public Global Stellar Network ; September 2015',
|
|
23
|
+
chainId: 'stellar:pubnet',
|
|
24
|
+
},
|
|
25
|
+
testnet: {
|
|
26
|
+
horizonUrl: 'https://horizon-testnet.stellar.org',
|
|
27
|
+
networkPassphrase: 'Test SDF Network ; September 2015',
|
|
28
|
+
chainId: 'stellar:testnet',
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Circle USDC on Stellar (Mainnet)
|
|
33
|
+
* Asset code: USDC
|
|
34
|
+
* Issuer: GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
|
|
35
|
+
*/
|
|
36
|
+
export const STELLAR_USDC = {
|
|
37
|
+
pubnet: {
|
|
38
|
+
code: 'USDC',
|
|
39
|
+
issuer: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',
|
|
40
|
+
},
|
|
41
|
+
testnet: {
|
|
42
|
+
code: 'USDC',
|
|
43
|
+
issuer: 'GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
// ─── Stellar x402 Payment Adapter ────────────────────────────────────────────
|
|
47
|
+
/**
|
|
48
|
+
* StellarX402Adapter
|
|
49
|
+
*
|
|
50
|
+
* Handles x402 payment flow for Stellar network.
|
|
51
|
+
*
|
|
52
|
+
* Usage (with stellar-sdk):
|
|
53
|
+
* ```typescript
|
|
54
|
+
* import { StellarX402Adapter } from 'agentwallet-sdk/x402/stellar';
|
|
55
|
+
* import { Keypair, Networks } from '@stellar/stellar-sdk';
|
|
56
|
+
*
|
|
57
|
+
* const adapter = new StellarX402Adapter({ network: 'pubnet' });
|
|
58
|
+
* const result = await adapter.pay({
|
|
59
|
+
* destination: 'GDESTWVX3VMLQCXPHPVLS3FMNMG2X7L5IGGQT7BQMIZXZZ4V7KBQVS',
|
|
60
|
+
* amount: '0.50',
|
|
61
|
+
* sourcePublicKey: keypair.publicKey(),
|
|
62
|
+
* resource: '/api/data-endpoint',
|
|
63
|
+
* }, keypair.secret());
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* Note: stellar-sdk must be installed separately:
|
|
67
|
+
* npm install @stellar/stellar-sdk
|
|
68
|
+
*/
|
|
69
|
+
export class StellarX402Adapter {
|
|
70
|
+
constructor(config = {}) {
|
|
71
|
+
this.network = config.network ?? 'pubnet';
|
|
72
|
+
this.horizonUrl = config.horizonUrl ?? STELLAR_NETWORK[this.network].horizonUrl;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse an x402 402 response and extract Stellar payment details.
|
|
76
|
+
* The 402 response should include X-Payment-Chains: stellar:pubnet
|
|
77
|
+
* and X-Payment-Amount, X-Payment-Destination headers.
|
|
78
|
+
*/
|
|
79
|
+
parseX402Response(headers) {
|
|
80
|
+
const chains = headers['x-payment-chains'] ?? headers['X-Payment-Chains'] ?? '';
|
|
81
|
+
const chainId = STELLAR_NETWORK[this.network].chainId;
|
|
82
|
+
if (!chains.includes(chainId) && !chains.includes('stellar')) {
|
|
83
|
+
return { supported: false };
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
supported: true,
|
|
87
|
+
destination: headers['x-payment-destination'] ?? headers['X-Payment-Destination'],
|
|
88
|
+
amount: headers['x-payment-amount'] ?? headers['X-Payment-Amount'],
|
|
89
|
+
resource: headers['x-payment-resource'] ?? headers['X-Payment-Resource'],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build a Stellar USDC payment transaction.
|
|
94
|
+
*
|
|
95
|
+
* Requires @stellar/stellar-sdk to be installed:
|
|
96
|
+
* npm install @stellar/stellar-sdk
|
|
97
|
+
*
|
|
98
|
+
* Returns the XDR-encoded transaction envelope for signing and submission.
|
|
99
|
+
*/
|
|
100
|
+
async buildPaymentTransaction(request) {
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
+
let StellarSdk;
|
|
103
|
+
try {
|
|
104
|
+
// @ts-expect-error — @stellar/stellar-sdk is an optional peer dependency
|
|
105
|
+
StellarSdk = await import('@stellar/stellar-sdk');
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
throw new Error('Stellar support requires @stellar/stellar-sdk: npm install @stellar/stellar-sdk');
|
|
109
|
+
}
|
|
110
|
+
const networkConfig = STELLAR_NETWORK[request.network ?? this.network];
|
|
111
|
+
const usdcAsset = STELLAR_USDC[request.network ?? this.network];
|
|
112
|
+
// Load source account sequence number from Horizon
|
|
113
|
+
const account = await this._loadAccount(request.sourcePublicKey, networkConfig.horizonUrl);
|
|
114
|
+
const stellarAccount = new StellarSdk.Account(request.sourcePublicKey, account.sequence);
|
|
115
|
+
const asset = new StellarSdk.Asset(usdcAsset.code, usdcAsset.issuer);
|
|
116
|
+
const memoText = request.resource
|
|
117
|
+
? request.resource.slice(0, 28) // Stellar memo max 28 bytes
|
|
118
|
+
: 'x402-payment';
|
|
119
|
+
const transaction = new StellarSdk.TransactionBuilder(stellarAccount, {
|
|
120
|
+
fee: StellarSdk.BASE_FEE,
|
|
121
|
+
networkPassphrase: networkConfig.networkPassphrase,
|
|
122
|
+
})
|
|
123
|
+
.addOperation(StellarSdk.Operation.payment({
|
|
124
|
+
destination: request.destination,
|
|
125
|
+
asset,
|
|
126
|
+
amount: request.amount,
|
|
127
|
+
}))
|
|
128
|
+
.addMemo(StellarSdk.Memo.text(memoText))
|
|
129
|
+
.setTimeout(300) // 5 minute window
|
|
130
|
+
.build();
|
|
131
|
+
return transaction.toXDR();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Submit a signed Stellar transaction to Horizon.
|
|
135
|
+
*/
|
|
136
|
+
async submitTransaction(signedXdr) {
|
|
137
|
+
const networkConfig = STELLAR_NETWORK[this.network];
|
|
138
|
+
const body = new URLSearchParams({ tx: signedXdr }).toString();
|
|
139
|
+
const resp = await fetch(`${networkConfig.horizonUrl}/transactions`, {
|
|
140
|
+
method: 'POST',
|
|
141
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
142
|
+
body,
|
|
143
|
+
});
|
|
144
|
+
if (!resp.ok) {
|
|
145
|
+
const err = await resp.text();
|
|
146
|
+
throw new Error(`Stellar transaction failed: ${resp.status} ${err.slice(0, 200)}`);
|
|
147
|
+
}
|
|
148
|
+
const result = await resp.json();
|
|
149
|
+
return {
|
|
150
|
+
hash: result.hash,
|
|
151
|
+
ledger: result.ledger,
|
|
152
|
+
successful: result.successful ?? true,
|
|
153
|
+
network: this.network,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
async _loadAccount(publicKey, horizonUrl) {
|
|
157
|
+
const resp = await fetch(`${horizonUrl}/accounts/${publicKey}`);
|
|
158
|
+
if (!resp.ok) {
|
|
159
|
+
throw new Error(`Cannot load Stellar account ${publicKey}: ${resp.status}. ` +
|
|
160
|
+
`Ensure the account exists and has a USDC trustline established.`);
|
|
161
|
+
}
|
|
162
|
+
const data = await resp.json();
|
|
163
|
+
return { sequence: data.sequence };
|
|
164
|
+
}
|
|
165
|
+
/** Chain ID for this adapter (e.g. "stellar:pubnet") */
|
|
166
|
+
get chainId() {
|
|
167
|
+
return STELLAR_NETWORK[this.network].chainId;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// ─── x402 Auto-Pay Helper ────────────────────────────────────────────────────
|
|
171
|
+
/**
|
|
172
|
+
* Full x402 payment flow for Stellar.
|
|
173
|
+
* 1. Detects 402 response from API
|
|
174
|
+
* 2. Parses Stellar payment details from headers
|
|
175
|
+
* 3. Builds, signs, and submits Stellar USDC payment
|
|
176
|
+
* 4. Retries the original request with payment proof
|
|
177
|
+
*
|
|
178
|
+
* Requires stellar-sdk: npm install @stellar/stellar-sdk
|
|
179
|
+
*/
|
|
180
|
+
export async function stellarX402Pay(params) {
|
|
181
|
+
const adapter = new StellarX402Adapter({ network: params.network ?? 'pubnet' });
|
|
182
|
+
const details = adapter.parseX402Response(params.responseHeaders);
|
|
183
|
+
if (!details.supported) {
|
|
184
|
+
throw new Error('This endpoint does not support Stellar x402 payments');
|
|
185
|
+
}
|
|
186
|
+
if (!details.destination || !details.amount) {
|
|
187
|
+
throw new Error('x402 response missing destination or amount headers');
|
|
188
|
+
}
|
|
189
|
+
const xdr = await adapter.buildPaymentTransaction({
|
|
190
|
+
destination: details.destination,
|
|
191
|
+
amount: details.amount,
|
|
192
|
+
sourcePublicKey: params.sourcePublicKey,
|
|
193
|
+
resource: details.resource,
|
|
194
|
+
network: params.network ?? 'pubnet',
|
|
195
|
+
});
|
|
196
|
+
const signedXdr = await params.sign(xdr);
|
|
197
|
+
return adapter.submitTransaction(signedXdr);
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/x402/chains/stellar/index.ts"],"names":[],"mappings":"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"}
|
package/dist/x402/client.d.ts
CHANGED
|
@@ -26,11 +26,17 @@ export declare class X402Client {
|
|
|
26
26
|
parse402Response(response: Response): Promise<X402PaymentRequired | null>;
|
|
27
27
|
/**
|
|
28
28
|
* Select the best compatible payment option from offered requirements.
|
|
29
|
-
* Prefers: Base network,
|
|
29
|
+
* Prefers: Base network, stablecoins, exact scheme.
|
|
30
|
+
*
|
|
31
|
+
* v6 change: resolves assets via TokenRegistry in addition to USDC_ADDRESSES.
|
|
32
|
+
* Now accepts any ERC-20 whose address is in the TokenRegistry for the network.
|
|
30
33
|
*/
|
|
31
34
|
selectPaymentOption(accepts: X402PaymentRequirements[]): X402PaymentRequirements | null;
|
|
32
35
|
/**
|
|
33
36
|
* Execute the payment via AgentWallet's agentTransferToken.
|
|
37
|
+
*
|
|
38
|
+
* v6 change: resolves asset address via TokenRegistry before executing.
|
|
39
|
+
* The 402 response may specify an asset by symbol ("USDC") or by address.
|
|
34
40
|
*/
|
|
35
41
|
private executePayment;
|
|
36
42
|
/** Get the budget tracker for direct inspection */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/x402/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/x402/client.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EAEvB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;;;;;;GASG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,iBAAiB,CAAc;gBAE3B,MAAM,EAAE,GAAG,EAAE,MAAM,GAAE,gBAAqB;IAYtD;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmFrE;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA2B/E;;;;;;OAMG;IACH,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,EAAE,GAAG,uBAAuB,GAAG,IAAI;IA2BvF;;;;;OAKG;YACW,cAAc;IAwC5B,mDAAmD;IACnD,IAAI,aAAa,IAAI,iBAAiB,CAErC;IAED,0BAA0B;IAC1B,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,EAAE;IAItF,8BAA8B;IAC9B,oBAAoB;;;;;CAGrB;AAID,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,mBAAmB,EAAE,uBAAuB;gBAD5D,OAAO,EAAE,MAAM,EACC,mBAAmB,EAAE,uBAAuB;CAK/D;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aAE9B,MAAM,EAAE,MAAM;aACd,GAAG,EAAE,MAAM;aACX,mBAAmB,EAAE,uBAAuB;gBAF5C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,mBAAmB,EAAE,uBAAuB;CAK/D"}
|
package/dist/x402/client.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { USDC_ADDRESSES, DEFAULT_SUPPORTED_NETWORKS } from './types.js';
|
|
1
|
+
import { DEFAULT_SUPPORTED_NETWORKS } from './types.js';
|
|
3
2
|
import { X402BudgetTracker } from './budget.js';
|
|
4
3
|
import { agentTransferToken, checkBudget } from '../index.js';
|
|
5
|
-
|
|
6
|
-
const ERC20_TRANSFER_ABI = parseAbi([
|
|
7
|
-
'function transfer(address to, uint256 amount) returns (bool)',
|
|
8
|
-
]);
|
|
4
|
+
import { resolveAssetAddress } from './multi-asset.js';
|
|
9
5
|
/**
|
|
10
6
|
* [MAX-ADDED] x402 Payment Client for AgentWallet.
|
|
11
7
|
*
|
|
@@ -131,16 +127,23 @@ export class X402Client {
|
|
|
131
127
|
}
|
|
132
128
|
/**
|
|
133
129
|
* Select the best compatible payment option from offered requirements.
|
|
134
|
-
* Prefers: Base network,
|
|
130
|
+
* Prefers: Base network, stablecoins, exact scheme.
|
|
131
|
+
*
|
|
132
|
+
* v6 change: resolves assets via TokenRegistry in addition to USDC_ADDRESSES.
|
|
133
|
+
* Now accepts any ERC-20 whose address is in the TokenRegistry for the network.
|
|
135
134
|
*/
|
|
136
135
|
selectPaymentOption(accepts) {
|
|
137
|
-
// Filter to supported networks and
|
|
136
|
+
// Filter to supported networks and resolvable assets
|
|
138
137
|
const compatible = accepts.filter(req => {
|
|
139
138
|
if (!this.supportedNetworks.has(req.network))
|
|
140
139
|
return false;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
140
|
+
// Config override: explicit supportedAssets list
|
|
141
|
+
if (this.config.supportedAssets?.[req.network]) {
|
|
142
|
+
return this.config.supportedAssets[req.network].some(a => a.toLowerCase() === req.asset.toLowerCase());
|
|
143
|
+
}
|
|
144
|
+
// v6: resolve via TokenRegistry — accept any known ERC-20 on this network
|
|
145
|
+
const resolved = resolveAssetAddress(req.asset, req.network);
|
|
146
|
+
return resolved != null;
|
|
144
147
|
});
|
|
145
148
|
if (compatible.length === 0)
|
|
146
149
|
return null;
|
|
@@ -152,10 +155,18 @@ export class X402Client {
|
|
|
152
155
|
}
|
|
153
156
|
/**
|
|
154
157
|
* Execute the payment via AgentWallet's agentTransferToken.
|
|
158
|
+
*
|
|
159
|
+
* v6 change: resolves asset address via TokenRegistry before executing.
|
|
160
|
+
* The 402 response may specify an asset by symbol ("USDC") or by address.
|
|
155
161
|
*/
|
|
156
162
|
async executePayment(req) {
|
|
163
|
+
// Resolve the actual contract address for the requested asset
|
|
164
|
+
const resolvedAddress = resolveAssetAddress(req.asset, req.network);
|
|
165
|
+
if (!resolvedAddress) {
|
|
166
|
+
throw new X402PaymentError(`Cannot resolve asset "${req.asset}" on network "${req.network}" to a contract address`, req);
|
|
167
|
+
}
|
|
157
168
|
// First check on-chain budget
|
|
158
|
-
const onChainBudget = await checkBudget(this.wallet,
|
|
169
|
+
const onChainBudget = await checkBudget(this.wallet, resolvedAddress);
|
|
159
170
|
const amount = BigInt(req.amount);
|
|
160
171
|
if (amount > onChainBudget.perTxLimit) {
|
|
161
172
|
throw new X402PaymentError(`Amount ${amount} exceeds on-chain per-tx limit ${onChainBudget.perTxLimit}`, req);
|
|
@@ -165,7 +176,7 @@ export class X402Client {
|
|
|
165
176
|
}
|
|
166
177
|
// Execute the ERC20 transfer via AgentWallet
|
|
167
178
|
const txHash = await agentTransferToken(this.wallet, {
|
|
168
|
-
token:
|
|
179
|
+
token: resolvedAddress,
|
|
169
180
|
to: req.payTo,
|
|
170
181
|
amount,
|
|
171
182
|
});
|
package/dist/x402/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/x402/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/x402/client.ts"],"names":[],"mappings":"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"}
|
package/dist/x402/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { X402BudgetTracker } from './budget.js';
|
|
|
3
3
|
export { createX402Client, createX402Fetch, wrapWithX402 } from './middleware.js';
|
|
4
4
|
export type { X402PaymentRequired, X402PaymentRequirements, X402PaymentPayload, X402SettlementResponse, X402ResourceInfo, X402ServiceBudget, X402TransactionLog, X402ClientConfig, } from './types.js';
|
|
5
5
|
export { USDC_ADDRESSES, DEFAULT_SUPPORTED_NETWORKS } from './types.js';
|
|
6
|
+
export { resolveAssetAddress, resolveAssetDecimals, buildSupportedAssets, isStablecoin, parseNetworkChainId, } from './multi-asset.js';
|
|
6
7
|
export { AbstractDelegatedFacilitatorAdapter, ABSTRACT_CHAIN_IDS, ABSTRACT_USDC, ABSTRACT_APPROVED_FACILITATORS, ABSTRACT_SUPPORTED_CHAINS, } from './chains/abstract/index.js';
|
|
7
8
|
export type { AbstractDelegatedPaymentConfig, DelegatedPaymentPermit, AbstractPaymentResult, } from './chains/abstract/index.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/x402/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClF,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClF,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC"}
|
package/dist/x402/index.js
CHANGED
|
@@ -3,6 +3,8 @@ export { X402Client, X402PaymentError, X402BudgetExceededError } from './client.
|
|
|
3
3
|
export { X402BudgetTracker } from './budget.js';
|
|
4
4
|
export { createX402Client, createX402Fetch, wrapWithX402 } from './middleware.js';
|
|
5
5
|
export { USDC_ADDRESSES, DEFAULT_SUPPORTED_NETWORKS } from './types.js';
|
|
6
|
+
// v6: Multi-asset resolution utilities
|
|
7
|
+
export { resolveAssetAddress, resolveAssetDecimals, buildSupportedAssets, isStablecoin, parseNetworkChainId, } from './multi-asset.js';
|
|
6
8
|
// ─── Chain-Specific Adapters ──────────────────────────────────────────────────
|
|
7
9
|
export { AbstractDelegatedFacilitatorAdapter, ABSTRACT_CHAIN_IDS, ABSTRACT_USDC, ABSTRACT_APPROVED_FACILITATORS, ABSTRACT_SUPPORTED_CHAINS, } from './chains/abstract/index.js';
|
|
8
10
|
//# sourceMappingURL=index.js.map
|
package/dist/x402/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWlF,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExE,iFAAiF;AACjF,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWlF,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExE,uCAAuC;AACvC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,iFAAiF;AACjF,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/x402/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAEnF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,UAAU,CAAC,KAAK,CAMzB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,UAAU,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/x402/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAEnF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,UAAU,CAAC,KAAK,CAMzB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,UAAU,CAAC,KAAK,CAqBzB"}
|
package/dist/x402/middleware.js
CHANGED
|
@@ -41,9 +41,6 @@ export function createX402Fetch(wallet, config) {
|
|
|
41
41
|
* @param config - Optional x402 client configuration
|
|
42
42
|
*/
|
|
43
43
|
export function wrapWithX402(fetchFn, wallet, config) {
|
|
44
|
-
const client = new X402Client(wallet, config);
|
|
45
|
-
// Override the global fetch used by X402Client
|
|
46
|
-
const originalGlobalFetch = globalThis.fetch;
|
|
47
44
|
const wrappedClient = new X402Client(wallet, config);
|
|
48
45
|
return async (input, init) => {
|
|
49
46
|
const url = input instanceof Request ? input.url : input.toString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/x402/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAW,EAAE,MAAyB;IACrE,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAW,EACX,MAAyB;IAEzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,KAA6B,EAAE,IAAkB,EAAE,EAAE;QAC3D,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgC,EAChC,MAAW,EACX,MAAyB;IAEzB,MAAM,
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/x402/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAW,EAAE,MAAyB;IACrE,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAW,EACX,MAAyB;IAEzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,KAA6B,EAAE,IAAkB,EAAE,EAAE;QAC3D,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgC,EAChC,MAAW,EACX,MAAyB;IAEzB,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErD,OAAO,KAAK,EAAE,KAA6B,EAAE,IAAkB,EAAE,EAAE;QACjE,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,sCAAsC;QACtC,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe;YAAE,OAAO,QAAQ,CAAC;QAEtC,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE/B,kEAAkE;QAClE,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module x402/multi-asset
|
|
3
|
+
* Multi-asset support utilities for the x402 payment client.
|
|
4
|
+
*
|
|
5
|
+
* Resolves asset names/symbols → token addresses via the global TokenRegistry.
|
|
6
|
+
* This extends x402 beyond USDC-only to support any token the 402 response requests.
|
|
7
|
+
*
|
|
8
|
+
* All address lookups use the TokenRegistry from src/tokens/registry.ts.
|
|
9
|
+
* Fallback: USDC_ADDRESSES from x402/types.ts.
|
|
10
|
+
*/
|
|
11
|
+
import type { Address } from 'viem';
|
|
12
|
+
/**
|
|
13
|
+
* Network string format used in x402: "chainName:chainId" (e.g. "base:8453").
|
|
14
|
+
* Returns the chainId portion as a number.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseNetworkChainId(network: string): number | null;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve an asset address in the context of a 402 response.
|
|
19
|
+
* The asset field may be:
|
|
20
|
+
* 1. A token symbol ("USDC", "WETH", etc.) → look up in registry by symbol
|
|
21
|
+
* 2. A hex contract address → look up in registry by address (must be registered)
|
|
22
|
+
*
|
|
23
|
+
* Only returns an address if the asset is known in the TokenRegistry.
|
|
24
|
+
* Unknown addresses are NOT accepted — they must be explicitly added or
|
|
25
|
+
* whitelisted via supportedAssets config.
|
|
26
|
+
*
|
|
27
|
+
* @param asset - Asset identifier from the 402 response
|
|
28
|
+
* @param network - Network string from the 402 response (e.g. "base:8453")
|
|
29
|
+
* @returns Resolved contract address, or null if not found in registry
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveAssetAddress(asset: string, network: string): Address | null;
|
|
32
|
+
/**
|
|
33
|
+
* Get token decimals for a given asset+network pair.
|
|
34
|
+
* Used to correctly format amounts in x402 payments.
|
|
35
|
+
*
|
|
36
|
+
* @param asset - Asset address (hex) or symbol
|
|
37
|
+
* @param network - Network string (e.g. "base:8453")
|
|
38
|
+
* @returns Decimals, defaults to 6 for USDC-like stable, 18 for everything else
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveAssetDecimals(asset: string, network: string): number;
|
|
41
|
+
/**
|
|
42
|
+
* Build a set of accepted payment assets for an x402 client, using the
|
|
43
|
+
* global registry to auto-populate known tokens per network.
|
|
44
|
+
*
|
|
45
|
+
* @param networks - List of network strings (e.g. ["base:8453", "arbitrum:42161"])
|
|
46
|
+
* @param symbols - Token symbols to include (e.g. ["USDC", "USDT", "WETH"])
|
|
47
|
+
* @returns Map from network string → array of token addresses
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildSupportedAssets(networks: string[], symbols?: string[]): Record<string, Address[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Check if a given asset address is a known stablecoin (6 decimals) on the network.
|
|
52
|
+
*/
|
|
53
|
+
export declare function isStablecoin(asset: string, network: string): boolean;
|
|
54
|
+
//# sourceMappingURL=multi-asset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-asset.d.ts","sourceRoot":"","sources":["../../src/x402/multi-asset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKlE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAkBlF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAmB3E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,MAAM,EAAoC,GAClD,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CA6B3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module x402/multi-asset
|
|
3
|
+
* Multi-asset support utilities for the x402 payment client.
|
|
4
|
+
*
|
|
5
|
+
* Resolves asset names/symbols → token addresses via the global TokenRegistry.
|
|
6
|
+
* This extends x402 beyond USDC-only to support any token the 402 response requests.
|
|
7
|
+
*
|
|
8
|
+
* All address lookups use the TokenRegistry from src/tokens/registry.ts.
|
|
9
|
+
* Fallback: USDC_ADDRESSES from x402/types.ts.
|
|
10
|
+
*/
|
|
11
|
+
import { getGlobalRegistry } from '../tokens/registry.js';
|
|
12
|
+
import { USDC_ADDRESSES } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Network string format used in x402: "chainName:chainId" (e.g. "base:8453").
|
|
15
|
+
* Returns the chainId portion as a number.
|
|
16
|
+
*/
|
|
17
|
+
export function parseNetworkChainId(network) {
|
|
18
|
+
const parts = network.split(':');
|
|
19
|
+
if (parts.length < 2)
|
|
20
|
+
return null;
|
|
21
|
+
const id = parseInt(parts[parts.length - 1], 10);
|
|
22
|
+
return isNaN(id) ? null : id;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve an asset address in the context of a 402 response.
|
|
26
|
+
* The asset field may be:
|
|
27
|
+
* 1. A token symbol ("USDC", "WETH", etc.) → look up in registry by symbol
|
|
28
|
+
* 2. A hex contract address → look up in registry by address (must be registered)
|
|
29
|
+
*
|
|
30
|
+
* Only returns an address if the asset is known in the TokenRegistry.
|
|
31
|
+
* Unknown addresses are NOT accepted — they must be explicitly added or
|
|
32
|
+
* whitelisted via supportedAssets config.
|
|
33
|
+
*
|
|
34
|
+
* @param asset - Asset identifier from the 402 response
|
|
35
|
+
* @param network - Network string from the 402 response (e.g. "base:8453")
|
|
36
|
+
* @returns Resolved contract address, or null if not found in registry
|
|
37
|
+
*/
|
|
38
|
+
export function resolveAssetAddress(asset, network) {
|
|
39
|
+
const chainId = parseNetworkChainId(network);
|
|
40
|
+
if (chainId == null)
|
|
41
|
+
return null;
|
|
42
|
+
const registry = getGlobalRegistry();
|
|
43
|
+
// If it looks like an EVM address, check registry by address
|
|
44
|
+
if (/^0x[0-9a-fA-F]{40}$/.test(asset)) {
|
|
45
|
+
const entry = registry.getTokenByAddress(asset, chainId);
|
|
46
|
+
if (entry)
|
|
47
|
+
return entry.address;
|
|
48
|
+
return null; // unknown address — reject for safety
|
|
49
|
+
}
|
|
50
|
+
// Try registry lookup by symbol (e.g. "USDC", "WETH")
|
|
51
|
+
const entry = registry.getToken(asset.toUpperCase(), chainId);
|
|
52
|
+
if (entry)
|
|
53
|
+
return entry.address;
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get token decimals for a given asset+network pair.
|
|
58
|
+
* Used to correctly format amounts in x402 payments.
|
|
59
|
+
*
|
|
60
|
+
* @param asset - Asset address (hex) or symbol
|
|
61
|
+
* @param network - Network string (e.g. "base:8453")
|
|
62
|
+
* @returns Decimals, defaults to 6 for USDC-like stable, 18 for everything else
|
|
63
|
+
*/
|
|
64
|
+
export function resolveAssetDecimals(asset, network) {
|
|
65
|
+
const chainId = parseNetworkChainId(network);
|
|
66
|
+
if (chainId == null)
|
|
67
|
+
return 6;
|
|
68
|
+
const registry = getGlobalRegistry();
|
|
69
|
+
// Try by address first
|
|
70
|
+
if (/^0x[0-9a-fA-F]{40}$/.test(asset)) {
|
|
71
|
+
const entry = registry.getTokenByAddress(asset, chainId);
|
|
72
|
+
if (entry)
|
|
73
|
+
return entry.decimals;
|
|
74
|
+
// Unknown token — default to 18
|
|
75
|
+
return 18;
|
|
76
|
+
}
|
|
77
|
+
// Try by symbol
|
|
78
|
+
const entry = registry.getToken(asset.toUpperCase(), chainId);
|
|
79
|
+
if (entry)
|
|
80
|
+
return entry.decimals;
|
|
81
|
+
return 18;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Build a set of accepted payment assets for an x402 client, using the
|
|
85
|
+
* global registry to auto-populate known tokens per network.
|
|
86
|
+
*
|
|
87
|
+
* @param networks - List of network strings (e.g. ["base:8453", "arbitrum:42161"])
|
|
88
|
+
* @param symbols - Token symbols to include (e.g. ["USDC", "USDT", "WETH"])
|
|
89
|
+
* @returns Map from network string → array of token addresses
|
|
90
|
+
*/
|
|
91
|
+
export function buildSupportedAssets(networks, symbols = ['USDC', 'USDT', 'DAI', 'WETH']) {
|
|
92
|
+
const result = {};
|
|
93
|
+
const registry = getGlobalRegistry();
|
|
94
|
+
for (const network of networks) {
|
|
95
|
+
const chainId = parseNetworkChainId(network);
|
|
96
|
+
if (chainId == null)
|
|
97
|
+
continue;
|
|
98
|
+
const addrs = [];
|
|
99
|
+
for (const symbol of symbols) {
|
|
100
|
+
const entry = registry.getToken(symbol, chainId);
|
|
101
|
+
if (entry && !entry.isNative) {
|
|
102
|
+
addrs.push(entry.address);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Always include USDC from the existing USDC_ADDRESSES table as fallback
|
|
106
|
+
const usdcFallback = USDC_ADDRESSES[network];
|
|
107
|
+
if (usdcFallback && !addrs.some(a => a.toLowerCase() === usdcFallback.toLowerCase())) {
|
|
108
|
+
addrs.push(usdcFallback);
|
|
109
|
+
}
|
|
110
|
+
if (addrs.length > 0) {
|
|
111
|
+
result[network] = addrs;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if a given asset address is a known stablecoin (6 decimals) on the network.
|
|
118
|
+
*/
|
|
119
|
+
export function isStablecoin(asset, network) {
|
|
120
|
+
const decimals = resolveAssetDecimals(asset, network);
|
|
121
|
+
return decimals === 6;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=multi-asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-asset.js","sourceRoot":"","sources":["../../src/x402/multi-asset.ts"],"names":[],"mappings":"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"}
|
package/dist/x402/types.d.ts
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module x402/types
|
|
3
|
+
* x402 protocol type definitions and well-known asset constants.
|
|
4
|
+
*
|
|
5
|
+
* Implements the x402 HTTP payment protocol spec (coinbase/x402) for
|
|
6
|
+
* multi-chain USDC payments. Covers 10 mainnet chains: Base, Ethereum,
|
|
7
|
+
* Arbitrum, Polygon, Optimism, Avalanche, Unichain, Linea, Sonic, Worldchain.
|
|
8
|
+
*
|
|
9
|
+
* USDC addresses are sourced from Circle's official registry:
|
|
10
|
+
* https://developers.circle.com/stablecoins/usdc-contract-addresses
|
|
11
|
+
*/
|
|
1
12
|
import type { Address, Hash } from 'viem';
|
|
2
13
|
/** Resource information included in x402 responses */
|
|
3
14
|
export interface X402ResourceInfo {
|
|
@@ -84,8 +95,16 @@ export interface X402ClientConfig {
|
|
|
84
95
|
/** Callback after payment */
|
|
85
96
|
onPaymentComplete?: (log: X402TransactionLog) => void;
|
|
86
97
|
}
|
|
87
|
-
/**
|
|
98
|
+
/**
|
|
99
|
+
* USDC contract addresses by network (chain-name:chainId format).
|
|
100
|
+
* Sources:
|
|
101
|
+
* - EVM chains: https://developers.circle.com/cctp/references/contract-addresses
|
|
102
|
+
* - Linea: https://linea.build/ecosystem/usdc
|
|
103
|
+
* - Unichain: https://docs.unichain.org/docs/technical-information/token-addresses
|
|
104
|
+
* - Sonic: https://docs.soniclabs.com/build/useful-addresses
|
|
105
|
+
* - Worldchain: https://docs.worldcoin.org/world-chain/addresses/usdc
|
|
106
|
+
*/
|
|
88
107
|
export declare const USDC_ADDRESSES: Record<string, Address>;
|
|
89
|
-
/** Default supported networks */
|
|
90
|
-
export declare const DEFAULT_SUPPORTED_NETWORKS: readonly ["base:8453"];
|
|
108
|
+
/** Default supported networks (all mainnet chains) */
|
|
109
|
+
export declare const DEFAULT_SUPPORTED_NETWORKS: readonly ["base:8453", "ethereum:1", "arbitrum:42161", "polygon:137", "optimism:10", "avalanche:43114", "unichain:130", "linea:59144", "sonic:146", "worldchain:480"];
|
|
91
110
|
//# sourceMappingURL=types.d.ts.map
|