agentwallet-sdk 3.3.0 → 3.4.1
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 +41 -516
- 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
package/dist/solver/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/solver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/solver/types.d.ts
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CowSwap Solver Adapter — Types
|
|
3
|
-
*
|
|
4
|
-
* Shadow competition is FREE. Production solver requires CowSwap DAO bonding
|
|
5
|
-
* pool approval and KYC. Never assume production credentials in this module.
|
|
6
|
-
*
|
|
7
|
-
* @module solver/types
|
|
8
|
-
*/
|
|
9
|
-
/** CowSwap order types (from their protocol) */
|
|
10
|
-
export type OrderKind = 'sell' | 'buy';
|
|
11
|
-
export type SigningScheme = 'eip712' | 'ethsign' | 'presign' | 'eip1271';
|
|
12
|
-
export type TokenBalance = 'erc20' | 'internal' | 'external';
|
|
13
|
-
/** A single user order in a CowSwap auction batch */
|
|
14
|
-
export interface CowOrder {
|
|
15
|
-
/** Unique order UID */
|
|
16
|
-
uid: string;
|
|
17
|
-
/** Owner wallet */
|
|
18
|
-
owner: string;
|
|
19
|
-
sellToken: string;
|
|
20
|
-
buyToken: string;
|
|
21
|
-
sellAmount: string;
|
|
22
|
-
buyAmount: string;
|
|
23
|
-
feeAmount: string;
|
|
24
|
-
kind: OrderKind;
|
|
25
|
-
partiallyFillable: boolean;
|
|
26
|
-
sellTokenBalance: TokenBalance;
|
|
27
|
-
buyTokenBalance: TokenBalance;
|
|
28
|
-
validTo: number;
|
|
29
|
-
appData: string;
|
|
30
|
-
signingScheme: SigningScheme;
|
|
31
|
-
signature: string;
|
|
32
|
-
}
|
|
33
|
-
/** An auction batch that CowSwap sends to solvers */
|
|
34
|
-
export interface CowAuctionBatch {
|
|
35
|
-
id: number;
|
|
36
|
-
instance: {
|
|
37
|
-
/** The orders to settle */
|
|
38
|
-
orders: Record<string, CowOrder>;
|
|
39
|
-
/** Current on-chain token prices (used for surplus calculation) */
|
|
40
|
-
prices: Record<string, string>;
|
|
41
|
-
/** Available AMM pools for solver use */
|
|
42
|
-
ammsAndLiquidity?: unknown;
|
|
43
|
-
};
|
|
44
|
-
/** Auction deadline (submit before this) */
|
|
45
|
-
deadline: number;
|
|
46
|
-
}
|
|
47
|
-
/** A token interaction in a settlement (AMM trade, DEX swap, etc.) */
|
|
48
|
-
export interface TokenInteraction {
|
|
49
|
-
target: string;
|
|
50
|
-
value: string;
|
|
51
|
-
callData: string;
|
|
52
|
-
}
|
|
53
|
-
/** Our settlement solution to submit to CowSwap */
|
|
54
|
-
export interface SolverSolution {
|
|
55
|
-
/** Auction ID we're responding to */
|
|
56
|
-
auctionId: number;
|
|
57
|
-
/** Orders we're settling */
|
|
58
|
-
trades: Array<{
|
|
59
|
-
kind: 'fulfillment';
|
|
60
|
-
order: string;
|
|
61
|
-
executedAmount: string;
|
|
62
|
-
}>;
|
|
63
|
-
/** On-chain interactions needed to source the liquidity */
|
|
64
|
-
interactions: {
|
|
65
|
-
pre: TokenInteraction[];
|
|
66
|
-
intra: TokenInteraction[];
|
|
67
|
-
post: TokenInteraction[];
|
|
68
|
-
};
|
|
69
|
-
/** Token prices in our settlement (solver sets these, determines surplus) */
|
|
70
|
-
prices: Record<string, string>;
|
|
71
|
-
/** Gas used estimate (CowSwap v2 "score") */
|
|
72
|
-
score?: string;
|
|
73
|
-
}
|
|
74
|
-
/** Result of a solution submission */
|
|
75
|
-
export interface SolutionSubmissionResult {
|
|
76
|
-
success: boolean;
|
|
77
|
-
auctionId: number;
|
|
78
|
-
solutionId?: string;
|
|
79
|
-
won?: boolean;
|
|
80
|
-
surplus?: string;
|
|
81
|
-
error?: string;
|
|
82
|
-
}
|
|
83
|
-
/** Solver competition statistics */
|
|
84
|
-
export interface SolverStats {
|
|
85
|
-
auctionsProcessed: number;
|
|
86
|
-
auctionsWon: number;
|
|
87
|
-
auctionsLost: number;
|
|
88
|
-
totalSurplusGenerated: string;
|
|
89
|
-
winRate: number;
|
|
90
|
-
avgResponseTimeMs: number;
|
|
91
|
-
lastAuctionAt?: number;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Solver configuration.
|
|
95
|
-
*
|
|
96
|
-
* ⚠️ Shadow mode is the default and is FREE — no registration required.
|
|
97
|
-
* Production solver requires CowSwap DAO bonding pool approval and KYC.
|
|
98
|
-
*/
|
|
99
|
-
export interface SolverConfig {
|
|
100
|
-
/** CowSwap environment (default: 'shadow') */
|
|
101
|
-
environment?: 'mainnet' | 'staging' | 'shadow';
|
|
102
|
-
/** Solver name shown in CowSwap UI (default: 'AgentWallet') */
|
|
103
|
-
solverName?: string;
|
|
104
|
-
/** Chain to operate on */
|
|
105
|
-
chain: string;
|
|
106
|
-
/** Submission endpoint override */
|
|
107
|
-
submissionUrl?: string;
|
|
108
|
-
/** Maximum gas willing to pay per settlement in Gwei (default: 50) */
|
|
109
|
-
maxGasGwei?: number;
|
|
110
|
-
/** Minimum surplus to bother submitting in USD (default: 0.5) */
|
|
111
|
-
minSurplusUsd?: number;
|
|
112
|
-
/** Response timeout ms — must be < 30s for CowSwap (default: 20000) */
|
|
113
|
-
responseTimeoutMs?: number;
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/solver/types.ts"],"names":[],"mappings":"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"}
|
package/dist/solver/types.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CowSwap Solver Adapter — Types
|
|
3
|
-
*
|
|
4
|
-
* Shadow competition is FREE. Production solver requires CowSwap DAO bonding
|
|
5
|
-
* pool approval and KYC. Never assume production credentials in this module.
|
|
6
|
-
*
|
|
7
|
-
* @module solver/types
|
|
8
|
-
*/
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=types.js.map
|
package/dist/solver/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/solver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SpendGuard — per-session and per-merchant spend caps for agentwallet-sdk.
|
|
3
|
-
*
|
|
4
|
-
* Closes the PolicyLayer feature gap: gives AI agents deterministic,
|
|
5
|
-
* non-custodial spending controls without on-chain round-trips.
|
|
6
|
-
*
|
|
7
|
-
* @module spend-guard
|
|
8
|
-
*/
|
|
9
|
-
/** Reason a cap was exceeded. */
|
|
10
|
-
export type SpendCapReason = 'session_cap' | 'merchant_cap' | 'daily_cap';
|
|
11
|
-
/**
|
|
12
|
-
* Configuration for SpendGuard.
|
|
13
|
-
* All amounts are in USDC (floating point, e.g. 5.00 = $5.00 USDC).
|
|
14
|
-
* Any omitted cap is treated as unlimited.
|
|
15
|
-
*/
|
|
16
|
-
export interface SpendGuardConfig {
|
|
17
|
-
/** Maximum cumulative spend per session ID. Resets on resetSession(). */
|
|
18
|
-
sessionCapUSDC?: number;
|
|
19
|
-
/**
|
|
20
|
-
* Per-merchant caps keyed by merchant address (checksummed or lowercase).
|
|
21
|
-
* Example: { "0xAbC...": 10.00 }
|
|
22
|
-
*/
|
|
23
|
-
merchantCapUSDC?: Record<string, number>;
|
|
24
|
-
/** Rolling 24-hour cumulative cap across all sessions and merchants. */
|
|
25
|
-
dailyCapUSDC?: number;
|
|
26
|
-
/** Called when a cap would be exceeded (before SpendCapError is thrown). */
|
|
27
|
-
onCapExceeded?: (reason: SpendCapReason) => void;
|
|
28
|
-
}
|
|
29
|
-
/** Per-session ledger entry. */
|
|
30
|
-
export interface SessionState {
|
|
31
|
-
sessionId: string;
|
|
32
|
-
spentUSDC: number;
|
|
33
|
-
}
|
|
34
|
-
/** Per-merchant ledger entry. */
|
|
35
|
-
export interface MerchantState {
|
|
36
|
-
merchantAddress: string;
|
|
37
|
-
spentUSDC: number;
|
|
38
|
-
}
|
|
39
|
-
/** Snapshot of current spend state. */
|
|
40
|
-
export interface SpendState {
|
|
41
|
-
/** Per-session spend. If sessionId provided, only that session. */
|
|
42
|
-
sessions: SessionState[];
|
|
43
|
-
/** Per-merchant spend. */
|
|
44
|
-
merchants: MerchantState[];
|
|
45
|
-
/** Total spend in the rolling 24hr window. */
|
|
46
|
-
dailySpentUSDC: number;
|
|
47
|
-
/** Configured caps (for introspection). */
|
|
48
|
-
caps: {
|
|
49
|
-
sessionCapUSDC?: number;
|
|
50
|
-
merchantCapUSDC?: Record<string, number>;
|
|
51
|
-
dailyCapUSDC?: number;
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Thrown when a payment would exceed a configured cap.
|
|
56
|
-
*/
|
|
57
|
-
export declare class SpendCapError extends Error {
|
|
58
|
-
/** Which cap was exceeded. */
|
|
59
|
-
readonly reason: SpendCapReason;
|
|
60
|
-
/** The configured cap value in USDC. */
|
|
61
|
-
readonly capUSDC: number;
|
|
62
|
-
/** How much has already been spent in this window. */
|
|
63
|
-
readonly spentUSDC: number;
|
|
64
|
-
/** How much the blocked payment would have added. */
|
|
65
|
-
readonly attemptedUSDC: number;
|
|
66
|
-
constructor(reason: SpendCapReason, capUSDC: number, spentUSDC: number, attemptedUSDC: number);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* SpendGuard enforces per-session, per-merchant, and rolling daily spend caps.
|
|
70
|
-
*
|
|
71
|
-
* Usage:
|
|
72
|
-
* ```ts
|
|
73
|
-
* const guard = new SpendGuard({ sessionCapUSDC: 10, dailyCapUSDC: 50 });
|
|
74
|
-
* guard.checkPayment(2.50, '0xMerchant', 'session-abc');
|
|
75
|
-
* guard.recordPayment(2.50, '0xMerchant', 'session-abc');
|
|
76
|
-
* ```
|
|
77
|
-
*
|
|
78
|
-
* All amounts are floating-point USDC (e.g. 5.00 = $5.00).
|
|
79
|
-
*/
|
|
80
|
-
export declare class SpendGuard {
|
|
81
|
-
private readonly config;
|
|
82
|
-
/** sessionId → cumulative USDC spent */
|
|
83
|
-
private readonly sessionLedger;
|
|
84
|
-
/** normalised merchant address → cumulative USDC spent */
|
|
85
|
-
private readonly merchantLedger;
|
|
86
|
-
/** Rolling 24-hr payment records */
|
|
87
|
-
private dailyRecords;
|
|
88
|
-
constructor(config: SpendGuardConfig);
|
|
89
|
-
private normaliseMerchant;
|
|
90
|
-
/** Prune records older than 24 hrs and return current daily spend. */
|
|
91
|
-
private getDailySpent;
|
|
92
|
-
/**
|
|
93
|
-
* Check whether a payment is allowed under all configured caps.
|
|
94
|
-
* Throws {@link SpendCapError} if any cap would be exceeded.
|
|
95
|
-
* Call this BEFORE signing/sending any payment.
|
|
96
|
-
*
|
|
97
|
-
* @param amount - Amount in USDC (e.g. 2.50)
|
|
98
|
-
* @param merchantAddress - Merchant wallet address
|
|
99
|
-
* @param sessionId - Caller-defined session identifier
|
|
100
|
-
*/
|
|
101
|
-
checkPayment(amount: number, merchantAddress: string, sessionId: string): void;
|
|
102
|
-
/**
|
|
103
|
-
* Record a completed payment. Call this AFTER a payment is confirmed on-chain.
|
|
104
|
-
*
|
|
105
|
-
* @param amount - Amount in USDC
|
|
106
|
-
* @param merchantAddress - Merchant wallet address
|
|
107
|
-
* @param sessionId - Session identifier
|
|
108
|
-
*/
|
|
109
|
-
recordPayment(amount: number, merchantAddress: string, sessionId: string): void;
|
|
110
|
-
/**
|
|
111
|
-
* Get current spend state across all sessions, merchants, and the daily window.
|
|
112
|
-
* If `sessionId` is provided, the `sessions` array contains only that session.
|
|
113
|
-
*
|
|
114
|
-
* @param sessionId - Optional filter
|
|
115
|
-
*/
|
|
116
|
-
getSpendState(sessionId?: string): SpendState;
|
|
117
|
-
/**
|
|
118
|
-
* Reset the session spend for `sessionId`.
|
|
119
|
-
* The daily and merchant ledgers are unaffected.
|
|
120
|
-
*
|
|
121
|
-
* @param sessionId - Session to reset
|
|
122
|
-
*/
|
|
123
|
-
resetSession(sessionId: string): void;
|
|
124
|
-
}
|
|
125
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spend-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;AAE1E;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;CAClD;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,0BAA0B;IAC1B,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,IAAI,EAAE;QACJ,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAID;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;gBAG7B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM;CAWxB;AAMD;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAE1C,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAE3D,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAE5D,oCAAoC;IACpC,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,EAAE,gBAAgB;IAMpC,OAAO,CAAC,iBAAiB;IAIzB,sEAAsE;IACtE,OAAO,CAAC,aAAa;IAQrB;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAqC9E;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAa/E;;;;;OAKG;IACH,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU;IAwB7C;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGtC"}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SpendGuard — per-session and per-merchant spend caps for agentwallet-sdk.
|
|
3
|
-
*
|
|
4
|
-
* Closes the PolicyLayer feature gap: gives AI agents deterministic,
|
|
5
|
-
* non-custodial spending controls without on-chain round-trips.
|
|
6
|
-
*
|
|
7
|
-
* @module spend-guard
|
|
8
|
-
*/
|
|
9
|
-
// ─── Errors ──────────────────────────────────────────────────────────────────
|
|
10
|
-
/**
|
|
11
|
-
* Thrown when a payment would exceed a configured cap.
|
|
12
|
-
*/
|
|
13
|
-
export class SpendCapError extends Error {
|
|
14
|
-
constructor(reason, capUSDC, spentUSDC, attemptedUSDC) {
|
|
15
|
-
super(`SpendGuard: ${reason} exceeded — cap ${capUSDC} USDC, spent ${spentUSDC} USDC, attempted ${attemptedUSDC} USDC`);
|
|
16
|
-
this.name = 'SpendCapError';
|
|
17
|
-
this.reason = reason;
|
|
18
|
-
this.capUSDC = capUSDC;
|
|
19
|
-
this.spentUSDC = spentUSDC;
|
|
20
|
-
this.attemptedUSDC = attemptedUSDC;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
// ─── SpendGuard ──────────────────────────────────────────────────────────────
|
|
24
|
-
const TWENTY_FOUR_HOURS_MS = 24 * 60 * 60 * 1000;
|
|
25
|
-
/**
|
|
26
|
-
* SpendGuard enforces per-session, per-merchant, and rolling daily spend caps.
|
|
27
|
-
*
|
|
28
|
-
* Usage:
|
|
29
|
-
* ```ts
|
|
30
|
-
* const guard = new SpendGuard({ sessionCapUSDC: 10, dailyCapUSDC: 50 });
|
|
31
|
-
* guard.checkPayment(2.50, '0xMerchant', 'session-abc');
|
|
32
|
-
* guard.recordPayment(2.50, '0xMerchant', 'session-abc');
|
|
33
|
-
* ```
|
|
34
|
-
*
|
|
35
|
-
* All amounts are floating-point USDC (e.g. 5.00 = $5.00).
|
|
36
|
-
*/
|
|
37
|
-
export class SpendGuard {
|
|
38
|
-
constructor(config) {
|
|
39
|
-
/** sessionId → cumulative USDC spent */
|
|
40
|
-
this.sessionLedger = new Map();
|
|
41
|
-
/** normalised merchant address → cumulative USDC spent */
|
|
42
|
-
this.merchantLedger = new Map();
|
|
43
|
-
/** Rolling 24-hr payment records */
|
|
44
|
-
this.dailyRecords = [];
|
|
45
|
-
this.config = { ...config };
|
|
46
|
-
}
|
|
47
|
-
// ─── Private helpers ───────────────────────────────────────────────────────
|
|
48
|
-
normaliseMerchant(addr) {
|
|
49
|
-
return addr.toLowerCase();
|
|
50
|
-
}
|
|
51
|
-
/** Prune records older than 24 hrs and return current daily spend. */
|
|
52
|
-
getDailySpent(now = Date.now()) {
|
|
53
|
-
const cutoff = now - TWENTY_FOUR_HOURS_MS;
|
|
54
|
-
this.dailyRecords = this.dailyRecords.filter(r => r.timestamp > cutoff);
|
|
55
|
-
return this.dailyRecords.reduce((sum, r) => sum + r.amount, 0);
|
|
56
|
-
}
|
|
57
|
-
// ─── Public API ────────────────────────────────────────────────────────────
|
|
58
|
-
/**
|
|
59
|
-
* Check whether a payment is allowed under all configured caps.
|
|
60
|
-
* Throws {@link SpendCapError} if any cap would be exceeded.
|
|
61
|
-
* Call this BEFORE signing/sending any payment.
|
|
62
|
-
*
|
|
63
|
-
* @param amount - Amount in USDC (e.g. 2.50)
|
|
64
|
-
* @param merchantAddress - Merchant wallet address
|
|
65
|
-
* @param sessionId - Caller-defined session identifier
|
|
66
|
-
*/
|
|
67
|
-
checkPayment(amount, merchantAddress, sessionId) {
|
|
68
|
-
const merchant = this.normaliseMerchant(merchantAddress);
|
|
69
|
-
// 1. Session cap
|
|
70
|
-
if (this.config.sessionCapUSDC !== undefined) {
|
|
71
|
-
const sessionSpent = this.sessionLedger.get(sessionId) ?? 0;
|
|
72
|
-
if (sessionSpent + amount > this.config.sessionCapUSDC) {
|
|
73
|
-
this.config.onCapExceeded?.('session_cap');
|
|
74
|
-
throw new SpendCapError('session_cap', this.config.sessionCapUSDC, sessionSpent, amount);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// 2. Merchant cap
|
|
78
|
-
if (this.config.merchantCapUSDC) {
|
|
79
|
-
// Check normalised address first, then original casing
|
|
80
|
-
const cap = this.config.merchantCapUSDC[merchant] ??
|
|
81
|
-
this.config.merchantCapUSDC[merchantAddress];
|
|
82
|
-
if (cap !== undefined) {
|
|
83
|
-
const merchantSpent = this.merchantLedger.get(merchant) ?? 0;
|
|
84
|
-
if (merchantSpent + amount > cap) {
|
|
85
|
-
this.config.onCapExceeded?.('merchant_cap');
|
|
86
|
-
throw new SpendCapError('merchant_cap', cap, merchantSpent, amount);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// 3. Daily cap (rolling 24 hr)
|
|
91
|
-
if (this.config.dailyCapUSDC !== undefined) {
|
|
92
|
-
const dailySpent = this.getDailySpent();
|
|
93
|
-
if (dailySpent + amount > this.config.dailyCapUSDC) {
|
|
94
|
-
this.config.onCapExceeded?.('daily_cap');
|
|
95
|
-
throw new SpendCapError('daily_cap', this.config.dailyCapUSDC, dailySpent, amount);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Record a completed payment. Call this AFTER a payment is confirmed on-chain.
|
|
101
|
-
*
|
|
102
|
-
* @param amount - Amount in USDC
|
|
103
|
-
* @param merchantAddress - Merchant wallet address
|
|
104
|
-
* @param sessionId - Session identifier
|
|
105
|
-
*/
|
|
106
|
-
recordPayment(amount, merchantAddress, sessionId) {
|
|
107
|
-
const merchant = this.normaliseMerchant(merchantAddress);
|
|
108
|
-
// Session ledger
|
|
109
|
-
this.sessionLedger.set(sessionId, (this.sessionLedger.get(sessionId) ?? 0) + amount);
|
|
110
|
-
// Merchant ledger
|
|
111
|
-
this.merchantLedger.set(merchant, (this.merchantLedger.get(merchant) ?? 0) + amount);
|
|
112
|
-
// Daily records
|
|
113
|
-
this.dailyRecords.push({ amount, timestamp: Date.now() });
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Get current spend state across all sessions, merchants, and the daily window.
|
|
117
|
-
* If `sessionId` is provided, the `sessions` array contains only that session.
|
|
118
|
-
*
|
|
119
|
-
* @param sessionId - Optional filter
|
|
120
|
-
*/
|
|
121
|
-
getSpendState(sessionId) {
|
|
122
|
-
const sessions = sessionId
|
|
123
|
-
? [{ sessionId, spentUSDC: this.sessionLedger.get(sessionId) ?? 0 }]
|
|
124
|
-
: Array.from(this.sessionLedger.entries()).map(([sid, spent]) => ({
|
|
125
|
-
sessionId: sid,
|
|
126
|
-
spentUSDC: spent,
|
|
127
|
-
}));
|
|
128
|
-
const merchants = Array.from(this.merchantLedger.entries()).map(([addr, spent]) => ({ merchantAddress: addr, spentUSDC: spent }));
|
|
129
|
-
return {
|
|
130
|
-
sessions,
|
|
131
|
-
merchants,
|
|
132
|
-
dailySpentUSDC: this.getDailySpent(),
|
|
133
|
-
caps: {
|
|
134
|
-
sessionCapUSDC: this.config.sessionCapUSDC,
|
|
135
|
-
merchantCapUSDC: this.config.merchantCapUSDC,
|
|
136
|
-
dailyCapUSDC: this.config.dailyCapUSDC,
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Reset the session spend for `sessionId`.
|
|
142
|
-
* The daily and merchant ledgers are unaffected.
|
|
143
|
-
*
|
|
144
|
-
* @param sessionId - Session to reset
|
|
145
|
-
*/
|
|
146
|
-
resetSession(sessionId) {
|
|
147
|
-
this.sessionLedger.delete(sessionId);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/spend-guard/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { AggregatorQuote, QuoteParams } from './types.js';
|
|
2
|
-
export declare class QuoteCache {
|
|
3
|
-
private cache;
|
|
4
|
-
private ttlMs;
|
|
5
|
-
constructor(ttlMs?: number);
|
|
6
|
-
private key;
|
|
7
|
-
get(params: QuoteParams): AggregatorQuote[] | null;
|
|
8
|
-
set(params: QuoteParams, quotes: AggregatorQuote[]): void;
|
|
9
|
-
clear(): void;
|
|
10
|
-
/** Number of currently cached (non-expired) entries */
|
|
11
|
-
size(): number;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/swap/router/cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAuE;IACpF,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,SAAO;IAIxB,OAAO,CAAC,GAAG;IAIX,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,EAAE,GAAG,IAAI;IAUlD,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI;IAIzD,KAAK,IAAI,IAAI;IAIb,uDAAuD;IACvD,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export class QuoteCache {
|
|
2
|
-
constructor(ttlMs = 3000) {
|
|
3
|
-
this.cache = new Map();
|
|
4
|
-
this.ttlMs = ttlMs;
|
|
5
|
-
}
|
|
6
|
-
key(params) {
|
|
7
|
-
return `${params.chain}:${params.fromToken}:${params.toToken}:${params.amount}`;
|
|
8
|
-
}
|
|
9
|
-
get(params) {
|
|
10
|
-
const entry = this.cache.get(this.key(params));
|
|
11
|
-
if (!entry)
|
|
12
|
-
return null;
|
|
13
|
-
if (Date.now() - entry.timestamp > this.ttlMs) {
|
|
14
|
-
this.cache.delete(this.key(params));
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
return entry.quotes;
|
|
18
|
-
}
|
|
19
|
-
set(params, quotes) {
|
|
20
|
-
this.cache.set(this.key(params), { quotes, timestamp: Date.now() });
|
|
21
|
-
}
|
|
22
|
-
clear() {
|
|
23
|
-
this.cache.clear();
|
|
24
|
-
}
|
|
25
|
-
/** Number of currently cached (non-expired) entries */
|
|
26
|
-
size() {
|
|
27
|
-
return this.cache.size;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/swap/router/cache.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,UAAU;IAIrB,YAAY,KAAK,GAAG,IAAI;QAHhB,UAAK,GAAG,IAAI,GAAG,EAA4D,CAAC;QAIlF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,GAAG,CAAC,MAAmB;QAC7B,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;IAClF,CAAC;IAED,GAAG,CAAC,MAAmB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,MAAmB,EAAE,MAAyB;QAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,uDAAuD;IACvD,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export declare class FlashbotsProtectRpc {
|
|
2
|
-
private readonly rpcUrl;
|
|
3
|
-
constructor(options?: {
|
|
4
|
-
fast?: boolean;
|
|
5
|
-
useMempool?: boolean;
|
|
6
|
-
});
|
|
7
|
-
sendTransaction(signedTx: string): Promise<string>;
|
|
8
|
-
getTransactionStatus(txHash: string): Promise<'pending' | 'included' | 'failed' | 'unknown'>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=flashbots.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flashbots.d.ts","sourceRoot":"","sources":["../../../src/swap/router/flashbots.ts"],"names":[],"mappings":"AAOA,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE;IAOxD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBlD,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;CASnG"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
// [MAX-ADDED] FlashbotsProtectRpc — MEV protection via Flashbots Protect RPC
|
|
2
|
-
// Endpoint: https://rpc.flashbots.net
|
|
3
|
-
// - Transactions are never sent to the public mempool
|
|
4
|
-
// - Failed transactions don't cost gas
|
|
5
|
-
// - MEV refunds if your tx creates MEV
|
|
6
|
-
// Only works on Ethereum mainnet.
|
|
7
|
-
export class FlashbotsProtectRpc {
|
|
8
|
-
constructor(options) {
|
|
9
|
-
let url = 'https://rpc.flashbots.net';
|
|
10
|
-
if (options?.fast)
|
|
11
|
-
url += '/fast';
|
|
12
|
-
if (options?.useMempool)
|
|
13
|
-
url += '?useMempool=true';
|
|
14
|
-
this.rpcUrl = url;
|
|
15
|
-
}
|
|
16
|
-
async sendTransaction(signedTx) {
|
|
17
|
-
const res = await fetch(this.rpcUrl, {
|
|
18
|
-
method: 'POST',
|
|
19
|
-
headers: { 'Content-Type': 'application/json' },
|
|
20
|
-
body: JSON.stringify({
|
|
21
|
-
jsonrpc: '2.0',
|
|
22
|
-
id: 1,
|
|
23
|
-
method: 'eth_sendRawTransaction',
|
|
24
|
-
params: [signedTx],
|
|
25
|
-
}),
|
|
26
|
-
});
|
|
27
|
-
const data = (await res.json());
|
|
28
|
-
if (data.error)
|
|
29
|
-
throw new Error(`Flashbots: ${data.error.message}`);
|
|
30
|
-
return data.result ?? '';
|
|
31
|
-
}
|
|
32
|
-
async getTransactionStatus(txHash) {
|
|
33
|
-
const res = await fetch(`https://protect.flashbots.net/tx/${txHash}`, {
|
|
34
|
-
headers: { 'Content-Type': 'application/json' },
|
|
35
|
-
});
|
|
36
|
-
const data = (await res.json());
|
|
37
|
-
const s = data.status;
|
|
38
|
-
if (s === 'pending' || s === 'included' || s === 'failed')
|
|
39
|
-
return s;
|
|
40
|
-
return 'unknown';
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=flashbots.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flashbots.js","sourceRoot":"","sources":["../../../src/swap/router/flashbots.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sCAAsC;AACtC,sDAAsD;AACtD,uCAAuC;AACvC,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,mBAAmB;IAG9B,YAAY,OAAkD;QAC5D,IAAI,GAAG,GAAG,2BAA2B,CAAC;QACtC,IAAI,OAAO,EAAE,IAAI;YAAE,GAAG,IAAI,OAAO,CAAC;QAClC,IAAI,OAAO,EAAE,UAAU;YAAE,GAAG,IAAI,kBAAkB,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;YACnC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,CAAC;gBACL,MAAM,EAAE,wBAAwB;gBAChC,MAAM,EAAE,CAAC,QAAQ,CAAC;aACnB,CAAC;SACH,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqD,CAAC;QACpF,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,MAAc;QACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oCAAoC,MAAM,EAAE,EAAE;YACpE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;QACvD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACpE,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare class ProviderHealthTracker {
|
|
2
|
-
private failures;
|
|
3
|
-
private lastFailureTime;
|
|
4
|
-
private readonly maxFailures;
|
|
5
|
-
private readonly cooldownMs;
|
|
6
|
-
constructor(maxFailures?: number, cooldownMs?: number);
|
|
7
|
-
recordSuccess(provider: string): void;
|
|
8
|
-
recordFailure(provider: string): void;
|
|
9
|
-
isHealthy(provider: string): boolean;
|
|
10
|
-
getStats(): Record<string, {
|
|
11
|
-
failures: number;
|
|
12
|
-
healthy: boolean;
|
|
13
|
-
}>;
|
|
14
|
-
/** Reset a provider back to healthy state */
|
|
15
|
-
reset(provider: string): void;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=health.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/swap/router/health.ts"],"names":[],"mappings":"AAEA,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,WAAW,SAAI,EAAE,UAAU,SAAQ;IAK/C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKrC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKrC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQpC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAQlE,6CAA6C;IAC7C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAI9B"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// [MAX-ADDED] ProviderHealthTracker — circuit-breaker style health tracking for swap providers
|
|
2
|
-
export class ProviderHealthTracker {
|
|
3
|
-
constructor(maxFailures = 3, cooldownMs = 60000) {
|
|
4
|
-
this.failures = new Map(); // consecutive failures
|
|
5
|
-
this.lastFailureTime = new Map(); // timestamp of last recorded failure
|
|
6
|
-
this.maxFailures = maxFailures;
|
|
7
|
-
this.cooldownMs = cooldownMs;
|
|
8
|
-
}
|
|
9
|
-
recordSuccess(provider) {
|
|
10
|
-
this.failures.set(provider, 0);
|
|
11
|
-
this.lastFailureTime.delete(provider);
|
|
12
|
-
}
|
|
13
|
-
recordFailure(provider) {
|
|
14
|
-
this.failures.set(provider, (this.failures.get(provider) ?? 0) + 1);
|
|
15
|
-
this.lastFailureTime.set(provider, Date.now());
|
|
16
|
-
}
|
|
17
|
-
isHealthy(provider) {
|
|
18
|
-
const fails = this.failures.get(provider) ?? 0;
|
|
19
|
-
if (fails < this.maxFailures)
|
|
20
|
-
return true;
|
|
21
|
-
// After cooldown since last failure, allow retry
|
|
22
|
-
const lastFail = this.lastFailureTime.get(provider) ?? 0;
|
|
23
|
-
return Date.now() - lastFail > this.cooldownMs;
|
|
24
|
-
}
|
|
25
|
-
getStats() {
|
|
26
|
-
const stats = {};
|
|
27
|
-
for (const [name, fails] of this.failures) {
|
|
28
|
-
stats[name] = { failures: fails, healthy: this.isHealthy(name) };
|
|
29
|
-
}
|
|
30
|
-
return stats;
|
|
31
|
-
}
|
|
32
|
-
/** Reset a provider back to healthy state */
|
|
33
|
-
reset(provider) {
|
|
34
|
-
this.failures.delete(provider);
|
|
35
|
-
this.lastFailureTime.delete(provider);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=health.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/swap/router/health.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAE/F,MAAM,OAAO,qBAAqB;IAMhC,YAAY,WAAW,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK;QALvC,aAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,uBAAuB;QAC7D,oBAAe,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,qCAAqC;QAKxF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAC1C,iDAAiD;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;IACjD,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAA2D,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,QAAgB;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export { SmartSwapRouter, scoreQuote } from './router.js';
|
|
2
|
-
export { QuoteCache } from './cache.js';
|
|
3
|
-
export { ProviderHealthTracker } from './health.js';
|
|
4
|
-
export { FlashbotsProtectRpc } from './flashbots.js';
|
|
5
|
-
export { UniswapProvider, JupiterProvider, OneInchProvider, ZeroXProvider, ParaSwapProvider, CowSwapProvider, LiFiProvider, buildDefaultProviders, buildQuote, } from './providers/index.js';
|
|
6
|
-
export type { AggregatorQuote, AggregatorSwapResult, QuoteParams, SmartSwapConfig, SwapStrategy, ISwapProvider, TransactionReceipt, } from './types.js';
|
|
7
|
-
export { CHAIN_IDS, CHAIN_NAMES } from './types.js';
|
|
8
|
-
export { SwapRSIEngine } from './rsi/index.js';
|
|
9
|
-
export type { WalletGoals, WalletDirective, RSIConfig, RSIMetric, SwapOutcome, MutationResult, RSIState, ProviderWeights, } from './rsi/index.js';
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/swap/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EACV,WAAW,EACX,eAAe,EACf,SAAS,EACT,SAAS,EACT,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// [MAX-ADDED] SmartSwapRouter public API
|
|
2
|
-
export { SmartSwapRouter, scoreQuote } from './router.js';
|
|
3
|
-
export { QuoteCache } from './cache.js';
|
|
4
|
-
export { ProviderHealthTracker } from './health.js';
|
|
5
|
-
export { FlashbotsProtectRpc } from './flashbots.js';
|
|
6
|
-
export { UniswapProvider, JupiterProvider, OneInchProvider, ZeroXProvider, ParaSwapProvider, CowSwapProvider, LiFiProvider, buildDefaultProviders, buildQuote, } from './providers/index.js';
|
|
7
|
-
export { CHAIN_IDS, CHAIN_NAMES } from './types.js';
|
|
8
|
-
// [MAX-ADDED] RSI Engine
|
|
9
|
-
export { SwapRSIEngine } from './rsi/index.js';
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/swap/router/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpD,yBAAyB;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|