@eth-optimism/actions-sdk 0.3.0 → 0.5.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 (479) hide show
  1. package/dist/__mocks__/MockAssets.d.ts +17 -2
  2. package/dist/__mocks__/MockAssets.d.ts.map +1 -1
  3. package/dist/__mocks__/MockAssets.js +49 -6
  4. package/dist/__mocks__/MockAssets.js.map +1 -1
  5. package/dist/__tests__/actions.test.js +1 -1
  6. package/dist/__tests__/actions.test.js.map +1 -1
  7. package/dist/actions.d.ts +17 -13
  8. package/dist/actions.d.ts.map +1 -1
  9. package/dist/actions.js +46 -27
  10. package/dist/actions.js.map +1 -1
  11. package/dist/constants/assets.d.ts +215 -4
  12. package/dist/constants/assets.d.ts.map +1 -1
  13. package/dist/constants/assets.js +734 -11
  14. package/dist/constants/assets.js.map +1 -1
  15. package/dist/constants/providers.d.ts +6 -0
  16. package/dist/constants/providers.d.ts.map +1 -0
  17. package/dist/constants/providers.js +6 -0
  18. package/dist/constants/providers.js.map +1 -0
  19. package/dist/constants/supportedChains.d.ts +2 -2
  20. package/dist/constants/supportedChains.d.ts.map +1 -1
  21. package/dist/constants/supportedChains.js +12 -2
  22. package/dist/constants/supportedChains.js.map +1 -1
  23. package/dist/ens/EnsNamespace.d.ts +57 -0
  24. package/dist/ens/EnsNamespace.d.ts.map +1 -0
  25. package/dist/ens/EnsNamespace.js +158 -0
  26. package/dist/ens/EnsNamespace.js.map +1 -0
  27. package/dist/ens/EnsNamespace.spec.d.ts +2 -0
  28. package/dist/ens/EnsNamespace.spec.d.ts.map +1 -0
  29. package/dist/ens/EnsNamespace.spec.js +144 -0
  30. package/dist/ens/EnsNamespace.spec.js.map +1 -0
  31. package/dist/ens/errors.d.ts +24 -0
  32. package/dist/ens/errors.d.ts.map +1 -0
  33. package/dist/ens/errors.js +35 -0
  34. package/dist/ens/errors.js.map +1 -0
  35. package/dist/ens/index.d.ts +4 -0
  36. package/dist/ens/index.d.ts.map +1 -0
  37. package/dist/ens/index.js +4 -0
  38. package/dist/ens/index.js.map +1 -0
  39. package/dist/ens/types.d.ts +63 -0
  40. package/dist/ens/types.d.ts.map +1 -0
  41. package/dist/ens/types.js +14 -0
  42. package/dist/ens/types.js.map +1 -0
  43. package/dist/index.d.ts +6 -5
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +5 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
  48. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
  49. package/dist/lend/__mocks__/MockLendProvider.js +7 -2
  50. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
  51. package/dist/lend/core/LendProvider.d.ts +12 -8
  52. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  53. package/dist/lend/core/LendProvider.js +15 -21
  54. package/dist/lend/core/LendProvider.js.map +1 -1
  55. package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
  56. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
  57. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
  58. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
  59. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
  60. package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
  61. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  62. package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
  63. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  64. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
  65. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
  66. package/dist/lend/providers/aave/addresses.d.ts +13 -39
  67. package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
  68. package/dist/lend/providers/aave/addresses.js +65 -60
  69. package/dist/lend/providers/aave/addresses.js.map +1 -1
  70. package/dist/lend/providers/aave/sdk.d.ts +2 -2
  71. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  72. package/dist/lend/providers/aave/sdk.js +6 -28
  73. package/dist/lend/providers/aave/sdk.js.map +1 -1
  74. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
  75. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  76. package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
  77. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  78. package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
  79. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  80. package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -42
  81. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  82. package/dist/lend/providers/morpho/api.d.ts +3 -7
  83. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  84. package/dist/lend/providers/morpho/api.js +2 -2
  85. package/dist/lend/providers/morpho/api.js.map +1 -1
  86. package/dist/lend/providers/morpho/contracts.d.ts +11 -10
  87. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
  88. package/dist/lend/providers/morpho/contracts.js +43 -10
  89. package/dist/lend/providers/morpho/contracts.js.map +1 -1
  90. package/dist/lend/providers/morpho/sdk.d.ts +7 -2
  91. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  92. package/dist/lend/providers/morpho/sdk.js +67 -63
  93. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  94. package/dist/nodeActionsFactory.d.ts +1 -1
  95. package/dist/reactActionsFactory.d.ts +1 -1
  96. package/dist/services/ChainManager.d.ts +15 -8
  97. package/dist/services/ChainManager.d.ts.map +1 -1
  98. package/dist/services/ChainManager.js +9 -0
  99. package/dist/services/ChainManager.js.map +1 -1
  100. package/dist/services/__mocks__/MockChainManager.d.ts +5 -4
  101. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
  102. package/dist/services/__mocks__/MockChainManager.js +5 -0
  103. package/dist/services/__mocks__/MockChainManager.js.map +1 -1
  104. package/dist/services/tokenBalance.d.ts +1 -1
  105. package/dist/services/tokenBalance.d.ts.map +1 -1
  106. package/dist/services/tokenBalance.js +31 -30
  107. package/dist/services/tokenBalance.js.map +1 -1
  108. package/dist/services/tokenBalance.spec.js +20 -24
  109. package/dist/services/tokenBalance.spec.js.map +1 -1
  110. package/dist/swap/__mocks__/MockSwapProvider.d.ts +20 -8
  111. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -1
  112. package/dist/swap/__mocks__/MockSwapProvider.js +52 -29
  113. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -1
  114. package/dist/swap/core/SwapProvider.d.ts +105 -16
  115. package/dist/swap/core/SwapProvider.d.ts.map +1 -1
  116. package/dist/swap/core/SwapProvider.js +215 -37
  117. package/dist/swap/core/SwapProvider.js.map +1 -1
  118. package/dist/swap/core/__tests__/SwapProvider.test.js +115 -9
  119. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -1
  120. package/dist/swap/core/markets.d.ts +47 -0
  121. package/dist/swap/core/markets.d.ts.map +1 -0
  122. package/dist/swap/core/markets.js +65 -0
  123. package/dist/swap/core/markets.js.map +1 -0
  124. package/dist/swap/index.d.ts +2 -0
  125. package/dist/swap/index.d.ts.map +1 -1
  126. package/dist/swap/index.js +1 -0
  127. package/dist/swap/index.js.map +1 -1
  128. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +2 -2
  129. package/dist/swap/namespaces/ActionsSwapNamespace.js +2 -2
  130. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +50 -8
  131. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -1
  132. package/dist/swap/namespaces/BaseSwapNamespace.js +144 -16
  133. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -1
  134. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +20 -7
  135. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
  136. package/dist/swap/namespaces/WalletSwapNamespace.js +44 -15
  137. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -1
  138. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +150 -11
  139. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -1
  140. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +85 -8
  141. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -1
  142. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +10 -42
  143. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -1
  144. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +81 -139
  145. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -1
  146. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +10 -9
  147. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -1
  148. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +17 -17
  149. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -1
  150. package/dist/swap/providers/uniswap/addresses.d.ts +5 -0
  151. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -1
  152. package/dist/swap/providers/uniswap/addresses.js +1 -1
  153. package/dist/swap/providers/uniswap/addresses.js.map +1 -1
  154. package/dist/swap/providers/uniswap/encoding.d.ts +4 -4
  155. package/dist/swap/providers/uniswap/encoding.js +17 -17
  156. package/dist/swap/providers/uniswap/markets.d.ts +19 -0
  157. package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
  158. package/dist/swap/providers/uniswap/markets.js +48 -0
  159. package/dist/swap/providers/uniswap/markets.js.map +1 -0
  160. package/dist/swap/providers/uniswap/types.d.ts +4 -3
  161. package/dist/swap/providers/uniswap/types.d.ts.map +1 -1
  162. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +50 -0
  163. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
  164. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
  165. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
  166. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
  167. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
  168. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
  169. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
  170. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
  171. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
  172. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
  173. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
  174. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
  175. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
  176. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +420 -0
  177. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
  178. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
  179. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
  180. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
  181. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
  182. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
  183. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
  184. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
  185. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
  186. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
  187. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
  188. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
  189. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
  190. package/dist/swap/providers/velodrome/abis.d.ts +396 -0
  191. package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
  192. package/dist/swap/providers/velodrome/abis.js +257 -0
  193. package/dist/swap/providers/velodrome/abis.js.map +1 -0
  194. package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
  195. package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
  196. package/dist/swap/providers/velodrome/addresses.js +57 -0
  197. package/dist/swap/providers/velodrome/addresses.js.map +1 -0
  198. package/dist/swap/providers/velodrome/config.d.ts +22 -0
  199. package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
  200. package/dist/swap/providers/velodrome/config.js +29 -0
  201. package/dist/swap/providers/velodrome/config.js.map +1 -0
  202. package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
  203. package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
  204. package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
  205. package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
  206. package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
  207. package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
  208. package/dist/swap/providers/velodrome/encoding/index.js +5 -0
  209. package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
  210. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
  211. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
  212. package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
  213. package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
  214. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
  215. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
  216. package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
  217. package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
  218. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
  219. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
  220. package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
  221. package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
  222. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
  223. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
  224. package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
  225. package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
  226. package/dist/swap/providers/velodrome/markets.d.ts +21 -0
  227. package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
  228. package/dist/swap/providers/velodrome/markets.js +69 -0
  229. package/dist/swap/providers/velodrome/markets.js.map +1 -0
  230. package/dist/swap/providers/velodrome/types.d.ts +31 -0
  231. package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
  232. package/dist/swap/providers/velodrome/types.js +2 -0
  233. package/dist/swap/providers/velodrome/types.js.map +1 -0
  234. package/dist/types/actions.d.ts +44 -9
  235. package/dist/types/actions.d.ts.map +1 -1
  236. package/dist/types/asset.d.ts +7 -9
  237. package/dist/types/asset.d.ts.map +1 -1
  238. package/dist/types/chain.d.ts +2 -2
  239. package/dist/types/chain.d.ts.map +1 -1
  240. package/dist/types/lend/base.d.ts +6 -6
  241. package/dist/types/lend/base.d.ts.map +1 -1
  242. package/dist/types/lend/base.js.map +1 -1
  243. package/dist/types/lend/contracts.d.ts +2 -1
  244. package/dist/types/lend/contracts.d.ts.map +1 -1
  245. package/dist/types/providers.d.ts +21 -0
  246. package/dist/types/providers.d.ts.map +1 -0
  247. package/dist/types/providers.js +2 -0
  248. package/dist/types/providers.js.map +1 -0
  249. package/dist/types/swap/base.d.ts +136 -35
  250. package/dist/types/swap/base.d.ts.map +1 -1
  251. package/dist/types/swap/base.js.map +1 -1
  252. package/dist/utils/approve.d.ts +82 -0
  253. package/dist/utils/approve.d.ts.map +1 -0
  254. package/dist/utils/{permit2.js → approve.js} +48 -14
  255. package/dist/utils/approve.js.map +1 -0
  256. package/dist/utils/approve.test.d.ts +2 -0
  257. package/dist/utils/approve.test.d.ts.map +1 -0
  258. package/dist/utils/{permit2.test.js → approve.test.js} +95 -2
  259. package/dist/utils/approve.test.js.map +1 -0
  260. package/dist/utils/assets.d.ts +6 -0
  261. package/dist/utils/assets.d.ts.map +1 -1
  262. package/dist/utils/assets.js +10 -0
  263. package/dist/utils/assets.js.map +1 -1
  264. package/dist/utils/ens.d.ts +25 -0
  265. package/dist/utils/ens.d.ts.map +1 -0
  266. package/dist/utils/ens.js +53 -0
  267. package/dist/utils/ens.js.map +1 -0
  268. package/dist/utils/ens.test.d.ts +2 -0
  269. package/dist/utils/ens.test.d.ts.map +1 -0
  270. package/dist/utils/ens.test.js +75 -0
  271. package/dist/utils/ens.test.js.map +1 -0
  272. package/dist/utils/validateAddresses.d.ts +32 -0
  273. package/dist/utils/validateAddresses.d.ts.map +1 -0
  274. package/dist/utils/validateAddresses.js +103 -0
  275. package/dist/utils/validateAddresses.js.map +1 -0
  276. package/dist/utils/validateAddresses.test.d.ts +2 -0
  277. package/dist/utils/validateAddresses.test.d.ts.map +1 -0
  278. package/dist/utils/validateAddresses.test.js +314 -0
  279. package/dist/utils/validateAddresses.test.js.map +1 -0
  280. package/dist/utils/validation.d.ts +5 -0
  281. package/dist/utils/validation.d.ts.map +1 -1
  282. package/dist/utils/validation.js +10 -0
  283. package/dist/utils/validation.js.map +1 -1
  284. package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
  285. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  286. package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
  287. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  288. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  289. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  290. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -16
  291. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  292. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  293. package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -11
  294. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  295. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +2 -9
  296. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  297. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  298. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +6 -17
  299. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  300. package/dist/wallet/core/wallets/abstract/Wallet.js +7 -6
  301. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  302. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
  303. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
  304. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
  305. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
  306. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
  307. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  308. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +3 -10
  309. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  310. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  311. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  312. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -10
  313. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  314. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  315. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
  316. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  317. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +6 -8
  318. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  319. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
  320. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  321. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +2 -9
  322. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  323. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  324. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +3 -10
  325. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  326. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  327. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -10
  328. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  329. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  330. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +3 -9
  331. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  332. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -2
  333. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  334. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -9
  335. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  336. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -2
  337. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  338. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -9
  339. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  340. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -2
  341. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  342. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
  343. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  344. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
  345. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  346. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
  347. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  348. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +5 -10
  349. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  350. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  351. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  352. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
  353. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  354. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  355. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -10
  356. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  357. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  358. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  359. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -10
  360. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  361. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  362. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  363. package/package.json +3 -2
  364. package/src/__mocks__/MockAssets.ts +54 -6
  365. package/src/__tests__/actions.test.ts +1 -1
  366. package/src/actions.ts +73 -61
  367. package/src/constants/assets.ts +781 -10
  368. package/src/constants/providers.ts +5 -0
  369. package/src/constants/supportedChains.ts +22 -2
  370. package/src/ens/EnsNamespace.spec.ts +171 -0
  371. package/src/ens/EnsNamespace.ts +210 -0
  372. package/src/ens/errors.ts +45 -0
  373. package/src/ens/index.ts +12 -0
  374. package/src/ens/types.ts +76 -0
  375. package/src/index.ts +59 -8
  376. package/src/lend/__mocks__/MockLendProvider.ts +8 -3
  377. package/src/lend/core/LendProvider.ts +27 -28
  378. package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
  379. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
  380. package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
  381. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
  382. package/src/lend/providers/aave/addresses.ts +82 -64
  383. package/src/lend/providers/aave/sdk.ts +11 -36
  384. package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
  385. package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
  386. package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -43
  387. package/src/lend/providers/morpho/api.ts +7 -8
  388. package/src/lend/providers/morpho/contracts.ts +62 -13
  389. package/src/lend/providers/morpho/sdk.ts +85 -63
  390. package/src/services/ChainManager.ts +22 -21
  391. package/src/services/__mocks__/MockChainManager.ts +12 -7
  392. package/src/services/tokenBalance.spec.ts +20 -24
  393. package/src/services/tokenBalance.ts +39 -33
  394. package/src/swap/__mocks__/MockSwapProvider.ts +77 -42
  395. package/src/swap/core/SwapProvider.ts +309 -50
  396. package/src/swap/core/__tests__/SwapProvider.test.ts +151 -9
  397. package/src/swap/core/markets.ts +104 -0
  398. package/src/swap/index.ts +5 -0
  399. package/src/swap/namespaces/ActionsSwapNamespace.ts +2 -2
  400. package/src/swap/namespaces/BaseSwapNamespace.ts +215 -18
  401. package/src/swap/namespaces/WalletSwapNamespace.ts +61 -14
  402. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +245 -14
  403. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +103 -8
  404. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +110 -195
  405. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +12 -12
  406. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +19 -20
  407. package/src/swap/providers/uniswap/addresses.ts +3 -1
  408. package/src/swap/providers/uniswap/encoding.ts +22 -22
  409. package/src/swap/providers/uniswap/markets.ts +84 -0
  410. package/src/swap/providers/uniswap/types.ts +4 -3
  411. package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +226 -0
  412. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
  413. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
  414. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +507 -0
  415. package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
  416. package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
  417. package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
  418. package/src/swap/providers/velodrome/abis.ts +264 -0
  419. package/src/swap/providers/velodrome/addresses.ts +107 -0
  420. package/src/swap/providers/velodrome/config.ts +46 -0
  421. package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
  422. package/src/swap/providers/velodrome/encoding/index.ts +7 -0
  423. package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
  424. package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
  425. package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
  426. package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
  427. package/src/swap/providers/velodrome/markets.ts +100 -0
  428. package/src/swap/providers/velodrome/types.ts +30 -0
  429. package/src/types/actions.ts +49 -9
  430. package/src/types/asset.ts +12 -9
  431. package/src/types/chain.ts +2 -2
  432. package/src/types/lend/base.ts +6 -6
  433. package/src/types/lend/contracts.ts +5 -1
  434. package/src/types/providers.ts +22 -0
  435. package/src/types/swap/base.ts +150 -36
  436. package/src/utils/{permit2.test.ts → approve.test.ts} +117 -1
  437. package/src/utils/{permit2.ts → approve.ts} +67 -14
  438. package/src/utils/assets.ts +14 -0
  439. package/src/utils/ens.test.ts +104 -0
  440. package/src/utils/ens.ts +85 -0
  441. package/src/utils/validateAddresses.test.ts +439 -0
  442. package/src/utils/validateAddresses.ts +153 -0
  443. package/src/utils/validation.ts +11 -0
  444. package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
  445. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
  446. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +5 -17
  447. package/src/wallet/core/providers/hosted/types/index.ts +9 -11
  448. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +5 -17
  449. package/src/wallet/core/wallets/abstract/Wallet.ts +18 -22
  450. package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
  451. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
  452. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +5 -17
  453. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
  454. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +3 -10
  455. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +8 -8
  456. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
  457. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +3 -10
  458. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +5 -17
  459. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +5 -17
  460. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +7 -11
  461. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +7 -11
  462. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +7 -11
  463. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +23 -10
  464. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
  465. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +10 -18
  466. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
  467. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -18
  468. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -18
  469. package/dist/supported/tokens.d.ts +0 -25
  470. package/dist/supported/tokens.d.ts.map +0 -1
  471. package/dist/supported/tokens.js +0 -44
  472. package/dist/supported/tokens.js.map +0 -1
  473. package/dist/utils/permit2.d.ts +0 -46
  474. package/dist/utils/permit2.d.ts.map +0 -1
  475. package/dist/utils/permit2.js.map +0 -1
  476. package/dist/utils/permit2.test.d.ts +0 -2
  477. package/dist/utils/permit2.test.d.ts.map +0 -1
  478. package/dist/utils/permit2.test.js.map +0 -1
  479. package/src/supported/tokens.ts +0 -66
