@andrewkimjoseph/celina-sdk 0.27.6 → 0.28.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.
Files changed (72) hide show
  1. package/README.md +2 -2
  2. package/build/a2a/skills.js +1 -1
  3. package/build/a2a/skills.js.map +1 -1
  4. package/build/abis/uniswap-v3.d.ts +171 -0
  5. package/build/abis/uniswap-v3.js +120 -0
  6. package/build/abis/uniswap-v3.js.map +1 -0
  7. package/build/config/uniswap.d.ts +15 -0
  8. package/build/config/uniswap.js +9 -1
  9. package/build/config/uniswap.js.map +1 -1
  10. package/build/index.d.ts +3 -3
  11. package/build/services/swap-pairs.d.ts +18 -4
  12. package/build/services/swap-pairs.js +35 -2
  13. package/build/services/swap-pairs.js.map +1 -1
  14. package/build/services/uniswap-path-router.d.ts +11 -1
  15. package/build/services/uniswap-path-router.js +36 -10
  16. package/build/services/uniswap-path-router.js.map +1 -1
  17. package/build/services/uniswap-v3-path-router.d.ts +40 -0
  18. package/build/services/uniswap-v3-path-router.js +183 -0
  19. package/build/services/uniswap-v3-path-router.js.map +1 -0
  20. package/build/services/uniswap-v3-pool-discovery.d.ts +33 -0
  21. package/build/services/uniswap-v3-pool-discovery.js +141 -0
  22. package/build/services/uniswap-v3-pool-discovery.js.map +1 -0
  23. package/build/services/uniswap-venue-quote.d.ts +28 -0
  24. package/build/services/uniswap-venue-quote.js +114 -0
  25. package/build/services/uniswap-venue-quote.js.map +1 -0
  26. package/build/services/uniswap.service.d.ts +24 -9
  27. package/build/services/uniswap.service.js +86 -37
  28. package/build/services/uniswap.service.js.map +1 -1
  29. package/build/src/a2a/skills.js +1 -1
  30. package/build/src/a2a/skills.js.map +1 -1
  31. package/build/src/abis/uniswap-v3.d.ts +171 -0
  32. package/build/src/abis/uniswap-v3.js +120 -0
  33. package/build/src/abis/uniswap-v3.js.map +1 -0
  34. package/build/src/config/uniswap.d.ts +15 -0
  35. package/build/src/config/uniswap.js +9 -1
  36. package/build/src/config/uniswap.js.map +1 -1
  37. package/build/src/index.d.ts +3 -3
  38. package/build/src/services/swap-pairs.d.ts +18 -4
  39. package/build/src/services/swap-pairs.js +35 -2
  40. package/build/src/services/swap-pairs.js.map +1 -1
  41. package/build/src/services/uniswap-path-router.d.ts +11 -1
  42. package/build/src/services/uniswap-path-router.js +36 -10
  43. package/build/src/services/uniswap-path-router.js.map +1 -1
  44. package/build/src/services/uniswap-v3-path-router.d.ts +40 -0
  45. package/build/src/services/uniswap-v3-path-router.js +183 -0
  46. package/build/src/services/uniswap-v3-path-router.js.map +1 -0
  47. package/build/src/services/uniswap-v3-pool-discovery.d.ts +33 -0
  48. package/build/src/services/uniswap-v3-pool-discovery.js +141 -0
  49. package/build/src/services/uniswap-v3-pool-discovery.js.map +1 -0
  50. package/build/src/services/uniswap-venue-quote.d.ts +28 -0
  51. package/build/src/services/uniswap-venue-quote.js +114 -0
  52. package/build/src/services/uniswap-venue-quote.js.map +1 -0
  53. package/build/src/services/uniswap.service.d.ts +24 -9
  54. package/build/src/services/uniswap.service.js +86 -37
  55. package/build/src/services/uniswap.service.js.map +1 -1
  56. package/build/src/tools/domains/browser.js +5 -3
  57. package/build/src/tools/domains/browser.js.map +1 -1
  58. package/build/src/tools/domains/uniswap.js +5 -5
  59. package/build/src/tools/domains/uniswap.js.map +1 -1
  60. package/build/src/tools/swap-routing.d.ts +2 -2
  61. package/build/src/tools/swap-routing.js +21 -6
  62. package/build/src/tools/swap-routing.js.map +1 -1
  63. package/build/tests/catalog/domains/defi.js +8 -1
  64. package/build/tests/catalog/domains/defi.js.map +1 -1
  65. package/build/tools/domains/browser.js +5 -3
  66. package/build/tools/domains/browser.js.map +1 -1
  67. package/build/tools/domains/uniswap.js +5 -5
  68. package/build/tools/domains/uniswap.js.map +1 -1
  69. package/build/tools/swap-routing.d.ts +2 -2
  70. package/build/tools/swap-routing.js +21 -6
  71. package/build/tools/swap-routing.js.map +1 -1
  72. package/package.json +1 -1
