agentwallet-sdk 3.3.0 → 3.4.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/README.md +2 -536
- package/dist/bridge/abis.d.ts +48 -171
- package/dist/bridge/abis.d.ts.map +1 -1
- package/dist/bridge/abis.js.map +1 -1
- package/dist/bridge/client.d.ts +2 -41
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +35 -168
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +2 -4
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1 -8
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/types.d.ts +15 -134
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +16 -170
- package/dist/bridge/types.js.map +1 -1
- package/dist/identity/erc8004.d.ts +2 -240
- package/dist/identity/erc8004.d.ts.map +1 -1
- package/dist/identity/erc8004.js +58 -334
- package/dist/identity/erc8004.js.map +1 -1
- package/dist/index.d.ts +313 -136
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -59
- package/dist/index.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +6 -50
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +25 -153
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/abi.d.ts +47 -165
- package/dist/swap/abi.d.ts.map +1 -1
- package/dist/swap/abi.js.map +1 -1
- package/dist/swap/index.d.ts +2 -3
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +1 -4
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/types.d.ts +6 -36
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +0 -1
- package/dist/swap/types.js.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- 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/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 +1 -4
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +2 -16
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/index.d.ts +3 -1
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +3 -1
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/types.d.ts +3 -5
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +2 -17
- package/dist/x402/types.js.map +1 -1
- package/package.json +12 -32
- 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 -25
- 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/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 -4
- 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/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 -138
- 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 -89
- 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 -21
- 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 -116
- 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 -8
- 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/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -25
- 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
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { ISwapProvider, AggregatorQuote, QuoteParams } from '../types.js';
|
|
2
|
-
/**
|
|
3
|
-
* UniswapProvider — wraps the existing Uniswap V3 QuoterV2 via on-chain read.
|
|
4
|
-
* In router context we simulate a quote using known pool data.
|
|
5
|
-
* For real execution, use SwapModule directly.
|
|
6
|
-
*/
|
|
7
|
-
export declare class UniswapProvider implements ISwapProvider {
|
|
8
|
-
readonly name = "uniswap";
|
|
9
|
-
readonly supportedChains: string[];
|
|
10
|
-
/** Optional QuoterV2 fetch override for testing */
|
|
11
|
-
private readonly fetcher?;
|
|
12
|
-
constructor(options?: {
|
|
13
|
-
fetcher?: (p: QuoteParams) => Promise<AggregatorQuote | null>;
|
|
14
|
-
});
|
|
15
|
-
getQuote(params: QuoteParams, timeoutMs: number): Promise<AggregatorQuote | null>;
|
|
16
|
-
}
|
|
17
|
-
export declare function buildQuote(opts: {
|
|
18
|
-
provider: string;
|
|
19
|
-
params: QuoteParams;
|
|
20
|
-
toAmount: bigint;
|
|
21
|
-
gasEstimate: bigint;
|
|
22
|
-
gasEstimateUsd: number;
|
|
23
|
-
platformFee: number;
|
|
24
|
-
priceImpact: number;
|
|
25
|
-
route: string[];
|
|
26
|
-
estimatedTimeMs: number;
|
|
27
|
-
mevProtected: boolean;
|
|
28
|
-
txData?: AggregatorQuote['txData'];
|
|
29
|
-
metadata?: Record<string, unknown>;
|
|
30
|
-
}): AggregatorQuote;
|
|
31
|
-
//# sourceMappingURL=uniswap.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uniswap.d.ts","sourceRoot":"","sources":["../../../../src/swap/router/providers/uniswap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/E;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,aAAa;IACnD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,eAAe,WAAkB;IAE1C,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA2D;gBAExE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA;KAAO;IAIrF,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CA+DxF;AAsBD,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,eAAe,CAwBlB"}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { CHAIN_IDS } from '../types.js';
|
|
2
|
-
/** Chains where Uniswap V3 is deployed */
|
|
3
|
-
const UNISWAP_CHAINS = ['ethereum', 'base', 'arbitrum', 'optimism', 'polygon'];
|
|
4
|
-
/**
|
|
5
|
-
* UniswapProvider — wraps the existing Uniswap V3 QuoterV2 via on-chain read.
|
|
6
|
-
* In router context we simulate a quote using known pool data.
|
|
7
|
-
* For real execution, use SwapModule directly.
|
|
8
|
-
*/
|
|
9
|
-
export class UniswapProvider {
|
|
10
|
-
constructor(options = {}) {
|
|
11
|
-
this.name = 'uniswap';
|
|
12
|
-
this.supportedChains = UNISWAP_CHAINS;
|
|
13
|
-
this.fetcher = options.fetcher;
|
|
14
|
-
}
|
|
15
|
-
async getQuote(params, timeoutMs) {
|
|
16
|
-
if (!UNISWAP_CHAINS.includes(params.chain.toLowerCase()))
|
|
17
|
-
return null;
|
|
18
|
-
if (this.fetcher) {
|
|
19
|
-
return withTimeout(this.fetcher(params), timeoutMs);
|
|
20
|
-
}
|
|
21
|
-
// Production path: call Uniswap V3 QuoterV2 via public RPC
|
|
22
|
-
// We delegate to the real SwapModule.getQuote() when a publicClient is available.
|
|
23
|
-
// For the router's quote-comparison use case we call the Uniswap quote API.
|
|
24
|
-
const chainId = CHAIN_IDS[params.chain.toLowerCase()];
|
|
25
|
-
if (!chainId)
|
|
26
|
-
return null;
|
|
27
|
-
try {
|
|
28
|
-
// Use Uniswap's hosted quote API (no key required)
|
|
29
|
-
const url = `https://api.uniswap.org/v2/quote`;
|
|
30
|
-
const body = {
|
|
31
|
-
tokenInChainId: chainId,
|
|
32
|
-
tokenOutChainId: chainId,
|
|
33
|
-
tokenInAddress: params.fromToken,
|
|
34
|
-
tokenOutAddress: params.toToken,
|
|
35
|
-
amount: params.amount,
|
|
36
|
-
type: 'EXACT_INPUT',
|
|
37
|
-
};
|
|
38
|
-
const controller = new AbortController();
|
|
39
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
40
|
-
try {
|
|
41
|
-
const res = await fetch(url, {
|
|
42
|
-
method: 'POST',
|
|
43
|
-
headers: { 'Content-Type': 'application/json' },
|
|
44
|
-
body: JSON.stringify(body),
|
|
45
|
-
signal: controller.signal,
|
|
46
|
-
});
|
|
47
|
-
if (!res.ok)
|
|
48
|
-
return null;
|
|
49
|
-
const data = (await res.json());
|
|
50
|
-
const toAmount = BigInt(String(data.quote ?? '0'));
|
|
51
|
-
const gasEstimate = BigInt(String(data.gasUseEstimate ?? '150000'));
|
|
52
|
-
const gasUsd = Number(data.gasUseEstimateUSD ?? 0);
|
|
53
|
-
return buildQuote({
|
|
54
|
-
provider: 'uniswap',
|
|
55
|
-
params,
|
|
56
|
-
toAmount,
|
|
57
|
-
gasEstimate,
|
|
58
|
-
gasEstimateUsd: gasUsd,
|
|
59
|
-
platformFee: 0,
|
|
60
|
-
priceImpact: Number(data.priceImpact ?? 0),
|
|
61
|
-
route: parseUniRoute(data),
|
|
62
|
-
estimatedTimeMs: 15000,
|
|
63
|
-
mevProtected: false,
|
|
64
|
-
metadata: data,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
finally {
|
|
68
|
-
clearTimeout(timer);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function parseUniRoute(data) {
|
|
77
|
-
try {
|
|
78
|
-
const routes = data.route;
|
|
79
|
-
const seen = new Set();
|
|
80
|
-
routes?.flat()?.forEach((hop) => hop?.protocol && seen.add(hop.protocol));
|
|
81
|
-
return seen.size > 0 ? Array.from(seen) : ['Uniswap V3'];
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
return ['Uniswap V3'];
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
function withTimeout(promise, ms) {
|
|
88
|
-
return Promise.race([
|
|
89
|
-
promise,
|
|
90
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), ms)),
|
|
91
|
-
]);
|
|
92
|
-
}
|
|
93
|
-
export function buildQuote(opts) {
|
|
94
|
-
// netOutput: toAmount minus gas cost normalised to token units (rough estimate)
|
|
95
|
-
// We subtract gasEstimateUsd * 1e6 from toAmount as a wei-equivalent penalty
|
|
96
|
-
const gasDeductionWei = BigInt(Math.round(opts.gasEstimateUsd * 1e6));
|
|
97
|
-
const netOutput = opts.toAmount > gasDeductionWei ? opts.toAmount - gasDeductionWei : 0n;
|
|
98
|
-
return {
|
|
99
|
-
provider: opts.provider,
|
|
100
|
-
fromToken: opts.params.fromToken,
|
|
101
|
-
toToken: opts.params.toToken,
|
|
102
|
-
fromAmount: BigInt(opts.params.amount),
|
|
103
|
-
toAmount: opts.toAmount,
|
|
104
|
-
gasEstimate: opts.gasEstimate,
|
|
105
|
-
gasEstimateUsd: opts.gasEstimateUsd,
|
|
106
|
-
platformFee: opts.platformFee,
|
|
107
|
-
netOutput,
|
|
108
|
-
priceImpact: opts.priceImpact,
|
|
109
|
-
route: opts.route,
|
|
110
|
-
estimatedTimeMs: opts.estimatedTimeMs,
|
|
111
|
-
mevProtected: opts.mevProtected,
|
|
112
|
-
txData: opts.txData,
|
|
113
|
-
metadata: opts.metadata,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=uniswap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uniswap.js","sourceRoot":"","sources":["../../../../src/swap/router/providers/uniswap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { ISwapProvider, AggregatorQuote, QuoteParams } from '../types.js';
|
|
2
|
-
export declare class ZeroXProvider implements ISwapProvider {
|
|
3
|
-
readonly name = "0x";
|
|
4
|
-
readonly supportedChains: string[];
|
|
5
|
-
private readonly apiKey;
|
|
6
|
-
private readonly fetcher?;
|
|
7
|
-
constructor(options?: {
|
|
8
|
-
apiKey?: string;
|
|
9
|
-
fetcher?: (p: QuoteParams) => Promise<AggregatorQuote | null>;
|
|
10
|
-
});
|
|
11
|
-
getQuote(params: QuoteParams, timeoutMs: number): Promise<AggregatorQuote | null>;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=zerox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zerox.d.ts","sourceRoot":"","sources":["../../../../src/swap/router/providers/zerox.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAkB/E,qBAAa,aAAc,YAAW,aAAa;IACjD,QAAQ,CAAC,IAAI,QAAQ;IACrB,QAAQ,CAAC,eAAe,WAAgB;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA2D;gBAExE,OAAO,GAAE;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;KAC1D;IAKA,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CAyExF"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { CHAIN_IDS } from '../types.js';
|
|
2
|
-
import { buildQuote } from './uniswap.js';
|
|
3
|
-
const ZEROX_CHAINS = ['ethereum', 'base', 'arbitrum', 'optimism', 'polygon', 'avalanche', 'bnb'];
|
|
4
|
-
const ZEROX_API_BASE = 'https://api.0x.org';
|
|
5
|
-
/** 0x chain name mapping (some differ from our internal names) */
|
|
6
|
-
const ZEROX_CHAIN_MAP = {
|
|
7
|
-
ethereum: 'ethereum',
|
|
8
|
-
base: 'base',
|
|
9
|
-
arbitrum: 'arbitrum',
|
|
10
|
-
optimism: 'optimism',
|
|
11
|
-
polygon: 'polygon',
|
|
12
|
-
avalanche: 'avalanche',
|
|
13
|
-
bnb: 'bsc',
|
|
14
|
-
};
|
|
15
|
-
export class ZeroXProvider {
|
|
16
|
-
constructor(options = {}) {
|
|
17
|
-
this.name = '0x';
|
|
18
|
-
this.supportedChains = ZEROX_CHAINS;
|
|
19
|
-
this.apiKey = options.apiKey;
|
|
20
|
-
this.fetcher = options.fetcher;
|
|
21
|
-
}
|
|
22
|
-
async getQuote(params, timeoutMs) {
|
|
23
|
-
if (!ZEROX_CHAINS.includes(params.chain.toLowerCase()))
|
|
24
|
-
return null;
|
|
25
|
-
if (!this.apiKey && !this.fetcher)
|
|
26
|
-
return null;
|
|
27
|
-
if (this.fetcher)
|
|
28
|
-
return this.fetcher(params);
|
|
29
|
-
const chainId = CHAIN_IDS[params.chain.toLowerCase()];
|
|
30
|
-
if (!chainId)
|
|
31
|
-
return null;
|
|
32
|
-
const url = new URL(`${ZEROX_API_BASE}/swap/allowance-holder/quote`);
|
|
33
|
-
url.searchParams.set('chainId', String(chainId));
|
|
34
|
-
url.searchParams.set('sellToken', params.fromToken);
|
|
35
|
-
url.searchParams.set('buyToken', params.toToken);
|
|
36
|
-
url.searchParams.set('sellAmount', params.amount);
|
|
37
|
-
if (params.fromAddress)
|
|
38
|
-
url.searchParams.set('taker', params.fromAddress);
|
|
39
|
-
const controller = new AbortController();
|
|
40
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
41
|
-
try {
|
|
42
|
-
const res = await fetch(url.toString(), {
|
|
43
|
-
headers: {
|
|
44
|
-
'0x-api-key': this.apiKey ?? '',
|
|
45
|
-
'0x-version': 'v2',
|
|
46
|
-
'Accept': 'application/json',
|
|
47
|
-
},
|
|
48
|
-
signal: controller.signal,
|
|
49
|
-
});
|
|
50
|
-
if (!res.ok)
|
|
51
|
-
return null;
|
|
52
|
-
const data = (await res.json());
|
|
53
|
-
const toAmount = BigInt(String(data.buyAmount ?? '0'));
|
|
54
|
-
const gasEstimate = BigInt(String(data.gas ?? '200000'));
|
|
55
|
-
const gasEstimateUsd = Number(data.totalNetworkFee ?? data.gasEstimateUsd ?? 0);
|
|
56
|
-
// Parse route from sources
|
|
57
|
-
const sources = data.route;
|
|
58
|
-
const fills = sources?.fills;
|
|
59
|
-
const route = fills ? [...new Set(fills.map((f) => f.source))] : ['0x'];
|
|
60
|
-
// Extract tx data
|
|
61
|
-
let txData;
|
|
62
|
-
const tx = data.transaction;
|
|
63
|
-
if (tx?.to && tx?.data) {
|
|
64
|
-
txData = {
|
|
65
|
-
to: String(tx.to),
|
|
66
|
-
data: String(tx.data),
|
|
67
|
-
value: BigInt(String(tx.value ?? '0')),
|
|
68
|
-
gasLimit: gasEstimate,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
return buildQuote({
|
|
72
|
-
provider: '0x',
|
|
73
|
-
params,
|
|
74
|
-
toAmount,
|
|
75
|
-
gasEstimate,
|
|
76
|
-
gasEstimateUsd,
|
|
77
|
-
platformFee: 15, // 0x charges ~0.15% platform fee (15 bps)
|
|
78
|
-
priceImpact: 0,
|
|
79
|
-
route,
|
|
80
|
-
estimatedTimeMs: 15000,
|
|
81
|
-
mevProtected: false,
|
|
82
|
-
txData,
|
|
83
|
-
metadata: data,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
finally {
|
|
90
|
-
clearTimeout(timer);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=zerox.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zerox.js","sourceRoot":"","sources":["../../../../src/swap/router/providers/zerox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import type { AggregatorQuote, AggregatorSwapResult, QuoteParams, SmartSwapConfig, SwapStrategy, TransactionReceipt } from './types.js';
|
|
2
|
-
import { type ProviderRegistryOptions } from './providers/index.js';
|
|
3
|
-
import { SwapRSIEngine } from './rsi/engine.js';
|
|
4
|
-
import type { RSIState } from './rsi/types.js';
|
|
5
|
-
export declare function scoreQuote(quote: AggregatorQuote, strategy: SwapStrategy): number;
|
|
6
|
-
export declare class SmartSwapRouter {
|
|
7
|
-
private readonly providers;
|
|
8
|
-
private readonly strategy;
|
|
9
|
-
private readonly timeoutMs;
|
|
10
|
-
private readonly slippageBps;
|
|
11
|
-
private readonly includeProviders;
|
|
12
|
-
private readonly excludeProviders;
|
|
13
|
-
private readonly cache;
|
|
14
|
-
private readonly health;
|
|
15
|
-
private readonly rsiEngine;
|
|
16
|
-
constructor(config?: SmartSwapConfig & ProviderRegistryOptions);
|
|
17
|
-
/**
|
|
18
|
-
* Get quotes from all applicable providers in parallel, ranked by strategy.
|
|
19
|
-
* Providers that fail or don't support the chain/pair return null and are skipped.
|
|
20
|
-
* Results are cached for cacheTtlMs (default 3s) to deduplicate burst requests.
|
|
21
|
-
*/
|
|
22
|
-
getQuotes(params: QuoteParams): Promise<AggregatorQuote[]>;
|
|
23
|
-
/**
|
|
24
|
-
* Execute the best quote (or a specific one) via the provided wallet.
|
|
25
|
-
* Supports pre-flight simulation, Flashbots Protect routing, and receipt confirmation.
|
|
26
|
-
*/
|
|
27
|
-
executeSwap(quote: AggregatorQuote, wallet: {
|
|
28
|
-
sendTransaction?: (tx: {
|
|
29
|
-
to: string;
|
|
30
|
-
data: string;
|
|
31
|
-
value: bigint;
|
|
32
|
-
gasLimit: bigint;
|
|
33
|
-
}) => Promise<string>;
|
|
34
|
-
simulateTransaction?: (tx: {
|
|
35
|
-
to: string;
|
|
36
|
-
data: string;
|
|
37
|
-
value: bigint;
|
|
38
|
-
gasLimit: bigint;
|
|
39
|
-
}) => Promise<{
|
|
40
|
-
success: boolean;
|
|
41
|
-
error?: string;
|
|
42
|
-
}>;
|
|
43
|
-
signTransaction?: (tx: {
|
|
44
|
-
to: string;
|
|
45
|
-
data: string;
|
|
46
|
-
value: bigint;
|
|
47
|
-
gasLimit: bigint;
|
|
48
|
-
}) => Promise<string>;
|
|
49
|
-
waitForTransaction?: (txHash: string, confirmations: number) => Promise<TransactionReceipt>;
|
|
50
|
-
}, options?: {
|
|
51
|
-
/** Run simulation before sending (default: true) */
|
|
52
|
-
simulate?: boolean;
|
|
53
|
-
/** Route through Flashbots Protect RPC (Ethereum mainnet only, default: false) */
|
|
54
|
-
flashbotsProtect?: boolean;
|
|
55
|
-
/** Wait for transaction receipt (default: false) */
|
|
56
|
-
waitForReceipt?: boolean;
|
|
57
|
-
/** Number of confirmations to wait for (default: 1) */
|
|
58
|
-
confirmations?: number;
|
|
59
|
-
}): Promise<AggregatorSwapResult>;
|
|
60
|
-
/**
|
|
61
|
-
* Return provider names that support the given chain.
|
|
62
|
-
*/
|
|
63
|
-
getProviders(chain: string): string[];
|
|
64
|
-
/**
|
|
65
|
-
* Return all chains supported by at least one provider.
|
|
66
|
-
*/
|
|
67
|
-
getSupportedChains(): string[];
|
|
68
|
-
/**
|
|
69
|
-
* Score a quote with the router's current strategy (exposed for testing/comparison).
|
|
70
|
-
*/
|
|
71
|
-
scoreQuote(quote: AggregatorQuote): number;
|
|
72
|
-
/**
|
|
73
|
-
* Return health stats for all tracked providers.
|
|
74
|
-
*/
|
|
75
|
-
getProviderHealth(): Record<string, {
|
|
76
|
-
failures: number;
|
|
77
|
-
healthy: boolean;
|
|
78
|
-
}>;
|
|
79
|
-
/** Get the RSI engine instance (if enabled) */
|
|
80
|
-
getRSIEngine(): SwapRSIEngine | undefined;
|
|
81
|
-
/** Load previously persisted RSI state */
|
|
82
|
-
loadRSIState(state: RSIState): void;
|
|
83
|
-
/** Export current RSI state for persistence */
|
|
84
|
-
exportRSIState(): RSIState | undefined;
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=router.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/swap/router/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import { buildDefaultProviders } from './providers/index.js';
|
|
2
|
-
import { QuoteCache } from './cache.js';
|
|
3
|
-
import { ProviderHealthTracker } from './health.js';
|
|
4
|
-
import { FlashbotsProtectRpc } from './flashbots.js';
|
|
5
|
-
import { SwapRSIEngine } from './rsi/engine.js';
|
|
6
|
-
const DEFAULT_TIMEOUT_MS = 5000;
|
|
7
|
-
const DEFAULT_STRATEGY = 'best-net-output';
|
|
8
|
-
const DEFAULT_SLIPPAGE_BPS = 50;
|
|
9
|
-
const DEFAULT_CACHE_TTL_MS = 3000;
|
|
10
|
-
// ─── Strategy Scoring ────────────────────────────────────────────────────────
|
|
11
|
-
export function scoreQuote(quote, strategy) {
|
|
12
|
-
// If we have USD pricing info, use normalized scoring
|
|
13
|
-
if (quote.toTokenDecimals !== undefined && quote.toTokenPriceUsd !== undefined) {
|
|
14
|
-
const outputUsd = (Number(quote.toAmount) / Math.pow(10, quote.toTokenDecimals)) * quote.toTokenPriceUsd;
|
|
15
|
-
const slippageCostUsd = outputUsd * (quote.priceImpact / 100);
|
|
16
|
-
switch (strategy) {
|
|
17
|
-
case 'best-net-output':
|
|
18
|
-
return outputUsd - quote.gasEstimateUsd - slippageCostUsd;
|
|
19
|
-
case 'fastest':
|
|
20
|
-
return -quote.estimatedTimeMs;
|
|
21
|
-
case 'lowest-gas':
|
|
22
|
-
return -quote.gasEstimateUsd;
|
|
23
|
-
case 'mev-protected':
|
|
24
|
-
return quote.mevProtected
|
|
25
|
-
? (outputUsd - quote.gasEstimateUsd) * 1.01
|
|
26
|
-
: outputUsd - quote.gasEstimateUsd;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// Fallback: original scoring (for quotes without USD info)
|
|
30
|
-
switch (strategy) {
|
|
31
|
-
case 'best-net-output':
|
|
32
|
-
return Number(quote.toAmount) - quote.gasEstimateUsd * 1e6;
|
|
33
|
-
case 'fastest':
|
|
34
|
-
return -quote.estimatedTimeMs;
|
|
35
|
-
case 'lowest-gas':
|
|
36
|
-
return -Number(quote.gasEstimate);
|
|
37
|
-
case 'mev-protected':
|
|
38
|
-
return quote.mevProtected ? Number(quote.toAmount) * 1.01 : Number(quote.toAmount);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// ─── SmartSwapRouter ─────────────────────────────────────────────────────────
|
|
42
|
-
export class SmartSwapRouter {
|
|
43
|
-
constructor(config = {}) {
|
|
44
|
-
this.strategy = config.strategy ?? DEFAULT_STRATEGY;
|
|
45
|
-
this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
46
|
-
this.slippageBps = config.slippageBps ?? DEFAULT_SLIPPAGE_BPS;
|
|
47
|
-
this.includeProviders = config.providers ? new Set(config.providers) : null;
|
|
48
|
-
this.excludeProviders = new Set(config.excludeProviders ?? []);
|
|
49
|
-
const ttl = config.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;
|
|
50
|
-
this.cache = ttl > 0 ? new QuoteCache(ttl) : null;
|
|
51
|
-
this.health = new ProviderHealthTracker(config.healthMaxFailures ?? 3, config.healthCooldownMs ?? 60000);
|
|
52
|
-
this.providers = buildDefaultProviders({
|
|
53
|
-
oneInchApiKey: config.oneInchApiKey,
|
|
54
|
-
zeroxApiKey: config.zeroxApiKey,
|
|
55
|
-
fetchers: config.fetchers,
|
|
56
|
-
});
|
|
57
|
-
// [MAX-ADDED] RSI engine — opt-in, disabled by default
|
|
58
|
-
if (config.rsi?.enabled) {
|
|
59
|
-
this.rsiEngine = new SwapRSIEngine(config.rsi, config.goals);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get quotes from all applicable providers in parallel, ranked by strategy.
|
|
64
|
-
* Providers that fail or don't support the chain/pair return null and are skipped.
|
|
65
|
-
* Results are cached for cacheTtlMs (default 3s) to deduplicate burst requests.
|
|
66
|
-
*/
|
|
67
|
-
async getQuotes(params) {
|
|
68
|
-
// Cache check
|
|
69
|
-
if (this.cache) {
|
|
70
|
-
const cached = this.cache.get(params);
|
|
71
|
-
if (cached)
|
|
72
|
-
return cached;
|
|
73
|
-
}
|
|
74
|
-
const chain = params.chain.toLowerCase();
|
|
75
|
-
const enrichedParams = {
|
|
76
|
-
...params,
|
|
77
|
-
slippageBps: params.slippageBps ?? this.slippageBps,
|
|
78
|
-
};
|
|
79
|
-
// Filter providers for this chain + health status
|
|
80
|
-
const eligible = this.providers.filter((p) => {
|
|
81
|
-
if (this.excludeProviders.has(p.name))
|
|
82
|
-
return false;
|
|
83
|
-
if (this.includeProviders && !this.includeProviders.has(p.name))
|
|
84
|
-
return false;
|
|
85
|
-
if (!p.supportedChains.includes(chain))
|
|
86
|
-
return false;
|
|
87
|
-
return this.health.isHealthy(p.name);
|
|
88
|
-
});
|
|
89
|
-
if (eligible.length === 0)
|
|
90
|
-
return [];
|
|
91
|
-
// Query all in parallel with timeout
|
|
92
|
-
const results = await Promise.allSettled(eligible.map((p) => p.getQuote(enrichedParams, this.timeoutMs)));
|
|
93
|
-
const quotes = [];
|
|
94
|
-
for (let i = 0; i < results.length; i++) {
|
|
95
|
-
const r = results[i];
|
|
96
|
-
const providerName = eligible[i].name;
|
|
97
|
-
if (r.status === 'fulfilled' && r.value !== null) {
|
|
98
|
-
this.health.recordSuccess(providerName);
|
|
99
|
-
quotes.push(r.value);
|
|
100
|
-
}
|
|
101
|
-
else if (r.status === 'rejected') {
|
|
102
|
-
this.health.recordFailure(providerName);
|
|
103
|
-
}
|
|
104
|
-
// null result (unsupported) → don't penalize health
|
|
105
|
-
}
|
|
106
|
-
// Rank by strategy
|
|
107
|
-
quotes.sort((a, b) => scoreQuote(b, this.strategy) - scoreQuote(a, this.strategy));
|
|
108
|
-
// [MAX-ADDED] Apply RSI learned weights if engine is active
|
|
109
|
-
if (this.rsiEngine) {
|
|
110
|
-
const weights = this.rsiEngine.getProviderWeights(chain, params.fromToken, params.toToken);
|
|
111
|
-
for (const q of quotes) {
|
|
112
|
-
const w = weights[q.provider] ?? 1.0;
|
|
113
|
-
if (w !== 1.0) {
|
|
114
|
-
q.netOutput = BigInt(Math.round(Number(q.netOutput) * w));
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
// Re-sort after weight adjustment
|
|
118
|
-
quotes.sort((a, b) => scoreQuote(b, this.strategy) - scoreQuote(a, this.strategy));
|
|
119
|
-
// Check directives
|
|
120
|
-
const directiveResult = this.rsiEngine.evaluateDirectives({ chain });
|
|
121
|
-
if (!directiveResult.proceed) {
|
|
122
|
-
// Return empty — directive blocks this swap (e.g. gas too high)
|
|
123
|
-
return [];
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// Store in cache
|
|
127
|
-
if (this.cache) {
|
|
128
|
-
this.cache.set(params, quotes);
|
|
129
|
-
}
|
|
130
|
-
return quotes;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Execute the best quote (or a specific one) via the provided wallet.
|
|
134
|
-
* Supports pre-flight simulation, Flashbots Protect routing, and receipt confirmation.
|
|
135
|
-
*/
|
|
136
|
-
async executeSwap(quote, wallet, options) {
|
|
137
|
-
if (!quote.txData) {
|
|
138
|
-
throw new Error(`SmartSwapRouter: Quote from '${quote.provider}' does not include txData. ` +
|
|
139
|
-
`Use the provider's SDK directly to execute, or re-quote with a fromAddress.`);
|
|
140
|
-
}
|
|
141
|
-
// Pre-flight simulation
|
|
142
|
-
if (options?.simulate !== false && wallet.simulateTransaction) {
|
|
143
|
-
const sim = await wallet.simulateTransaction(quote.txData);
|
|
144
|
-
if (!sim.success) {
|
|
145
|
-
throw new Error(`SmartSwapRouter: Simulation failed — ${sim.error}. Transaction not sent.`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
let txHash;
|
|
149
|
-
// Flashbots Protect routing (Ethereum mainnet only)
|
|
150
|
-
if (options?.flashbotsProtect && quote.txData) {
|
|
151
|
-
if (!wallet.signTransaction) {
|
|
152
|
-
throw new Error('SmartSwapRouter: flashbotsProtect requires wallet.signTransaction()');
|
|
153
|
-
}
|
|
154
|
-
const signedTx = await wallet.signTransaction(quote.txData);
|
|
155
|
-
const flashbots = new FlashbotsProtectRpc();
|
|
156
|
-
txHash = await flashbots.sendTransaction(signedTx);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
if (!wallet.sendTransaction) {
|
|
160
|
-
throw new Error('SmartSwapRouter: wallet must implement sendTransaction()');
|
|
161
|
-
}
|
|
162
|
-
txHash = await wallet.sendTransaction(quote.txData);
|
|
163
|
-
}
|
|
164
|
-
// Optional receipt confirmation
|
|
165
|
-
if (options?.waitForReceipt && wallet.waitForTransaction) {
|
|
166
|
-
const receipt = await wallet.waitForTransaction(txHash, options.confirmations ?? 1);
|
|
167
|
-
return {
|
|
168
|
-
txHash,
|
|
169
|
-
quote,
|
|
170
|
-
chain: 'unknown',
|
|
171
|
-
receipt,
|
|
172
|
-
success: receipt.status === 'success',
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
return {
|
|
176
|
-
txHash,
|
|
177
|
-
quote,
|
|
178
|
-
chain: 'unknown',
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Return provider names that support the given chain.
|
|
183
|
-
*/
|
|
184
|
-
getProviders(chain) {
|
|
185
|
-
const lower = chain.toLowerCase();
|
|
186
|
-
return this.providers
|
|
187
|
-
.filter((p) => p.supportedChains.includes(lower))
|
|
188
|
-
.map((p) => p.name);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Return all chains supported by at least one provider.
|
|
192
|
-
*/
|
|
193
|
-
getSupportedChains() {
|
|
194
|
-
const chains = new Set();
|
|
195
|
-
this.providers.forEach((p) => p.supportedChains.forEach((c) => chains.add(c)));
|
|
196
|
-
return Array.from(chains).sort();
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Score a quote with the router's current strategy (exposed for testing/comparison).
|
|
200
|
-
*/
|
|
201
|
-
scoreQuote(quote) {
|
|
202
|
-
return scoreQuote(quote, this.strategy);
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Return health stats for all tracked providers.
|
|
206
|
-
*/
|
|
207
|
-
getProviderHealth() {
|
|
208
|
-
return this.health.getStats();
|
|
209
|
-
}
|
|
210
|
-
// ── [MAX-ADDED] RSI Engine access ──────────────────────────────────────────
|
|
211
|
-
/** Get the RSI engine instance (if enabled) */
|
|
212
|
-
getRSIEngine() {
|
|
213
|
-
return this.rsiEngine;
|
|
214
|
-
}
|
|
215
|
-
/** Load previously persisted RSI state */
|
|
216
|
-
loadRSIState(state) {
|
|
217
|
-
this.rsiEngine?.loadState(state);
|
|
218
|
-
}
|
|
219
|
-
/** Export current RSI state for persistence */
|
|
220
|
-
exportRSIState() {
|
|
221
|
-
return this.rsiEngine?.exportState();
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=router.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/swap/router/router.ts"],"names":[],"mappings":"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"}
|