@@ -0,0 +1,82 @@
1
+ import type { Address, PublicClient } from 'viem';
2
+ import type { TransactionData } from '../types/transaction.js';
3
+ /** Default Permit2 approval expiry: 30 days in seconds */
4
+ export declare const DEFAULT_PERMIT2_EXPIRY_SECONDS: number;
5
+ /**
6
+ * Permit2 allowance info
7
+ */
8
+ export interface Permit2Allowance {
9
+ amount: bigint;
10
+ expiration: number;
11
+ nonce: number;
12
+ }
13
+ /**
14
+ * Check Permit2 allowance for a token/spender pair
15
+ */
16
+ export declare function checkPermit2Allowance(params: {
17
+ publicClient: PublicClient;
18
+ permit2Address: Address;
19
+ owner: Address;
20
+ token: Address;
21
+ spender: Address;
22
+ }): Promise<Permit2Allowance>;
23
+ /**
24
+ * Build ERC20 token approval transaction to Permit2.
25
+ * Uses maxUint256 — the Uniswap-canonical pattern.
26
+ * Permit2 is immutable with no owner; spending is scoped by its own allowance system.
27
+ */
28
+ export declare function buildTokenApprovalTx(token: Address, permit2Address: Address): TransactionData;
29
+ /**
30
+ * Build Permit2 approval transaction for a spender
31
+ */
32
+ export declare function buildPermit2ApprovalTx(params: {
33
+ permit2Address: Address;
34
+ token: Address;
35
+ spender: Address;
36
+ amount: bigint;
37
+ expirySeconds?: number;
38
+ }): TransactionData;
39
+ /**
40
+ * Check ERC20 token allowance
41
+ */
42
+ export declare function checkTokenAllowance(params: {
43
+ publicClient: PublicClient;
44
+ token: Address;
45
+ owner: Address;
46
+ spender: Address;
47
+ }): Promise<bigint>;
48
+ /**
49
+ * Build an ERC20 approve transaction.
50
+ * @param token - ERC20 token address
51
+ * @param spender - Address to approve
52
+ * @param amount - Amount to approve
53
+ * @returns Transaction data for the approval
54
+ */
55
+ export declare function buildErc20ApprovalTx(token: Address, spender: Address, amount: bigint): TransactionData;
56
+ /**
57
+ * Compute how much additional ERC20 approval is needed.
58
+ * Returns 0n if current allowance is sufficient.
59
+ * @param params - Token, owner, spender, required amount, and public client
60
+ * @returns The deficit (required - current), or 0n if already sufficient
61
+ */
62
+ export declare function getApprovalDeficit(params: {
63
+ publicClient: PublicClient;
64
+ token: Address;
65
+ owner: Address;
66
+ spender: Address;
67
+ amount: bigint;
68
+ }): Promise<bigint>;
69
+ /**
70
+ * Build an ERC20 approval transaction only if needed, approving only the deficit.
71
+ * Checks the current on-chain allowance, returns undefined if already sufficient.
72
+ * @param params - Token, owner, spender, required amount, and public client
73
+ * @returns Approval transaction for the deficit amount, or undefined if allowance is sufficient
74
+ */
75
+ export declare function buildApprovalTxIfNeeded(params: {
76
+ publicClient: PublicClient;
77
+ token: Address;
78
+ owner: Address;
79
+ spender: Address;
80
+ amount: bigint;
81
+ }): Promise<TransactionData | undefined>;
82
+ //# sourceMappingURL=approve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/utils/approve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,0DAA0D;AAC1D,eAAO,MAAM,8BAA8B,QAAoB,CAAA;AAmC/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,YAAY,EAAE,YAAY,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAe5B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,OAAO,GACtB,eAAe,CAEjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,cAAc,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GAAG,eAAe,CAiBlB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CASlB;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GACb,eAAe,CAUjB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAKvC"}
@@ -51,21 +51,12 @@ export async function checkPermit2Allowance(params) {
51
51
  };