@@ -0,0 +1,120 @@
1
+ /** Uniswap v3 factory, QuoterV2, and SwapRouter02 on Celo mainnet. */
2
+ export const uniswapV3FactoryAbi = [
3
+ {
4
+ name: "getPool",
5
+ type: "function",
6
+ stateMutability: "view",
7
+ inputs: [
8
+ { name: "tokenA", type: "address" },
9
+ { name: "tokenB", type: "address" },
10
+ { name: "fee", type: "uint24" },
11
+ ],
12
+ outputs: [{ name: "pool", type: "address" }],
13
+ },
14
+ ];
15
+ export const uniswapV3PoolAbi = [
16
+ {
17
+ name: "liquidity",
18
+ type: "function",
19
+ stateMutability: "view",
20
+ inputs: [],
21
+ outputs: [{ name: "liquidity", type: "uint128" }],
22
+ },
23
+ ];
24
+ export const v3QuoterAbi = [
25
+ {
26
+ name: "quoteExactInputSingle",
27
+ type: "function",
28
+ stateMutability: "nonpayable",
29
+ inputs: [
30
+ {
31
+ name: "params",
32
+ type: "tuple",
33
+ components: [
34
+ { name: "tokenIn", type: "address" },
35
+ { name: "tokenOut", type: "address" },
36
+ { name: "amountIn", type: "uint256" },
37
+ { name: "fee", type: "uint24" },
38
+ { name: "sqrtPriceLimitX96", type: "uint160" },
39
+ ],
40
+ },
41
+ ],
42
+ outputs: [
43
+ { name: "amountOut", type: "uint256" },
44
+ { name: "sqrtPriceX96After", type: "uint160" },
45
+ { name: "initializedTicksCrossed", type: "uint32" },
46
+ { name: "gasEstimate", type: "uint256" },
47
+ ],
48
+ },
49
+ {
50
+ name: "quoteExactInput",
51
+ type: "function",
52
+ stateMutability: "nonpayable",
53
+ inputs: [
54
+ { name: "path", type: "bytes" },
55
+ { name: "amountIn", type: "uint256" },
56
+ ],
57
+ outputs: [
58
+ { name: "amountOut", type: "uint256" },
59
+ { name: "sqrtPriceX96AfterList", type: "uint160[]" },
60
+ { name: "initializedTicksCrossedList", type: "uint32[]" },
61
+ { name: "gasEstimate", type: "uint256" },
62
+ ],
63
+ },
64
+ ];
65
+ /**
66
+ * SwapRouter02 execution surface used by Celina.
67
+ * `exactInputSingle` / `exactInput` have no deadline; `multicall(uint256,bytes[])` applies one.
68
+ */
69
+ export const swapRouter02Abi = [
70
+ {
71
+ name: "exactInputSingle",
72
+ type: "function",
73
+ stateMutability: "payable",
74
+ inputs: [
75
+ {
76
+ name: "params",
77
+ type: "tuple",
78
+ components: [
79
+ { name: "tokenIn", type: "address" },
80
+ { name: "tokenOut", type: "address" },
81
+ { name: "fee", type: "uint24" },
82
+ { name: "recipient", type: "address" },
83
+ { name: "amountIn", type: "uint256" },
84
+ { name: "amountOutMinimum", type: "uint256" },
85
+ { name: "sqrtPriceLimitX96", type: "uint160" },
86
+ ],
87
+ },
88
+ ],
89
+ outputs: [{ name: "amountOut", type: "uint256" }],
90
+ },
91
+ {
92
+ name: "exactInput",
93
+ type: "function",
94
+ stateMutability: "payable",
95
+ inputs: [
96
+ {
97
+ name: "params",
98
+ type: "tuple",
99
+ components: [
100
+ { name: "path", type: "bytes" },
101
+ { name: "recipient", type: "address" },
102
+ { name: "amountIn", type: "uint256" },
103
+ { name: "amountOutMinimum", type: "uint256" },
104
+ ],
105
+ },
106
+ ],
107
+ outputs: [{ name: "amountOut", type: "uint256" }],
108
+ },
109
+ {
110
+ name: "multicall",
111
+ type: "function",
112
+ stateMutability: "payable",
113
+ inputs: [
114
+ { name: "deadline", type: "uint256" },
115
+ { name: "data", type: "bytes[]" },
116
+ ],
117
+ outputs: [{ name: "results", type: "bytes[]" }],
118
+ },
119
+ ];
120
+ //# sourceMappingURL=uniswap-v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap-v3.js","sourceRoot":"","sources":["../../../src/abis/uniswap-v3.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,18 @@
1
+ /** Uniswap v3 on Celo mainnet — https://docs.celo.org/tooling/contracts/uniswap-contracts */
2
+ export declare const UNISWAP_V3: {
3
+ readonly factory: "0xAfE208a311B21f13EF87E33A90049fC17A7acDEc";
4
+ readonly quoterV2: "0x82825d0554fA07f7FC52Ab63c961F330fdEFa8E8";
5
+ readonly swapRouter02: "0x5615CDAb10dc425a742d643d949a7F474C01abc4";
6
+ };
7
+ /** Standard v3 fee tiers probed on the Celo factory. */
8
+ export declare const UNISWAP_V3_FEE_TIERS: readonly [100, 500, 3000, 10000];
9
+ /** Canonical v3 pool (token0 sorts before token1). */
10
+ export type UniswapV3Pool = {
11
+ token0: `0x${string}`;
12
+ token1: `0x${string}`;
13
+ fee: number;
14
+ };
15
+ export type UniswapProtocol = "uniswap_v3" | "uniswap_v4";
1
16
  /** Uniswap v4 on Celo mainnet — https://docs.celo.org/tooling/contracts/uniswap-contracts */
