@eth-optimism/actions-sdk 0.2.0 → 0.3.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 (271) hide show
  1. package/dist/__mocks__/MockAssets.d.ts.map +1 -1
  2. package/dist/__mocks__/MockAssets.js +2 -0
  3. package/dist/__mocks__/MockAssets.js.map +1 -1
  4. package/dist/__tests__/actions.test.js +0 -4
  5. package/dist/__tests__/actions.test.js.map +1 -1
  6. package/dist/actions.d.ts +20 -1
  7. package/dist/actions.d.ts.map +1 -1
  8. package/dist/actions.js +37 -13
  9. package/dist/actions.js.map +1 -1
  10. package/dist/constants/assets.d.ts +4 -0
  11. package/dist/constants/assets.d.ts.map +1 -1
  12. package/dist/constants/assets.js +15 -0
  13. package/dist/constants/assets.js.map +1 -1
  14. package/dist/constants/contracts.d.ts +4 -0
  15. package/dist/constants/contracts.d.ts.map +1 -0
  16. package/dist/constants/contracts.js +3 -0
  17. package/dist/constants/contracts.js.map +1 -0
  18. package/dist/index.d.ts +4 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/lend/core/LendProvider.d.ts +0 -6
  23. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  24. package/dist/lend/core/LendProvider.js +6 -15
  25. package/dist/lend/core/LendProvider.js.map +1 -1
  26. package/dist/lend/core/__tests__/LendProvider.test.js +2 -4
  27. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  28. package/dist/lend/providers/morpho/__tests__/sdk.test.js +3 -2
  29. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  30. package/dist/lend/providers/morpho/api.d.ts +4 -0
  31. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  32. package/dist/lend/providers/morpho/api.js.map +1 -1
  33. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  34. package/dist/lend/providers/morpho/sdk.js +10 -1
  35. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  36. package/dist/supported/tokens.d.ts.map +1 -1
  37. package/dist/supported/tokens.js +9 -2
  38. package/dist/supported/tokens.js.map +1 -1
  39. package/dist/swap/__mocks__/MockSwapProvider.d.ts +38 -0
  40. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -0
  41. package/dist/swap/__mocks__/MockSwapProvider.js +138 -0
  42. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -0
  43. package/dist/swap/core/SwapProvider.d.ts +56 -0
  44. package/dist/swap/core/SwapProvider.d.ts.map +1 -0
  45. package/dist/swap/core/SwapProvider.js +177 -0
  46. package/dist/swap/core/SwapProvider.js.map +1 -0
  47. package/dist/swap/core/__tests__/SwapProvider.test.d.ts +2 -0
  48. package/dist/swap/core/__tests__/SwapProvider.test.d.ts.map +1 -0
  49. package/dist/swap/core/__tests__/SwapProvider.test.js +329 -0
  50. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -0
  51. package/dist/swap/index.d.ts +7 -0
  52. package/dist/swap/index.d.ts.map +1 -0
  53. package/dist/swap/index.js +8 -0
  54. package/dist/swap/index.js.map +1 -0
  55. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +8 -0
  56. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts.map +1 -0
  57. package/dist/swap/namespaces/ActionsSwapNamespace.js +8 -0
  58. package/dist/swap/namespaces/ActionsSwapNamespace.js.map +1 -0
  59. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +33 -0
  60. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -0
  61. package/dist/swap/namespaces/BaseSwapNamespace.js +58 -0
  62. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -0
  63. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +22 -0
  64. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -0
  65. package/dist/swap/namespaces/WalletSwapNamespace.js +60 -0
  66. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -0
  67. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts +2 -0
  68. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts.map +1 -0
  69. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +106 -0
  70. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -0
  71. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts +2 -0
  72. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts.map +1 -0
  73. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +132 -0
  74. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -0
  75. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +68 -0
  76. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -0
  77. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +206 -0
  78. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -0
  79. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts +2 -0
  80. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts.map +1 -0
  81. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +257 -0
  82. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -0
  83. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts +2 -0
  84. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts.map +1 -0
  85. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +312 -0
  86. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -0
  87. package/dist/swap/providers/uniswap/abis.d.ts +227 -0
  88. package/dist/swap/providers/uniswap/abis.d.ts.map +1 -0
  89. package/dist/swap/providers/uniswap/abis.js +138 -0
  90. package/dist/swap/providers/uniswap/abis.js.map +1 -0
  91. package/dist/swap/providers/uniswap/addresses.d.ts +21 -0
  92. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -0
  93. package/dist/swap/providers/uniswap/addresses.js +81 -0
  94. package/dist/swap/providers/uniswap/addresses.js.map +1 -0
  95. package/dist/swap/providers/uniswap/encoding.d.ts +77 -0
  96. package/dist/swap/providers/uniswap/encoding.d.ts.map +1 -0
  97. package/dist/swap/providers/uniswap/encoding.js +233 -0
  98. package/dist/swap/providers/uniswap/encoding.js.map +1 -0
  99. package/dist/swap/providers/uniswap/types.d.ts +20 -0
  100. package/dist/swap/providers/uniswap/types.d.ts.map +1 -0
  101. package/dist/swap/providers/uniswap/types.js +2 -0
  102. package/dist/swap/providers/uniswap/types.js.map +1 -0
  103. package/dist/types/actions.d.ts +19 -5
  104. package/dist/types/actions.d.ts.map +1 -1
  105. package/dist/types/index.d.ts +2 -0
  106. package/dist/types/index.d.ts.map +1 -1
  107. package/dist/types/index.js +2 -0
  108. package/dist/types/index.js.map +1 -1
  109. package/dist/types/lend/base.d.ts +3 -13
  110. package/dist/types/lend/base.d.ts.map +1 -1
  111. package/dist/types/lend/base.js.map +1 -1
  112. package/dist/types/swap/base.d.ts +238 -0
  113. package/dist/types/swap/base.d.ts.map +1 -0
  114. package/dist/types/swap/base.js +4 -0
  115. package/dist/types/swap/base.js.map +1 -0
  116. package/dist/types/swap/index.d.ts +2 -0
  117. package/dist/types/swap/index.d.ts.map +1 -0
  118. package/dist/types/swap/index.js +2 -0
  119. package/dist/types/swap/index.js.map +1 -0
  120. package/dist/types/transaction.d.ts +14 -0
  121. package/dist/types/transaction.d.ts.map +1 -0
  122. package/dist/types/transaction.js +2 -0
  123. package/dist/types/transaction.js.map +1 -0
  124. package/dist/utils/assets.d.ts +4 -5
  125. package/dist/utils/assets.d.ts.map +1 -1
  126. package/dist/utils/assets.js +4 -11
  127. package/dist/utils/assets.js.map +1 -1
  128. package/dist/utils/assets.test.js +13 -1
  129. package/dist/utils/assets.test.js.map +1 -1
  130. package/dist/utils/permit2.d.ts +46 -0
  131. package/dist/utils/permit2.d.ts.map +1 -0
  132. package/dist/utils/permit2.js +100 -0
  133. package/dist/utils/permit2.js.map +1 -0
  134. package/dist/utils/permit2.test.d.ts +2 -0
  135. package/dist/utils/permit2.test.d.ts.map +1 -0
  136. package/dist/utils/permit2.test.js +110 -0
  137. package/dist/utils/permit2.test.js.map +1 -0
  138. package/dist/utils/validation.d.ts +12 -0
  139. package/dist/utils/validation.d.ts.map +1 -0
  140. package/dist/utils/validation.js +44 -0
  141. package/dist/utils/validation.js.map +1 -0
  142. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +7 -1
  143. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  144. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +2 -1
  145. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  146. package/dist/wallet/core/providers/hosted/types/index.d.ts +5 -1
  147. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  148. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +7 -1
  149. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  150. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +5 -1
  151. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  152. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +2 -2
  153. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  154. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +13 -2
  155. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  156. package/dist/wallet/core/wallets/abstract/Wallet.js +7 -1
  157. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  158. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +7 -2
  159. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  160. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +6 -5
  161. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  162. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -1
  163. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  164. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -1
  165. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  166. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  167. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +4 -3
  168. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  169. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +5 -1
  170. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  171. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +4 -2
  172. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  173. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +6 -1
  174. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  175. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +4 -3
  176. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  177. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -1
  178. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  179. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  180. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  181. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +7 -1
  182. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  183. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +6 -2
  184. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  185. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +1 -0
  186. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  187. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -1
  188. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  189. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -2
  190. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  191. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +1 -0
  192. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  193. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -3
  194. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  195. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +5 -4
  196. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  197. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  198. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
  199. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  200. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +7 -1
  201. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  202. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +5 -3
  203. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  204. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -1
  205. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  206. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  207. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  208. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -1
  209. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  210. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  211. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  212. package/package.json +2 -2
  213. package/src/__mocks__/MockAssets.ts +2 -0
  214. package/src/__tests__/actions.test.ts +0 -4
  215. package/src/actions.ts +57 -19
  216. package/src/constants/assets.ts +16 -0
  217. package/src/constants/contracts.ts +5 -0
  218. package/src/index.ts +30 -2
  219. package/src/lend/core/LendProvider.ts +6 -18
  220. package/src/lend/core/__tests__/LendProvider.test.ts +2 -5
  221. package/src/lend/providers/morpho/__tests__/sdk.test.ts +3 -2
  222. package/src/lend/providers/morpho/api.ts +4 -0
  223. package/src/lend/providers/morpho/sdk.ts +10 -1
  224. package/src/supported/tokens.ts +16 -2
  225. package/src/swap/__mocks__/MockSwapProvider.ts +216 -0
  226. package/src/swap/core/SwapProvider.ts +319 -0
  227. package/src/swap/core/__tests__/SwapProvider.test.ts +478 -0
  228. package/src/swap/index.ts +14 -0
  229. package/src/swap/namespaces/ActionsSwapNamespace.ts +7 -0
  230. package/src/swap/namespaces/BaseSwapNamespace.ts +77 -0
  231. package/src/swap/namespaces/WalletSwapNamespace.ts +82 -0
  232. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +138 -0
  233. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +162 -0
  234. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +304 -0
  235. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +299 -0
  236. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +370 -0
  237. package/src/swap/providers/uniswap/abis.ts +144 -0
  238. package/src/swap/providers/uniswap/addresses.ts +108 -0
  239. package/src/swap/providers/uniswap/encoding.ts +406 -0
  240. package/src/swap/providers/uniswap/types.ts +24 -0
  241. package/src/types/actions.ts +22 -6
  242. package/src/types/index.ts +2 -0
  243. package/src/types/lend/base.ts +4 -14
  244. package/src/types/swap/base.ts +259 -0
  245. package/src/types/swap/index.ts +1 -0
  246. package/src/types/transaction.ts +14 -0
  247. package/src/utils/assets.test.ts +16 -1
  248. package/src/utils/assets.ts +13 -10
  249. package/src/utils/permit2.test.ts +142 -0
  250. package/src/utils/permit2.ts +144 -0
  251. package/src/utils/validation.ts +76 -0
  252. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +9 -1
  253. package/src/wallet/core/providers/hosted/types/index.ts +5 -1
  254. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +13 -1
  255. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +2 -0
  256. package/src/wallet/core/wallets/abstract/Wallet.ts +18 -2
  257. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +14 -5
  258. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -2
  259. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +10 -2
  260. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -2
  261. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +11 -2
  262. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -2
  263. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +10 -2
  264. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +1 -0
  265. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +9 -2
  266. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +1 -0
  267. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +9 -4
  268. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +18 -6
  269. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -2
  270. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -2
  271. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -2
