agentwallet-sdk 2.3.0 → 2.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.
Files changed (45) hide show
  1. package/dist/bridge/__tests__/bridge.test.d.ts +2 -0
  2. package/dist/bridge/__tests__/bridge.test.d.ts.map +1 -0
  3. package/dist/bridge/__tests__/bridge.test.js +508 -0
  4. package/dist/bridge/__tests__/bridge.test.js.map +1 -0
  5. package/dist/bridge/abis.d.ts +187 -0
  6. package/dist/bridge/abis.d.ts.map +1 -0
  7. package/dist/bridge/abis.js +129 -0
  8. package/dist/bridge/abis.js.map +1 -0
  9. package/dist/bridge/client.d.ts +106 -0
  10. package/dist/bridge/client.d.ts.map +1 -0
  11. package/dist/bridge/client.js +393 -0
  12. package/dist/bridge/client.js.map +1 -0
  13. package/dist/bridge/index.d.ts +4 -0
  14. package/dist/bridge/index.d.ts.map +1 -0
  15. package/dist/bridge/index.js +4 -0
  16. package/dist/bridge/index.js.map +1 -0
  17. package/dist/bridge/types.d.ts +107 -0
  18. package/dist/bridge/types.d.ts.map +1 -0
  19. package/dist/bridge/types.js +58 -0
  20. package/dist/bridge/types.js.map +1 -0
  21. package/dist/index.d.ts +504 -213
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +7 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/swap/SwapModule.d.ts +75 -0
  26. package/dist/swap/SwapModule.d.ts.map +1 -0
  27. package/dist/swap/SwapModule.js +267 -0
  28. package/dist/swap/SwapModule.js.map +1 -0
  29. package/dist/swap/__tests__/swap.test.d.ts +2 -0
  30. package/dist/swap/__tests__/swap.test.d.ts.map +1 -0
  31. package/dist/swap/__tests__/swap.test.js +272 -0
  32. package/dist/swap/__tests__/swap.test.js.map +1 -0
  33. package/dist/swap/abi.d.ts +169 -0
  34. package/dist/swap/abi.d.ts.map +1 -0
  35. package/dist/swap/abi.js +118 -0
  36. package/dist/swap/abi.js.map +1 -0
  37. package/dist/swap/index.d.ts +5 -0
  38. package/dist/swap/index.d.ts.map +1 -0
  39. package/dist/swap/index.js +5 -0
  40. package/dist/swap/index.js.map +1 -0
  41. package/dist/swap/types.d.ts +79 -0
  42. package/dist/swap/types.d.ts.map +1 -0
  43. package/dist/swap/types.js +18 -0
  44. package/dist/swap/types.js.map +1 -0
  45. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwapModule.js","sourceRoot":"","sources":["../../src/swap/SwapModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=swap.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.test.d.ts","sourceRoot":"","sources":["../../../src/swap/__tests__/swap.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,272 @@