2
17
  export declare const UNISWAP_V4: {
3
18
  readonly poolManager: "0x288dc841A52FCA2707c6947B3A777c5E56cd87BC";
@@ -1,8 +1,16 @@
1
1
  /**
2
- * Uniswap v4 contract addresses and routing helpers for Celo mainnet.
2
+ * Uniswap v3 and v4 contract addresses and routing helpers for Celo mainnet.
3
3
  * @see https://docs.celo.org/tooling/contracts/uniswap-contracts
4
4
  */
5
5
  import { MENTO_CELO_ADDRESS } from "./chains.js";
6
+ /** Uniswap v3 on Celo mainnet — https://docs.celo.org/tooling/contracts/uniswap-contracts */
7
+ export const UNISWAP_V3 = {
8
+ factory: "0xAfE208a311B21f13EF87E33A90049fC17A7acDEc",
9
+ quoterV2: "0x82825d0554fA07f7FC52Ab63c961F330fdEFa8E8",
10
+ swapRouter02: "0x5615CDAb10dc425a742d643d949a7F474C01abc4",
11
+ };
12
+ /** Standard v3 fee tiers probed on the Celo factory. */
13
+ export const UNISWAP_V3_FEE_TIERS = [100, 500, 3000, 10000];
6
14
  /** Uniswap v4 on Celo mainnet — https://docs.celo.org/tooling/contracts/uniswap-contracts */
7
15
  export const UNISWAP_V4 = {
8
16
  poolManager: "0x288dc841A52FCA2707c6947B3A777c5E56cd87BC",
@@ -1 +1 @@
1
- {"version":3,"file":"uniswap.js","sourceRoot":"","sources":["../../../src/config/uniswap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW,EAAE,4CAAqD;IAClE,QAAQ,EAAE,4CAAqD;IAC/D,SAAS,EAAE,4CAAqD;IAChE,eAAe,EAAE,4CAAqD;IACtE,OAAO,EAAE,4CAAqD;IAC9D,SAAS,EAAE,4CAAqD;IAChE,cAAc,EAAE,4CAAqD;CAC7D,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAC/B,8EAA8E,CAAC;AAEjF,gEAAgE;AAChE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAEzE,qEAAqE;AACrE,MAAM,CAAC,MAAM,4BAA4B,GAA2B;IAClE,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAA6B;IAC9D,UAAU,CAAC,cAAc;IACzB,kBAAkB;IAClB,4CAA4C,EAAE,OAAO;IACrD,4CAA4C,EAAE,OAAO;IACrD,4CAA4C,EAAE,OAAO;IACrD,4CAA4C,EAAE,OAAO;IACrD,4CAA4C,EAAE,kBAAkB;CACjE,CAAC;AAWF,mEAAmE;AACnE,MAAM,UAAU,qBAAqB,CACnC,CAAgB,EAChB,CAAgB;IAEhB,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,uBAAuB,CAAC,OAAuB;IAC7D,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,qBAAqB,CAClD,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,CAClB,CAAC;IACF,OAAO,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC9C,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAC/B,OAAiC;IAEjC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,cAAc,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAiC;IAEjC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,wBAAwB,CACtC,OAAiC;IAEjC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,uBAAuB,CAAC,QAAuB;IAC7D,OAAO,QAAQ,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,cAAc,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"uniswap.js","sourceRoot":"","sources":["../../../src/config/uniswap.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ export interface CelinaClient {
35
35
  transaction: TransactionService;
36
36
  /** Mento FX quotes, estimates, and `prepareFx` flows. */
37
37
  mentoFx: MentoFxService;
38
- /** Uniswap v4 quotes, estimates, and `prepareSwap` flows. */
38
+ /** Uniswap v3 and v4 quotes, estimates, and `prepareSwap` flows. */
39
39
  uniswap: UniswapService;
40
40
  /** Aave V3 `getBalances`, `prepareSupply`, and `prepareWithdraw` on Celo. */
41
41
  aave: AaveService;
@@ -89,9 +89,9 @@ export type { SdkConfig } from "./config/sdk-config.js";
89
89
  export type { ResolvedToken } from "./services/token.service.js";
90
90
  /** Slippage, deadline, and recipient options for Mento FX swaps. */
91
91
  export type { MentoFxParams } from "./services/mento-fx.service.js";
92
- /** Unordered registry-token pair listing for Mento FX / Uniswap v4. */
92
+ /** Unordered registry-token pair listing for Mento FX / Uniswap. */
93
93
  export type { SwapPair, SwapPairsResult } from "./services/swap-pairs.js";
94
- /** Slippage, deadline, and recipient options for Uniswap v4 swaps. */
94
+ /** Slippage, deadline, recipient, and optional venue pin for Uniswap swaps. */
95
95
  export type { UniswapSwapParams } from "./services/uniswap.service.js";
96
96
  /** Pagination and metadata options for governance proposal lists. */
97
97
  export type { GovernanceProposalsOptions } from "./services/governance.service.js";
@@ -1,11 +1,19 @@
1
- import type { UniswapPoolIndex } from "./uniswap-pool-discovery.js";
1
+ /** Graph fields shared by the v3 and v4 pool indexes. */
2
+ type UniswapPairGraph = {
3
+ poolsByPair: Iterable<readonly [string, unknown]>;
4
+ adjacency: Map<string, Set<string>>;
5
+ };
6
+ /** Uniswap venue that currently has a pool or multi-hop path for a pair. */
7
+ export type UniswapVenue = "uniswap_v3" | "uniswap_v4";
2
8
  /** One unordered registry-token pair with hop count. */
3
9
  export type SwapPair = {
4
10
  token_a: string;
5
11
  token_b: string;
6
12
  hops: number;
13
+ /** Set on Uniswap listings. Omitted for Mento pairs. */
14
+ venues?: UniswapVenue[];
7
15
  };
8
- /** Mento FX or Uniswap v4 pair listing returned to tools and SDK callers. */
16
+ /** Mento FX or Uniswap pair listing returned to tools and SDK callers. */
9
17
  export type SwapPairsResult = {
10
18
  network: "mainnet";
11
19
  protocol: "mento_fx" | "uniswap_v4";
@@ -35,9 +43,15 @@ export declare function filterPairsByToken(pairs: SwapPair[], symbol: string): {
35
43
  export declare function withTokenFilter(result: SwapPairsResult, symbol?: string): SwapPairsResult;
36
44
  /** Build unordered registry pairs from Mento `routes.getRoutes()` results. */
37
45
  export declare function buildPairsFromMentoRoutes(routes: readonly MentoRouteLike[]): SwapPair[];
46
+ /** Tag every pair with a single Uniswap venue. */
47
+ export declare function withVenue(pairs: SwapPair[], venue: UniswapVenue): SwapPair[];
48
+ /**
49
+ * Merge pair listings. Hop count is the shortest path. Venues are the union.
50
+ */
51
+ export declare function mergeSwapPairs(lists: SwapPair[][]): SwapPair[];
38
52
  /**
39
- * Build unordered registry pairs from a Uniswap v4 pool index.
53
+ * Build unordered registry pairs from a Uniswap pool index.
40
54
  * Direct pools are hops: 1; two-hop adjacency among registry tokens is hops: 2.
41
55
  */
42
- export declare function buildPairsFromUniswapIndex(index: UniswapPoolIndex): SwapPair[];
56
+ export declare function buildPairsFromUniswapIndex(index: UniswapPairGraph): SwapPair[];
43
57
  export {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Shared swap-pair listing helpers for Mento FX and Uniswap v4.
2
+ * Shared swap-pair listing helpers for Mento FX and Uniswap v3/v4.
3
3
  * Pair existence only — no quotes.
4
4
  */
5
5
  import { findKnownToken, KNOWN_TOKENS, MENTO_CELO_ADDRESS } from "../config/chains.js";
@@ -83,8 +83,41 @@ export function buildPairsFromMentoRoutes(routes) {
83
83
  }
84
84
  return sortedPairs(map);
85
85
  }
86
+ /** Tag every pair with a single Uniswap venue. */
87
+ export function withVenue(pairs, venue) {
88
+ return pairs.map((pair) => ({ ...pair, venues: [venue] }));
89
+ }
90
+ /**
91
+ * Merge pair listings. Hop count is the shortest path. Venues are the union.
92
+ */
93
+ export function mergeSwapPairs(lists) {
94
+ const map = new Map();
95
+ for (const list of lists) {
96
+ for (const pair of list) {
97
+ const key = pairKey(pair.token_a, pair.token_b);
98
+ const existing = map.get(key);
99
+ if (!existing) {
100
+ map.set(key, {
101
+ ...pair,
102
+ venues: pair.venues ? [...pair.venues] : undefined,
103
+ });
104
+ continue;
105
+ }
106
+ const venues = [
107
+ ...new Set([...(existing.venues ?? []), ...(pair.venues ?? [])]),
108
+ ].sort();
109
+ map.set(key, {
110
+ token_a: existing.token_a,
111
+ token_b: existing.token_b,
112
+ hops: Math.min(existing.hops, pair.hops),
113
+ ...(venues.length > 0 ? { venues } : {}),
114
+ });
115
+ }
116
+ }
117
+ return sortedPairs(map);
118
+ }
86
119
  /**
87
- * Build unordered registry pairs from a Uniswap v4 pool index.
120
+ * Build unordered registry pairs from a Uniswap pool index.
88
121
  * Direct pools are hops: 1; two-hop adjacency among registry tokens is hops: 2.
89
122
  */
90
123
  export function buildPairsFromUniswapIndex(index) {
@@ -1 +1 @@
1
- {"version":3,"file":"swap-pairs.js","sourceRoot":"","sources":["../../../src/services/swap-pairs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAyBhE,SAAS,aAAa,CAAC,CAAS,EAAE,CAAS;IACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;IACnC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,GAAG,OAAO,IAAI,OAAO,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CACd,GAA0B,EAC1B,OAAe,EACf,OAAe,EACf,IAAY;IAEZ,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,GAA0B;IAC7C,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,OAAO,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;AACzC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,8BAA8B;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAChC,KAAiB,EACjB,MAAc;IAEd,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAC3B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,CAC7D,CAAC;IACF,MAAM,YAAY,GAAG;QACnB,GAAG,IAAI,GAAG,CACR,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAChF;KACF,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAC3C,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAC7B,MAAuB,EACvB,MAAe;IAEf,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1D,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,YAAY,EAAE,QAAQ,CAAC,YAAY;KACpC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,yBAAyB,CAAC,MAAiC;IACzE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACrC,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAuB;IAChE,MAAM,OAAO,GAAG,8BAA8B,EAAE,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IAExC,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"swap-pairs.js","sourceRoot":"","sources":["../../../src/services/swap-pairs.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import type { PublicClient } from "viem";
5
5
  import { type UniswapPoolKey } from "../config/uniswap.js";
6
+ import { type UniswapPoolIndex } from "./uniswap-pool-discovery.js";
6
7
  /** Single hop descriptor in a Uniswap v4 multi-hop path. */
7
8
  export type UniswapPathKey = {
8
9
  intermediateCurrency: `0x${string}`;
@@ -28,6 +29,15 @@ export type UniswapSwapRoute = {
28
29
  * prepare steps that follow it in the same chat turn.
29
30
  */
30
31
  export declare const MAX_QUOTE_PATHS = 16;
32
+ /**
33
+ * Split a shared simulateContract budget across two venues.
34
+ * Each venue gets up to half, then leftover calls go to the venue with more candidates.
35
+ */
36
+ export declare function splitQuoteBudget(firstCount: number, secondCount: number, total?: number): {
37
+ first: number;
38
+ second: number;
39
+ };
40
+ export declare function countV4CandidatePaths(index: UniswapPoolIndex, currencyIn: `0x${string}`, currencyOut: `0x${string}`): number;
31
41
  /**
32
42
  * Quote all candidate paths and return the highest-output Uniswap v4 route.
33
43
  * @param client - Celo public client for quoter simulation
@@ -36,7 +46,7 @@ export declare const MAX_QUOTE_PATHS = 16;
36
46
  * @param amountIn - Input amount in base units
37
47
  * @returns Best route and quoter output, or `null` when no path quotes successfully
38
48
  */
39
- export declare function findBestUniswapRoute(client: PublicClient, currencyIn: `0x${string}`, currencyOut: `0x${string}`, amountIn: bigint): Promise<{
49
+ export declare function findBestUniswapRoute(client: PublicClient, currencyIn: `0x${string}`, currencyOut: `0x${string}`, amountIn: bigint, maxPaths?: number, index?: UniswapPoolIndex): Promise<{
40
50
  route: UniswapSwapRoute;
41
51
  amountOut: bigint;
42
52
  indexSource: string;
@@ -39,6 +39,35 @@ function buildPathKeys(pools, currencyIn) {
39
39
  }
40
40
  return pathKeys;
41
41
  }
42
+ /**
43
+ * Split a shared simulateContract budget across two venues.
44
+ * Each venue gets up to half, then leftover calls go to the venue with more candidates.
45
+ */
46
+ export function splitQuoteBudget(firstCount, secondCount, total = MAX_QUOTE_PATHS) {
47
+ const budget = Math.max(0, total);
48
+ const firstNeeded = Math.max(0, firstCount);
49
+ const secondNeeded = Math.max(0, secondCount);
50
+ if (firstNeeded + secondNeeded <= budget) {
51
+ return { first: firstNeeded, second: secondNeeded };
52
+ }
53
+ const half = Math.floor(budget / 2);
54
+ let first = Math.min(firstNeeded, half);
55
+ let second = Math.min(secondNeeded, budget - first);
56
+ let leftover = budget - first - second;
57
+ if (firstNeeded > first && leftover > 0) {
58
+ const give = Math.min(leftover, firstNeeded - first);
59
+ first += give;
60
+ leftover -= give;
61
+ }
62
+ if (secondNeeded > second && leftover > 0) {
63
+ const give = Math.min(leftover, secondNeeded - second);
64
+ second += give;
65
+ }
66
+ return { first, second };
67
+ }
68
+ export function countV4CandidatePaths(index, currencyIn, currencyOut) {
69
+ return enumeratePaths(index, currencyIn, currencyOut).length;
70
+ }
42
71
  function enumeratePaths(index, currencyIn, currencyOut) {
43
72
  const start = currencyIn.toLowerCase();
44
73
  const goal = currencyOut.toLowerCase();
@@ -125,16 +154,13 @@ async function quotePath(client, currencyIn, pools, amountIn) {
125
154
  * @param amountIn - Input amount in base units
126
155
  * @returns Best route and quoter output, or `null` when no path quotes successfully
127
156
  */
128
- export async function findBestUniswapRoute(client, currencyIn, currencyOut, amountIn) {
129
- const index = await getUniswapPoolIndex(client);
130
- // Sort shortest-first so 1-hop direct pools are always preferred, then cap to
131
- // MAX_QUOTE_PATHS to keep the concurrent simulateContract fan-out bounded.
132
- // Each simulateContract call is one Cloudflare Workers subrequest; an
133
- // unbounded walk over a dense pool graph can exhaust the per-invocation
134
- // budget before the subsequent balance-check and prepare steps can run.
135
- const candidatePaths = enumeratePaths(index, currencyIn, currencyOut)
157
+ export async function findBestUniswapRoute(client, currencyIn, currencyOut, amountIn, maxPaths = MAX_QUOTE_PATHS, index) {
158
+ const poolIndex = index ?? (await getUniswapPoolIndex(client));
159
+ // Sort shortest-first so 1-hop direct pools are always preferred, then cap
160
+ // simulateContract calls. Each call is one Cloudflare Workers subrequest.
161
+ const candidatePaths = enumeratePaths(poolIndex, currencyIn, currencyOut)
136
162
  .sort((a, b) => a.length - b.length)
137
- .slice(0, MAX_QUOTE_PATHS);
163
+ .slice(0, Math.max(0, maxPaths));
138
164
  // Quote every candidate path concurrently; failed quotes (e.g. uninitialized
139
165
  // pools or insufficient liquidity) are dropped rather than aborting the rest.
140
166
  const quotes = await Promise.allSettled(candidatePaths.map(async (pools) => ({
@@ -169,7 +195,7 @@ export async function findBestUniswapRoute(client, currencyIn, currencyOut, amou
169
195
  return {
170
196
  route: best.route,
171
197
  amountOut: best.amountOut,
172
- indexSource: index.source,
198
+ indexSource: poolIndex.source,
173
199
  };
174
200
  }
175
201
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"uniswap-path-router.js","sourceRoot":"","sources":["../../../src/services/uniswap-path-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uniswap-path-router.js","sourceRoot":"","sources":["../../../src/services/uniswap-path-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Uniswap v3 path routing: BFS over the hub-pool index and QuoterV2 selection.
3
+ */
4
+ import { type Hex, type PublicClient } from "viem";
5
+ import { type UniswapV3Pool } from "../config/uniswap.js";
6
+ import { type UniswapV3PoolIndex } from "./uniswap-v3-pool-discovery.js";
7
+ /** Best quoted v3 route between two tokens. Pools are in hop order. */
8
+ export type UniswapV3SwapRoute = {
9
+ tokenIn: `0x${string}`;
10
+ tokenOut: `0x${string}`;
11
+ pools: UniswapV3Pool[];
12
+ hops: number;
13
+ };
14
+ /** Token on the other side of a canonical v3 pool. */
15
+ export declare function otherV3Token(pool: UniswapV3Pool, token: `0x${string}`): `0x${string}`;
16
+ /** Packed v3 path: token, fee, token, fee, token. */
17
+ export declare function encodeV3Path(tokenIn: `0x${string}`, pools: UniswapV3Pool[]): Hex;
18
+ /**
19
+ * SwapRouter02 calldata. Single- and multi-hop swaps are wrapped in
20
+ * `multicall(deadline, bytes[])` because exactInput has no deadline field.
21
+ */
22
+ export declare function buildSwapRouter02Calldata(args: {
23
+ tokenIn: `0x${string}`;
24
+ recipient: `0x${string}`;
25
+ amountIn: bigint;
26
+ amountOutMin: bigint;
27
+ deadline: bigint;
28
+ pools: UniswapV3Pool[];
29
+ }): Hex;
30
+ export declare function enumerateV3Paths(index: UniswapV3PoolIndex, tokenIn: `0x${string}`, tokenOut: `0x${string}`): UniswapV3Pool[][];
31
+ export declare function countV3CandidatePaths(index: UniswapV3PoolIndex, tokenIn: `0x${string}`, tokenOut: `0x${string}`): number;
32
+ /**
33
+ * Quote candidate v3 paths and return the highest output.
34
+ * @param maxPaths - Cap on simulateContract calls for this venue
35
+ */
36
+ export declare function findBestV3Route(client: PublicClient, tokenIn: `0x${string}`, tokenOut: `0x${string}`, amountIn: bigint, maxPaths: number, index?: UniswapV3PoolIndex): Promise<{
37
+ route: UniswapV3SwapRoute;
38
+ amountOut: bigint;
39
+ indexSource: "onchain";
40
+ } | null>;