52
52
  }
53
53
  /**
54
- * Build ERC20 token approval transaction to Permit2
54
+ * Build ERC20 token approval transaction to Permit2.
55
+ * Uses maxUint256 — the Uniswap-canonical pattern.
56
+ * Permit2 is immutable with no owner; spending is scoped by its own allowance system.
55
57
  */
56
58
  export function buildTokenApprovalTx(token, permit2Address) {
57
- const data = encodeFunctionData({
58
- abi: erc20Abi,
59
- functionName: 'approve',
60
- // ERC20 -> Permit2: maxUint256 is the Uniswap-canonical pattern.
61
- // Permit2 is immutable with no owner — spending is scoped by its own allowance system.
62
- args: [permit2Address, maxUint256],
63
- });
64
- return {
65
- to: token,
66
- data,
67
- value: 0n,
68
- };
59
+ return buildErc20ApprovalTx(token, permit2Address, maxUint256);
69
60
  }
70
61
  /**
71
62
  * Build Permit2 approval transaction for a spender
@@ -97,4 +88,47 @@ export async function checkTokenAllowance(params) {
97
88
  args: [owner, spender],
98
89
  });
99
90
  }
100
- //# sourceMappingURL=permit2.js.map
91
+ // ─────────────────────────────────────────────────────────────────────────────
92
+ // Generic ERC20 approval utilities
93
+ // ─────────────────────────────────────────────────────────────────────────────
94
+ /**
95
+ * Build an ERC20 approve transaction.
96
+ * @param token - ERC20 token address
97
+ * @param spender - Address to approve
98
+ * @param amount - Amount to approve
99
+ * @returns Transaction data for the approval
100
+ */
101
+ export function buildErc20ApprovalTx(token, spender, amount) {
102
+ return {
103
+ to: token,
104
+ data: encodeFunctionData({
105
+ abi: erc20Abi,
106
+ functionName: 'approve',
107
+ args: [spender, amount],
108
+ }),
109
+ value: 0n,
110
+ };
111
+ }
112
+ /**
113
+ * Compute how much additional ERC20 approval is needed.
114
+ * Returns 0n if current allowance is sufficient.
115
+ * @param params - Token, owner, spender, required amount, and public client
116
+ * @returns The deficit (required - current), or 0n if already sufficient
117
+ */
118
+ export async function getApprovalDeficit(params) {
119
+ const current = await checkTokenAllowance(params);
120
+ return current >= params.amount ? 0n : params.amount - current;
121
+ }
122
+ /**
123
+ * Build an ERC20 approval transaction only if needed, approving only the deficit.
124
+ * Checks the current on-chain allowance, returns undefined if already sufficient.
125
+ * @param params - Token, owner, spender, required amount, and public client
126
+ * @returns Approval transaction for the deficit amount, or undefined if allowance is sufficient
127
+ */
128
+ export async function buildApprovalTxIfNeeded(params) {
129
+ const deficit = await getApprovalDeficit(params);
130
+ return deficit > 0n
131
+ ? buildErc20ApprovalTx(params.token, params.spender, deficit)
132
+ : undefined;
133
+ }
134
+ //# sourceMappingURL=approve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/utils/approve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=approve.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve.test.d.ts","sourceRoot":"","sources":["../../src/utils/approve.test.ts"],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import { decodeFunctionData } from 'viem';
2
2
  import { describe, expect, it, vi } from 'vitest';
