@fenine/universal-router-sdk 1.0.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 (163) hide show
  1. package/README.md +331 -0
  2. package/dist/cjs/src/entities/Command.d.ts +12 -0
  3. package/dist/cjs/src/entities/Command.js +9 -0
  4. package/dist/cjs/src/entities/Command.js.map +1 -0
  5. package/dist/cjs/src/entities/actions/across.d.ts +21 -0
  6. package/dist/cjs/src/entities/actions/across.js +7 -0
  7. package/dist/cjs/src/entities/actions/across.js.map +1 -0
  8. package/dist/cjs/src/entities/actions/index.d.ts +3 -0
  9. package/dist/cjs/src/entities/actions/index.js +7 -0
  10. package/dist/cjs/src/entities/actions/index.js.map +1 -0
  11. package/dist/cjs/src/entities/actions/uniswap.d.ts +38 -0
  12. package/dist/cjs/src/entities/actions/uniswap.js +545 -0
  13. package/dist/cjs/src/entities/actions/uniswap.js.map +1 -0
  14. package/dist/cjs/src/entities/actions/unwrapWETH.d.ts +12 -0
  15. package/dist/cjs/src/entities/actions/unwrapWETH.js +33 -0
  16. package/dist/cjs/src/entities/actions/unwrapWETH.js.map +1 -0
  17. package/dist/cjs/src/entities/index.d.ts +2 -0
  18. package/dist/cjs/src/entities/index.js +6 -0
  19. package/dist/cjs/src/entities/index.js.map +1 -0
  20. package/dist/cjs/src/index.d.ts +14 -0
  21. package/dist/cjs/src/index.js +36 -0
  22. package/dist/cjs/src/index.js.map +1 -0
  23. package/dist/cjs/src/swapRouter.d.ts +103 -0
  24. package/dist/cjs/src/swapRouter.js +338 -0
  25. package/dist/cjs/src/swapRouter.js.map +1 -0
  26. package/dist/cjs/src/types/encodeSwaps.d.ts +149 -0
  27. package/dist/cjs/src/types/encodeSwaps.js +3 -0
  28. package/dist/cjs/src/types/encodeSwaps.js.map +1 -0
  29. package/dist/cjs/src/utils/commandParser.d.ts +34 -0
  30. package/dist/cjs/src/utils/commandParser.js +145 -0
  31. package/dist/cjs/src/utils/commandParser.js.map +1 -0
  32. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
  33. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js +47 -0
  34. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
  35. package/dist/cjs/src/utils/constants.d.ts +39 -0
  36. package/dist/cjs/src/utils/constants.js +560 -0
  37. package/dist/cjs/src/utils/constants.js.map +1 -0
  38. package/dist/cjs/src/utils/eip712.d.ts +17 -0
  39. package/dist/cjs/src/utils/eip712.js +43 -0
  40. package/dist/cjs/src/utils/eip712.js.map +1 -0
  41. package/dist/cjs/src/utils/encodeSwapStep.d.ts +4 -0
  42. package/dist/cjs/src/utils/encodeSwapStep.js +61 -0
  43. package/dist/cjs/src/utils/encodeSwapStep.js.map +1 -0
  44. package/dist/cjs/src/utils/encodeV4Action.d.ts +8 -0
  45. package/dist/cjs/src/utils/encodeV4Action.js +97 -0
  46. package/dist/cjs/src/utils/encodeV4Action.js.map +1 -0
  47. package/dist/cjs/src/utils/getCurrencyAddress.d.ts +2 -0
  48. package/dist/cjs/src/utils/getCurrencyAddress.js +9 -0
  49. package/dist/cjs/src/utils/getCurrencyAddress.js.map +1 -0
  50. package/dist/cjs/src/utils/inputTokens.d.ts +23 -0
  51. package/dist/cjs/src/utils/inputTokens.js +58 -0
  52. package/dist/cjs/src/utils/inputTokens.js.map +1 -0
  53. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
  54. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js +18 -0
  55. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
  56. package/dist/cjs/src/utils/numbers.d.ts +7 -0
  57. package/dist/cjs/src/utils/numbers.js +27 -0
  58. package/dist/cjs/src/utils/numbers.js.map +1 -0
  59. package/dist/cjs/src/utils/pathCurrency.d.ts +3 -0
  60. package/dist/cjs/src/utils/pathCurrency.js +27 -0
  61. package/dist/cjs/src/utils/pathCurrency.js.map +1 -0
  62. package/dist/cjs/src/utils/routerCommands.d.ts +77 -0
  63. package/dist/cjs/src/utils/routerCommands.js +334 -0
  64. package/dist/cjs/src/utils/routerCommands.js.map +1 -0
  65. package/dist/cjs/src/utils/routerTradeAdapter.d.ts +73 -0
  66. package/dist/cjs/src/utils/routerTradeAdapter.js +139 -0
  67. package/dist/cjs/src/utils/routerTradeAdapter.js.map +1 -0
  68. package/dist/cjs/src/utils/validateEncodeSwaps.d.ts +2 -0
  69. package/dist/cjs/src/utils/validateEncodeSwaps.js +135 -0
  70. package/dist/cjs/src/utils/validateEncodeSwaps.js.map +1 -0
  71. package/dist/esm/src/entities/Command.d.ts +12 -0
  72. package/dist/esm/src/entities/Command.js +6 -0
  73. package/dist/esm/src/entities/Command.js.map +1 -0
  74. package/dist/esm/src/entities/actions/across.d.ts +21 -0
  75. package/dist/esm/src/entities/actions/across.js +3 -0
  76. package/dist/esm/src/entities/actions/across.js.map +1 -0
  77. package/dist/esm/src/entities/actions/index.d.ts +3 -0
  78. package/dist/esm/src/entities/actions/index.js +4 -0
  79. package/dist/esm/src/entities/actions/index.js.map +1 -0
  80. package/dist/esm/src/entities/actions/uniswap.d.ts +38 -0
  81. package/dist/esm/src/entities/actions/uniswap.js +541 -0
  82. package/dist/esm/src/entities/actions/uniswap.js.map +1 -0
  83. package/dist/esm/src/entities/actions/unwrapWETH.d.ts +12 -0
  84. package/dist/esm/src/entities/actions/unwrapWETH.js +28 -0
  85. package/dist/esm/src/entities/actions/unwrapWETH.js.map +1 -0
  86. package/dist/esm/src/entities/index.d.ts +2 -0
  87. package/dist/esm/src/entities/index.js +3 -0
  88. package/dist/esm/src/entities/index.js.map +1 -0
  89. package/dist/esm/src/index.d.ts +14 -0
  90. package/dist/esm/src/index.js +11 -0
  91. package/dist/esm/src/index.js.map +1 -0
  92. package/dist/esm/src/swapRouter.d.ts +103 -0
  93. package/dist/esm/src/swapRouter.js +333 -0
  94. package/dist/esm/src/swapRouter.js.map +1 -0
  95. package/dist/esm/src/types/encodeSwaps.d.ts +149 -0
  96. package/dist/esm/src/types/encodeSwaps.js +2 -0
  97. package/dist/esm/src/types/encodeSwaps.js.map +1 -0
  98. package/dist/esm/src/utils/commandParser.d.ts +34 -0
  99. package/dist/esm/src/utils/commandParser.js +137 -0
  100. package/dist/esm/src/utils/commandParser.js.map +1 -0
  101. package/dist/esm/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
  102. package/dist/esm/src/utils/computeEncodeSwapsAmounts.js +43 -0
  103. package/dist/esm/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
  104. package/dist/esm/src/utils/constants.d.ts +39 -0
  105. package/dist/esm/src/utils/constants.js +552 -0
  106. package/dist/esm/src/utils/constants.js.map +1 -0
  107. package/dist/esm/src/utils/eip712.d.ts +17 -0
  108. package/dist/esm/src/utils/eip712.js +38 -0
  109. package/dist/esm/src/utils/eip712.js.map +1 -0
  110. package/dist/esm/src/utils/encodeSwapStep.d.ts +4 -0
  111. package/dist/esm/src/utils/encodeSwapStep.js +57 -0
  112. package/dist/esm/src/utils/encodeSwapStep.js.map +1 -0
  113. package/dist/esm/src/utils/encodeV4Action.d.ts +8 -0
  114. package/dist/esm/src/utils/encodeV4Action.js +92 -0
  115. package/dist/esm/src/utils/encodeV4Action.js.map +1 -0
  116. package/dist/esm/src/utils/getCurrencyAddress.d.ts +2 -0
  117. package/dist/esm/src/utils/getCurrencyAddress.js +5 -0
  118. package/dist/esm/src/utils/getCurrencyAddress.js.map +1 -0
  119. package/dist/esm/src/utils/inputTokens.d.ts +23 -0
  120. package/dist/esm/src/utils/inputTokens.js +51 -0
  121. package/dist/esm/src/utils/inputTokens.js.map +1 -0
  122. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
  123. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js +14 -0
  124. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
  125. package/dist/esm/src/utils/numbers.d.ts +7 -0
  126. package/dist/esm/src/utils/numbers.js +19 -0
  127. package/dist/esm/src/utils/numbers.js.map +1 -0
  128. package/dist/esm/src/utils/pathCurrency.d.ts +3 -0
  129. package/dist/esm/src/utils/pathCurrency.js +23 -0
  130. package/dist/esm/src/utils/pathCurrency.js.map +1 -0
  131. package/dist/esm/src/utils/routerCommands.d.ts +77 -0
  132. package/dist/esm/src/utils/routerCommands.js +329 -0
  133. package/dist/esm/src/utils/routerCommands.js.map +1 -0
  134. package/dist/esm/src/utils/routerTradeAdapter.d.ts +73 -0
  135. package/dist/esm/src/utils/routerTradeAdapter.js +134 -0
  136. package/dist/esm/src/utils/routerTradeAdapter.js.map +1 -0
  137. package/dist/esm/src/utils/validateEncodeSwaps.d.ts +2 -0
  138. package/dist/esm/src/utils/validateEncodeSwaps.js +130 -0
  139. package/dist/esm/src/utils/validateEncodeSwaps.js.map +1 -0
  140. package/dist/types/src/entities/Command.d.ts +12 -0
  141. package/dist/types/src/entities/actions/across.d.ts +21 -0
  142. package/dist/types/src/entities/actions/index.d.ts +3 -0
  143. package/dist/types/src/entities/actions/uniswap.d.ts +38 -0
  144. package/dist/types/src/entities/actions/unwrapWETH.d.ts +12 -0
  145. package/dist/types/src/entities/index.d.ts +2 -0
  146. package/dist/types/src/index.d.ts +14 -0
  147. package/dist/types/src/swapRouter.d.ts +103 -0
  148. package/dist/types/src/types/encodeSwaps.d.ts +149 -0
  149. package/dist/types/src/utils/commandParser.d.ts +34 -0
  150. package/dist/types/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
  151. package/dist/types/src/utils/constants.d.ts +39 -0
  152. package/dist/types/src/utils/eip712.d.ts +17 -0
  153. package/dist/types/src/utils/encodeSwapStep.d.ts +4 -0
  154. package/dist/types/src/utils/encodeV4Action.d.ts +8 -0
  155. package/dist/types/src/utils/getCurrencyAddress.d.ts +2 -0
  156. package/dist/types/src/utils/inputTokens.d.ts +23 -0
  157. package/dist/types/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
  158. package/dist/types/src/utils/numbers.d.ts +7 -0
  159. package/dist/types/src/utils/pathCurrency.d.ts +3 -0
  160. package/dist/types/src/utils/routerCommands.d.ts +77 -0
  161. package/dist/types/src/utils/routerTradeAdapter.d.ts +73 -0
  162. package/dist/types/src/utils/validateEncodeSwaps.d.ts +2 -0
  163. package/package.json +78 -0
