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,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FiatOnramp — optional fiat-to-crypto onramp module for agentwallet-sdk.
|
|
3
|
+
*
|
|
4
|
+
* ╔══════════════════════════════════════════════════════════════════════╗
|
|
5
|
+
* ║ KYC NOTICE — IMPORTANT ║
|
|
6
|
+
* ║ ║
|
|
7
|
+
* ║ This module is entirely OPT-IN. Users who fund their agent wallet ║
|
|
8
|
+
* ║ via direct crypto transfer, bridge, or any other method NEVER ║
|
|
9
|
+
* ║ encounter KYC and remain fully anonymous. ║
|
|
10
|
+
* ║ ║
|
|
11
|
+
* ║ KYC only occurs when a user explicitly chooses to use this fiat ║
|
|
12
|
+
* ║ onramp feature. KYC is handled entirely by the third-party ║
|
|
13
|
+
* ║ provider (MoonPay, Stripe, Transak) on their hosted page. ║
|
|
14
|
+
* ║ The SDK never collects, stores, or transmits any KYC data. ║
|
|
15
|
+
* ╚══════════════════════════════════════════════════════════════════════╝
|
|
16
|
+
*/
|
|
17
|
+
import { buildProviders } from './providers/index.js';
|
|
18
|
+
/**
|
|
19
|
+
* FiatOnramp — aggregates multiple fiat onramp providers into a single interface.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { FiatOnramp } from 'agentwallet-sdk';
|
|
24
|
+
*
|
|
25
|
+
* // Only configure providers you have API keys for
|
|
26
|
+
* const onramp = new FiatOnramp({
|
|
27
|
+
* moonpayApiKey: process.env.MOONPAY_API_KEY,
|
|
28
|
+
* transakApiKey: process.env.TRANSAK_API_KEY,
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* // Get quotes from all configured providers
|
|
32
|
+
* const quotes = await onramp.getQuotes({
|
|
33
|
+
* amount: 100,
|
|
34
|
+
* currency: 'USD',
|
|
35
|
+
* token: 'USDC',
|
|
36
|
+
* chain: 'base',
|
|
37
|
+
* walletAddress: '0xYourWalletAddress',
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* // Open the purchaseUrl in a browser to complete KYC + payment on the provider's page
|
|
41
|
+
* console.log(quotes[0].purchaseUrl);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class FiatOnramp {
|
|
45
|
+
/**
|
|
46
|
+
* Create a FiatOnramp instance.
|
|
47
|
+
*
|
|
48
|
+
* @param config - Provider API keys and defaults. All fields are optional.
|
|
49
|
+
* Passing no config (or an empty object) is valid — it returns
|
|
50
|
+
* an empty provider list, causing zero friction for users who
|
|
51
|
+
* don't want fiat onramp.
|
|
52
|
+
*/
|
|
53
|
+
constructor(config = {}) {
|
|
54
|
+
this.config = config;
|
|
55
|
+
this.providers = buildProviders(config);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get quotes from all configured providers that support the given chain/token.
|
|
59
|
+
* Failed providers are silently skipped (logged to console.warn).
|
|
60
|
+
*
|
|
61
|
+
* @returns Array of FiatQuote — may be empty if no providers are configured
|
|
62
|
+
* or if none support the requested chain/token combination.
|
|
63
|
+
*/
|
|
64
|
+
async getQuotes(params) {
|
|
65
|
+
const resolvedParams = {
|
|
66
|
+
...params,
|
|
67
|
+
currency: params.currency ?? this.config.defaultCurrency ?? 'USD',
|
|
68
|
+
};
|
|
69
|
+
const supportedProviders = this.providers.filter((p) => this.isSupported(p.name, resolvedParams.chain, resolvedParams.token));
|
|
70
|
+
const results = await Promise.allSettled(supportedProviders.map((p) => p.getQuote(resolvedParams)));
|
|
71
|
+
const quotes = [];
|
|
72
|
+
for (let i = 0; i < results.length; i++) {
|
|
73
|
+
const result = results[i];
|
|
74
|
+
if (result.status === 'fulfilled') {
|
|
75
|
+
quotes.push(result.value);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.warn(`[FiatOnramp] ${supportedProviders[i].name} quote failed:`, result.reason);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return quotes;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Create a purchase session with a specific provider.
|
|
85
|
+
* Returns a FiatQuote containing a purchaseUrl — open this in a browser
|
|
86
|
+
* to complete KYC + payment on the provider's hosted page.
|
|
87
|
+
*
|
|
88
|
+
* @throws Error if the provider is not configured or doesn't support the chain/token.
|
|
89
|
+
*/
|
|
90
|
+
async createSession(params) {
|
|
91
|
+
const { provider: providerName, ...onrampParams } = params;
|
|
92
|
+
const resolvedParams = {
|
|
93
|
+
...onrampParams,
|
|
94
|
+
currency: onrampParams.currency ?? this.config.defaultCurrency ?? 'USD',
|
|
95
|
+
};
|
|
96
|
+
const provider = this.providers.find((p) => p.name === providerName);
|
|
97
|
+
if (!provider) {
|
|
98
|
+
const configuredNames = this.providers.map((p) => p.name);
|
|
99
|
+
if (configuredNames.length === 0) {
|
|
100
|
+
throw new Error(`No fiat providers configured. Add an API key for '${providerName}' in FiatOnrampConfig.`);
|
|
101
|
+
}
|
|
102
|
+
throw new Error(`Provider '${providerName}' is not configured. Configured providers: ${configuredNames.join(', ')}`);
|
|
103
|
+
}
|
|
104
|
+
if (!this.isSupported(providerName, resolvedParams.chain, resolvedParams.token)) {
|
|
105
|
+
throw new Error(`Provider '${providerName}' does not support ${resolvedParams.token} on ${resolvedParams.chain}. ` +
|
|
106
|
+
`Supported tokens: ${(provider.supportedAssets[resolvedParams.chain] ?? []).join(', ')}`);
|
|
107
|
+
}
|
|
108
|
+
return provider.createSession(resolvedParams);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if a provider supports a given chain/token combination.
|
|
112
|
+
*
|
|
113
|
+
* @param provider - Provider name: 'moonpay', 'stripe', 'transak'
|
|
114
|
+
* @param chain - Blockchain name: 'ethereum', 'base', 'solana', etc.
|
|
115
|
+
* @param token - Token symbol: 'USDC', 'ETH', 'SOL', etc.
|
|
116
|
+
*/
|
|
117
|
+
isSupported(provider, chain, token) {
|
|
118
|
+
const p = this.providers.find((pr) => pr.name === provider);
|
|
119
|
+
if (!p)
|
|
120
|
+
return false;
|
|
121
|
+
const tokens = p.supportedAssets[chain.toLowerCase()];
|
|
122
|
+
return Array.isArray(tokens) && tokens.includes(token.toUpperCase());
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get the names of all configured providers.
|
|
126
|
+
* Returns an empty array if no API keys were provided.
|
|
127
|
+
*/
|
|
128
|
+
getProviders() {
|
|
129
|
+
return this.providers.map((p) => p.name);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get the chains supported by a given provider.
|
|
133
|
+
*
|
|
134
|
+
* @param provider - Provider name: 'moonpay', 'stripe', 'transak'
|
|
135
|
+
*/
|
|
136
|
+
getSupportedChains(provider) {
|
|
137
|
+
const p = this.providers.find((pr) => pr.name === provider);
|
|
138
|
+
if (!p)
|
|
139
|
+
return [];
|
|
140
|
+
return Object.keys(p.supportedAssets);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get the tokens supported by a given provider on a given chain.
|
|
144
|
+
*
|
|
145
|
+
* @param provider - Provider name: 'moonpay', 'stripe', 'transak'
|
|
146
|
+
* @param chain - Blockchain name: 'ethereum', 'base', 'solana', etc.
|
|
147
|
+
*/
|
|
148
|
+
getSupportedTokens(provider, chain) {
|
|
149
|
+
const p = this.providers.find((pr) => pr.name === provider);
|
|
150
|
+
if (!p)
|
|
151
|
+
return [];
|
|
152
|
+
return p.supportedAssets[chain.toLowerCase()] ?? [];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=onramp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onramp.js","sourceRoot":"","sources":["../../src/fiat/onramp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider registry — assembles configured providers from FiatOnrampConfig.
|
|
3
|
+
*/
|
|
4
|
+
import type { FiatOnrampConfig, FiatProvider } from '../types.js';
|
|
5
|
+
export { MoonPayProvider } from './moonpay.js';
|
|
6
|
+
export { StripeProvider } from './stripe.js';
|
|
7
|
+
export { TransakProvider } from './transak.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build the list of configured providers from the given config.
|
|
10
|
+
* Providers without an API key are excluded gracefully.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildProviders(config: FiatOnrampConfig): FiatProvider[];
|
|
13
|
+
/** All known provider names */
|
|
14
|
+
export declare const ALL_PROVIDER_NAMES: readonly ["moonpay", "stripe", "transak"];
|
|
15
|
+
export type ProviderName = (typeof ALL_PROVIDER_NAMES)[number];
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fiat/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKlE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAevE;AAED,+BAA+B;AAC/B,eAAO,MAAM,kBAAkB,2CAA4C,CAAC;AAC5E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider registry — assembles configured providers from FiatOnrampConfig.
|
|
3
|
+
*/
|
|
4
|
+
import { MoonPayProvider } from './moonpay.js';
|
|
5
|
+
import { StripeProvider } from './stripe.js';
|
|
6
|
+
import { TransakProvider } from './transak.js';
|
|
7
|
+
export { MoonPayProvider } from './moonpay.js';
|
|
8
|
+
export { StripeProvider } from './stripe.js';
|
|
9
|
+
export { TransakProvider } from './transak.js';
|
|
10
|
+
/**
|
|
11
|
+
* Build the list of configured providers from the given config.
|
|
12
|
+
* Providers without an API key are excluded gracefully.
|
|
13
|
+
*/
|
|
14
|
+
export function buildProviders(config) {
|
|
15
|
+
const providers = [];
|
|
16
|
+
const testMode = config.testMode ?? false;
|
|
17
|
+
if (config.moonpayApiKey) {
|
|
18
|
+
providers.push(new MoonPayProvider(config.moonpayApiKey, testMode));
|
|
19
|
+
}
|
|
20
|
+
if (config.stripeApiKey) {
|
|
21
|
+
providers.push(new StripeProvider(config.stripeApiKey, testMode));
|
|
22
|
+
}
|
|
23
|
+
if (config.transakApiKey) {
|
|
24
|
+
providers.push(new TransakProvider(config.transakApiKey, testMode));
|
|
25
|
+
}
|
|
26
|
+
return providers;
|
|
27
|
+
}
|
|
28
|
+
/** All known provider names */
|
|
29
|
+
export const ALL_PROVIDER_NAMES = ['moonpay', 'stripe', 'transak'];
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fiat/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAwB;IACrD,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;IAE1C,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,SAAS,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,SAAS,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,SAAS,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MoonPay Provider
|
|
3
|
+
*
|
|
4
|
+
* Creates buy quotes and purchase URLs via MoonPay's REST API.
|
|
5
|
+
* KYC + payment happen on MoonPay's hosted page — we never see KYC data.
|
|
6
|
+
*
|
|
7
|
+
* API reference: https://dev.moonpay.com/reference/buy-quote
|
|
8
|
+
* Dashboard: https://dashboard.moonpay.com
|
|
9
|
+
*/
|
|
10
|
+
import type { FiatProvider, FiatQuote, OnrampParams } from '../types.js';
|
|
11
|
+
export declare class MoonPayProvider implements FiatProvider {
|
|
12
|
+
readonly name = "moonpay";
|
|
13
|
+
readonly supportedAssets: Record<string, string[]>;
|
|
14
|
+
private apiKey;
|
|
15
|
+
private baseUrl;
|
|
16
|
+
constructor(apiKey: string, testMode?: boolean);
|
|
17
|
+
get isConfigured(): boolean;
|
|
18
|
+
getQuote(params: OnrampParams): Promise<FiatQuote>;
|
|
19
|
+
createSession(params: OnrampParams): Promise<FiatQuote>;
|
|
20
|
+
private buildPurchaseUrl;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=moonpay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moonpay.d.ts","sourceRoot":"","sources":["../../../src/fiat/providers/moonpay.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAuCzE,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,eAAe,2BAAoB;IAE5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,QAAQ,UAAQ;IAK5C,IAAI,YAAY,IAAI,OAAO,CAE1B;IAEK,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAoDlD,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAK7D,OAAO,CAAC,gBAAgB;CAazB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MoonPay Provider
|
|
3
|
+
*
|
|
4
|
+
* Creates buy quotes and purchase URLs via MoonPay's REST API.
|
|
5
|
+
* KYC + payment happen on MoonPay's hosted page — we never see KYC data.
|
|
6
|
+
*
|
|
7
|
+
* API reference: https://dev.moonpay.com/reference/buy-quote
|
|
8
|
+
* Dashboard: https://dashboard.moonpay.com
|
|
9
|
+
*/
|
|
10
|
+
const MOONPAY_BASE_URL = 'https://api.moonpay.com';
|
|
11
|
+
const MOONPAY_SANDBOX_URL = 'https://api.moonpay.com'; // Same endpoint, uses sandbox key
|
|
12
|
+
/** MoonPay currency code mappings: our token → MoonPay currency code */
|
|
13
|
+
const TOKEN_MAP = {
|
|
14
|
+
USDC: 'usdc',
|
|
15
|
+
ETH: 'eth',
|
|
16
|
+
SOL: 'sol',
|
|
17
|
+
BTC: 'btc',
|
|
18
|
+
MATIC: 'matic_polygon',
|
|
19
|
+
USDT: 'usdt',
|
|
20
|
+
};
|
|
21
|
+
/** Chain-specific token suffixes for MoonPay (e.g., usdc on base = usdc_base) */
|
|
22
|
+
const CHAIN_TOKEN_MAP = {
|
|
23
|
+
base: { USDC: 'usdc_base', ETH: 'eth_base' },
|
|
24
|
+
ethereum: { USDC: 'usdc', ETH: 'eth', USDT: 'usdt' },
|
|
25
|
+
solana: { USDC: 'usdc_sol', SOL: 'sol' },
|
|
26
|
+
polygon: { USDC: 'usdc_polygon', MATIC: 'matic_polygon', USDT: 'usdt_polygon' },
|
|
27
|
+
arbitrum: { USDC: 'usdc_arbitrum', ETH: 'eth_arbitrum' },
|
|
28
|
+
optimism: { USDC: 'usdc_optimism', ETH: 'eth_optimism' },
|
|
29
|
+
};
|
|
30
|
+
/** Supported assets by chain */
|
|
31
|
+
const SUPPORTED_ASSETS = {
|
|
32
|
+
ethereum: ['ETH', 'USDC', 'USDT'],
|
|
33
|
+
base: ['ETH', 'USDC'],
|
|
34
|
+
solana: ['SOL', 'USDC'],
|
|
35
|
+
polygon: ['MATIC', 'USDC', 'USDT'],
|
|
36
|
+
arbitrum: ['ETH', 'USDC'],
|
|
37
|
+
optimism: ['ETH', 'USDC'],
|
|
38
|
+
};
|
|
39
|
+
function getMoonPayCurrencyCode(chain, token) {
|
|
40
|
+
return CHAIN_TOKEN_MAP[chain]?.[token] ?? TOKEN_MAP[token] ?? token.toLowerCase();
|
|
41
|
+
}
|
|
42
|
+
export class MoonPayProvider {
|
|
43
|
+
constructor(apiKey, testMode = false) {
|
|
44
|
+
this.name = 'moonpay';
|
|
45
|
+
this.supportedAssets = SUPPORTED_ASSETS;
|
|
46
|
+
this.apiKey = apiKey;
|
|
47
|
+
this.baseUrl = testMode ? MOONPAY_SANDBOX_URL : MOONPAY_BASE_URL;
|
|
48
|
+
}
|
|
49
|
+
get isConfigured() {
|
|
50
|
+
return Boolean(this.apiKey);
|
|
51
|
+
}
|
|
52
|
+
async getQuote(params) {
|
|
53
|
+
const currencyCode = getMoonPayCurrencyCode(params.chain, params.token);
|
|
54
|
+
const fiatCurrency = (params.currency ?? 'USD').toLowerCase();
|
|
55
|
+
const url = new URL(`${this.baseUrl}/v3/currencies/${currencyCode}/buy_quote`);
|
|
56
|
+
url.searchParams.set('apiKey', this.apiKey);
|
|
57
|
+
url.searchParams.set('baseCurrencyAmount', String(params.amount));
|
|
58
|
+
url.searchParams.set('baseCurrencyCode', fiatCurrency);
|
|
59
|
+
url.searchParams.set('areFeesIncluded', 'false');
|
|
60
|
+
const response = await fetch(url.toString(), {
|
|
61
|
+
headers: { Accept: 'application/json' },
|
|
62
|
+
});
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
const errorText = await response.text().catch(() => response.statusText);
|
|
65
|
+
throw new Error(`MoonPay API error ${response.status}: ${errorText}`);
|
|
66
|
+
}
|
|
67
|
+
const data = await response.json();
|
|
68
|
+
const grossCrypto = data.quoteCurrencyAmount ?? 0;
|
|
69
|
+
const feeAmount = (data.feeAmount ?? 0) + (data.extraFeeAmount ?? 0) + (data.networkFeeAmount ?? 0);
|
|
70
|
+
const feePercent = params.amount > 0 ? (feeAmount / params.amount) * 100 : 0;
|
|
71
|
+
// Build the purchase URL (MoonPay hosted widget)
|
|
72
|
+
const purchaseUrl = this.buildPurchaseUrl(params, currencyCode, fiatCurrency);
|
|
73
|
+
return {
|
|
74
|
+
provider: this.name,
|
|
75
|
+
fiatAmount: params.amount,
|
|
76
|
+
fiatCurrency: (params.currency ?? 'USD').toUpperCase(),
|
|
77
|
+
cryptoAmount: String(grossCrypto),
|
|
78
|
+
cryptoToken: params.token.toUpperCase(),
|
|
79
|
+
chain: params.chain,
|
|
80
|
+
feeAmount,
|
|
81
|
+
feePercent: Math.round(feePercent * 100) / 100,
|
|
82
|
+
netCryptoAmount: String(grossCrypto),
|
|
83
|
+
paymentMethods: ['card', 'bank_transfer', 'apple_pay', 'google_pay'],
|
|
84
|
+
estimatedTimeMinutes: 10,
|
|
85
|
+
kycRequired: true,
|
|
86
|
+
purchaseUrl,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
async createSession(params) {
|
|
90
|
+
// MoonPay uses a URL-based flow — the "session" IS the purchase URL
|
|
91
|
+
return this.getQuote(params);
|
|
92
|
+
}
|
|
93
|
+
buildPurchaseUrl(params, currencyCode, fiatCurrency) {
|
|
94
|
+
const base = 'https://buy.moonpay.com';
|
|
95
|
+
const url = new URL(base);
|
|
96
|
+
url.searchParams.set('apiKey', this.apiKey);
|
|
97
|
+
url.searchParams.set('currencyCode', currencyCode);
|
|
98
|
+
url.searchParams.set('baseCurrencyCode', fiatCurrency);
|
|
99
|
+
url.searchParams.set('baseCurrencyAmount', String(params.amount));
|
|
100
|
+
url.searchParams.set('walletAddress', params.walletAddress);
|
|
101
|
+
if (params.redirectUrl) {
|
|
102
|
+
url.searchParams.set('redirectURL', params.redirectUrl);
|
|
103
|
+
}
|
|
104
|
+
return url.toString();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=moonpay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moonpay.js","sourceRoot":"","sources":["../../../src/fiat/providers/moonpay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stripe Crypto Onramp Provider
|
|
3
|
+
*
|
|
4
|
+
* Creates onramp sessions via Stripe's REST API.
|
|
5
|
+
* Returns a hosted URL where users complete KYC + payment on Stripe's page.
|
|
6
|
+
* We never handle KYC data — it stays entirely within Stripe's infrastructure.
|
|
7
|
+
*
|
|
8
|
+
* API reference: https://docs.stripe.com/crypto/onramp
|
|
9
|
+
* Dashboard: https://dashboard.stripe.com
|
|
10
|
+
*
|
|
11
|
+
* Note: Stripe Crypto Onramp requires a server-side secret key to create sessions.
|
|
12
|
+
* The publishable key alone cannot create sessions. For agent use cases, the
|
|
13
|
+
* stripeApiKey in config should be the secret key (sk_live_... or sk_test_...).
|
|
14
|
+
*/
|
|
15
|
+
import type { FiatProvider, FiatQuote, OnrampParams } from '../types.js';
|
|
16
|
+
export declare class StripeProvider implements FiatProvider {
|
|
17
|
+
readonly name = "stripe";
|
|
18
|
+
readonly supportedAssets: Record<string, string[]>;
|
|
19
|
+
private apiKey;
|
|
20
|
+
constructor(apiKey: string, _testMode?: boolean);
|
|
21
|
+
get isConfigured(): boolean;
|
|
22
|
+
getQuote(params: OnrampParams): Promise<FiatQuote>;
|
|
23
|
+
createSession(params: OnrampParams): Promise<FiatQuote>;
|
|
24
|
+
private estimateCrypto;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=stripe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../../src/fiat/providers/stripe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiCzE,qBAAa,cAAe,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,eAAe,2BAAoB;IAE5C,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM,EAAE,SAAS,UAAQ;IAI7C,IAAI,YAAY,IAAI,OAAO,CAE1B;IAEK,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IA2BlD,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAoE7D,OAAO,CAAC,cAAc;CAQvB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stripe Crypto Onramp Provider
|
|
3
|
+
*
|
|
4
|
+
* Creates onramp sessions via Stripe's REST API.
|
|
5
|
+
* Returns a hosted URL where users complete KYC + payment on Stripe's page.
|
|
6
|
+
* We never handle KYC data — it stays entirely within Stripe's infrastructure.
|
|
7
|
+
*
|
|
8
|
+
* API reference: https://docs.stripe.com/crypto/onramp
|
|
9
|
+
* Dashboard: https://dashboard.stripe.com
|
|
10
|
+
*
|
|
11
|
+
* Note: Stripe Crypto Onramp requires a server-side secret key to create sessions.
|
|
12
|
+
* The publishable key alone cannot create sessions. For agent use cases, the
|
|
13
|
+
* stripeApiKey in config should be the secret key (sk_live_... or sk_test_...).
|
|
14
|
+
*/
|
|
15
|
+
const STRIPE_API_URL = 'https://api.stripe.com/v1/crypto/onramp_sessions';
|
|
16
|
+
/** Stripe's crypto destination network identifiers */
|
|
17
|
+
const CHAIN_MAP = {
|
|
18
|
+
ethereum: 'ethereum',
|
|
19
|
+
base: 'base',
|
|
20
|
+
solana: 'solana',
|
|
21
|
+
polygon: 'polygon',
|
|
22
|
+
arbitrum: 'arbitrum',
|
|
23
|
+
optimism: 'optimism',
|
|
24
|
+
};
|
|
25
|
+
/** Stripe's crypto currency identifiers */
|
|
26
|
+
const TOKEN_MAP = {
|
|
27
|
+
USDC: 'usdc',
|
|
28
|
+
ETH: 'eth',
|
|
29
|
+
SOL: 'sol',
|
|
30
|
+
MATIC: 'matic',
|
|
31
|
+
BTC: 'btc',
|
|
32
|
+
};
|
|
33
|
+
/** Supported assets by chain for Stripe */
|
|
34
|
+
const SUPPORTED_ASSETS = {
|
|
35
|
+
ethereum: ['ETH', 'USDC'],
|
|
36
|
+
base: ['ETH', 'USDC'],
|
|
37
|
+
solana: ['SOL', 'USDC'],
|
|
38
|
+
polygon: ['MATIC', 'USDC'],
|
|
39
|
+
arbitrum: ['ETH', 'USDC'],
|
|
40
|
+
optimism: ['ETH', 'USDC'],
|
|
41
|
+
};
|
|
42
|
+
export class StripeProvider {
|
|
43
|
+
constructor(apiKey, _testMode = false) {
|
|
44
|
+
this.name = 'stripe';
|
|
45
|
+
this.supportedAssets = SUPPORTED_ASSETS;
|
|
46
|
+
this.apiKey = apiKey;
|
|
47
|
+
}
|
|
48
|
+
get isConfigured() {
|
|
49
|
+
return Boolean(this.apiKey);
|
|
50
|
+
}
|
|
51
|
+
async getQuote(params) {
|
|
52
|
+
// Stripe doesn't have a separate quote endpoint — createSession is the entry point.
|
|
53
|
+
// We estimate fees at ~1.5% (Stripe's standard crypto onramp rate).
|
|
54
|
+
const feePercent = 1.5;
|
|
55
|
+
const feeAmount = params.amount * (feePercent / 100);
|
|
56
|
+
const netFiat = params.amount - feeAmount;
|
|
57
|
+
// Placeholder rate estimates (real rates come from the session response)
|
|
58
|
+
const estimatedCryptoAmount = this.estimateCrypto(netFiat, params.token, params.currency ?? 'USD');
|
|
59
|
+
return {
|
|
60
|
+
provider: this.name,
|
|
61
|
+
fiatAmount: params.amount,
|
|
62
|
+
fiatCurrency: (params.currency ?? 'USD').toUpperCase(),
|
|
63
|
+
cryptoAmount: estimatedCryptoAmount,
|
|
64
|
+
cryptoToken: params.token.toUpperCase(),
|
|
65
|
+
chain: params.chain,
|
|
66
|
+
feeAmount,
|
|
67
|
+
feePercent,
|
|
68
|
+
netCryptoAmount: estimatedCryptoAmount,
|
|
69
|
+
paymentMethods: ['card', 'bank_transfer'],
|
|
70
|
+
estimatedTimeMinutes: 5,
|
|
71
|
+
kycRequired: true,
|
|
72
|
+
purchaseUrl: undefined, // Populated by createSession
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async createSession(params) {
|
|
76
|
+
const stripeChain = CHAIN_MAP[params.chain] ?? params.chain;
|
|
77
|
+
const stripeToken = TOKEN_MAP[params.token] ?? params.token.toLowerCase();
|
|
78
|
+
const currency = (params.currency ?? 'USD').toLowerCase();
|
|
79
|
+
// Build form-encoded body (Stripe uses application/x-www-form-urlencoded)
|
|
80
|
+
const body = new URLSearchParams();
|
|
81
|
+
body.set('transaction_details[wallet_address]', params.walletAddress);
|
|
82
|
+
body.set('transaction_details[supported_destination_networks][]', stripeChain);
|
|
83
|
+
body.set('transaction_details[supported_destination_currencies][]', stripeToken);
|
|
84
|
+
body.set('transaction_details[destination_network]', stripeChain);
|
|
85
|
+
body.set('transaction_details[destination_currency]', stripeToken);
|
|
86
|
+
body.set('transaction_details[source_currency]', currency);
|
|
87
|
+
body.set('transaction_details[source_amount]', String(params.amount));
|
|
88
|
+
if (params.redirectUrl) {
|
|
89
|
+
body.set('customer_ip_address', ''); // Required field — agent provides blank
|
|
90
|
+
}
|
|
91
|
+
const response = await fetch(STRIPE_API_URL, {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
headers: {
|
|
94
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
95
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
96
|
+
},
|
|
97
|
+
body: body.toString(),
|
|
98
|
+
});
|
|
99
|
+
if (!response.ok) {
|
|
100
|
+
const errorData = await response.json().catch(() => ({ error: { message: response.statusText } }));
|
|
101
|
+
throw new Error(`Stripe API error ${response.status}: ${errorData.error?.message ?? response.statusText}`);
|
|
102
|
+
}
|
|
103
|
+
const session = await response.json();
|
|
104
|
+
const txDetails = session.transaction_details ?? {};
|
|
105
|
+
const fiatAmount = parseFloat(txDetails.source_amount ?? String(params.amount));
|
|
106
|
+
const cryptoAmount = txDetails.destination_amount ?? '0';
|
|
107
|
+
const feeAmount = parseFloat(txDetails.fees?.amount ?? String(params.amount * 0.015));
|
|
108
|
+
const feePercent = fiatAmount > 0 ? (feeAmount / fiatAmount) * 100 : 1.5;
|
|
109
|
+
return {
|
|
110
|
+
provider: this.name,
|
|
111
|
+
fiatAmount,
|
|
112
|
+
fiatCurrency: (params.currency ?? 'USD').toUpperCase(),
|
|
113
|
+
cryptoAmount,
|
|
114
|
+
cryptoToken: params.token.toUpperCase(),
|
|
115
|
+
chain: params.chain,
|
|
116
|
+
feeAmount,
|
|
117
|
+
feePercent: Math.round(feePercent * 100) / 100,
|
|
118
|
+
netCryptoAmount: cryptoAmount,
|
|
119
|
+
paymentMethods: ['card', 'bank_transfer'],
|
|
120
|
+
estimatedTimeMinutes: 5,
|
|
121
|
+
kycRequired: true,
|
|
122
|
+
purchaseUrl: session.redirect_url,
|
|
123
|
+
sessionId: session.id,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
estimateCrypto(netFiat, token, _currency) {
|
|
127
|
+
// Very rough estimates for quote previews — real amounts come from createSession
|
|
128
|
+
const rates = {
|
|
129
|
+
ETH: 3000, SOL: 150, BTC: 65000, USDC: 1, USDT: 1, MATIC: 0.8,
|
|
130
|
+
};
|
|
131
|
+
const rate = rates[token.toUpperCase()] ?? 1;
|
|
132
|
+
return (netFiat / rate).toFixed(6);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=stripe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/fiat/providers/stripe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transak Provider
|
|
3
|
+
*
|
|
4
|
+
* Creates onramp sessions via Transak's REST API.
|
|
5
|
+
* Returns a hosted URL where users complete KYC + payment on Transak's page.
|
|
6
|
+
* We never handle KYC data — it stays entirely within Transak's infrastructure.
|
|
7
|
+
*
|
|
8
|
+
* API reference: https://docs.transak.com/reference/get-price
|
|
9
|
+
* Dashboard: https://dashboard.transak.com
|
|
10
|
+
*/
|
|
11
|
+
import type { FiatProvider, FiatQuote, OnrampParams } from '../types.js';
|
|
12
|
+
export declare class TransakProvider implements FiatProvider {
|
|
13
|
+
readonly name = "transak";
|
|
14
|
+
readonly supportedAssets: Record<string, string[]>;
|
|
15
|
+
private apiKey;
|
|
16
|
+
private testMode;
|
|
17
|
+
private baseUrl;
|
|
18
|
+
private widgetUrl;
|
|
19
|
+
constructor(apiKey: string, testMode?: boolean);
|
|
20
|
+
get isConfigured(): boolean;
|
|
21
|
+
getQuote(params: OnrampParams): Promise<FiatQuote>;
|
|
22
|
+
createSession(params: OnrampParams): Promise<FiatQuote>;
|
|
23
|
+
private buildWidgetUrl;
|
|
24
|
+
private extractPaymentMethods;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=transak.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transak.d.ts","sourceRoot":"","sources":["../../../src/fiat/providers/transak.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgDzE,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,eAAe,2BAAoB;IAE5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,MAAM,EAAE,QAAQ,UAAQ;IAO5C,IAAI,YAAY,IAAI,OAAO,CAE1B;IAEK,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAmDlD,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAK7D,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,qBAAqB;CAM9B"}
|