3
- import { buildPermit2ApprovalTx, buildTokenApprovalTx, checkPermit2Allowance, checkTokenAllowance, DEFAULT_PERMIT2_EXPIRY_SECONDS, } from './permit2.js';
3
+ import { buildApprovalTxIfNeeded, buildErc20ApprovalTx, buildPermit2ApprovalTx, buildTokenApprovalTx, checkPermit2Allowance, checkTokenAllowance, DEFAULT_PERMIT2_EXPIRY_SECONDS, getApprovalDeficit, } from './approve.js';
4
4
  const PERMIT2_ABI = [
5
5
  {
6
6
  name: 'approve',
@@ -107,4 +107,97 @@ describe('buildPermit2ApprovalTx', () => {
107
107
  expect(Number(expiration)).toBeLessThan(before + DEFAULT_PERMIT2_EXPIRY_SECONDS);
108
108
  });
109
109
  });
110
- //# sourceMappingURL=permit2.test.js.map
110
+ describe('buildErc20ApprovalTx', () => {
111
+ it('builds approval for exact amount', () => {
112
+ const tx = buildErc20ApprovalTx(TOKEN, SPENDER, 500000n);
113
+ expect(tx.to).toBe(TOKEN);
114
+ expect(tx.value).toBe(0n);
115
+ expect(tx.data).toMatch(/^0x/);
116
+ });
117
+ });
118
+ describe('getApprovalDeficit', () => {
119
+ it('returns 0n when allowance is sufficient', async () => {
120
+ const publicClient = {
121
+ readContract: vi.fn().mockResolvedValue(1000000n),
122
+ };
123
+ const deficit = await getApprovalDeficit({
124
+ publicClient,
125
+ token: TOKEN,
126
+ owner: OWNER,
127
+ spender: SPENDER,
128
+ amount: 500000n,
129
+ });
130
+ expect(deficit).toBe(0n);
131
+ });
132
+ it('returns deficit when allowance is insufficient', async () => {
133
+ const publicClient = {
134
+ readContract: vi.fn().mockResolvedValue(300000n),
135
+ };
136
+ const deficit = await getApprovalDeficit({
137
+ publicClient,
138
+ token: TOKEN,
139
+ owner: OWNER,
140
+ spender: SPENDER,
141
+ amount: 500000n,
142
+ });
143
+ expect(deficit).toBe(200000n);
144
+ });
145
+ it('returns full amount when allowance is zero', async () => {
146
+ const publicClient = {
147
+ readContract: vi.fn().mockResolvedValue(0n),
148
+ };
149
+ const deficit = await getApprovalDeficit({
150
+ publicClient,
151
+ token: TOKEN,
152
+ owner: OWNER,
153
+ spender: SPENDER,
154
+ amount: 500000n,
155
+ });
156
+ expect(deficit).toBe(500000n);
157
+ });
158
+ });
159
+ describe('buildApprovalTxIfNeeded', () => {
160
+ it('returns undefined when allowance is sufficient', async () => {
161
+ const publicClient = {
162
+ readContract: vi.fn().mockResolvedValue(1000000n),
163
+ };
164
+ const tx = await buildApprovalTxIfNeeded({
165
+ publicClient,
166
+ token: TOKEN,
167
+ owner: OWNER,
168
+ spender: SPENDER,
169
+ amount: 500000n,
170
+ });
171
+ expect(tx).toBeUndefined();
172
+ });
173
+ it('returns approval tx for the deficit only', async () => {
174
+ const publicClient = {
175
+ readContract: vi.fn().mockResolvedValue(300000n),
176
+ };
177
+ const tx = await buildApprovalTxIfNeeded({
178
+ publicClient,
179
+ token: TOKEN,
180
+ owner: OWNER,
181
+ spender: SPENDER,
182
+ amount: 500000n,
183
+ });
184
+ expect(tx).toBeDefined();
185
+ expect(tx.to).toBe(TOKEN);
186
+ expect(tx.value).toBe(0n);
187
+ });
188
+ it('returns approval for full amount when allowance is zero', async () => {
189
+ const publicClient = {
190
+ readContract: vi.fn().mockResolvedValue(0n),
191
+ };
192
+ const tx = await buildApprovalTxIfNeeded({
193
+ publicClient,
194
+ token: TOKEN,
195
+ owner: OWNER,
196
+ spender: SPENDER,
197
+ amount: 500000n,
198
+ });
199
+ expect(tx).toBeDefined();
200
+ expect(tx.to).toBe(TOKEN);
201
+ });
202
+ });
203
+ //# sourceMappingURL=approve.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve.test.js","sourceRoot":"","sources":["../../src/utils/approve.test.ts"],"names":[],"mappings":"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"}
@@ -35,4 +35,10 @@ export declare function isAssetSupportedOnChain(asset: Asset, chainId: Supported
35
35
  * @throws Error if asset is not supported on the chain or is a native asset
36
36
  */
37
37
  export declare function getAssetAddress(asset: Asset, chainId: SupportedChainId): Address;
38
+ /**
39
+ * Get all non-native contract addresses for an asset across all chains, lowercased.
40
+ * @param asset - Asset to extract addresses from
41
+ * @returns Array of lowercased contract addresses
42
+ */
43
+ export declare function getAllAssetAddresses(asset: Asset): string[];
38
44
  //# sourceMappingURL=assets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;AACtE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,SAAS,CAAA;AASrB;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW1E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAaT"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;AACtE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,SAAS,CAAA;AASrB;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW1E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAaT;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAO3D"}
@@ -54,4 +54,14 @@ export function getAssetAddress(asset, chainId) {
54
54
  }
55
55
  return address;
56
56
  }