@@ -0,0 +1,14 @@
1
+ export { SwapRouter } from './swapRouter';
2
+ export type { MigrateV3ToV4Options, SignedRouteOptions, EIP712Payload } from './swapRouter';
3
+ export * from './types/encodeSwaps';
4
+ export * from './entities';
5
+ export * from './utils/routerTradeAdapter';
6
+ export { RoutePlanner, CommandType, COMMAND_DEFINITION, Parser, Subparser } from './utils/routerCommands';
7
+ export type { CommandDefinition, ParamType } from './utils/routerCommands';
8
+ export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, SWAP_PROXY_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, UniversalRouterVersion, isAtLeastV2_1_1, } from './utils/constants';
9
+ export { CommandParser, GenericCommandParser } from './utils/commandParser';
10
+ export type { UniversalRouterCommand, UniversalRouterCall, Param, CommandsDefinition } from './utils/commandParser';
11
+ export type { Permit2Permit } from './utils/inputTokens';
12
+ export { normalizeEncodeSwapsSpec } from './utils/normalizeEncodeSwapsSpec';
13
+ export { validateEncodeSwaps } from './utils/validateEncodeSwaps';
14
+ export { NONCE_SKIP_CHECK, generateNonce, EXECUTE_SIGNED_TYPES, getUniversalRouterDomain } from './utils/eip712';
@@ -0,0 +1,11 @@
1
+ export { SwapRouter } from './swapRouter';
2
+ export * from './types/encodeSwaps';
3
+ export * from './entities';
4
+ export * from './utils/routerTradeAdapter';
5
+ export { RoutePlanner, CommandType, COMMAND_DEFINITION, Parser, Subparser } from './utils/routerCommands';
6
+ export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, SWAP_PROXY_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, UniversalRouterVersion, isAtLeastV2_1_1, } from './utils/constants';
7
+ export { CommandParser, GenericCommandParser } from './utils/commandParser';
8
+ export { normalizeEncodeSwapsSpec } from './utils/normalizeEncodeSwapsSpec';
9
+ export { validateEncodeSwaps } from './utils/validateEncodeSwaps';
10
+ export { NONCE_SKIP_CHECK, generateNonce, EXECUTE_SIGNED_TYPES, getUniversalRouterDomain } from './utils/eip712';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA;AAC1B,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEzG,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAG3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,103 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { BigNumber, BigNumberish } from 'ethers';
3
+ import { MethodParameters, Position as V3Position, RemoveLiquidityOptions as V3RemoveLiquidityOptions } from '@fenine/v3-sdk';
4
+ import { Position as V4Position, AddLiquidityOptions as V4AddLiquidityOptions } from '@uniswap/v4-sdk';
5
+ import { Trade as RouterTrade } from '@uniswap/router-sdk';
6
+ import { Currency, TradeType } from '@fenine/sdk-core';
7
+ import { SwapOptions } from './entities/actions/uniswap';
8
+ import { AcrossV4DepositV3Params } from './entities/actions/across';
9
+ import { SwapSpecification, SwapStep } from './types/encodeSwaps';
10
+ import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
11
+ export type SwapRouterConfig = {
12
+ sender?: string;
13
+ deadline?: BigNumberish;
14
+ };
15
+ export type SignedRouteOptions = {
16
+ intent: string;
17
+ data: string;
18
+ sender: string;
19
+ nonce?: string;
20
+ };
21
+ export type EIP712Payload = {
22
+ domain: TypedDataDomain;
23
+ types: Record<string, TypedDataField[]>;
24
+ value: {
25
+ commands: string;
26
+ inputs: string[];
27
+ intent: string;
28
+ data: string;
29
+ sender: string;
30
+ nonce: string;
31
+ deadline: string;
32
+ };
33
+ };
34
+ export interface MigrateV3ToV4Options {
35
+ inputPosition: V3Position;
36
+ outputPosition: V4Position;
37
+ v3RemoveLiquidityOptions: V3RemoveLiquidityOptions;
38
+ v4AddLiquidityOptions: V4AddLiquidityOptions;
39
+ }
40
+ export declare abstract class SwapRouter {
41
+ static INTERFACE: Interface;
42
+ static PROXY_INTERFACE: Interface;
43
+ static swapCallParameters(trades: RouterTrade<Currency, Currency, TradeType>, options: SwapOptions, bridgeOptions?: AcrossV4DepositV3Params[]): MethodParameters;
44
+ /**
45
+ * Encodes router-provided swap steps inside the SDK safety envelope.
46
+ *
47
+ * Routers own `swapSteps` (V2/V3/V4 swaps, plus any `WRAP_ETH` / `UNWRAP_WETH` required by the route).
48
+ * The SDK owns ingress, fees, final settlement, exact-output refund, and optional `safeMode`.
49
+ *
50
+ * Router contract: end with final output in `spec.routing.outputToken`; for `EXACT_OUTPUT`, unused input
51
+ * must end in `spec.routing.inputToken`. Don't include a top-level `SWEEP` — the SDK appends settlement,
52
+ * refund, and safeMode sweeps itself.
53
+ *
54
+ * Router custody with `payerIsUser = false` is deliberate for safety, even if it costs an extra command
55
+ * or transfer; the SDK does not infer route topology on behalf of routers.
56
+ */
57
+ static encodeSwaps(spec: SwapSpecification, swapSteps: SwapStep[]): MethodParameters;
58
+ /**
59
+ * Generate EIP712 payload for signed execution (no signing performed)
60
+ * Decodes existing execute() calldata and prepares it for signing
61
+ *
62
+ * @param calldata The calldata from swapCallParameters() or similar
63
+ * @param signedOptions Options for signed execution (intent, data, sender, nonce)
64
+ * @param deadline The deadline timestamp
65
+ * @param chainId The chain ID
66
+ * @param routerAddress The Universal Router contract address
67
+ * @returns EIP712 payload ready to be signed externally
68
+ */
69
+ static getExecuteSignedPayload(calldata: string, signedOptions: SignedRouteOptions, deadline: BigNumberish, chainId: number, routerAddress: string): EIP712Payload;
70
+ /**
71
+ * Encode executeSigned() call with signature
72
+ *
73
+ * @param calldata The original calldata from swapCallParameters()
74
+ * @param signature The signature obtained from external signing
75
+ * @param signedOptions The same options used in getExecuteSignedPayload()
76
+ * @param deadline The deadline timestamp
77
+ * @param nativeCurrencyValue The native currency value (ETH) to send
78
+ * @returns Method parameters for executeSigned()
79
+ */
80
+ static encodeExecuteSigned(calldata: string, signature: string, signedOptions: SignedRouteOptions, deadline: BigNumberish, nativeCurrencyValue?: BigNumber): MethodParameters;
81
+ /**
82
+ * Builds the call parameters for a migration from a V3 position to a V4 position.
83
+ * Some requirements of the parameters:
84
+ * - v3RemoveLiquidityOptions.collectOptions.recipient must equal v4PositionManager
85
+ * - v3RemoveLiquidityOptions.liquidityPercentage must be 100%
86
+ * - input pool and output pool must have the same tokens
87
+ * - V3 NFT must be approved, or valid inputV3NFTPermit must be provided with UR as spender
88
+ */
89
+ static migrateV3ToV4CallParameters(options: MigrateV3ToV4Options, positionManagerOverride?: string): MethodParameters;
90
+ /**
91
+ * Encodes a planned route into a method name and parameters for the Router contract.
92
+ * @param planner the planned route
93
+ * @param nativeCurrencyValue the native currency value of the planned route
94
+ * @param config the router config
95
+ */
96
+ private static encodePlan;
97
+ /**
98
+ * Wraps an inner UR plan in calldata targeting the SwapProxy contract.
99
+ * The proxy pulls ERC20 tokens from the user into the UR, then executes commands.
100
+ */
101
+ private static encodeProxyPlan;
102
+ private static encodeProxyCall;
103
+ }
@@ -0,0 +1,333 @@
1
+ import invariant from 'tiny-invariant';
2
+ import UniversalRouter from '@uniswap/universal-router/artifacts/contracts/UniversalRouter.sol/UniversalRouter.json';
3
+ import { Interface } from '@ethersproject/abi';
4
+ import { BigNumber } from 'ethers';
5
+ import { Multicall, NonfungiblePositionManager as V3PositionManager, } from '@fenine/v3-sdk';
6
+ import { V4PositionManager, Pool as V4Pool, } from '@uniswap/v4-sdk';
7
+ import { TradeType, Percent, CHAIN_TO_ADDRESSES_MAP } from '@fenine/sdk-core';
8
+ import { UniswapTrade, TokenTransferMode } from './entities/actions/uniswap';
9
+ import { RoutePlanner, CommandType } from './utils/routerCommands';
10
+ import { encodePermit, encodeV3PositionPermit } from './utils/inputTokens';
11
+ import { ETH_ADDRESS, ROUTER_AS_RECIPIENT, UNIVERSAL_ROUTER_ADDRESS, UniversalRouterVersion, isAtLeastV2_1_1, } from './utils/constants';
12
+ import { getCurrencyAddress } from './utils/getCurrencyAddress';
13
+ import { encodeFee1e18, encodeFeeBips } from './utils/numbers';
14
+ import { encodeSwapStep } from './utils/encodeSwapStep';
15
+ import { computeEncodeSwapsAmounts } from './utils/computeEncodeSwapsAmounts';
16
+ import { normalizeEncodeSwapsSpec } from './utils/normalizeEncodeSwapsSpec';
17
+ import { validateEncodeSwaps } from './utils/validateEncodeSwaps';
18
+ import { getUniversalRouterDomain, EXECUTE_SIGNED_TYPES, generateNonce } from './utils/eip712';
19
+ const DEFAULT_PROXY_DEADLINE_BUFFER_SECONDS = 30 * 60;
20
+ function isMint(options) {
21
+ return Object.keys(options).some((k) => k === 'recipient');
22
+ }
23
+ export class SwapRouter {
24
+ static swapCallParameters(trades, options, bridgeOptions // Optional bridge parameters
25
+ ) {
26
+ // TODO: use permit if signature included in swapOptions
27
+ const planner = new RoutePlanner();
28
+ const trade = new UniswapTrade(trades, options);
29
+ const inputCurrency = trade.trade.inputAmount.currency;
30
+ if (options.tokenTransferMode === TokenTransferMode.ApproveProxy) {
31
+ invariant(!inputCurrency.isNative, 'PROXY_NATIVE_INPUT: SwapProxy only supports ERC20 input');
32
+ invariant(!!options.chainId, 'PROXY_MISSING_CHAIN_ID: chainId required when tokenTransferMode is ApproveProxy');
33
+ invariant(!options.inputTokenPermit, 'PROXY_PERMIT_CONFLICT: Permit2 not used with SwapProxy');
34
+ }
35
+ else {
36
+ invariant(!(inputCurrency.isNative && !!options.inputTokenPermit), 'NATIVE_INPUT_PERMIT');
37
+ if (options.inputTokenPermit) {
38
+ encodePermit(planner, options.inputTokenPermit);
39
+ }
40
+ }
41
+ const nativeCurrencyValue = inputCurrency.isNative
42
+ ? BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString())
43
+ : BigNumber.from(0);
44
+ trade.encode(planner, { allowRevert: false });
45
+ // Add bridge commands if provided
46
+ if (bridgeOptions) {
47
+ for (const bridge of bridgeOptions) {
48
+ planner.addAcrossBridge(bridge);
49
+ }
50
+ }
51
+ if (options.tokenTransferMode === TokenTransferMode.ApproveProxy) {
52
+ return SwapRouter.encodeProxyPlan(planner, trade, options);
53
+ }
54
+ return SwapRouter.encodePlan(planner, nativeCurrencyValue, {
55
+ deadline: options.deadlineOrPreviousBlockhash ? BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined,
56
+ });
57
+ }
58
+ /**
59
+ * Encodes router-provided swap steps inside the SDK safety envelope.
60
+ *
61
+ * Routers own `swapSteps` (V2/V3/V4 swaps, plus any `WRAP_ETH` / `UNWRAP_WETH` required by the route).
62
+ * The SDK owns ingress, fees, final settlement, exact-output refund, and optional `safeMode`.
63
+ *
64
+ * Router contract: end with final output in `spec.routing.outputToken`; for `EXACT_OUTPUT`, unused input
65
+ * must end in `spec.routing.inputToken`. Don't include a top-level `SWEEP` — the SDK appends settlement,
66
+ * refund, and safeMode sweeps itself.
67
+ *
68
+ * Router custody with `payerIsUser = false` is deliberate for safety, even if it costs an extra command
69
+ * or transfer; the SDK does not infer route topology on behalf of routers.
70
+ */
71
+ static encodeSwaps(spec, swapSteps) {
72
+ var _a, _b;
73
+ const normalizedSpec = normalizeEncodeSwapsSpec(spec);
74
+ const planner = new RoutePlanner();
75
+ validateEncodeSwaps(normalizedSpec, swapSteps);
76
+ const { exactOrMaxAmountIn, netMinOrExactAmountOut } = computeEncodeSwapsAmounts(normalizedSpec);
77
+ const { routing: { inputToken, outputToken }, } = normalizedSpec;
78
+ // Ingress: pull funds into the router. Native input is paid as msg.value at the bottom
79
+ // instead of via Permit2; ApproveProxy ingress is handled by the outer wrapper at the end.
80
+ if (normalizedSpec.tokenTransferMode === TokenTransferMode.Permit2) {
81
+ if (normalizedSpec.permit) {
82
+ encodePermit(planner, normalizedSpec.permit);
83
+ }
84
+ if (!inputToken.isNative) {
85
+ planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [getCurrencyAddress(inputToken), ROUTER_AS_RECIPIENT, exactOrMaxAmountIn], false, normalizedSpec.urVersion);
86
+ }
87
+ }
88
+ for (const step of swapSteps) {
89
+ encodeSwapStep(planner, step, normalizedSpec.urVersion);
90
+ }
91
+ // Fee deducted from gross output before final settlement.
92
+ // Portion uses 1e18 precision on >=v2.1.1 and bps on v2.0; flat is a plain TRANSFER.
93
+ if (((_a = normalizedSpec.fee) === null || _a === void 0 ? void 0 : _a.kind) === 'portion') {
94
+ const feeCommandType = isAtLeastV2_1_1(normalizedSpec.urVersion)
95
+ ? CommandType.PAY_PORTION_FULL_PRECISION
96
+ : CommandType.PAY_PORTION;
97
+ const encodedFee = isAtLeastV2_1_1(normalizedSpec.urVersion)
98
+ ? encodeFee1e18(normalizedSpec.fee.fee)
99
+ : encodeFeeBips(normalizedSpec.fee.fee);
100
+ planner.addCommand(feeCommandType, [getCurrencyAddress(outputToken), normalizedSpec.fee.recipient, encodedFee], false, normalizedSpec.urVersion);
101
+ }
102
+ else if (((_b = normalizedSpec.fee) === null || _b === void 0 ? void 0 : _b.kind) === 'flat') {
103
+ planner.addCommand(CommandType.TRANSFER, [getCurrencyAddress(outputToken), normalizedSpec.fee.recipient, normalizedSpec.fee.amount], false, normalizedSpec.urVersion);
104
+ }
105
+ // Assumes routers already normalized final gross output into `routing.outputToken`.
106
+ planner.addCommand(CommandType.SWEEP, [getCurrencyAddress(outputToken), normalizedSpec.recipient, netMinOrExactAmountOut], false, normalizedSpec.urVersion);
107
+ // Assumes routers already normalized unused input into `routing.inputToken`.
108
+ // Exact-output uses max input, so any unused slippage padding is refunded to the recipient.
109
+ if (normalizedSpec.tradeType === TradeType.EXACT_OUTPUT) {
110
+ planner.addCommand(CommandType.SWEEP, [getCurrencyAddress(inputToken), normalizedSpec.recipient, 0], false, normalizedSpec.urVersion);
111
+ }
112
+ // safeMode: zero-min ETH sweep recovers any native funds left on the router (dust or unintended msg.value)
113
+ if (normalizedSpec.safeMode) {
114
+ planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, normalizedSpec.recipient, 0], false, normalizedSpec.urVersion);
115
+ }
116
+ // ApproveProxy wraps the inner UR plan in an outer proxy.execute() that handles ingress upstream.
117
+ if (normalizedSpec.tokenTransferMode === TokenTransferMode.ApproveProxy) {
118
+ return SwapRouter.encodeProxyCall(planner, getCurrencyAddress(inputToken), exactOrMaxAmountIn, normalizedSpec.chainId, normalizedSpec.urVersion, normalizedSpec.deadline);
119
+ }
120
+ // Native input pays via msg.value; ERC20 input is already in the router via Permit2.
121
+ return SwapRouter.encodePlan(planner, inputToken.isNative ? exactOrMaxAmountIn : BigNumber.from(0), {
122
+ deadline: normalizedSpec.deadline ? BigNumber.from(normalizedSpec.deadline) : undefined,
123
+ });
124
+ }
125
+ /**
126
+ * Generate EIP712 payload for signed execution (no signing performed)
127
+ * Decodes existing execute() calldata and prepares it for signing
128
+ *
129
+ * @param calldata The calldata from swapCallParameters() or similar
130
+ * @param signedOptions Options for signed execution (intent, data, sender, nonce)
131
+ * @param deadline The deadline timestamp
132
+ * @param chainId The chain ID
133
+ * @param routerAddress The Universal Router contract address
134
+ * @returns EIP712 payload ready to be signed externally
135
+ */
136
+ static getExecuteSignedPayload(calldata, signedOptions, deadline, chainId, routerAddress) {
137
+ // Decode the execute() calldata to extract commands and inputs
138
+ // Try to decode with deadline first, then without
139
+ let decoded;
140
+ let commands;
141
+ let inputs;
142
+ try {
143
+ decoded = SwapRouter.INTERFACE.decodeFunctionData('execute(bytes,bytes[],uint256)', calldata);
144
+ commands = decoded.commands;
145
+ inputs = decoded.inputs;
146
+ }
147
+ catch (e) {
148
+ // Try without deadline
149
+ decoded = SwapRouter.INTERFACE.decodeFunctionData('execute(bytes,bytes[])', calldata);
150
+ commands = decoded.commands;
151
+ inputs = decoded.inputs;
152
+ }
153
+ // Use provided nonce or generate random one
154
+ const nonce = signedOptions.nonce || generateNonce();
155
+ // sender is provided directly (address(0) = skip verification)
156
+ const sender = signedOptions.sender;
157
+ const domain = getUniversalRouterDomain(chainId, routerAddress);
158
+ const intent = signedOptions.intent;
159
+ const data = signedOptions.data;
160
+ const deadlineStr = BigNumber.from(deadline).toString();
161
+ const value = {
162
+ commands,
163
+ inputs,
164
+ intent,
165
+ data,
166
+ sender,
167
+ nonce,
168
+ deadline: deadlineStr,
169
+ };
170
+ return {
171
+ domain,
172
+ types: EXECUTE_SIGNED_TYPES,
173
+ value,
174
+ };
175
+ }
176
+ /**
177
+ * Encode executeSigned() call with signature
178
+ *
179
+ * @param calldata The original calldata from swapCallParameters()
180
+ * @param signature The signature obtained from external signing
181
+ * @param signedOptions The same options used in getExecuteSignedPayload()
182
+ * @param deadline The deadline timestamp
183
+ * @param nativeCurrencyValue The native currency value (ETH) to send
184
+ * @returns Method parameters for executeSigned()
185
+ */
186
+ static encodeExecuteSigned(calldata, signature, signedOptions, deadline, nativeCurrencyValue = BigNumber.from(0)) {
187
+ // Decode the execute() calldata to extract commands and inputs
188
+ // Try to decode with deadline first, then without
189
+ let decoded;
190
+ let commands;
191
+ let inputs;
192
+ try {
193
+ decoded = SwapRouter.INTERFACE.decodeFunctionData('execute(bytes,bytes[],uint256)', calldata);
194
+ commands = decoded.commands;
195
+ inputs = decoded.inputs;
196
+ }
197
+ catch (e) {
198
+ // Try without deadline
199
+ decoded = SwapRouter.INTERFACE.decodeFunctionData('execute(bytes,bytes[])', calldata);
200
+ commands = decoded.commands;
201
+ inputs = decoded.inputs;
202
+ }
203
+ // Use provided nonce (must match what was signed)
204
+ // Nonce must match what was signed - require it to be provided
205
+ if (!signedOptions.nonce) {
206
+ throw new Error('Nonce is required for encodeExecuteSigned - use the nonce from getExecuteSignedPayload');
207
+ }
208
+ const nonce = signedOptions.nonce;
209
+ // Determine verifySender based on sender address
210
+ const verifySender = signedOptions.sender !== '0x0000000000000000000000000000000000000000';
211
+ // Encode executeSigned function call using the Universal Router v2.1 ABI
212
+ const signedCalldata = SwapRouter.INTERFACE.encodeFunctionData('executeSigned', [
213
+ commands,
214
+ inputs,
215
+ signedOptions.intent,
216
+ signedOptions.data,
217
+ verifySender,
218
+ nonce,
219
+ signature,
220
+ deadline,
221
+ ]);
222
+ return { calldata: signedCalldata, value: nativeCurrencyValue.toHexString() };
223
+ }
224
+ /**
225
+ * Builds the call parameters for a migration from a V3 position to a V4 position.
226
+ * Some requirements of the parameters:
227
+ * - v3RemoveLiquidityOptions.collectOptions.recipient must equal v4PositionManager
228
+ * - v3RemoveLiquidityOptions.liquidityPercentage must be 100%
229
+ * - input pool and output pool must have the same tokens
230
+ * - V3 NFT must be approved, or valid inputV3NFTPermit must be provided with UR as spender
231
+ */
232
+ static migrateV3ToV4CallParameters(options, positionManagerOverride) {
233
+ const v4Pool = options.outputPosition.pool;
234
+ const v3Token0 = options.inputPosition.pool.token0;
235
+ const v3Token1 = options.inputPosition.pool.token1;
236
+ const v4PositionManagerAddress = positionManagerOverride !== null && positionManagerOverride !== void 0 ? positionManagerOverride : CHAIN_TO_ADDRESSES_MAP[v4Pool.chainId].v4PositionManagerAddress;
237
+ // owner of the v3 nft must be the receiver of the v4 nft
238
+ // validate the parameters
239
+ if (v4Pool.currency0.isNative) {
240
+ invariant((v4Pool.currency0.wrapped.equals(v3Token0) && v4Pool.currency1.equals(v3Token1)) ||
241
+ (v4Pool.currency0.wrapped.equals(v3Token1) && v4Pool.currency1.equals(v3Token0)), 'TOKEN_MISMATCH');
242
+ }
243
+ else {
244
+ invariant(v3Token0 === v4Pool.token0, 'TOKEN0_MISMATCH');
245
+ invariant(v3Token1 === v4Pool.token1, 'TOKEN1_MISMATCH');
246
+ }
247
+ invariant(options.v3RemoveLiquidityOptions.liquidityPercentage.equalTo(new Percent(100, 100)), 'FULL_REMOVAL_REQUIRED');
248
+ invariant(options.v3RemoveLiquidityOptions.burnToken == true, 'BURN_TOKEN_REQUIRED');
249
+ invariant(options.v3RemoveLiquidityOptions.collectOptions.recipient === v4PositionManagerAddress, 'RECIPIENT_NOT_POSITION_MANAGER');
250
+ invariant(isMint(options.v4AddLiquidityOptions), 'MINT_REQUIRED');
251
+ invariant(options.v4AddLiquidityOptions.migrate, 'MIGRATE_REQUIRED');
252
+ const planner = new RoutePlanner();
253
+ // to prevent reentrancy by the pool hook, we initialize the v4 pool before moving funds
254
+ if (options.v4AddLiquidityOptions.createPool) {
255
+ const poolKey = V4Pool.getPoolKey(v4Pool.currency0, v4Pool.currency1, v4Pool.fee, v4Pool.tickSpacing, v4Pool.hooks);
256
+ planner.addCommand(CommandType.V4_INITIALIZE_POOL, [poolKey, v4Pool.sqrtRatioX96.toString()]);
257
+ // remove createPool setting, so that it doesnt get encoded again later
258
+ delete options.v4AddLiquidityOptions.createPool;
259
+ }
260
+ // add position permit to the universal router planner
261
+ if (options.v3RemoveLiquidityOptions.permit) {
262
+ // permit spender should be UR
263
+ const universalRouterAddress = UNIVERSAL_ROUTER_ADDRESS(UniversalRouterVersion.V2_0, options.inputPosition.pool.chainId);
264
+ invariant(universalRouterAddress == options.v3RemoveLiquidityOptions.permit.spender, 'INVALID_SPENDER');
265
+ // don't need to transfer it because v3posm uses isApprovedOrOwner()
266
+ encodeV3PositionPermit(planner, options.v3RemoveLiquidityOptions.permit, options.v3RemoveLiquidityOptions.tokenId);
267
+ // remove permit so that multicall doesnt add it again
268
+ delete options.v3RemoveLiquidityOptions.permit;
269
+ }
270
+ // encode v3 withdraw
271
+ const v3RemoveParams = V3PositionManager.removeCallParameters(options.inputPosition, options.v3RemoveLiquidityOptions);
272
+ const v3Calls = Multicall.decodeMulticall(v3RemoveParams.calldata);
273
+ for (const v3Call of v3Calls) {
274
+ // slice selector - 0x + 4 bytes = 10 characters
275
+ const selector = v3Call.slice(0, 10);
276
+ invariant(selector == V3PositionManager.INTERFACE.getSighash('collect') ||
277
+ selector == V3PositionManager.INTERFACE.getSighash('decreaseLiquidity') ||
278
+ selector == V3PositionManager.INTERFACE.getSighash('burn'), 'INVALID_V3_CALL: ' + selector);
279
+ planner.addCommand(CommandType.V3_POSITION_MANAGER_CALL, [v3Call]);
280
+ }
281
+ // encode v4 mint
282
+ const v4AddParams = V4PositionManager.addCallParameters(options.outputPosition, options.v4AddLiquidityOptions);
283
+ // only modifyLiquidities can be called by the UniversalRouter
284
+ const selector = v4AddParams.calldata.slice(0, 10);
285
+ invariant(selector == V4PositionManager.INTERFACE.getSighash('modifyLiquidities'), 'INVALID_V4_CALL: ' + selector);
286
+ planner.addCommand(CommandType.V4_POSITION_MANAGER_CALL, [v4AddParams.calldata]);
287
+ return SwapRouter.encodePlan(planner, BigNumber.from(0), {
288
+ deadline: BigNumber.from(options.v4AddLiquidityOptions.deadline),
289
+ });
290
+ }
291
+ /**
292
+ * Encodes a planned route into a method name and parameters for the Router contract.
293
+ * @param planner the planned route
294
+ * @param nativeCurrencyValue the native currency value of the planned route
295
+ * @param config the router config
296
+ */
297
+ static encodePlan(planner, nativeCurrencyValue, config = {}) {
298
+ const { commands, inputs } = planner;
299
+ const functionSignature = !!config.deadline ? 'execute(bytes,bytes[],uint256)' : 'execute(bytes,bytes[])';
300
+ const parameters = !!config.deadline ? [commands, inputs, config.deadline] : [commands, inputs];
301
+ const calldata = SwapRouter.INTERFACE.encodeFunctionData(functionSignature, parameters);
302
+ return { calldata, value: nativeCurrencyValue.toHexString() };
303
+ }
304
+ /**
305
+ * Wraps an inner UR plan in calldata targeting the SwapProxy contract.
306
+ * The proxy pulls ERC20 tokens from the user into the UR, then executes commands.
307
+ */
308
+ static encodeProxyPlan(planner, trade, options) {
309
+ var _a;
310
+ return SwapRouter.encodeProxyCall(planner, trade.trade.inputAmount.currency.address, BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString()), options.chainId, (_a = options.urVersion) !== null && _a !== void 0 ? _a : UniversalRouterVersion.V2_0, options.deadlineOrPreviousBlockhash ? BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined);
311
+ }
312
+ static encodeProxyCall(planner, inputToken, inputAmount, chainId, urVersion, deadline) {
313
+ const { commands, inputs } = planner;
314
+ const routerAddress = UNIVERSAL_ROUTER_ADDRESS(urVersion, chainId);
315
+ const resolvedDeadline = deadline
316
+ ? BigNumber.from(deadline)
317
+ : BigNumber.from(Math.floor(Date.now() / 1000) + DEFAULT_PROXY_DEADLINE_BUFFER_SECONDS); // 30 min default
318
+ const calldata = SwapRouter.PROXY_INTERFACE.encodeFunctionData('execute', [
319
+ routerAddress,
320
+ inputToken,
321
+ inputAmount,
322
+ commands,
323
+ inputs,
324
+ resolvedDeadline,
325
+ ]);
326
+ return { calldata, value: BigNumber.from(0).toHexString() };
327
+ }
328
+ }
329
+ SwapRouter.INTERFACE = new Interface(UniversalRouter.abi);
330
+ SwapRouter.PROXY_INTERFACE = new Interface([
331
+ 'function execute(address router, address token, uint256 amount, bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external',
332
+ ]);
333
+ //# sourceMappingURL=swapRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swapRouter.js","sourceRoot":"","sources":["../../../src/swapRouter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,eAAe,MAAM,wFAAwF,CAAA;AACpH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAgB,MAAM,QAAQ,CAAA;AAChD,OAAO,EAEL,SAAS,EAET,0BAA0B,IAAI,iBAAiB,GAEhD,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAEL,iBAAiB,EAGjB,IAAI,IAAI,MAAM,GAEf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAY,SAAS,EAAE,OAAO,EAAE,sBAAsB,EAAuB,MAAM,kBAAkB,CAAA;AAC5G,OAAO,EAAE,YAAY,EAAe,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAGzF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAoC9F,MAAM,qCAAqC,GAAG,EAAE,GAAG,EAAE,CAAA;AAErD,SAAS,MAAM,CAAC,OAA8B;IAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,OAAgB,UAAU;IAOvB,MAAM,CAAC,kBAAkB,CAC9B,MAAkD,EAClD,OAAoB,EACpB,aAAyC,CAAC,6BAA6B;;QAEvE,wDAAwD;QACxD,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAA;QAElC,MAAM,KAAK,GAAiB,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAE7D,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAA;QAEtD,IAAI,OAAO,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,YAAY,EAAE;YAChE,SAAS,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,yDAAyD,CAAC,CAAA;YAC7F,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,iFAAiF,CAAC,CAAA;YAC/G,SAAS,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,wDAAwD,CAAC,CAAA;SAC/F;aAAM;YACL,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC,CAAA;YAEzF,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC5B,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;aAChD;SACF;QAED,MAAM,mBAAmB,GAAG,aAAa,CAAC,QAAQ;YAChD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC5F,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAErB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;QAE7C,kCAAkC;QAClC,IAAI,aAAa,EAAE;YACjB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;gBAClC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;aAChC;SACF;QAED,IAAI,OAAO,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,YAAY,EAAE;YAChE,OAAO,UAAU,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;SAC3D;QAED,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE;YACzD,QAAQ,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,SAAS;SAChH,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,MAAM,CAAC,WAAW,CAAC,IAAuB,EAAE,SAAqB;;QACtE,MAAM,cAAc,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAA;QAElC,mBAAmB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;QAE9C,MAAM,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAA;QAChG,MAAM,EACJ,OAAO,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,GACrC,GAAG,cAAc,CAAA;QAElB,uFAAuF;QACvF,2FAA2F;QAC3F,IAAI,cAAc,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,OAAO,EAAE;YAClE,IAAI,cAAc,CAAC,MAAM,EAAE;gBACzB,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;aAC7C;YAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBACxB,OAAO,CAAC,UAAU,CAChB,WAAW,CAAC,qBAAqB,EACjC,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,EACzE,KAAK,EACL,cAAc,CAAC,SAAS,CACzB,CAAA;aACF;SACF;QAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;YAC5B,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;SACxD;QAED,0DAA0D;QAC1D,qFAAqF;QACrF,IAAI,CAAA,MAAA,cAAc,CAAC,GAAG,0CAAE,IAAI,MAAK,SAAS,EAAE;YAC1C,MAAM,cAAc,GAAG,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC;gBAC9D,CAAC,CAAC,WAAW,CAAC,0BAA0B;gBACxC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAA;YAC3B,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC;gBAC1D,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;gBACvC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAEzC,OAAO,CAAC,UAAU,CAChB,cAAc,EACd,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,EAC3E,KAAK,EACL,cAAc,CAAC,SAAS,CACzB,CAAA;SACF;aAAM,IAAI,CAAA,MAAA,cAAc,CAAC,GAAG,0CAAE,IAAI,MAAK,MAAM,EAAE;YAC9C,OAAO,CAAC,UAAU,CAChB,WAAW,CAAC,QAAQ,EACpB,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAC1F,KAAK,EACL,cAAc,CAAC,SAAS,CACzB,CAAA;SACF;QAED,oFAAoF;QACpF,OAAO,CAAC,UAAU,CAChB,WAAW,CAAC,KAAK,EACjB,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,SAAS,EAAE,sBAAsB,CAAC,EACnF,KAAK,EACL,cAAc,CAAC,SAAS,CACzB,CAAA;QAED,6EAA6E;QAC7E,4FAA4F;QAC5F,IAAI,cAAc,CAAC,SAAS,KAAK,SAAS,CAAC,YAAY,EAAE;YACvD,OAAO,CAAC,UAAU,CAChB,WAAW,CAAC,KAAK,EACjB,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,EAC7D,KAAK,EACL,cAAc,CAAC,SAAS,CACzB,CAAA;SACF;QAED,2GAA2G;QAC3G,IAAI,cAAc,CAAC,QAAQ,EAAE;YAC3B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;SACnH;QAED,kGAAkG;QAClG,IAAI,cAAc,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,YAAY,EAAE;YACvE,OAAO,UAAU,CAAC,eAAe,CAC/B,OAAO,EACP,kBAAkB,CAAC,UAAU,CAAC,EAC9B,kBAAkB,EAClB,cAAc,CAAC,OAAQ,EACvB,cAAc,CAAC,SAAS,EACxB,cAAc,CAAC,QAAQ,CACxB,CAAA;SACF;QAED,qFAAqF;QACrF,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAClG,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SACxF,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,uBAAuB,CACnC,QAAgB,EAChB,aAAiC,EACjC,QAAsB,EACtB,OAAe,EACf,aAAqB;QAErB,+DAA+D;QAC/D,kDAAkD;QAClD,IAAI,OAAY,CAAA;QAChB,IAAI,QAAgB,CAAA;QACpB,IAAI,MAAgB,CAAA;QAEpB,IAAI;YACF,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAA;YAC7F,QAAQ,GAAG,OAAO,CAAC,QAAkB,CAAA;YACrC,MAAM,GAAG,OAAO,CAAC,MAAkB,CAAA;SACpC;QAAC,OAAO,CAAC,EAAE;YACV,uBAAuB;YACvB,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAA;YACrF,QAAQ,GAAG,OAAO,CAAC,QAAkB,CAAA;YACrC,MAAM,GAAG,OAAO,CAAC,MAAkB,CAAA;SACpC;QAED,4CAA4C;QAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,IAAI,aAAa,EAAE,CAAA;QAEpD,+DAA+D;QAC/D,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAA;QAEnC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QAE/D,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAA;QAEnC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAA;QAE/B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;QAEvD,MAAM,KAAK,GAAG;YACZ,QAAQ;YACR,MAAM;YACN,MAAM;YACN,IAAI;YACJ,MAAM;YACN,KAAK;YACL,QAAQ,EAAE,WAAW;SACtB,CAAA;QAED,OAAO;YACL,MAAM;YACN,KAAK,EAAE,oBAAoB;YAC3B,KAAK;SACN,CAAA;IACH,CAAC;IAED;;;;;;;;;OASG;IACI,MAAM,CAAC,mBAAmB,CAC/B,QAAgB,EAChB,SAAiB,EACjB,aAAiC,EACjC,QAAsB,EACtB,sBAAiC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAElD,+DAA+D;QAC/D,kDAAkD;QAClD,IAAI,OAAY,CAAA;QAChB,IAAI,QAAgB,CAAA;QACpB,IAAI,MAAgB,CAAA;QAEpB,IAAI;YACF,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAA;YAC7F,QAAQ,GAAG,OAAO,CAAC,QAAkB,CAAA;YACrC,MAAM,GAAG,OAAO,CAAC,MAAkB,CAAA;SACpC;QAAC,OAAO,CAAC,EAAE;YACV,uBAAuB;YACvB,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAA;YACrF,QAAQ,GAAG,OAAO,CAAC,QAAkB,CAAA;YACrC,MAAM,GAAG,OAAO,CAAC,MAAkB,CAAA;SACpC;QAED,kDAAkD;QAClD,+DAA+D;QAC/D,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAA;SAC1G;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAA;QAEjC,iDAAiD;QACjD,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,KAAK,4CAA4C,CAAA;QAE1F,yEAAyE;QACzE,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,eAAe,EAAE;YAC9E,QAAQ;YACR,MAAM;YACN,aAAa,CAAC,MAAM;YACpB,aAAa,CAAC,IAAI;YAClB,YAAY;YACZ,KAAK;YACL,SAAS;YACT,QAAQ;SACT,CAAC,CAAA;QAEF,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAA;IAC/E,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,2BAA2B,CACvC,OAA6B,EAC7B,uBAAgC;QAEhC,MAAM,MAAM,GAAW,OAAO,CAAC,cAAc,CAAC,IAAI,CAAA;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAA;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAA;QAClD,MAAM,wBAAwB,GAC5B,uBAAuB,aAAvB,uBAAuB,cAAvB,uBAAuB,GAAI,sBAAsB,CAAC,MAAM,CAAC,OAA8B,CAAC,CAAC,wBAAwB,CAAA;QAEnH,yDAAyD;QAEzD,0BAA0B;QAC1B,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC7B,SAAS,CACP,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9E,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAClF,gBAAgB,CACjB,CAAA;SACF;aAAM;YACL,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;YACxD,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;SACzD;QAED,SAAS,CACP,OAAO,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EACnF,uBAAuB,CACxB,CAAA;QACD,SAAS,CAAC,OAAO,CAAC,wBAAwB,CAAC,SAAS,IAAI,IAAI,EAAE,qBAAqB,CAAC,CAAA;QACpF,SAAS,CACP,OAAO,CAAC,wBAAwB,CAAC,cAAc,CAAC,SAAS,KAAK,wBAAwB,EACtF,gCAAgC,CACjC,CAAA;QACD,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,eAAe,CAAC,CAAA;QACjE,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;QAEpE,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAA;QAElC,wFAAwF;QACxF,IAAI,OAAO,CAAC,qBAAqB,CAAC,UAAU,EAAE;YAC5C,MAAM,OAAO,GAAY,MAAM,CAAC,UAAU,CACxC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,KAAK,CACb,CAAA;YACD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC7F,uEAAuE;YACvE,OAAO,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAA;SAChD;QAED,sDAAsD;QACtD,IAAI,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE;YAC3C,8BAA8B;YAC9B,MAAM,sBAAsB,GAAG,wBAAwB,CACrD,sBAAsB,CAAC,IAAI,EAC3B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAA8B,CAC1D,CAAA;YACD,SAAS,CAAC,sBAAsB,IAAI,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAA;YACvG,oEAAoE;YACpE,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAA;YAClH,sDAAsD;YACtD,OAAO,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAAA;SAC/C;QAED,qBAAqB;QACrB,MAAM,cAAc,GAAqB,iBAAiB,CAAC,oBAAoB,CAC7E,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,wBAAwB,CACjC,CAAA;QACD,MAAM,OAAO,GAAa,SAAS,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QAE5E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,gDAAgD;YAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACpC,SAAS,CACP,QAAQ,IAAI,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC3D,QAAQ,IAAI,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBACvE,QAAQ,IAAI,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAC5D,mBAAmB,GAAG,QAAQ,CAC/B,CAAA;YACD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;SACnE;QAED,iBAAiB;QACjB,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAA;QAC9G,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAClD,SAAS,CAAC,QAAQ,IAAI,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,QAAQ,CAAC,CAAA;QAElH,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAA;QAEhF,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YACvD,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC;SACjE,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,UAAU,CACvB,OAAqB,EACrB,mBAA8B,EAC9B,SAA2B,EAAE;QAE7B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QACpC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,wBAAwB,CAAA;QACzG,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC/F,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAA;QACvF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAA;IAC/D,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,eAAe,CAAC,OAAqB,EAAE,KAAmB,EAAE,OAAoB;;QAC7F,OAAO,UAAU,CAAC,eAAe,CAC/B,OAAO,EACN,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,QAAgC,CAAC,OAAO,EACjE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAC1F,OAAO,CAAC,OAAQ,EAChB,MAAA,OAAO,CAAC,SAAS,mCAAI,sBAAsB,CAAC,IAAI,EAChD,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,SAAS,CACtG,CAAA;IACH,CAAC;IAEO,MAAM,CAAC,eAAe,CAC5B,OAAqB,EACrB,UAAkB,EAClB,WAAsB,EACtB,OAAe,EACf,SAAiC,EACjC,QAAuB;QAEvB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QACpC,MAAM,aAAa,GAAG,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAClE,MAAM,gBAAgB,GAAG,QAAQ;YAC/B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC1B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,qCAAqC,CAAC,CAAA,CAAC,iBAAiB;QAE3G,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC,SAAS,EAAE;YACxE,aAAa;YACb,UAAU;YACV,WAAW;YACX,QAAQ;YACR,MAAM;YACN,gBAAgB;SACjB,CAAC,CAAA;QAEF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAA;IAC7D,CAAC;;AApca,oBAAS,GAAc,IAAI,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;AAEzD,0BAAe,GAAc,IAAI,SAAS,CAAC;IACvD,8IAA8I;CAC/I,CAAC,CAAA"}
@@ -0,0 +1,149 @@
1
+ import { BigNumberish } from 'ethers';
2
+ import { Currency, CurrencyAmount, Percent, TradeType } from '@fenine/sdk-core';
3
+ import { type PathKey, type PoolKey } from '@uniswap/v4-sdk';
4
+ import { TokenTransferMode } from '../entities/actions/uniswap';
5
+ import { Permit2Permit } from '../utils/inputTokens';
6
+ import { UniversalRouterVersion } from '../utils/constants';
7
+ export type { PathKey, PoolKey };
8
+ export type Fee = {
9
+ kind: 'portion';
10
+ recipient: string;
11
+ fee: Percent;
12
+ } | {
13
+ kind: 'flat';
14
+ recipient: string;
15
+ amount: BigNumberish;
16
+ };
17
+ export type SwapSpecification = {
18
+ tradeType: TradeType;
19
+ routing: {
20
+ inputToken: Currency;
21
+ outputToken: Currency;
22
+ amount: CurrencyAmount<Currency>;
23
+ quote: CurrencyAmount<Currency>;
24
+ };
25
+ slippageTolerance: Percent;
26
+ recipient?: string;
27
+ fee?: Fee;
28
+ tokenTransferMode?: TokenTransferMode;
29
+ permit?: Permit2Permit;
30
+ chainId?: number;
31
+ deadline?: BigNumberish;
32
+ urVersion?: UniversalRouterVersion;
33
+ safeMode?: boolean;
34
+ };
35
+ export type NormalizedSwapSpecification = Omit<SwapSpecification, 'recipient' | 'tokenTransferMode' | 'urVersion' | 'safeMode'> & {
36
+ recipient: string;
37
+ tokenTransferMode: TokenTransferMode;
38
+ urVersion: UniversalRouterVersion;
39
+ safeMode: boolean;
40
+ };
41
+ export type V2SwapExactIn = {
42
+ type: 'V2_SWAP_EXACT_IN';
43
+ recipient: string;
44
+ amountIn: BigNumberish;
45
+ amountOutMin: BigNumberish;
46
+ path: string[];
47
+ minHopPriceX36?: BigNumberish[];
48
+ };
49
+ export type V2SwapExactOut = {
50
+ type: 'V2_SWAP_EXACT_OUT';
51
+ recipient: string;
52
+ amountOut: BigNumberish;
53
+ amountInMax: BigNumberish;
54
+ path: string[];
55
+ minHopPriceX36?: BigNumberish[];
56
+ };
57
+ export type V3SwapExactIn = {
58
+ type: 'V3_SWAP_EXACT_IN';
59
+ recipient: string;
60
+ amountIn: BigNumberish;
61
+ amountOutMin: BigNumberish;
62
+ path: string;
63
+ minHopPriceX36?: BigNumberish[];
64
+ };
65
+ export type V3SwapExactOut = {
66
+ type: 'V3_SWAP_EXACT_OUT';
67
+ recipient: string;
68
+ amountOut: BigNumberish;
69
+ amountInMax: BigNumberish;
70
+ path: string;
71
+ minHopPriceX36?: BigNumberish[];
72
+ };
73
+ export type V4Swap = {
74
+ type: 'V4_SWAP';
75
+ v4Actions: V4Action[];
76
+ };
77
+ export type WrapEth = {
78
+ type: 'WRAP_ETH';
79
+ recipient: string;
80
+ amount: BigNumberish;
81
+ };
82
+ export type UnwrapWeth = {
83
+ type: 'UNWRAP_WETH';
84
+ recipient: string;
85
+ amountMin: BigNumberish;
86
+ };
87
+ export type SwapStep = V2SwapExactIn | V2SwapExactOut | V3SwapExactIn | V3SwapExactOut | V4Swap | WrapEth | UnwrapWeth;
88
+ export type V4SwapExactIn = {
89
+ action: 'SWAP_EXACT_IN';
90
+ currencyIn: string;
91
+ path: PathKey[];
92
+ amountIn: BigNumberish;
93
+ amountOutMinimum: BigNumberish;
94
+ minHopPriceX36?: BigNumberish[];
95
+ };
96
+ export type V4SwapExactInSingle = {
97
+ action: 'SWAP_EXACT_IN_SINGLE';
98
+ poolKey: PoolKey;
99
+ zeroForOne: boolean;
100
+ amountIn: BigNumberish;
101
+ amountOutMinimum: BigNumberish;
102
+ minHopPriceX36?: BigNumberish;
103
+ hookData: string;
104
+ };
105
+ export type V4SwapExactOut = {
106
+ action: 'SWAP_EXACT_OUT';
107
+ currencyOut: string;
108
+ path: PathKey[];
109
+ amountOut: BigNumberish;
110
+ amountInMaximum: BigNumberish;
111
+ minHopPriceX36?: BigNumberish[];
112
+ };
113
+ export type V4SwapExactOutSingle = {
114
+ action: 'SWAP_EXACT_OUT_SINGLE';
115
+ poolKey: PoolKey;
116
+ zeroForOne: boolean;
117
+ amountOut: BigNumberish;
118
+ amountInMaximum: BigNumberish;
119
+ minHopPriceX36?: BigNumberish;
120
+ hookData: string;
121
+ };
122
+ export type V4Settle = {
123
+ action: 'SETTLE';
124
+ currency: string;
125
+ amount: BigNumberish;
126
+ };
127
+ export type V4SettleAll = {
128
+ action: 'SETTLE_ALL';
129
+ currency: string;
130
+ maxAmount: BigNumberish;
131
+ };
132
+ export type V4Take = {
133
+ action: 'TAKE';
134
+ currency: string;
135
+ recipient: string;
136
+ amount: BigNumberish;
137
+ };
138
+ export type V4TakeAll = {
139
+ action: 'TAKE_ALL';
140
+ currency: string;
141
+ minAmount: BigNumberish;
142
+ };
143
+ export type V4TakePortion = {
144
+ action: 'TAKE_PORTION';
145
+ currency: string;
146
+ recipient: string;
147
+ bips: BigNumberish;
148
+ };
149
+ export type V4Action = V4SwapExactIn | V4SwapExactInSingle | V4SwapExactOut | V4SwapExactOutSingle | V4Settle | V4SettleAll | V4Take | V4TakeAll | V4TakePortion;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=encodeSwaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeSwaps.js","sourceRoot":"","sources":["../../../../src/types/encodeSwaps.ts"],"names":[],"mappings":""}