1
+ // [MAX-ADDED] SwapModule tests — 14 tests covering all critical paths
2
+ // All on-chain calls are mocked. No real swaps are executed.
3
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
4
+ import { SwapModule, attachSwap, calcProtocolFee, applySlippage } from '../SwapModule.js';
5
+ import { BASE_TOKENS, PROTOCOL_FEE_BPS, DEFAULT_SLIPPAGE_BPS } from '../types.js';
6
+ // ─── Mock Factories ──────────────────────────────────────────────────────────
7
+ // Valid checksummed Ethereum addresses for testing
8
+ const WALLET_ADDR = '0x0000000000000000000000000000000000000001';
9
+ const FEE_WALLET = '0x0000000000000000000000000000000000000002';
10
+ const MOCK_TX_HASH = '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
11
+ const MOCK_FEE_TX = '0xcafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabe';
12
+ const MOCK_APPROVAL_TX = '0xaaaabbbbaaaabbbbaaaabbbbaaaabbbbaaaabbbbaaaabbbbaaaabbbbaaaabbbb';
13
+ /** Build a mock publicClient with configurable readContract behavior */
14
+ function makePublicClient(overrides = {}) {
15
+ return {
16
+ readContract: vi.fn(async ({ functionName, args }) => {
17
+ if (functionName === 'quoteExactInputSingle') {
18
+ // Return a mock quote: 95 WETH for 100K USDC at fee tier 500
19
+ return [95000000000000000000n, 0n, 1, 120000n];
20
+ }
21
+ if (functionName === 'allowance') {
22
+ return overrides.allowance ?? 0n;
23
+ }
24
+ return overrides[functionName] ?? 0n;
25
+ }),
26
+ ...overrides,
27
+ };
28
+ }
29
+ /** Build a mock walletClient */
30
+ function makeWalletClient(overrides = {}) {
31
+ return {
32
+ account: { address: WALLET_ADDR },
33
+ chain: { id: 8453 },
34
+ sendTransaction: vi.fn(async () => MOCK_TX_HASH),
35
+ ...overrides,
36
+ };
37
+ }
38
+ // ─── Unit: Pure Helper Functions ─────────────────────────────────────────────
39
+ describe('calcProtocolFee', () => {
40
+ it('calculates 0.875% fee correctly', () => {
41
+ // 100_000 USDC (6 decimals) = 100_000_000_000 raw
42
+ const amount = 100000000000n;
43
+ const fee = calcProtocolFee(amount, PROTOCOL_FEE_BPS);
44
+ // 0.875% of 100_000_000_000 = 875_000_000
45
+ expect(fee).toBe(875000000n);
46
+ });
47
+ it('floors partial bps (no dust rounding up)', () => {
48
+ const amount = 1n; // 1 wei
49
+ const fee = calcProtocolFee(amount, PROTOCOL_FEE_BPS);
50
+ // 1 * 875 / 100_000 = 0 (floor)
51
+ expect(fee).toBe(0n);
52
+ });
53
+ it('handles large amounts correctly', () => {
54
+ // 1 ETH = 1e18 wei
55
+ const one_eth = 1000000000000000000n;
56
+ const fee = calcProtocolFee(one_eth, PROTOCOL_FEE_BPS);
57
+ // 0.875% of 1e18 = 8_750_000_000_000_000
58
+ expect(fee).toBe(8750000000000000n);
59
+ });
60
+ });
61
+ describe('applySlippage', () => {
62
+ it('applies 50 bps (0.5%) slippage correctly', () => {
63
+ const amount = 1000000n;
64
+ const minimum = applySlippage(amount, DEFAULT_SLIPPAGE_BPS);
65
+ // 1_000_000 * (10_000 - 50) / 10_000 = 1_000_000 * 9950 / 10_000 = 995_000
66
+ expect(minimum).toBe(995000n);
67
+ });
68
+ it('applies 100 bps (1%) slippage correctly', () => {
69
+ const amount = 1000000n;
70
+ const minimum = applySlippage(amount, 100);
71
+ expect(minimum).toBe(990000n);
72
+ });
73
+ it('returns same amount for 0 bps slippage', () => {
74
+ const amount = 500000n;
75
+ expect(applySlippage(amount, 0)).toBe(500000n);
76
+ });
77
+ });
78
+ // ─── SwapModule: Quote Fetching ───────────────────────────────────────────────
79
+ describe('SwapModule.getQuote', () => {
80
+ let swapModule;
81
+ let mockPublicClient;
82
+ let mockWalletClient;
83
+ beforeEach(() => {
84
+ mockPublicClient = makePublicClient();
85
+ mockWalletClient = makeWalletClient();
86
+ swapModule = new SwapModule(mockPublicClient, mockWalletClient, WALLET_ADDR, { feeWallet: FEE_WALLET });
87
+ });
88
+ it('fetches quote and deducts protocol fee from amountIn', async () => {
89
+ const amountIn = 100000000n; // 100 USDC (6 decimals)
90
+ const quote = await swapModule.getQuote(BASE_TOKENS.USDC, BASE_TOKENS.WETH, amountIn);
91
+ // Protocol fee should be 0.875% of 100_000_000 = 875_000
92
+ expect(quote.feeAmount).toBe(875000n);
93
+ expect(quote.amountInNet).toBe(99125000n);
94
+ expect(quote.amountInRaw).toBe(amountIn);
95
+ });
96
+ it('selects the fee tier with best (highest) amountOut', async () => {
97
+ // Make 500-tier return better price than others
98
+ mockPublicClient.readContract = vi.fn(async ({ args }) => {
99
+ const fee = args[0].fee;
100
+ if (fee === 500)
101
+ return [200000n, 0n, 1, 100000n]; // best
102
+ if (fee === 3000)
103
+ return [180000n, 0n, 1, 110000n]; // worse
104
+ throw new Error('Pool not found'); // 100 and 10000 don't exist
105
+ });
106
+ const quote = await swapModule.getQuote(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 1000000n);
107
+ expect(quote.poolFeeTier).toBe(500);
108
+ expect(quote.amountOut).toBe(200000n);
109
+ });
110
+ it('throws if no pool found for any fee tier', async () => {
111
+ mockPublicClient.readContract = vi.fn(async () => {
112
+ throw new Error('execution reverted');
113
+ });
114
+ await expect(swapModule.getQuote(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 1000000n)).rejects.toThrow('No Uniswap V3 pool found');
115
+ });
116
+ it('throws if amountIn is too small to cover protocol fee', async () => {
117
+ // With PROTOCOL_FEE_BPS=875, amountIn must be > 875/100_000 per unit
118
+ // For amountIn=1n: fee=0n, net=1n — this actually works due to flooring
119
+ // For a crafted case: if fee somehow = amountIn... hard to trigger naturally.
120
+ // Instead test: amountIn=0
121
+ await expect(swapModule.getQuote(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 0n)).rejects.toThrow('too small');
122
+ });
123
+ it('calculates amountOutMinimum with default 50 bps slippage', async () => {
124
+ // Mock returns amountOut = 1_000_000n
125
+ mockPublicClient.readContract = vi.fn(async () => [1000000n, 0n, 1, 50000n]);
126
+ const quote = await swapModule.getQuote(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 1000000n);
127
+ // amountOutMinimum = 1_000_000 * (10_000 - 50) / 10_000 = 995_000
128
+ expect(quote.amountOutMinimum).toBe(995000n);
129
+ });
130
+ it('respects custom slippage override', async () => {
131
+ mockPublicClient.readContract = vi.fn(async () => [1000000n, 0n, 1, 50000n]);
132
+ const quote = await swapModule.getQuote(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 1000000n, { slippageBps: 200 });
133
+ // 1_000_000 * 9800 / 10_000 = 980_000
134
+ expect(quote.amountOutMinimum).toBe(980000n);
135
+ });
136
+ });
137
+ // ─── SwapModule: Approval Handling ───────────────────────────────────────────
138
+ describe('SwapModule.ensureApproval', () => {
139
+ it('skips approval if allowance is already sufficient', async () => {
140
+ const publicClient = makePublicClient({ allowance: 10000000000n }); // huge allowance
141
+ const walletClient = makeWalletClient();
142
+ const swapModule = new SwapModule(publicClient, walletClient, WALLET_ADDR);
143
+ const result = await swapModule.ensureApproval(BASE_TOKENS.USDC, '0x2626664c2603336E57B271c5C0b26F421741e481', 1000000n);
144
+ expect(result).toBeUndefined();
145
+ expect(walletClient.sendTransaction).not.toHaveBeenCalled();
146
+ });
147
+ it('submits approval tx when allowance is insufficient', async () => {
148
+ const publicClient = makePublicClient({ allowance: 0n });
149
+ const walletClient = makeWalletClient({
150
+ sendTransaction: vi.fn(async () => MOCK_APPROVAL_TX),
151
+ });
152
+ const swapModule = new SwapModule(publicClient, walletClient, WALLET_ADDR);
153
+ const result = await swapModule.ensureApproval(BASE_TOKENS.USDC, '0x2626664c2603336E57B271c5C0b26F421741e481', 1000000n);
154
+ expect(result).toBe(MOCK_APPROVAL_TX);
155
+ expect(walletClient.sendTransaction).toHaveBeenCalledOnce();
156
+ });
157
+ it('throws if walletClient has no account', async () => {
158
+ const publicClient = makePublicClient({ allowance: 0n });
159
+ const walletClient = makeWalletClient({ account: null });
160
+ const swapModule = new SwapModule(publicClient, walletClient, WALLET_ADDR);
161
+ await expect(swapModule.ensureApproval(BASE_TOKENS.USDC, '0x2626664c2603336E57B271c5C0b26F421741e481', 1000000n)).rejects.toThrow('no account');
162
+ });
163
+ });
164
+ // ─── SwapModule: Swap Execution ───────────────────────────────────────────────
165
+ describe('SwapModule.swap', () => {
166
+ let mockPublicClient;
167
+ let mockWalletClient;
168
+ let swapModule;
169
+ beforeEach(() => {
170
+ mockPublicClient = makePublicClient({ allowance: 0n });
171
+ let txCallCount = 0;
172
+ mockWalletClient = makeWalletClient({
173
+ sendTransaction: vi.fn(async () => {
174
+ // Call order: 1=approval, 2=fee transfer, 3=swap
175
+ txCallCount++;
176
+ if (txCallCount === 1)
177
+ return MOCK_APPROVAL_TX;
178
+ if (txCallCount === 2)
179
+ return MOCK_FEE_TX;
180
+ return MOCK_TX_HASH;
181
+ }),
182
+ });
183
+ swapModule = new SwapModule(mockPublicClient, mockWalletClient, WALLET_ADDR, { feeWallet: FEE_WALLET });
184
+ });
185
+ it('executes full swap with approval + fee transfer', async () => {
186
+ mockPublicClient.readContract = vi.fn(async ({ functionName, args }) => {
187
+ if (functionName === 'quoteExactInputSingle')
188
+ return [1000000n, 0n, 1, 80000n];
189
+ if (functionName === 'allowance')
190
+ return 0n;
191
+ return 0n;
192
+ });
193
+ const result = await swapModule.swap(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 100000000n);
194
+ expect(result.txHash).toBeDefined();
195
+ expect(result.approvalRequired).toBe(true);
196
+ expect(result.approvalTxHash).toBe(MOCK_APPROVAL_TX);
197
+ expect(result.feeTxHash).toBe(MOCK_FEE_TX);
198
+ expect(result.quote.feeAmount).toBe(875000n); // 0.875% of 100_000_000
199
+ });
200
+ it('skips fee transfer when feeWallet == self (accountAddress)', async () => {
201
+ mockPublicClient.readContract = vi.fn(async ({ functionName }) => {
202
+ if (functionName === 'quoteExactInputSingle')
203
+ return [1000000n, 0n, 1, 80000n];
204
+ if (functionName === 'allowance')
205
+ return 999999999999n; // already approved
206
+ return 0n;
207
+ });
208
+ // Create module with feeWallet = wallet address (default self)
209
+ const selfSwapModule = new SwapModule(mockPublicClient, mockWalletClient, WALLET_ADDR, { feeWallet: WALLET_ADDR });
210
+ const result = await selfSwapModule.swap(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 100000000n);
211
+ expect(result.feeTxHash).toBeUndefined();
212
+ expect(result.approvalRequired).toBe(false);
213
+ expect(result.txHash).toBeDefined();
214
+ });
215
+ it('applies slippage protection — amountOutMinimum encoded in calldata', async () => {
216
+ mockPublicClient.readContract = vi.fn(async ({ functionName }) => {
217
+ if (functionName === 'quoteExactInputSingle')
218
+ return [2000000n, 0n, 1, 80000n];
219
+ if (functionName === 'allowance')
220
+ return 999999999999n;
221
+ return 0n;
222
+ });
223
+ const selfSwapModule = new SwapModule(mockPublicClient, mockWalletClient, WALLET_ADDR, { feeWallet: WALLET_ADDR });
224
+ const result = await selfSwapModule.swap(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 10000000n, { slippageBps: 100 });
225
+ // amountOutMinimum = 2_000_000 * 9900 / 10_000 = 1_980_000
226
+ expect(result.quote.amountOutMinimum).toBe(1980000n);
227
+ expect(result.txHash).toBeDefined();
228
+ });
229
+ it('returns gas estimate from quoter in result quote', async () => {
230
+ mockPublicClient.readContract = vi.fn(async ({ functionName }) => {
231
+ if (functionName === 'quoteExactInputSingle')
232
+ return [500000n, 0n, 1, 150000n];
233
+ if (functionName === 'allowance')
234
+ return 999999999999n;
235
+ return 0n;
236
+ });
237
+ const selfSwapModule = new SwapModule(mockPublicClient, mockWalletClient, WALLET_ADDR, { feeWallet: WALLET_ADDR });
238
+ const result = await selfSwapModule.swap(BASE_TOKENS.cbETH, BASE_TOKENS.WETH, 1000000000000000000n);
239
+ expect(result.quote.gasEstimate).toBe(150000n);
240
+ });
241
+ });
242
+ // ─── SwapModule: Config & attachSwap ─────────────────────────────────────────
243
+ describe('SwapModule config and attachSwap', () => {
244
+ it('getConfig returns correct fee settings', () => {
245
+ const swapModule = new SwapModule(makePublicClient(), makeWalletClient(), WALLET_ADDR, { feeWallet: FEE_WALLET, feeBps: PROTOCOL_FEE_BPS });
246
+ const config = swapModule.getConfig();
247
+ expect(config.feeBps).toBe(875);
248
+ expect(config.feeWallet).toBe(FEE_WALLET);
249
+ expect(config.routerAddress).toBe('0x2626664c2603336E57B271c5C0b26F421741e481');
250
+ expect(config.quoterAddress).toBe('0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a');
251
+ });
252
+ it('attachSwap enriches wallet with .swap() and .getQuote() methods', async () => {
253
+ const publicClient = makePublicClient();
254
+ publicClient.readContract = vi.fn(async ({ functionName }) => {
255
+ if (functionName === 'quoteExactInputSingle')
256
+ return [1000n, 0n, 1, 50000n];
257
+ return 0n;
258
+ });
259
+ const wallet = {
260
+ address: WALLET_ADDR,
261
+ publicClient: publicClient,
262
+ walletClient: makeWalletClient(),
263
+ };
264
+ const swapWallet = attachSwap(wallet, { feeWallet: FEE_WALLET });
265
+ expect(typeof swapWallet.swap).toBe('function');
266
+ expect(typeof swapWallet.getQuote).toBe('function');
267
+ expect(swapWallet.swapModule).toBeInstanceOf(SwapModule);
268
+ const quote = await swapWallet.getQuote(BASE_TOKENS.USDC, BASE_TOKENS.WETH, 1000000n);
269
+ expect(quote.feeAmount).toBe(8750n); // 0.875% of 1_000_000
270
+ });
271
+ });
272
+ //# sourceMappingURL=swap.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.test.js","sourceRoot":"","sources":["../../../src/swap/__tests__/swap.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ /** Uniswap V3 SwapRouter02 ABI — exactInputSingle */
2
+ export declare const UniswapV3RouterAbi: readonly [{
3
+ readonly name: "exactInputSingle";
4
+ readonly type: "function";
5
+ readonly stateMutability: "payable";
6
+ readonly inputs: readonly [{
7
+ readonly name: "params";
8
+ readonly type: "tuple";
9
+ readonly components: readonly [{
10
+ readonly name: "tokenIn";
11
+ readonly type: "address";
12
+ }, {
13
+ readonly name: "tokenOut";
14
+ readonly type: "address";
15
+ }, {
16
+ readonly name: "fee";
17
+ readonly type: "uint24";
18
+ }, {
19
+ readonly name: "recipient";
20
+ readonly type: "address";
21
+ }, {
22
+ readonly name: "amountIn";
23
+ readonly type: "uint256";
24
+ }, {
25
+ readonly name: "amountOutMinimum";
26
+ readonly type: "uint256";
27
+ }, {
28
+ readonly name: "sqrtPriceLimitX96";
29
+ readonly type: "uint160";
30
+ }];
31
+ }];
32
+ readonly outputs: readonly [{
33
+ readonly name: "amountOut";
34
+ readonly type: "uint256";
35
+ }];
36
+ }, {
37
+ readonly name: "exactInput";
38
+ readonly type: "function";
39
+ readonly stateMutability: "payable";
40
+ readonly inputs: readonly [{
41
+ readonly name: "params";
42
+ readonly type: "tuple";
43
+ readonly components: readonly [{
44
+ readonly name: "path";
45
+ readonly type: "bytes";
46
+ }, {
47
+ readonly name: "recipient";
48
+ readonly type: "address";
49
+ }, {
50
+ readonly name: "amountIn";
51
+ readonly type: "uint256";
52
+ }, {
53
+ readonly name: "amountOutMinimum";
54
+ readonly type: "uint256";
55
+ }];
56
+ }];
57
+ readonly outputs: readonly [{
58
+ readonly name: "amountOut";
59
+ readonly type: "uint256";
60
+ }];
61
+ }];
62
+ /** Uniswap V3 QuoterV2 ABI — quoteExactInputSingle */
63
+ export declare const UniswapV3QuoterV2Abi: readonly [{
64
+ readonly name: "quoteExactInputSingle";
65
+ readonly type: "function";
66
+ readonly stateMutability: "nonpayable";
67
+ readonly inputs: readonly [{
68
+ readonly name: "params";
69
+ readonly type: "tuple";
70
+ readonly components: readonly [{
71
+ readonly name: "tokenIn";
72
+ readonly type: "address";
73
+ }, {
74
+ readonly name: "tokenOut";
75
+ readonly type: "address";
76
+ }, {
77
+ readonly name: "amount";
78
+ readonly type: "uint256";
79
+ }, {
80
+ readonly name: "fee";
81
+ readonly type: "uint24";
82
+ }, {
83
+ readonly name: "sqrtPriceLimitX96";
84
+ readonly type: "uint160";
85
+ }];
86
+ }];
87
+ readonly outputs: readonly [{
88
+ readonly name: "amountOut";
89
+ readonly type: "uint256";
90
+ }, {
91
+ readonly name: "sqrtPriceX96After";
92
+ readonly type: "uint160";
93
+ }, {
94
+ readonly name: "initializedTicksCrossed";
95
+ readonly type: "uint32";
96
+ }, {
97
+ readonly name: "gasEstimate";
98
+ readonly type: "uint256";
99
+ }];
100
+ }];
101
+ /** Minimal ERC-20 ABI for allowance, approve, transferFrom */
102
+ export declare const ERC20Abi: readonly [{
103
+ readonly name: "allowance";
104
+ readonly type: "function";
105
+ readonly stateMutability: "view";
106
+ readonly inputs: readonly [{
107
+ readonly name: "owner";
108
+ readonly type: "address";
109
+ }, {
110
+ readonly name: "spender";
111
+ readonly type: "address";
112
+ }];
113
+ readonly outputs: readonly [{
114
+ readonly name: "";
115
+ readonly type: "uint256";
116
+ }];
117
+ }, {
118
+ readonly name: "approve";
119
+ readonly type: "function";
120
+ readonly stateMutability: "nonpayable";
121
+ readonly inputs: readonly [{
122
+ readonly name: "spender";
123
+ readonly type: "address";
124
+ }, {
125
+ readonly name: "amount";
126
+ readonly type: "uint256";
127
+ }];
128
+ readonly outputs: readonly [{
129
+ readonly name: "";
130
+ readonly type: "bool";
131
+ }];
132
+ }, {
133
+ readonly name: "transfer";
134
+ readonly type: "function";
135
+ readonly stateMutability: "nonpayable";
136
+ readonly inputs: readonly [{
137
+ readonly name: "to";
138
+ readonly type: "address";
139
+ }, {
140
+ readonly name: "amount";
141
+ readonly type: "uint256";
142
+ }];
143
+ readonly outputs: readonly [{
144
+ readonly name: "";
145
+ readonly type: "bool";
146
+ }];
147
+ }, {
148
+ readonly name: "balanceOf";
149
+ readonly type: "function";
150
+ readonly stateMutability: "view";
151
+ readonly inputs: readonly [{
152
+ readonly name: "account";
153
+ readonly type: "address";
154
+ }];
155
+ readonly outputs: readonly [{
156
+ readonly name: "";
157
+ readonly type: "uint256";
158
+ }];
159
+ }, {
160
+ readonly name: "decimals";
161
+ readonly type: "function";
162
+ readonly stateMutability: "view";
163
+ readonly inputs: readonly [];
164
+ readonly outputs: readonly [{
165
+ readonly name: "";
166
+ readonly type: "uint8";
167
+ }];
168
+ }];
169
+ //# sourceMappingURL=abi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../src/swap/abi.ts"],"names":[],"mappings":"AAEA,qDAAqD;AACrD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCrB,CAAC;AAEX,sDAAsD;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBvB,CAAC;AAEX,8DAA8D;AAC9D,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CX,CAAC"}
@@ -0,0 +1,118 @@
1
+ // [MAX-ADDED] ABIs for Uniswap V3 SwapRouter02 and QuoterV2 on Base Mainnet
2
+ /** Uniswap V3 SwapRouter02 ABI — exactInputSingle */
3
+ export const UniswapV3RouterAbi = [
4
+ {
5
+ name: 'exactInputSingle',
6
+ type: 'function',
7
+ stateMutability: 'payable',
8
+ inputs: [
9
+ {
10
+ name: 'params',
11
+ type: 'tuple',
12
+ components: [
13
+ { name: 'tokenIn', type: 'address' },
14
+ { name: 'tokenOut', type: 'address' },
15
+ { name: 'fee', type: 'uint24' },
16
+ { name: 'recipient', type: 'address' },
17
+ { name: 'amountIn', type: 'uint256' },
18
+ { name: 'amountOutMinimum', type: 'uint256' },
19
+ { name: 'sqrtPriceLimitX96', type: 'uint160' },
20
+ ],
21
+ },
22
+ ],
23
+ outputs: [{ name: 'amountOut', type: 'uint256' }],
24
+ },
25
+ {
26
+ name: 'exactInput',
27
+ type: 'function',
28
+ stateMutability: 'payable',
29
+ inputs: [
30
+ {
31
+ name: 'params',
32
+ type: 'tuple',
33
+ components: [
34
+ { name: 'path', type: 'bytes' },
35
+ { name: 'recipient', type: 'address' },
36
+ { name: 'amountIn', type: 'uint256' },
37
+ { name: 'amountOutMinimum', type: 'uint256' },
38
+ ],
39
+ },
40
+ ],
41
+ outputs: [{ name: 'amountOut', type: 'uint256' }],
42
+ },
43
+ ];
44
+ /** Uniswap V3 QuoterV2 ABI — quoteExactInputSingle */
45
+ export const UniswapV3QuoterV2Abi = [
46
+ {
47
+ name: 'quoteExactInputSingle',
48
+ type: 'function',
49
+ stateMutability: 'nonpayable',
50
+ inputs: [
51
+ {
52
+ name: 'params',
53
+ type: 'tuple',
54
+ components: [
55
+ { name: 'tokenIn', type: 'address' },
56
+ { name: 'tokenOut', type: 'address' },
57
+ { name: 'amount', type: 'uint256' },
58
+ { name: 'fee', type: 'uint24' },
59
+ { name: 'sqrtPriceLimitX96', type: 'uint160' },
60
+ ],
61
+ },
62
+ ],
63
+ outputs: [
64
+ { name: 'amountOut', type: 'uint256' },
65
+ { name: 'sqrtPriceX96After', type: 'uint160' },
66
+ { name: 'initializedTicksCrossed', type: 'uint32' },
67
+ { name: 'gasEstimate', type: 'uint256' },
68
+ ],
69
+ },
70
+ ];
71
+ /** Minimal ERC-20 ABI for allowance, approve, transferFrom */
72
+ export const ERC20Abi = [
73
+ {
74
+ name: 'allowance',
75
+ type: 'function',
76
+ stateMutability: 'view',
77
+ inputs: [
78
+ { name: 'owner', type: 'address' },
79
+ { name: 'spender', type: 'address' },
80
+ ],
81
+ outputs: [{ name: '', type: 'uint256' }],
82
+ },
83
+ {
84
+ name: 'approve',
85
+ type: 'function',
86
+ stateMutability: 'nonpayable',
87
+ inputs: [
88
+ { name: 'spender', type: 'address' },
89
+ { name: 'amount', type: 'uint256' },
90
+ ],
91
+ outputs: [{ name: '', type: 'bool' }],
92
+ },
93
+ {
94
+ name: 'transfer',
95
+ type: 'function',
96
+ stateMutability: 'nonpayable',
97
+ inputs: [
98
+ { name: 'to', type: 'address' },
99
+ { name: 'amount', type: 'uint256' },
100
+ ],
101
+ outputs: [{ name: '', type: 'bool' }],
102
+ },
103
+ {
104
+ name: 'balanceOf',
105
+ type: 'function',
106
+ stateMutability: 'view',
107
+ inputs: [{ name: 'account', type: 'address' }],
108
+ outputs: [{ name: '', type: 'uint256' }],
109
+ },
110
+ {
111
+ name: 'decimals',
112
+ type: 'function',
113
+ stateMutability: 'view',
114
+ inputs: [],
115
+ outputs: [{ name: '', type: 'uint8' }],
116
+ },
117
+ ];
118
+ //# sourceMappingURL=abi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abi.js","sourceRoot":"","sources":["../../src/swap/abi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { SwapModule, attachSwap, calcProtocolFee, applySlippage, calcDeadline } from './SwapModule.js';
2
+ export { UniswapV3RouterAbi, UniswapV3QuoterV2Abi, ERC20Abi } from './abi.js';
3
+ export { BASE_TOKENS, UNISWAP_V3_BASE, PROTOCOL_FEE_BPS, DEFAULT_SLIPPAGE_BPS, } from './types.js';
4
+ export type { UniswapFeeTier, SwapQuote, SwapOptions, SwapResult, SwapModuleConfig, } from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EACL,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ // [MAX-ADDED] SwapModule public API — Uniswap V3 aggregator with 0.875% protocol fee
2
+ export { SwapModule, attachSwap, calcProtocolFee, applySlippage, calcDeadline } from './SwapModule.js';
3
+ export { UniswapV3RouterAbi, UniswapV3QuoterV2Abi, ERC20Abi } from './abi.js';
4
+ export { BASE_TOKENS, UNISWAP_V3_BASE, PROTOCOL_FEE_BPS, DEFAULT_SLIPPAGE_BPS, } from './types.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swap/index.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EACL,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}