57
+ /**
58
+ * Get all non-native contract addresses for an asset across all chains, lowercased.
59
+ * @param asset - Asset to extract addresses from
60
+ * @returns Array of lowercased contract addresses
61
+ */
62
+ export function getAllAssetAddresses(asset) {
63
+ return Object.values(asset.address)
64
+ .filter((addr) => addr !== undefined && addr !== 'native')
65
+ .map((addr) => addr.toLowerCase());
66
+ }
57
67
  //# sourceMappingURL=assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAcjC,MAAM,UAAU,gBAAgB,CAC9B,KAAY,EACZ,MAA0B;IAE1B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAgB;IAChE,oCAAoC;IACpC,MAAM,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;IAClC,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAA;IAEvC,+CAA+C;IAC/C,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,aAAa,EAAE,CAAA;IAE9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAY,EACZ,OAAyB;IAEzB,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAY,EACZ,OAAyB;IAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,8BAA8B,OAAO,EAAE,CACtE,CAAA;IACH,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,iDAAiD,CAChF,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAcjC,MAAM,UAAU,gBAAgB,CAC9B,KAAY,EACZ,MAA0B;IAE1B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAgB;IAChE,oCAAoC;IACpC,MAAM,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;IAClC,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAA;IAEvC,+CAA+C;IAC/C,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,aAAa,EAAE,CAAA;IAE9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAY,EACZ,OAAyB;IAEzB,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAY,EACZ,OAAyB;IAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,8BAA8B,OAAO,EAAE,CACtE,CAAA;IACH,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,iDAAiD,CAChF,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;SAChC,MAAM,CACL,CAAC,IAAI,EAAsD,EAAE,CAC3D,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,CAC1C;SACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;AACtC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { Address, PublicClient } from 'viem';