@@ -0,0 +1,106 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createMockSwapProvider, MockSwapProvider, } from '../../__mocks__/MockSwapProvider.js';
3
+ import { ActionsSwapNamespace } from '../ActionsSwapNamespace.js';
4
+ describe('BaseSwapNamespace', () => {
5
+ const USDC = {
6
+ type: 'erc20',
7
+ address: { 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e' },
8
+ metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 },
9
+ };
10
+ const ETH = {
11
+ type: 'native',
12
+ address: { 84532: '0x0000000000000000000000000000000000000000' },
13
+ metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
14
+ };
15
+ describe('price', () => {
16
+ it('delegates to provider getPrice', async () => {
17
+ const provider = createMockSwapProvider();
18
+ const namespace = new ActionsSwapNamespace({ uniswap: provider });
19
+ const result = await namespace.price({
20
+ assetIn: USDC,
21
+ assetOut: ETH,
22
+ amountIn: 100,
23
+ chainId: 84532,
24
+ });
25
+ expect(provider.mockGetPrice).toHaveBeenCalledTimes(1);
26
+ expect(result.price).toBe('1.5');
27
+ });
28
+ it('throws if no provider configured', async () => {
29
+ const namespace = new ActionsSwapNamespace({});
30
+ await expect(namespace.price({
31
+ assetIn: USDC,
32
+ assetOut: ETH,
33
+ amountIn: 100,
34
+ chainId: 84532,
35
+ })).rejects.toThrow('No swap provider configured');
36
+ });
37
+ });
38
+ describe('getMarket', () => {
39
+ it('delegates to provider getMarket', async () => {
40
+ const provider = createMockSwapProvider();
41
+ const namespace = new ActionsSwapNamespace({ uniswap: provider });
42
+ const result = await namespace.getMarket({
43
+ poolId: '0xpool123',
44
+ chainId: 84532,
45
+ });
46
+ expect(provider.mockGetMarket).toHaveBeenCalledTimes(1);
47
+ expect(result.marketId.poolId).toBe('0xpool123');
48
+ });
49
+ });
50
+ describe('getMarkets', () => {
51
+ it('aggregates markets from all providers', async () => {
52
+ const provider1 = createMockSwapProvider();
53
+ const provider2 = new MockSwapProvider(undefined, {
54
+ supportedChains: [84532],
55
+ });
56
+ const namespace = new ActionsSwapNamespace({
57
+ uniswap: provider1,
58
+ });
59
+ namespace.providers.oneInch = provider2;
60
+ const result = await namespace.getMarkets({});
61
+ expect(result.length).toBeGreaterThanOrEqual(1);
62
+ expect(provider1.mockGetMarkets).toHaveBeenCalledTimes(1);
63
+ expect(provider2.mockGetMarkets).toHaveBeenCalledTimes(1);
64
+ });
65
+ it('returns empty array when no providers', async () => {
66
+ const namespace = new ActionsSwapNamespace({});
67
+ const result = await namespace.getMarkets({});
68
+ expect(result).toEqual([]);
69
+ });
70
+ });
71
+ describe('supportedChainIds', () => {
72
+ it('returns union of chains from all providers', () => {
73
+ const provider1 = createMockSwapProvider(undefined, {
74
+ supportedChains: [84532],
75
+ });
76
+ const provider2 = new MockSwapProvider(undefined, {
77
+ supportedChains: [1, 10],
78
+ });
79
+ const namespace = new ActionsSwapNamespace({
80
+ uniswap: provider1,
81
+ });
82
+ namespace.providers.oneInch = provider2;
83
+ const result = namespace.supportedChainIds();
84
+ expect(result).toContain(84532);
85
+ expect(result).toContain(1);
86
+ expect(result).toContain(10);
87
+ expect(result.length).toBe(3);
88
+ });
89
+ it('deduplicates chain IDs', () => {
90
+ const provider1 = createMockSwapProvider(undefined, {
91
+ supportedChains: [84532, 1],
92
+ });
93
+ const provider2 = new MockSwapProvider(undefined, {
94
+ supportedChains: [1],
95
+ });
96
+ const namespace = new ActionsSwapNamespace({
97
+ uniswap: provider1,
98
+ });
99
+ namespace.providers.oneInch = provider2;
100
+ const result = namespace.supportedChainIds();
101
+ // Should have unique values only
102
+ expect(new Set(result).size).toBe(result.length);
103
+ });
104
+ });
105
+ });
106
+ //# sourceMappingURL=BaseSwapNamespace.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseSwapNamespace.spec.js","sourceRoot":"","sources":["../../../../src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=WalletSwapNamespace.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletSwapNamespace.spec.d.ts","sourceRoot":"","sources":["../../../../src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,132 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { createMockSwapProvider } from '../../__mocks__/MockSwapProvider.js';
3
+ import { WalletSwapNamespace } from '../WalletSwapNamespace.js';
4
+ describe('WalletSwapNamespace', () => {
5
+ const USDC = {
6
+ type: 'erc20',
7
+ address: { 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e' },
8
+ metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 },
9
+ };
10
+ const ETH = {
11
+ type: 'native',
12
+ address: { 84532: '0x0000000000000000000000000000000000000000' },
13
+ metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
14
+ };
15
+ const mockWalletAddress = '0x1234567890123456789012345678901234567890';
16
+ function createMockWallet() {
17
+ return {
18
+ address: mockWalletAddress,
19
+ send: vi.fn().mockResolvedValue({ transactionHash: '0xtx1' }),
20
+ sendBatch: vi.fn().mockResolvedValue({ transactionHash: '0xtx2' }),
21
+ };
22
+ }
23
+ describe('execute', () => {
24
+ it('executes swap with single transaction', async () => {
25
+ const provider = createMockSwapProvider();
26
+ const wallet = createMockWallet();
27
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet);
28
+ const result = await namespace.execute({
29
+ amountIn: 100,
30
+ assetIn: USDC,
31
+ assetOut: ETH,
32
+ chainId: 84532,
33
+ });
34
+ expect(provider.mockExecute).toHaveBeenCalledTimes(1);
35
+ expect(wallet.send).toHaveBeenCalledTimes(1);
36
+ expect(wallet.sendBatch).not.toHaveBeenCalled();
37
+ expect(result.price).toBe('1.5');
38
+ expect(result.assetIn).toBe(USDC);
39
+ expect(result.assetOut).toBe(ETH);
40
+ });
41
+ it('batches transactions when approvals needed', async () => {
42
+ const provider = createMockSwapProvider();
43
+ const wallet = createMockWallet();
44
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet);
45
+ // Override mock to return transaction with approvals
46
+ provider.mockExecute.mockResolvedValueOnce({
47
+ amountIn: 100,
48
+ amountOut: 1.5,
49
+ amountInWei: 100000000n,
50
+ amountOutWei: 1500000000000000000n,
51
+ assetIn: USDC,
52
+ assetOut: ETH,
53
+ price: '1.5',
54
+ priceImpact: 0.001,
55
+ transactionData: {
56
+ tokenApproval: {
57
+ to: '0xpermit2',
58
+ data: '0xapprove',
59
+ value: 0n,
60
+ },
61
+ permit2Approval: {
62
+ to: '0xpermit2',
63
+ data: '0xpermit',
64
+ value: 0n,
65
+ },
66
+ swap: {
67
+ to: '0xrouter',
68
+ data: '0xswap',
69
+ value: 0n,
70
+ },
71
+ },
72
+ });
73
+ await namespace.execute({
74
+ amountIn: 100,
75
+ assetIn: USDC,
76
+ assetOut: ETH,
77
+ chainId: 84532,
78
+ });
79
+ expect(wallet.sendBatch).toHaveBeenCalledTimes(1);
80
+ expect(wallet.send).not.toHaveBeenCalled();
81
+ // Verify all 3 transactions were batched
82
+ const batchCall = vi.mocked(wallet.sendBatch).mock.calls[0];
83
+ expect(batchCall[0]).toHaveLength(3);
84
+ });
85
+ it('passes wallet address to provider', async () => {
86
+ const provider = createMockSwapProvider();
87
+ const wallet = createMockWallet();
88
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet);
89
+ await namespace.execute({
90
+ amountIn: 100,
91
+ assetIn: USDC,
92
+ assetOut: ETH,
93
+ chainId: 84532,
94
+ });
95
+ expect(provider.mockExecute).toHaveBeenCalledWith(expect.objectContaining({
96
+ walletAddress: mockWalletAddress,
97
+ }));
98
+ });
99
+ it('throws when no provider configured', async () => {
100
+ const wallet = createMockWallet();
101
+ const namespace = new WalletSwapNamespace({}, wallet);
102
+ await expect(namespace.execute({
103
+ amountIn: 100,
104
+ assetIn: USDC,
105
+ assetOut: ETH,
106
+ chainId: 84532,
107
+ })).rejects.toThrow('No swap provider configured');
108
+ });
109
+ });
110
+ describe('inherits read-only methods', () => {
111
+ it('has price method from BaseSwapNamespace', async () => {
112
+ const provider = createMockSwapProvider();
113
+ const wallet = createMockWallet();
114
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet);
115
+ const result = await namespace.price({
116
+ assetIn: USDC,
117
+ assetOut: ETH,
118
+ amountIn: 100,
119
+ chainId: 84532,
120
+ });
121
+ expect(result.price).toBe('1.5');
122
+ });
123
+ it('has getMarkets method from BaseSwapNamespace', async () => {
124
+ const provider = createMockSwapProvider();
125
+ const wallet = createMockWallet();
126
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet);
127
+ const result = await namespace.getMarkets({});
128
+ expect(result.length).toBeGreaterThanOrEqual(1);
129
+ });
130
+ });
131
+ });
132
+ //# sourceMappingURL=WalletSwapNamespace.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletSwapNamespace.spec.js","sourceRoot":"","sources":["../../../../src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { SupportedChainId } from '../../../constants/supportedChains.js';
2
+ import { SwapProvider } from '../../core/SwapProvider.js';
3
+ import type { UniswapSwapProviderConfig } from './types.js';
4
+ import type { GetSwapMarketParams, GetSwapMarketsParams, ResolvedSwapParams, SwapMarket, SwapPrice, SwapPriceParams, SwapTransaction } from '../../../types/swap/index.js';
5
+ /**
6
+ * Uniswap V4 swap provider using Universal Router and Permit2 approvals.
7
+ */
8
+ export declare class UniswapSwapProvider extends SwapProvider<UniswapSwapProviderConfig> {
9
+ /** @returns Chain IDs where Uniswap V4 contracts are deployed */
10
+ supportedChainIds(): SupportedChainId[];
11
+ /**
12
+ * Build a swap transaction with quote, calldata, and any required approvals.
13
+ * @param params - Resolved swap parameters (amounts in wei, defaults applied)
14
+ * @returns Transaction data ready for wallet execution
15
+ */
16
+ protected _execute(params: ResolvedSwapParams): Promise<SwapTransaction>;
17
+ /**
18
+ * Get a price quote for a swap pair.
19
+ * @param params - Price query with assets, optional amounts, and chain
20
+ * @returns Quote with price, amounts, price impact, and route
21
+ */
22
+ protected _getPrice(params: SwapPriceParams): Promise<SwapPrice>;
23
+ /**
24
+ * Find a specific market by poolId from the allowlist.
25
+ * @param params - Pool ID and chain to look up
26
+ * @returns Matching market
27
+ * @throws If no matching market found in config
28
+ */
29
+ protected _getMarket(params: GetSwapMarketParams): Promise<SwapMarket>;
30
+ /**
31
+ * Expand the market allowlist into concrete SwapMarket objects.
32
+ * Derives poolId from each asset pair's pool key — no RPC calls needed.
33
+ * @param params - Optional chain and asset filters
34
+ * @returns All configured markets matching the filters
35
+ */
36
+ protected _getMarkets(params: GetSwapMarketsParams): Promise<SwapMarket[]>;
37
+ /**
38
+ * Look up the Uniswap-specific market config for a pair, validating fee/tickSpacing.
39
+ * @param assetIn - Input asset
40
+ * @param assetOut - Output asset
41
+ * @param chainId - Target chain
42
+ * @returns Market config with guaranteed fee and tickSpacing
43
+ * @throws If pair not in allowlist or missing fee/tickSpacing
44
+ */
45
+ private resolveUniswapConfig;
46
+ /** @returns Allowlist entries that have the required fee and tickSpacing set */
47
+ private validConfigs;
48
+ /**
49
+ * Generate all SwapMarket objects from a single config entry on a given chain.
50
+ * @param config - Market config with fee/tickSpacing
51
+ * @param chainId - Target chain
52
+ * @param asset - If provided, only return markets containing this asset
53
+ */
54
+ private marketsFromConfig;
55
+ /**
56
+ * Generate unique asset pairs, optionally scoped to pairs containing a required asset.
57
+ * @param assets - Full list of assets from a market config
58
+ * @param requiredAsset - If set, only pairs including this asset are returned
59
+ */
60
+ private assetPairs;
61
+ /**
62
+ * Build a SwapMarket from two assets and V4 pool parameters.
63
+ * Computes a deterministic poolId from the sorted pool key.
64
+ * @returns SwapMarket, or null if either asset lacks an address on this chain
65
+ */
66
+ private configToMarket;
67
+ }
68
+ //# sourceMappingURL=UniswapSwapProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniswapSwapProvider.d.ts","sourceRoot":"","sources":["../../../../src/swap/providers/uniswap/UniswapSwapProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAU1D,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,mCAAmC,CAAA;AAE1C,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACV,SAAS,EACT,eAAe,EACf,eAAe,EAChB,MAAM,uBAAuB,CAAA;AAI9B;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY,CAAC,yBAAyB,CAAC;IAC9E,iEAAiE;IACjE,iBAAiB,IAAI,gBAAgB,EAAE;IAIvC;;;;OAIG;cACa,QAAQ,CACtB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,eAAe,CAAC;IAgE3B;;;;OAIG;cACa,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IA6BtE;;;;;OAKG;cACa,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgB5E;;;;;OAKG;cACa,WAAW,CACzB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBxB;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAgB5B,gFAAgF;IAChF,OAAO,CAAC,YAAY;IASpB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAYlB;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAqCvB"}
@@ -0,0 +1,206 @@
1
+ import { encodeAbiParameters, formatUnits, keccak256 } from 'viem';
2
+ import { SwapProvider } from '../../core/SwapProvider.js';
3
+ import { POOL_KEY_ABI_TYPE } from './abis.js';
4
+ import { getSupportedChainIds, getUniswapAddresses, } from './addresses.js';
5
+ import { encodeUniversalRouterSwap, getQuote, } from './encoding.js';
6
+ import { isNativeAsset, parseAssetAmount } from '../../../utils/assets.js';
7
+ /**
8
+ * Uniswap V4 swap provider using Universal Router and Permit2 approvals.
9
+ */
10
+ export class UniswapSwapProvider extends SwapProvider {
11
+ /** @returns Chain IDs where Uniswap V4 contracts are deployed */
12
+ supportedChainIds() {
13
+ return getSupportedChainIds();
14
+ }
15
+ /**
16
+ * Build a swap transaction with quote, calldata, and any required approvals.
17
+ * @param params - Resolved swap parameters (amounts in wei, defaults applied)
18
+ * @returns Transaction data ready for wallet execution
19
+ */
20
+ async _execute(params) {
21
+ const { chainId, assetIn, assetOut } = params;
22
+ const addresses = getUniswapAddresses(chainId);
23
+ const publicClient = this.chainManager.getPublicClient(chainId);
24
+ const marketConfig = this.resolveUniswapConfig(assetIn, assetOut, chainId);
25
+ const quote = await getQuote({
26
+ assetIn,
27
+ assetOut,
28
+ amountInWei: params.amountInWei,
29
+ amountOutWei: params.amountOutWei,
30
+ chainId,
31
+ publicClient,
32
+ quoterAddress: addresses.quoter,
33
+ poolManagerAddress: addresses.poolManager,
34
+ fee: marketConfig.fee,
35
+ tickSpacing: marketConfig.tickSpacing,
36
+ });
37
+ const swapCalldata = encodeUniversalRouterSwap({
38
+ amountInWei: params.amountInWei,
39
+ amountOutWei: params.amountOutWei,
40
+ assetIn,
41
+ assetOut,
42
+ slippage: params.slippage,
43
+ deadline: params.deadline,
44
+ recipient: params.recipient,
45
+ chainId,
46
+ quote,
47
+ universalRouterAddress: addresses.universalRouter,
48
+ fee: marketConfig.fee,
49
+ tickSpacing: marketConfig.tickSpacing,
50
+ });
51
+ const amountInWei = params.amountInWei ?? quote.amountInWei;
52
+ const { tokenApproval, permit2Approval } = await this.buildPermit2Approvals(params, amountInWei, addresses.permit2, addresses.universalRouter, this._config.permit2ExpirySeconds);
53
+ const swapTx = {
54
+ to: addresses.universalRouter,
55
+ data: swapCalldata,
56
+ value: isNativeAsset(assetIn) ? (params.amountInWei ?? 0n) : 0n,
57
+ };
58
+ return {
59
+ amountIn: parseFloat(formatUnits(amountInWei, assetIn.metadata.decimals)),
60
+ amountOut: parseFloat(formatUnits(quote.amountOutWei, assetOut.metadata.decimals)),
61
+ amountInWei,
62
+ amountOutWei: quote.amountOutWei,
63
+ assetIn,
64
+ assetOut,
65
+ price: quote.price,
66
+ priceImpact: quote.priceImpact,
67
+ transactionData: { tokenApproval, permit2Approval, swap: swapTx },
68
+ };
69
+ }
70
+ /**
71
+ * Get a price quote for a swap pair.
72
+ * @param params - Price query with assets, optional amounts, and chain
73
+ * @returns Quote with price, amounts, price impact, and route
74
+ */
75
+ async _getPrice(params) {
76
+ const { chainId, assetIn, assetOut } = params;
77
+ const addresses = getUniswapAddresses(chainId);
78
+ const publicClient = this.chainManager.getPublicClient(chainId);
79
+ if (!assetOut) {
80
+ throw new Error('assetOut is required');
81
+ }
82
+ const marketConfig = this.resolveUniswapConfig(assetIn, assetOut, chainId);
83
+ // Default to 1 unit for price quotes when no amount specified
84
+ const amountInWei = parseAssetAmount(assetIn, params.amountIn ?? 1);
85
+ const amountOutWei = parseAssetAmount(assetOut, params.amountOut);
86
+ return getQuote({
87
+ assetIn,
88
+ assetOut,
89
+ amountInWei: amountOutWei ? undefined : amountInWei,
90
+ amountOutWei,
91
+ chainId,
92
+ publicClient,
93
+ quoterAddress: addresses.quoter,
94
+ poolManagerAddress: addresses.poolManager,
95
+ fee: marketConfig.fee,
96
+ tickSpacing: marketConfig.tickSpacing,
97
+ });
98
+ }
99
+ /**
100
+ * Find a specific market by poolId from the allowlist.
101
+ * @param params - Pool ID and chain to look up
102
+ * @returns Matching market
103
+ * @throws If no matching market found in config
104
+ */
105
+ async _getMarket(params) {
106
+ const { poolId, chainId } = params;
107
+ for (const config of this.validConfigs()) {
108
+ if (config.chainId !== undefined && config.chainId !== chainId)
109
+ continue;
110
+ const match = this.marketsFromConfig(config, chainId).find((m) => m.marketId.poolId === poolId);
111
+ if (match)
112
+ return match;
113
+ }
114
+ throw new Error(`Market with poolId ${poolId} not found on chain ${chainId}`);
115
+ }
116
+ /**
117
+ * Expand the market allowlist into concrete SwapMarket objects.
118
+ * Derives poolId from each asset pair's pool key — no RPC calls needed.
119
+ * @param params - Optional chain and asset filters
120
+ * @returns All configured markets matching the filters
121
+ */
122
+ async _getMarkets(params) {
123
+ return this.validConfigs().flatMap((config) => {
124
+ const chainIds = params.chainId
125
+ ? [params.chainId]
126
+ : config.chainId
127
+ ? [config.chainId]
128
+ : this.supportedChainIds();
129
+ return chainIds.flatMap((chainId) => this.marketsFromConfig(config, chainId, params.asset));
130
+ });
131
+ }
132
+ // ─────────────────────────────────────────────────────────────────────────────
133
+ // Private helpers
134
+ // ─────────────────────────────────────────────────────────────────────────────
135
+ /**
136
+ * Look up the Uniswap-specific market config for a pair, validating fee/tickSpacing.
137
+ * @param assetIn - Input asset
138
+ * @param assetOut - Output asset
139
+ * @param chainId - Target chain
140
+ * @returns Market config with guaranteed fee and tickSpacing
141
+ * @throws If pair not in allowlist or missing fee/tickSpacing
142
+ */
143
+ resolveUniswapConfig(assetIn, assetOut, chainId) {
144
+ const config = this.resolveMarketConfig(assetIn, assetOut, chainId);
145
+ if (config?.fee === undefined || config?.tickSpacing === undefined) {
146
+ throw new Error(`fee and tickSpacing must be configured for pair ${assetIn.metadata.symbol}/${assetOut.metadata.symbol}`);
147
+ }
148
+ return config;
149
+ }
150
+ /** @returns Allowlist entries that have the required fee and tickSpacing set */
151
+ validConfigs() {
152
+ return (this._config.marketAllowlist ?? []).filter((f) => f.fee !== undefined && f.tickSpacing !== undefined);
153
+ }
154
+ /**
155
+ * Generate all SwapMarket objects from a single config entry on a given chain.
156
+ * @param config - Market config with fee/tickSpacing
157
+ * @param chainId - Target chain
158
+ * @param asset - If provided, only return markets containing this asset
159
+ */
160
+ marketsFromConfig(config, chainId, asset) {
161
+ return this.assetPairs(config.assets, asset)
162
+ .map(([a, b]) => this.configToMarket(a, b, chainId, config.fee, config.tickSpacing))
163
+ .filter((m) => m !== null);
164
+ }
165
+ /**
166
+ * Generate unique asset pairs, optionally scoped to pairs containing a required asset.
167
+ * @param assets - Full list of assets from a market config
168
+ * @param requiredAsset - If set, only pairs including this asset are returned
169
+ */
170
+ assetPairs(assets, requiredAsset) {
171
+ return assets
172
+ .flatMap((a, i) => assets.slice(i + 1).map((b) => [a, b]))
173
+ .filter(([a, b]) => !requiredAsset || a === requiredAsset || b === requiredAsset);
174
+ }
175
+ /**
176
+ * Build a SwapMarket from two assets and V4 pool parameters.
177
+ * Computes a deterministic poolId from the sorted pool key.
178
+ * @returns SwapMarket, or null if either asset lacks an address on this chain
179
+ */
180
+ configToMarket(assetA, assetB, chainId, fee, tickSpacing) {
181
+ const addrA = assetA.address[chainId];
182
+ const addrB = assetB.address[chainId];
183
+ if (!addrA || addrA === 'native' || !addrB || addrB === 'native')
184
+ return null;
185
+ // V4 requires currency0 < currency1 for deterministic pool keys
186
+ const [currency0, currency1] = addrA.toLowerCase() < addrB.toLowerCase()
187
+ ? [addrA, addrB]
188
+ : [addrB, addrA];
189
+ // PoolId = keccak256(abi.encode(PoolKey)) per V4's PoolIdLibrary
190
+ // @see https://github.com/Uniswap/v4-core/blob/main/src/types/PoolId.sol
191
+ const poolId = keccak256(encodeAbiParameters(POOL_KEY_ABI_TYPE, [
192
+ currency0,
193
+ currency1,
194
+ fee,
195
+ tickSpacing,
196
+ '0x0000000000000000000000000000000000000000',
197
+ ]));
198
+ return {
199
+ marketId: { poolId, chainId },
200
+ assets: [assetA, assetB],
201
+ fee,
202
+ provider: 'uniswap',
203
+ };
204
+ }
205
+ }
206
+ //# sourceMappingURL=UniswapSwapProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniswapSwapProvider.js","sourceRoot":"","sources":["../../../../src/swap/providers/uniswap/UniswapSwapProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=UniswapSwapProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniswapSwapProvider.test.d.ts","sourceRoot":"","sources":["../../../../../src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts"],"names":[],"mappings":""}