2
+ import type { EnsName } from '../ens/types.js';
3
+ export { type EnsName, isEnsName } from '../ens/types.js';
4
+ /** Resolves an ENS name or address to a checksummed hex Address, or returns undefined. */
5
+ export type RecipientResolver = (recipient: Address | EnsName | undefined) => Promise<Address | undefined>;
6
+ /** Pass-through resolver used when no ENS resolution is configured. Throws on ENS names. */
7
+ export declare const passthroughResolver: RecipientResolver;
8
+ /**
9
+ * Low-level utility to resolve an ENS name or hex address to a checksummed hex address.
10
+ * Use this when you manage your own viem PublicClient (e.g. inside providers or scripts).
11
+ *
12
+ * If you have an {@link Actions} instance, prefer `actions.ens.getAddress()` instead —
13
+ * it handles client lookup and fallback automatically from your chain configuration.
14
+ *
15
+ * Hex addresses (0x...) are returned as-is after format validation.
16
+ * ENS names require a mainnet public client for on-chain resolution.
17
+ * @param input - Hex address (0x...) or ENS name (e.g. "vitalik.eth")
18
+ * @param mainnetClient - Public client connected to Ethereum mainnet (required for ENS names)
19
+ * @returns Resolved hex address
20
+ * @throws {EnsNotConfiguredError} If mainnet client is not provided
21
+ * @throws {EnsResolutionError} If the name is invalid or cannot be resolved
22
+ * @throws {EnsRpcError} If the RPC call fails
23
+ */
24
+ export declare function resolveAddress(input: Address | EnsName, mainnetClient?: PublicClient): Promise<Address>;
25
+ //# sourceMappingURL=ens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../../src/utils/ens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AASjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAExD,0FAA0F;AAC1F,MAAM,MAAM,iBAAiB,GAAG,CAC9B,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,KACrC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAEjC,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,EAAE,iBAKjC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,OAAO,GAAG,OAAO,EACxB,aAAa,CAAC,EAAE,YAAY,GAC3B,OAAO,CAAC,OAAO,CAAC,CAuClB"}
@@ -0,0 +1,53 @@
1
+ import { isAddress, isAddressEqual, zeroAddress } from 'viem';
2
+ import { normalize } from 'viem/ens';
3
+ import { EnsNotConfiguredError, EnsResolutionError, EnsRpcError, } from '../ens/errors.js';
4
+ export { isEnsName } from '../ens/types.js';
5
+ /** Pass-through resolver used when no ENS resolution is configured. Throws on ENS names. */
6
+ export const passthroughResolver = (r) => {
7
+ if (r !== undefined && !isAddress(r, { strict: false })) {
8
+ throw new Error(`ENS resolution is not configured; received "${r}"`);
9
+ }
10
+ return Promise.resolve(r);
11
+ };
12
+ /**
13
+ * Low-level utility to resolve an ENS name or hex address to a checksummed hex address.
14
+ * Use this when you manage your own viem PublicClient (e.g. inside providers or scripts).
15
+ *
16
+ * If you have an {@link Actions} instance, prefer `actions.ens.getAddress()` instead —
17
+ * it handles client lookup and fallback automatically from your chain configuration.
18
+ *
19
+ * Hex addresses (0x...) are returned as-is after format validation.
20
+ * ENS names require a mainnet public client for on-chain resolution.
21
+ * @param input - Hex address (0x...) or ENS name (e.g. "vitalik.eth")
22
+ * @param mainnetClient - Public client connected to Ethereum mainnet (required for ENS names)
23
+ * @returns Resolved hex address
24
+ * @throws {EnsNotConfiguredError} If mainnet client is not provided
25
+ * @throws {EnsResolutionError} If the name is invalid or cannot be resolved
26
+ * @throws {EnsRpcError} If the RPC call fails
27
+ */
28
+ export async function resolveAddress(input, mainnetClient) {
29
+ if (isAddress(input, { strict: false }))
30
+ return input;
31
+ if (!mainnetClient)
32
+ throw new EnsNotConfiguredError();
33
+ const normalized = (() => {
34
+ try {
35
+ return normalize(input);
36
+ }
37
+ catch (cause) {
38
+ throw new EnsResolutionError(`Invalid address or ENS name: "${input}"`, input, { cause });
39
+ }
40
+ })();
41
+ const resolved = await mainnetClient
42
+ .getEnsAddress({ name: normalized })
43
+ .catch((cause) => {
44
+ throw new EnsRpcError(`ENS resolution failed for "${input}": RPC error`, input, { cause });
45
+ });
46
+ if (!resolved)
47
+ throw new EnsResolutionError(`ENS name "${input}" could not be resolved`, input);
48
+ if (isAddressEqual(resolved, zeroAddress)) {
49
+ throw new EnsResolutionError(`ENS name "${input}" resolved to the zero address`, input);
50
+ }
51
+ return resolved;
52
+ }
53
+ //# sourceMappingURL=ens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ens.js","sourceRoot":"","sources":["../../src/utils/ens.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAOxD,4FAA4F;AAC5F,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,CAAC,EAAE,EAAE;IAC1D,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,GAAG,CAAC,CAAA;IACtE,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAwB,CAAC,CAAA;AAClD,CAAC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAwB,EACxB,aAA4B;IAE5B,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAE,OAAO,KAAK,CAAA;IAErD,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,qBAAqB,EAAE,CAAA;IAErD,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,SAAS,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAC1B,iCAAiC,KAAK,GAAG,EACzC,KAAK,EACL,EAAE,KAAK,EAAE,CACV,CAAA;QACH,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,QAAQ,GAAG,MAAM,aAAa;SACjC,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SACnC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxB,MAAM,IAAI,WAAW,CACnB,8BAA8B,KAAK,cAAc,EACjD,KAAK,EACL,EAAE,KAAK,EAAE,CACV,CAAA;IACH,CAAC,CAAC,CAAA;IAEJ,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,kBAAkB,CAC1B,aAAa,KAAK,yBAAyB,EAC3C,KAAK,CACN,CAAA;IACH,IAAI,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,kBAAkB,CAC1B,aAAa,KAAK,gCAAgC,EAClD,KAAK,CACN,CAAA;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ens.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ens.test.d.ts","sourceRoot":"","sources":["../../src/utils/ens.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { zeroAddress } from 'viem';
2
+ import { describe, expect, it, vi } from 'vitest';
3
+ import { resolveAddress } from './ens.js';
4
+ const REAL_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
5
+ const ZERO_ADDRESS = zeroAddress;
6
+ function mockClient(returnValue, rejects = false) {
7
+ const getEnsAddress = rejects
8
+ ? vi.fn().mockRejectedValue(new Error('network error'))
9
+ : vi.fn().mockResolvedValue(returnValue);
10
+ return { getEnsAddress };
11
+ }
12
+ describe('resolveAddress', () => {
13
+ describe('hex address input', () => {
14
+ it('returns a valid hex address as-is', async () => {
15
+ expect(await resolveAddress(REAL_ADDRESS)).toBe(REAL_ADDRESS);
16
+ });
17
+ it('does not require a mainnet client for hex addresses', async () => {
18
+ await expect(resolveAddress(REAL_ADDRESS)).resolves.toBe(REAL_ADDRESS);
19
+ });
20
+ });
21
+ describe('ENS name input', () => {
22
+ it('resolves a valid ENS name', async () => {
23
+ const client = mockClient(REAL_ADDRESS);
24
+ const result = await resolveAddress('vitalik.eth', client);
25
+ expect(result).toBe(REAL_ADDRESS);
26
+ expect(client.getEnsAddress).toHaveBeenCalledWith({ name: 'vitalik.eth' });
27
+ });
28
+ it('normalises the ENS name before resolving', async () => {
29
+ const client = mockClient(REAL_ADDRESS);
30
+ await resolveAddress('Vitalik.ETH', client);
31
+ expect(client.getEnsAddress).toHaveBeenCalledWith({ name: 'vitalik.eth' });
32
+ });
33
+ it('throws EnsNotConfiguredError when no mainnet client is provided', async () => {
34
+ const { EnsNotConfiguredError } = await import('../ens/errors.js');
35
+ await expect(resolveAddress('vitalik.eth')).rejects.toThrow(EnsNotConfiguredError);
36
+ });
37
+ it('includes chain ID 1 in the error when no mainnet client provided', async () => {
38
+ await expect(resolveAddress('vitalik.eth')).rejects.toThrow('1');
39
+ });
40
+ it('throws when ENS name cannot be resolved (returns null)', async () => {
41
+ const client = mockClient(null);
42
+ await expect(resolveAddress('unresolvable.eth', client)).rejects.toThrow('"unresolvable.eth" could not be resolved');
43
+ });
44
+ it('throws when ENS name resolves to zero address', async () => {
45
+ const client = mockClient(ZERO_ADDRESS);
46
+ await expect(resolveAddress('zero.eth', client)).rejects.toThrow('zero address');
47
+ });
48
+ it('throws with RPC error label on network failure', async () => {
49
+ const client = mockClient(null, true);
50
+ await expect(resolveAddress('vitalik.eth', client)).rejects.toThrow('RPC error');
51
+ });
52
+ it('preserves the original cause on RPC failure', async () => {
53
+ const client = mockClient(null, true);
54
+ let caught;
55
+ try {
56
+ await resolveAddress('vitalik.eth', client);
57
+ }
58
+ catch (e) {
59
+ caught = e;
60
+ }
61
+ expect(caught?.cause).toBeInstanceOf(Error);
62
+ expect((caught?.cause).message).toBe('network error');
63
+ });
64
+ });
65
+ describe('invalid input', () => {
66
+ it('throws for ENS-shaped strings that fail normalisation', async () => {
67
+ // Has a dot so satisfies EnsName, but contains invalid ENS characters
68
+ await expect(resolveAddress('not!valid.eth', {})).rejects.toThrow('Invalid address or ENS name');
69
+ });
70
+ it('includes the invalid input in the error message', async () => {
71
+ await expect(resolveAddress('!!bad!!.eth', {})).rejects.toThrow('"!!bad!!.eth"');
72
+ });
73
+ });
74
+ });
75
+ //# sourceMappingURL=ens.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ens.test.js","sourceRoot":"","sources":["../../src/utils/ens.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,YAAY,GAAG,4CAAuD,CAAA;AAC5E,MAAM,YAAY,GAAG,WAAW,CAAA;AAEhC,SAAS,UAAU,CACjB,WAA2B,EAC3B,OAAO,GAAG,KAAK;IAEf,MAAM,aAAa,GAAG,OAAO;QAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACvD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAC1C,OAAO,EAAE,aAAa,EAA6B,CAAA;AACrD,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,CAAC,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;YACvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACjC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA;QAC5E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;YACvC,MAAM,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA;QAC5E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAA;YACjE,MAAM,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACzD,qBAAqB,CACtB,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACtE,0CAA0C,CAC3C,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;YACvC,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC9D,cAAc,CACf,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACrC,MAAM,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACjE,WAAW,CACZ,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACrC,IAAI,MAAyB,CAAA;YAC7B,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,GAAG,CAAU,CAAA;YACrB,CAAC;YACD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YAC3C,MAAM,CAAC,CAAC,MAAM,EAAE,KAAe,CAAA,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,sEAAsE;YACtE,MAAM,MAAM,CACV,cAAc,CAAC,eAAe,EAAE,EAAkB,CAAC,CACpD,CAAC,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,MAAM,CACV,cAAc,CAAC,aAAa,EAAE,EAAkB,CAAC,CAClD,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,32 @@
1
+ import type { Address } from 'viem';
2
+ import type { SupportedChainId } from '../constants/supportedChains.js';
3
+ import type { AssetsConfig, LendConfig, SwapConfig } from '../types/actions.js';
4
+ type NamedAddresses = Record<string, Address>;
5
+ /**
6
+ * Validates all values in an address map.
7
+ * Values may be a single Address or a record of named addresses.
8
+ * Collects all failures before throwing a single Error listing every invalid entry.
9
+ * @returns The original map reference if all addresses are valid.
10
+ * @throws Error listing all invalid addresses with their chain IDs and key names.
11
+ */
12
+ export declare function validateAddressMap<M extends Partial<Record<number, Address | NamedAddresses>>>(map: M): M;
13
+ /**
14
+ * Validates a Partial<Record<SupportedChainId, Address | 'native'>> asset address map.
15
+ * Skips entries where the value is 'native'.
16
+ * Collects all failures before throwing a single Error.
17
+ * @throws Error listing all invalid addresses with their chain IDs.
18
+ */
19
+ export declare function validateAssetAddresses(map: Partial<Record<SupportedChainId, Address | 'native'>>): void;
20
+ /**
21
+ * Validates all developer-supplied addresses in an ActionsConfig.
22
+ * Iterates all lend and swap providers generically, so new providers are covered automatically.
23
+ * Collects all failures before throwing a single Error.
24
+ * @throws Error listing all invalid addresses with their locations and chain IDs.
25
+ */
26
+ export declare function validateConfigAddresses(config: {
27
+ lend?: LendConfig;
28
+ swap?: SwapConfig;
29
+ assets?: AssetsConfig;
30
+ }): void;
31
+ export {};
32
+ //# sourceMappingURL=validateAddresses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateAddresses.d.ts","sourceRoot":"","sources":["../../src/utils/validateAddresses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAK9E,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE7C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,EAC3D,GAAG,EAAE,CAAC,GAAG,CAAC,CA4BX;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC,GACzD,IAAI,CAeN;AAyCD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB,GAAG,IAAI,CA4BP"}