@lifi/sdk 3.0.0-alpha.9 → 3.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/package.json +40 -98
  2. package/src/_cjs/config.js +90 -0
  3. package/src/_cjs/config.js.map +1 -0
  4. package/{dist/cjs → src/_cjs}/constants.js +3 -5
  5. package/src/_cjs/constants.js.map +1 -0
  6. package/src/_cjs/core/BaseStepExecutor.js +55 -0
  7. package/src/_cjs/core/BaseStepExecutor.js.map +1 -0
  8. package/src/_cjs/core/EVM/EVM.js +43 -0
  9. package/src/_cjs/core/EVM/EVM.js.map +1 -0
  10. package/src/_cjs/core/EVM/EVMStepExecutor.js +304 -0
  11. package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -0
  12. package/{dist/cjs/types → src/_cjs/core/EVM}/abi.js +1 -0
  13. package/src/_cjs/core/EVM/abi.js.map +1 -0
  14. package/{dist/cjs/execution → src/_cjs/core/EVM}/checkAllowance.js +19 -12
  15. package/src/_cjs/core/EVM/checkAllowance.js.map +1 -0
  16. package/{dist/cjs/allowance → src/_cjs/core/EVM}/getAllowance.js +13 -17
  17. package/src/_cjs/core/EVM/getAllowance.js.map +1 -0
  18. package/src/_cjs/core/EVM/getENSAddress.js +20 -0
  19. package/src/_cjs/core/EVM/getENSAddress.js.map +1 -0
  20. package/{dist/cjs/balance/getBalance.js → src/_cjs/core/EVM/getEVMBalance.js} +20 -22
  21. package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -0
  22. package/{dist/cjs/execution → src/_cjs/core/EVM}/multisig.js +7 -8
  23. package/src/_cjs/core/EVM/multisig.js.map +1 -0
  24. package/src/_cjs/core/EVM/publicClient.js +43 -0
  25. package/src/_cjs/core/EVM/publicClient.js.map +1 -0
  26. package/{dist/cjs/allowance → src/_cjs/core/EVM}/setAllowance.js +11 -12
  27. package/src/_cjs/core/EVM/setAllowance.js.map +1 -0
  28. package/src/_cjs/core/EVM/switchChain.js +38 -0
  29. package/src/_cjs/core/EVM/switchChain.js.map +1 -0
  30. package/src/_cjs/core/EVM/types.js +9 -0
  31. package/src/_cjs/core/EVM/types.js.map +1 -0
  32. package/{dist/cjs/utils/getMaxPriorityFeePerGas.js → src/_cjs/core/EVM/utils.js} +13 -3
  33. package/src/_cjs/core/EVM/utils.js.map +1 -0
  34. package/src/_cjs/core/Solana/KeypairWalletAdapter.js +88 -0
  35. package/src/_cjs/core/Solana/KeypairWalletAdapter.js.map +1 -0
  36. package/src/_cjs/core/Solana/Solana.js +38 -0
  37. package/src/_cjs/core/Solana/Solana.js.map +1 -0
  38. package/src/_cjs/core/Solana/SolanaStepExecutor.js +200 -0
  39. package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -0
  40. package/src/_cjs/core/Solana/connection.js +19 -0
  41. package/src/_cjs/core/Solana/connection.js.map +1 -0
  42. package/src/_cjs/core/Solana/getSNSAddress.js +26 -0
  43. package/src/_cjs/core/Solana/getSNSAddress.js.map +1 -0
  44. package/src/_cjs/core/Solana/getSolanaBalance.js +60 -0
  45. package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -0
  46. package/src/_cjs/core/Solana/isAddress.js +15 -0
  47. package/src/_cjs/core/Solana/isAddress.js.map +1 -0
  48. package/src/_cjs/core/Solana/types.js +10 -0
  49. package/src/_cjs/core/Solana/types.js.map +1 -0
  50. package/src/_cjs/core/StatusManager.js +168 -0
  51. package/src/_cjs/core/StatusManager.js.map +1 -0
  52. package/{dist/cjs/execution → src/_cjs/core}/checkBalance.js +6 -6
  53. package/src/_cjs/core/checkBalance.js.map +1 -0
  54. package/src/_cjs/core/execution.js +138 -0
  55. package/src/_cjs/core/execution.js.map +1 -0
  56. package/src/_cjs/core/executionState.js +29 -0
  57. package/src/_cjs/core/executionState.js.map +1 -0
  58. package/src/_cjs/core/index.js +7 -0
  59. package/src/_cjs/core/index.js.map +1 -0
  60. package/src/_cjs/core/prepareRestart.js +23 -0
  61. package/src/_cjs/core/prepareRestart.js.map +1 -0
  62. package/src/_cjs/core/provider.js +15 -0
  63. package/src/_cjs/core/provider.js.map +1 -0
  64. package/src/_cjs/core/rpc.js +18 -0
  65. package/src/_cjs/core/rpc.js.map +1 -0
  66. package/src/_cjs/core/stepComparison.js +25 -0
  67. package/src/_cjs/core/stepComparison.js.map +1 -0
  68. package/{dist/cjs/allowance → src/_cjs/core}/types.js +1 -0
  69. package/src/_cjs/core/types.js.map +1 -0
  70. package/{dist/cjs/execution → src/_cjs/core}/utils.js +2 -11
  71. package/src/_cjs/core/utils.js.map +1 -0
  72. package/{dist/cjs/execution → src/_cjs/core}/waitForReceivingTransaction.js +13 -14
  73. package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -0
  74. package/src/_cjs/createConfig.js +34 -0
  75. package/src/_cjs/createConfig.js.map +1 -0
  76. package/src/_cjs/helpers.js +50 -0
  77. package/src/_cjs/helpers.js.map +1 -0
  78. package/src/_cjs/index.js +30 -0
  79. package/src/_cjs/index.js.map +1 -0
  80. package/src/_cjs/package.json +1 -0
  81. package/{dist/cjs → src/_cjs}/request.js +18 -15
  82. package/src/_cjs/request.js.map +1 -0
  83. package/src/_cjs/services/api.js +309 -0
  84. package/src/_cjs/services/api.js.map +1 -0
  85. package/src/_cjs/services/balance.js +49 -0
  86. package/src/_cjs/services/balance.js.map +1 -0
  87. package/src/_cjs/services/getNameServiceAddress.js +29 -0
  88. package/src/_cjs/services/getNameServiceAddress.js.map +1 -0
  89. package/{dist/cjs → src/_cjs}/typeguards.js +1 -0
  90. package/src/_cjs/typeguards.js.map +1 -0
  91. package/src/_cjs/types/index.js +5 -0
  92. package/src/_cjs/types/index.js.map +1 -0
  93. package/{dist/cjs → src/_cjs}/types/internal.js +1 -0
  94. package/src/_cjs/types/internal.js.map +1 -0
  95. package/src/_cjs/utils/base64ToUint8Array.js +14 -0
  96. package/src/_cjs/utils/base64ToUint8Array.js.map +1 -0
  97. package/{dist/cjs → src/_cjs}/utils/errors.js +26 -3
  98. package/src/_cjs/utils/errors.js.map +1 -0
  99. package/src/_cjs/utils/getTransactionMessage.js +31 -0
  100. package/src/_cjs/utils/getTransactionMessage.js.map +1 -0
  101. package/src/_cjs/utils/index.js +9 -0
  102. package/src/_cjs/utils/index.js.map +1 -0
  103. package/{dist/cjs → src/_cjs}/utils/median.js +1 -0
  104. package/src/_cjs/utils/median.js.map +1 -0
  105. package/src/_cjs/utils/parseBackendError.js +27 -0
  106. package/src/_cjs/utils/parseBackendError.js.map +1 -0
  107. package/src/_cjs/utils/parseError.js +69 -0
  108. package/src/_cjs/utils/parseError.js.map +1 -0
  109. package/{dist/cjs → src/_cjs}/utils/utils.js +5 -11
  110. package/src/_cjs/utils/utils.js.map +1 -0
  111. package/{dist/cjs → src/_cjs}/version.js +2 -1
  112. package/src/_cjs/version.js.map +1 -0
  113. package/src/_esm/config.js +87 -0
  114. package/src/_esm/config.js.map +1 -0
  115. package/{dist → src/_esm}/constants.js +2 -4
  116. package/src/_esm/constants.js.map +1 -0
  117. package/src/_esm/core/BaseStepExecutor.js +52 -0
  118. package/src/_esm/core/BaseStepExecutor.js.map +1 -0
  119. package/src/_esm/core/EVM/EVM.js +39 -0
  120. package/src/_esm/core/EVM/EVM.js.map +1 -0
  121. package/src/_esm/core/EVM/EVMStepExecutor.js +329 -0
  122. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -0
  123. package/{dist/types → src/_esm/core/EVM}/abi.js +1 -0
  124. package/src/_esm/core/EVM/abi.js.map +1 -0
  125. package/{dist/execution → src/_esm/core/EVM}/checkAllowance.js +14 -5
  126. package/src/_esm/core/EVM/checkAllowance.js.map +1 -0
  127. package/{dist/allowance → src/_esm/core/EVM}/getAllowance.js +19 -6
  128. package/src/_esm/core/EVM/getAllowance.js.map +1 -0
  129. package/src/_esm/core/EVM/getENSAddress.js +17 -0
  130. package/src/_esm/core/EVM/getENSAddress.js.map +1 -0
  131. package/{dist/balance/getBalance.js → src/_esm/core/EVM/getEVMBalance.js} +10 -12
  132. package/src/_esm/core/EVM/getEVMBalance.js.map +1 -0
  133. package/{dist/execution → src/_esm/core/EVM}/multisig.js +5 -6
  134. package/src/_esm/core/EVM/multisig.js.map +1 -0
  135. package/src/_esm/core/EVM/publicClient.js +46 -0
  136. package/src/_esm/core/EVM/publicClient.js.map +1 -0
  137. package/{dist/allowance → src/_esm/core/EVM}/setAllowance.js +23 -4
  138. package/src/_esm/core/EVM/setAllowance.js.map +1 -0
  139. package/{dist/execution → src/_esm/core/EVM}/switchChain.js +6 -4
  140. package/src/_esm/core/EVM/switchChain.js.map +1 -0
  141. package/src/_esm/core/EVM/types.js +6 -0
  142. package/src/_esm/core/EVM/types.js.map +1 -0
  143. package/{dist/utils/getMaxPriorityFeePerGas.js → src/_esm/core/EVM/utils.js} +12 -1
  144. package/src/_esm/core/EVM/utils.js.map +1 -0
  145. package/src/_esm/core/Solana/KeypairWalletAdapter.js +92 -0
  146. package/src/_esm/core/Solana/KeypairWalletAdapter.js.map +1 -0
  147. package/src/_esm/core/Solana/Solana.js +34 -0
  148. package/src/_esm/core/Solana/Solana.js.map +1 -0
  149. package/src/_esm/core/Solana/SolanaStepExecutor.js +214 -0
  150. package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -0
  151. package/src/_esm/core/Solana/connection.js +20 -0
  152. package/src/_esm/core/Solana/connection.js.map +1 -0
  153. package/src/_esm/core/Solana/getSNSAddress.js +26 -0
  154. package/src/_esm/core/Solana/getSNSAddress.js.map +1 -0
  155. package/src/_esm/core/Solana/getSolanaBalance.js +56 -0
  156. package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -0
  157. package/src/_esm/core/Solana/isAddress.js +11 -0
  158. package/src/_esm/core/Solana/isAddress.js.map +1 -0
  159. package/src/_esm/core/Solana/types.js +7 -0
  160. package/src/_esm/core/Solana/types.js.map +1 -0
  161. package/src/_esm/core/StatusManager.js +204 -0
  162. package/src/_esm/core/StatusManager.js.map +1 -0
  163. package/{dist/execution → src/_esm/core}/checkBalance.js +4 -3
  164. package/src/_esm/core/checkBalance.js.map +1 -0
  165. package/src/_esm/core/execution.js +176 -0
  166. package/src/_esm/core/execution.js.map +1 -0
  167. package/src/_esm/core/executionState.js +26 -0
  168. package/src/_esm/core/executionState.js.map +1 -0
  169. package/src/_esm/core/index.js +4 -0
  170. package/src/_esm/core/index.js.map +1 -0
  171. package/src/_esm/core/prepareRestart.js +19 -0
  172. package/src/_esm/core/prepareRestart.js.map +1 -0
  173. package/src/_esm/core/provider.js +11 -0
  174. package/src/_esm/core/provider.js.map +1 -0
  175. package/src/_esm/core/rpc.js +14 -0
  176. package/src/_esm/core/rpc.js.map +1 -0
  177. package/{dist/execution → src/_esm/core}/stepComparison.js +6 -4
  178. package/src/_esm/core/stepComparison.js.map +1 -0
  179. package/src/_esm/core/types.js +2 -0
  180. package/src/_esm/core/types.js.map +1 -0
  181. package/{dist/execution → src/_esm/core}/utils.js +4 -3
  182. package/src/_esm/core/utils.js.map +1 -0
  183. package/{dist/execution → src/_esm/core}/waitForReceivingTransaction.js +11 -9
  184. package/src/_esm/core/waitForReceivingTransaction.js.map +1 -0
  185. package/src/_esm/createConfig.js +30 -0
  186. package/src/_esm/createConfig.js.map +1 -0
  187. package/{dist → src/_esm}/helpers.js +6 -30
  188. package/src/_esm/helpers.js.map +1 -0
  189. package/src/_esm/index.js +17 -0
  190. package/src/_esm/index.js.map +1 -0
  191. package/src/_esm/package.json +1 -0
  192. package/{dist → src/_esm}/request.js +14 -10
  193. package/src/_esm/request.js.map +1 -0
  194. package/src/_esm/services/api.js +378 -0
  195. package/src/_esm/services/api.js.map +1 -0
  196. package/src/_esm/services/balance.js +65 -0
  197. package/src/_esm/services/balance.js.map +1 -0
  198. package/src/_esm/services/getNameServiceAddress.js +25 -0
  199. package/src/_esm/services/getNameServiceAddress.js.map +1 -0
  200. package/{dist → src/_esm}/typeguards.js +1 -0
  201. package/src/_esm/typeguards.js.map +1 -0
  202. package/src/_esm/types/index.js +2 -0
  203. package/src/_esm/types/index.js.map +1 -0
  204. package/src/_esm/types/internal.js +2 -0
  205. package/src/_esm/types/internal.js.map +1 -0
  206. package/src/_esm/utils/base64ToUint8Array.js +10 -0
  207. package/src/_esm/utils/base64ToUint8Array.js.map +1 -0
  208. package/{dist → src/_esm}/utils/errors.js +26 -0
  209. package/src/_esm/utils/errors.js.map +1 -0
  210. package/src/_esm/utils/getTransactionMessage.js +28 -0
  211. package/src/_esm/utils/getTransactionMessage.js.map +1 -0
  212. package/src/_esm/utils/index.js +6 -0
  213. package/src/_esm/utils/index.js.map +1 -0
  214. package/{dist → src/_esm}/utils/median.js +1 -0
  215. package/src/_esm/utils/median.js.map +1 -0
  216. package/src/_esm/utils/parseBackendError.js +24 -0
  217. package/src/_esm/utils/parseBackendError.js.map +1 -0
  218. package/{dist → src/_esm}/utils/parseError.js +6 -53
  219. package/src/_esm/utils/parseError.js.map +1 -0
  220. package/{dist → src/_esm}/utils/utils.js +2 -1
  221. package/src/_esm/utils/utils.js.map +1 -0
  222. package/src/_esm/version.js +3 -0
  223. package/src/_esm/version.js.map +1 -0
  224. package/src/_types/config.d.ts +15 -0
  225. package/src/_types/config.d.ts.map +1 -0
  226. package/{dist/cjs → src/_types}/constants.d.ts +2 -4
  227. package/src/_types/constants.d.ts.map +1 -0
  228. package/src/_types/core/BaseStepExecutor.d.ts +13 -0
  229. package/src/_types/core/BaseStepExecutor.d.ts.map +1 -0
  230. package/src/_types/core/EVM/EVM.d.ts +3 -0
  231. package/src/_types/core/EVM/EVM.d.ts.map +1 -0
  232. package/src/_types/core/EVM/EVMStepExecutor.d.ts +17 -0
  233. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -0
  234. package/{dist/cjs/types → src/_types/core/EVM}/abi.d.ts +1 -0
  235. package/src/_types/core/EVM/abi.d.ts.map +1 -0
  236. package/src/_types/core/EVM/checkAllowance.d.ts +6 -0
  237. package/src/_types/core/EVM/checkAllowance.d.ts.map +1 -0
  238. package/{dist/cjs/allowance → src/_types/core/EVM}/getAllowance.d.ts +15 -1
  239. package/src/_types/core/EVM/getAllowance.d.ts.map +1 -0
  240. package/src/_types/core/EVM/getENSAddress.d.ts +2 -0
  241. package/src/_types/core/EVM/getENSAddress.d.ts.map +1 -0
  242. package/src/_types/core/EVM/getEVMBalance.d.ts +3 -0
  243. package/src/_types/core/EVM/getEVMBalance.d.ts.map +1 -0
  244. package/src/_types/core/EVM/multisig.d.ts +6 -0
  245. package/src/_types/core/EVM/multisig.d.ts.map +1 -0
  246. package/src/_types/core/EVM/publicClient.d.ts +8 -0
  247. package/src/_types/core/EVM/publicClient.d.ts.map +1 -0
  248. package/src/_types/core/EVM/setAllowance.d.ts +25 -0
  249. package/src/_types/core/EVM/setAllowance.d.ts.map +1 -0
  250. package/{dist/execution → src/_types/core/EVM}/switchChain.d.ts +4 -4
  251. package/src/_types/core/EVM/switchChain.d.ts.map +1 -0
  252. package/src/_types/core/EVM/types.d.ts +55 -0
  253. package/src/_types/core/EVM/types.d.ts.map +1 -0
  254. package/src/_types/core/EVM/utils.d.ts +10 -0
  255. package/src/_types/core/EVM/utils.d.ts.map +1 -0
  256. package/src/_types/core/Solana/KeypairWalletAdapter.d.ts +28 -0
  257. package/src/_types/core/Solana/KeypairWalletAdapter.d.ts.map +1 -0
  258. package/src/_types/core/Solana/Solana.d.ts +3 -0
  259. package/src/_types/core/Solana/Solana.d.ts.map +1 -0
  260. package/src/_types/core/Solana/SolanaStepExecutor.d.ts +13 -0
  261. package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -0
  262. package/src/_types/core/Solana/connection.d.ts +8 -0
  263. package/src/_types/core/Solana/connection.d.ts.map +1 -0
  264. package/src/_types/core/Solana/getSNSAddress.d.ts +2 -0
  265. package/src/_types/core/Solana/getSNSAddress.d.ts.map +1 -0
  266. package/src/_types/core/Solana/getSolanaBalance.d.ts +3 -0
  267. package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -0
  268. package/src/_types/core/Solana/isAddress.d.ts +2 -0
  269. package/src/_types/core/Solana/isAddress.d.ts.map +1 -0
  270. package/src/_types/core/Solana/types.d.ts +11 -0
  271. package/src/_types/core/Solana/types.d.ts.map +1 -0
  272. package/{dist/cjs/execution → src/_types/core}/StatusManager.d.ts +14 -28
  273. package/src/_types/core/StatusManager.d.ts.map +1 -0
  274. package/{dist/cjs/execution → src/_types/core}/checkBalance.d.ts +1 -0
  275. package/src/_types/core/checkBalance.d.ts.map +1 -0
  276. package/src/_types/core/execution.d.ts +42 -0
  277. package/src/_types/core/execution.d.ts.map +1 -0
  278. package/src/_types/core/executionState.d.ts +17 -0
  279. package/src/_types/core/executionState.d.ts.map +1 -0
  280. package/src/_types/core/index.d.ts +4 -0
  281. package/src/_types/core/index.d.ts.map +1 -0
  282. package/src/_types/core/prepareRestart.d.ts +3 -0
  283. package/src/_types/core/prepareRestart.d.ts.map +1 -0
  284. package/src/_types/core/provider.d.ts +3 -0
  285. package/src/_types/core/provider.d.ts.map +1 -0
  286. package/src/_types/core/rpc.d.ts +4 -0
  287. package/src/_types/core/rpc.d.ts.map +1 -0
  288. package/{dist/execution → src/_types/core}/stepComparison.d.ts +5 -3
  289. package/src/_types/core/stepComparison.d.ts.map +1 -0
  290. package/src/_types/core/types.d.ts +81 -0
  291. package/src/_types/core/types.d.ts.map +1 -0
  292. package/{dist/execution → src/_types/core}/utils.d.ts +3 -2
  293. package/src/_types/core/utils.d.ts.map +1 -0
  294. package/{dist/cjs/execution → src/_types/core}/waitForReceivingTransaction.d.ts +2 -1
  295. package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -0
  296. package/src/_types/createConfig.d.ts +4 -0
  297. package/src/_types/createConfig.d.ts.map +1 -0
  298. package/{dist/cjs → src/_types}/helpers.d.ts +3 -9
  299. package/src/_types/helpers.d.ts.map +1 -0
  300. package/src/_types/index.d.ts +18 -0
  301. package/src/_types/index.d.ts.map +1 -0
  302. package/{dist → src/_types}/request.d.ts +1 -0
  303. package/src/_types/request.d.ts.map +1 -0
  304. package/src/_types/services/api.d.ts +89 -0
  305. package/src/_types/services/api.d.ts.map +1 -0
  306. package/src/_types/services/balance.d.ts +30 -0
  307. package/src/_types/services/balance.d.ts.map +1 -0
  308. package/src/_types/services/getNameServiceAddress.d.ts +3 -0
  309. package/src/_types/services/getNameServiceAddress.d.ts.map +1 -0
  310. package/{dist/cjs → src/_types}/typeguards.d.ts +1 -0
  311. package/src/_types/typeguards.d.ts.map +1 -0
  312. package/src/_types/types/index.d.ts +2 -0
  313. package/src/_types/types/index.d.ts.map +1 -0
  314. package/{dist → src/_types}/types/internal.d.ts +14 -15
  315. package/src/_types/types/internal.d.ts.map +1 -0
  316. package/src/_types/utils/base64ToUint8Array.d.ts +2 -0
  317. package/src/_types/utils/base64ToUint8Array.d.ts.map +1 -0
  318. package/{dist/cjs → src/_types}/utils/errors.d.ts +3 -1
  319. package/src/_types/utils/errors.d.ts.map +1 -0
  320. package/src/_types/utils/getTransactionMessage.d.ts +4 -0
  321. package/src/_types/utils/getTransactionMessage.d.ts.map +1 -0
  322. package/src/_types/utils/index.d.ts +6 -0
  323. package/src/_types/utils/index.d.ts.map +1 -0
  324. package/{dist/cjs → src/_types}/utils/median.d.ts +1 -0
  325. package/src/_types/utils/median.d.ts.map +1 -0
  326. package/src/_types/utils/parseBackendError.d.ts +3 -0
  327. package/src/_types/utils/parseBackendError.d.ts.map +1 -0
  328. package/{dist → src/_types}/utils/parseError.d.ts +2 -4
  329. package/src/_types/utils/parseError.d.ts.map +1 -0
  330. package/{dist → src/_types}/utils/utils.d.ts +1 -0
  331. package/src/_types/utils/utils.d.ts.map +1 -0
  332. package/src/_types/version.d.ts +3 -0
  333. package/src/_types/version.d.ts.map +1 -0
  334. package/src/config.ts +91 -0
  335. package/src/constants.ts +4 -0
  336. package/src/core/BaseStepExecutor.ts +40 -0
  337. package/src/core/EVM/EVM.ts +47 -0
  338. package/src/core/EVM/EVMStepExecutor.ts +500 -0
  339. package/src/core/EVM/abi.ts +47 -0
  340. package/src/core/EVM/checkAllowance.ts +168 -0
  341. package/src/core/EVM/getAllowance.ts +144 -0
  342. package/src/core/EVM/getENSAddress.ts +18 -0
  343. package/src/core/EVM/getEVMBalance.ts +118 -0
  344. package/src/core/EVM/multisig.ts +53 -0
  345. package/src/core/EVM/publicClient.ts +54 -0
  346. package/src/core/EVM/setAllowance.ts +143 -0
  347. package/src/core/EVM/switchChain.ts +77 -0
  348. package/src/core/EVM/types.ts +73 -0
  349. package/src/core/EVM/utils.ts +48 -0
  350. package/src/core/Solana/KeypairWalletAdapter.ts +100 -0
  351. package/src/core/Solana/Solana.ts +41 -0
  352. package/src/core/Solana/SolanaStepExecutor.ts +331 -0
  353. package/src/core/Solana/connection.ts +20 -0
  354. package/src/core/Solana/getSNSAddress.ts +33 -0
  355. package/src/core/Solana/getSolanaBalance.ts +72 -0
  356. package/src/core/Solana/isAddress.ts +10 -0
  357. package/src/core/Solana/types.ts +17 -0
  358. package/src/core/StatusManager.ts +233 -0
  359. package/src/core/checkBalance.ts +48 -0
  360. package/src/core/execution.ts +214 -0
  361. package/src/core/executionState.ts +44 -0
  362. package/src/core/index.ts +3 -0
  363. package/src/core/prepareRestart.ts +26 -0
  364. package/src/core/provider.ts +12 -0
  365. package/src/core/rpc.ts +15 -0
  366. package/src/core/stepComparison.ts +51 -0
  367. package/src/core/types.ts +118 -0
  368. package/src/core/utils.ts +108 -0
  369. package/src/core/waitForReceivingTransaction.ts +74 -0
  370. package/src/createConfig.ts +35 -0
  371. package/src/helpers.ts +69 -0
  372. package/src/index.ts +24 -0
  373. package/src/request.ts +79 -0
  374. package/src/services/api.ts +509 -0
  375. package/src/services/balance.ts +93 -0
  376. package/src/services/getNameServiceAddress.ts +30 -0
  377. package/src/typeguards.ts +89 -0
  378. package/src/types/index.ts +1 -0
  379. package/src/types/internal.ts +62 -0
  380. package/src/utils/base64ToUint8Array.ts +9 -0
  381. package/src/utils/errors.ts +232 -0
  382. package/src/utils/getTransactionMessage.ts +46 -0
  383. package/src/utils/index.ts +5 -0
  384. package/src/utils/median.ts +11 -0
  385. package/src/utils/parseBackendError.ts +50 -0
  386. package/src/utils/parseError.ts +210 -0
  387. package/src/utils/utils.ts +48 -0
  388. package/src/version.ts +2 -0
  389. package/dist/LiFi.d.ts +0 -178
  390. package/dist/LiFi.js +0 -253
  391. package/dist/allowance/getAllowance.d.ts +0 -6
  392. package/dist/allowance/index.d.ts +0 -3
  393. package/dist/allowance/index.js +0 -3
  394. package/dist/allowance/setAllowance.d.ts +0 -6
  395. package/dist/allowance/types.d.ts +0 -27
  396. package/dist/allowance/types.js +0 -1
  397. package/dist/balance/getBalance.d.ts +0 -2
  398. package/dist/balance/getTokenBalance.d.ts +0 -8
  399. package/dist/balance/getTokenBalance.js +0 -27
  400. package/dist/balance/index.d.ts +0 -2
  401. package/dist/balance/index.js +0 -2
  402. package/dist/cjs/LiFi.d.ts +0 -178
  403. package/dist/cjs/LiFi.js +0 -283
  404. package/dist/cjs/allowance/index.d.ts +0 -3
  405. package/dist/cjs/allowance/index.js +0 -19
  406. package/dist/cjs/allowance/setAllowance.d.ts +0 -6
  407. package/dist/cjs/allowance/types.d.ts +0 -27
  408. package/dist/cjs/balance/getBalance.d.ts +0 -2
  409. package/dist/cjs/balance/getTokenBalance.d.ts +0 -8
  410. package/dist/cjs/balance/getTokenBalance.js +0 -33
  411. package/dist/cjs/balance/index.d.ts +0 -2
  412. package/dist/cjs/balance/index.js +0 -18
  413. package/dist/cjs/connectors.d.ts +0 -8
  414. package/dist/cjs/connectors.js +0 -72
  415. package/dist/cjs/execution/BaseStepExecutor.d.ts +0 -12
  416. package/dist/cjs/execution/BaseStepExecutor.js +0 -27
  417. package/dist/cjs/execution/EVMStepExecutor.d.ts +0 -13
  418. package/dist/cjs/execution/EVMStepExecutor.js +0 -292
  419. package/dist/cjs/execution/RouteExecutionManager.d.ts +0 -60
  420. package/dist/cjs/execution/RouteExecutionManager.js +0 -204
  421. package/dist/cjs/execution/StatusManager.js +0 -171
  422. package/dist/cjs/execution/StepExecutionManager.d.ts +0 -7
  423. package/dist/cjs/execution/StepExecutionManager.js +0 -272
  424. package/dist/cjs/execution/checkAllowance.d.ts +0 -5
  425. package/dist/cjs/execution/index.d.ts +0 -2
  426. package/dist/cjs/execution/index.js +0 -18
  427. package/dist/cjs/execution/multisig.d.ts +0 -4
  428. package/dist/cjs/execution/prepareRestart.d.ts +0 -2
  429. package/dist/cjs/execution/prepareRestart.js +0 -65
  430. package/dist/cjs/execution/stepComparison.d.ts +0 -15
  431. package/dist/cjs/execution/stepComparison.js +0 -37
  432. package/dist/cjs/execution/switchChain.d.ts +0 -22
  433. package/dist/cjs/execution/switchChain.js +0 -55
  434. package/dist/cjs/execution/types.d.ts +0 -82
  435. package/dist/cjs/execution/types.js +0 -2
  436. package/dist/cjs/execution/utils.d.ts +0 -12
  437. package/dist/cjs/helpers.js +0 -84
  438. package/dist/cjs/index.d.ts +0 -9
  439. package/dist/cjs/index.js +0 -30
  440. package/dist/cjs/providers/EVM.d.ts +0 -10
  441. package/dist/cjs/providers/EVM.js +0 -34
  442. package/dist/cjs/providers/Solana.d.ts +0 -9
  443. package/dist/cjs/providers/Solana.js +0 -38
  444. package/dist/cjs/providers/index.d.ts +0 -1
  445. package/dist/cjs/providers/index.js +0 -17
  446. package/dist/cjs/providers/types.d.ts +0 -12
  447. package/dist/cjs/providers/types.js +0 -8
  448. package/dist/cjs/request.d.ts +0 -9
  449. package/dist/cjs/services/ApiService.d.ts +0 -16
  450. package/dist/cjs/services/ApiService.js +0 -323
  451. package/dist/cjs/services/ChainsService.d.ts +0 -11
  452. package/dist/cjs/services/ChainsService.js +0 -40
  453. package/dist/cjs/services/ConfigService.d.ts +0 -26
  454. package/dist/cjs/services/ConfigService.js +0 -104
  455. package/dist/cjs/types/index.d.ts +0 -2
  456. package/dist/cjs/types/index.js +0 -18
  457. package/dist/cjs/types/internal.d.ts +0 -60
  458. package/dist/cjs/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  459. package/dist/cjs/utils/index.d.ts +0 -5
  460. package/dist/cjs/utils/index.js +0 -21
  461. package/dist/cjs/utils/parseError.d.ts +0 -37
  462. package/dist/cjs/utils/parseError.js +0 -154
  463. package/dist/cjs/utils/utils.d.ts +0 -10
  464. package/dist/cjs/version.d.ts +0 -2
  465. package/dist/connectors.d.ts +0 -8
  466. package/dist/connectors.js +0 -41
  467. package/dist/constants.d.ts +0 -6
  468. package/dist/execution/BaseStepExecutor.d.ts +0 -12
  469. package/dist/execution/BaseStepExecutor.js +0 -23
  470. package/dist/execution/EVMStepExecutor.d.ts +0 -13
  471. package/dist/execution/EVMStepExecutor.js +0 -285
  472. package/dist/execution/RouteExecutionManager.d.ts +0 -60
  473. package/dist/execution/RouteExecutionManager.js +0 -200
  474. package/dist/execution/StatusManager.d.ts +0 -68
  475. package/dist/execution/StatusManager.js +0 -167
  476. package/dist/execution/StepExecutionManager.d.ts +0 -7
  477. package/dist/execution/StepExecutionManager.js +0 -265
  478. package/dist/execution/checkAllowance.d.ts +0 -5
  479. package/dist/execution/checkBalance.d.ts +0 -2
  480. package/dist/execution/index.d.ts +0 -2
  481. package/dist/execution/index.js +0 -2
  482. package/dist/execution/multisig.d.ts +0 -4
  483. package/dist/execution/prepareRestart.d.ts +0 -2
  484. package/dist/execution/prepareRestart.js +0 -61
  485. package/dist/execution/types.d.ts +0 -82
  486. package/dist/execution/types.js +0 -1
  487. package/dist/execution/waitForReceivingTransaction.d.ts +0 -3
  488. package/dist/helpers.d.ts +0 -18
  489. package/dist/index.d.ts +0 -9
  490. package/dist/index.js +0 -9
  491. package/dist/providers/EVM.d.ts +0 -10
  492. package/dist/providers/EVM.js +0 -29
  493. package/dist/providers/Solana.d.ts +0 -9
  494. package/dist/providers/Solana.js +0 -33
  495. package/dist/providers/index.d.ts +0 -1
  496. package/dist/providers/index.js +0 -1
  497. package/dist/providers/types.d.ts +0 -12
  498. package/dist/providers/types.js +0 -5
  499. package/dist/services/ApiService.d.ts +0 -16
  500. package/dist/services/ApiService.js +0 -321
  501. package/dist/services/ChainsService.d.ts +0 -11
  502. package/dist/services/ChainsService.js +0 -33
  503. package/dist/services/ConfigService.d.ts +0 -26
  504. package/dist/services/ConfigService.js +0 -100
  505. package/dist/typeguards.d.ts +0 -4
  506. package/dist/types/abi.d.ts +0 -5
  507. package/dist/types/index.d.ts +0 -2
  508. package/dist/types/index.js +0 -2
  509. package/dist/types/internal.js +0 -1
  510. package/dist/utils/errors.d.ts +0 -107
  511. package/dist/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  512. package/dist/utils/index.d.ts +0 -5
  513. package/dist/utils/index.js +0 -5
  514. package/dist/utils/median.d.ts +0 -1
  515. package/dist/version.d.ts +0 -2
  516. package/dist/version.js +0 -2
@@ -0,0 +1,144 @@
1
+ import type { ChainId, Token } from '@lifi/types'
2
+ import type { Address } from 'viem'
3
+ import { getContract } from 'viem'
4
+ import { isNativeTokenAddress } from '../../utils/utils.js'
5
+ import { allowanceAbi } from './abi.js'
6
+ import { getPublicClient } from './publicClient.js'
7
+ import type {
8
+ TokenAllowance,
9
+ TokenSpender,
10
+ TokenSpenderAllowance,
11
+ } from './types.js'
12
+ import { getMulticallAddress } from './utils.js'
13
+
14
+ export const getAllowance = async (
15
+ chainId: ChainId,
16
+ tokenAddress: string,
17
+ ownerAddress: string,
18
+ spenderAddress: string
19
+ ): Promise<bigint> => {
20
+ const client = await getPublicClient(chainId)
21
+ const contract = getContract({
22
+ address: tokenAddress as Address,
23
+ abi: allowanceAbi,
24
+ client: client,
25
+ })
26
+
27
+ try {
28
+ const approved = (await contract.read.allowance([
29
+ ownerAddress,
30
+ spenderAddress,
31
+ ])) as bigint
32
+ return approved
33
+ } catch (e) {
34
+ return 0n
35
+ }
36
+ }
37
+
38
+ export const getAllowanceMulticall = async (
39
+ chainId: ChainId,
40
+ tokens: TokenSpender[],
41
+ ownerAddress: string
42
+ ): Promise<TokenSpenderAllowance[]> => {
43
+ if (!tokens.length) {
44
+ return []
45
+ }
46
+ const multicallAddress = await getMulticallAddress(chainId)
47
+ if (!multicallAddress) {
48
+ throw new Error(`No multicall address configured for chainId ${chainId}.`)
49
+ }
50
+
51
+ const client = await getPublicClient(chainId)
52
+
53
+ const contracts = tokens.map((token) => ({
54
+ address: token.token.address as Address,
55
+ abi: allowanceAbi,
56
+ functionName: 'allowance',
57
+ args: [ownerAddress, token.spenderAddress],
58
+ }))
59
+
60
+ const results = await client.multicall({
61
+ contracts,
62
+ multicallAddress: multicallAddress as Address,
63
+ })
64
+
65
+ if (!results.length) {
66
+ throw new Error(
67
+ `Couldn't load allowance from chainId ${chainId} using multicall.`
68
+ )
69
+ }
70
+
71
+ return tokens.map(({ token, spenderAddress }, i: number) => ({
72
+ token,
73
+ spenderAddress,
74
+ allowance: results[i].result as bigint,
75
+ }))
76
+ }
77
+
78
+ /**
79
+ * Get the current allowance for a certain token.
80
+ * @param token - The token that should be checked
81
+ * @param ownerAddress - The owner of the token
82
+ * @param spenderAddress - The spender address that has to be approved
83
+ * @returns Returns allowance
84
+ */
85
+ export const getTokenAllowance = async (
86
+ token: Token,
87
+ ownerAddress: string,
88
+ spenderAddress: string
89
+ ): Promise<bigint | undefined> => {
90
+ // native token don't need approval
91
+ if (isNativeTokenAddress(token.address)) {
92
+ return
93
+ }
94
+
95
+ const approved = await getAllowance(
96
+ token.chainId,
97
+ token.address,
98
+ ownerAddress,
99
+ spenderAddress
100
+ )
101
+ return approved
102
+ }
103
+
104
+ /**
105
+ * Get the current allowance for a list of token/spender address pairs.
106
+ * @param ownerAddress - The owner of the tokens
107
+ * @param tokens - A list of token and spender address pairs
108
+ * @returns Returns array of tokens and their allowance
109
+ */
110
+ export const getTokenAllowanceMulticall = async (
111
+ ownerAddress: string,
112
+ tokens: TokenSpender[]
113
+ ): Promise<TokenAllowance[]> => {
114
+ // filter out native tokens
115
+ const filteredTokens = tokens.filter(
116
+ ({ token }) => !isNativeTokenAddress(token.address)
117
+ )
118
+
119
+ // group by chain
120
+ const tokenDataByChain: { [chainId: number]: TokenSpender[] } = {}
121
+ filteredTokens.forEach((data) => {
122
+ if (!tokenDataByChain[data.token.chainId]) {
123
+ tokenDataByChain[data.token.chainId] = []
124
+ }
125
+ tokenDataByChain[data.token.chainId].push(data)
126
+ })
127
+
128
+ const chainKeys = Object.keys(tokenDataByChain).map(Number.parseInt)
129
+
130
+ const allowances = (
131
+ await Promise.all(
132
+ chainKeys.map(async (chainId) => {
133
+ // get allowances for current chain and token list
134
+ return getAllowanceMulticall(
135
+ chainId,
136
+ tokenDataByChain[chainId],
137
+ ownerAddress
138
+ )
139
+ })
140
+ )
141
+ ).flat()
142
+
143
+ return allowances
144
+ }
@@ -0,0 +1,18 @@
1
+ import { ChainId } from '@lifi/types'
2
+ import { normalize } from 'viem/ens'
3
+ import { getPublicClient } from './publicClient.js'
4
+
5
+ export const getENSAddress = async (
6
+ name: string
7
+ ): Promise<string | undefined> => {
8
+ try {
9
+ const client = await getPublicClient(ChainId.ETH)
10
+ const address = await client.getEnsAddress({
11
+ name: normalize(name),
12
+ })
13
+ return address as string | undefined
14
+ } catch (_) {
15
+ // ignore
16
+ return
17
+ }
18
+ }
@@ -0,0 +1,118 @@
1
+ import type { ChainId, Token, TokenAmount } from '@lifi/types'
2
+ import type { Address } from 'viem'
3
+ import { isZeroAddress } from '../../utils/utils.js'
4
+ import { balanceOfAbi, getEthBalanceAbi } from './abi.js'
5
+ import { getPublicClient } from './publicClient.js'
6
+ import { getMulticallAddress } from './utils.js'
7
+
8
+ export const getEVMBalance = async (
9
+ walletAddress: string,
10
+ tokens: Token[]
11
+ ): Promise<TokenAmount[]> => {
12
+ if (tokens.length === 0) {
13
+ return []
14
+ }
15
+ const { chainId } = tokens[0]
16
+ tokens.forEach((token) => {
17
+ if (token.chainId !== chainId) {
18
+ console.warn(`Requested tokens have to be on the same chain.`)
19
+ }
20
+ })
21
+
22
+ const multicallAddress = await getMulticallAddress(chainId)
23
+
24
+ if (multicallAddress && tokens.length > 1) {
25
+ return getEVMBalanceMulticall(
26
+ chainId,
27
+ tokens,
28
+ walletAddress,
29
+ multicallAddress
30
+ )
31
+ } else {
32
+ return getEVMBalanceDefault(chainId, tokens, walletAddress)
33
+ }
34
+ }
35
+
36
+ const getEVMBalanceMulticall = async (
37
+ chainId: ChainId,
38
+ tokens: Token[],
39
+ walletAddress: string,
40
+ multicallAddress: string
41
+ ): Promise<TokenAmount[]> => {
42
+ const client = await getPublicClient(chainId)
43
+
44
+ const contracts = tokens.map((token) => {
45
+ if (isZeroAddress(token.address)) {
46
+ return {
47
+ address: multicallAddress as Address,
48
+ abi: getEthBalanceAbi,
49
+ functionName: 'getEthBalance',
50
+ args: [walletAddress],
51
+ }
52
+ }
53
+ return {
54
+ address: token.address as Address,
55
+ abi: balanceOfAbi,
56
+ functionName: 'balanceOf',
57
+ args: [walletAddress],
58
+ }
59
+ })
60
+ const blockNumber = await client.getBlockNumber()
61
+ const results = await client.multicall({
62
+ contracts,
63
+ multicallAddress: multicallAddress as Address,
64
+ blockNumber,
65
+ })
66
+
67
+ if (!results.length) {
68
+ return []
69
+ }
70
+
71
+ return tokens.map((token, i: number) => {
72
+ return {
73
+ ...token,
74
+ amount: results[i].result as bigint,
75
+ blockNumber,
76
+ }
77
+ })
78
+ }
79
+
80
+ const getEVMBalanceDefault = async (
81
+ chainId: ChainId,
82
+ tokens: Token[],
83
+ walletAddress: string
84
+ ): Promise<TokenAmount[]> => {
85
+ const client = await getPublicClient(chainId)
86
+ const blockNumber = await client.getBlockNumber()
87
+ const queue: Promise<bigint>[] = tokens.map((token) => {
88
+ if (isZeroAddress(token.address)) {
89
+ return client.getBalance({
90
+ address: walletAddress as Address,
91
+ })
92
+ }
93
+ return client.readContract({
94
+ address: token.address as Address,
95
+ abi: balanceOfAbi,
96
+ functionName: 'balanceOf',
97
+ args: [walletAddress],
98
+ }) as Promise<bigint>
99
+ })
100
+
101
+ const results = await Promise.allSettled(queue)
102
+
103
+ const tokenAmounts: TokenAmount[] = tokens.map((token, index) => {
104
+ const result = results[index]
105
+ if (result.status === 'rejected') {
106
+ return {
107
+ ...token,
108
+ blockNumber,
109
+ }
110
+ }
111
+ return {
112
+ ...token,
113
+ amount: result.value,
114
+ blockNumber,
115
+ }
116
+ })
117
+ return tokenAmounts
118
+ }
@@ -0,0 +1,53 @@
1
+ import type { ExtendedChain, LiFiStep, ProcessType } from '@lifi/types'
2
+ import type { Hash } from 'viem'
3
+ import { LiFiErrorCode, TransactionError } from '../../utils/errors.js'
4
+ import type { StatusManager } from '../StatusManager.js'
5
+ import type { MultisigConfig, MultisigTxDetails } from './types.js'
6
+
7
+ export const updateMultisigRouteProcess = async (
8
+ internalTxHash: Hash,
9
+ step: LiFiStep,
10
+ processType: ProcessType,
11
+ fromChain: ExtendedChain,
12
+ statusManager: StatusManager,
13
+ multisig?: MultisigConfig
14
+ ) => {
15
+ if (!multisig?.getMultisigTransactionDetails) {
16
+ throw new Error(
17
+ 'getMultisigTransactionDetails is missing in multisig config.'
18
+ )
19
+ }
20
+
21
+ const updateIntermediateMultisigStatus = () => {
22
+ statusManager.updateProcess(step, processType, 'PENDING')
23
+ }
24
+
25
+ const multisigStatusResponse: MultisigTxDetails =
26
+ await multisig?.getMultisigTransactionDetails(
27
+ internalTxHash,
28
+ fromChain.id,
29
+ updateIntermediateMultisigStatus
30
+ )
31
+
32
+ if (multisigStatusResponse.status === 'DONE') {
33
+ statusManager.updateProcess(step, processType, 'PENDING', {
34
+ txHash: multisigStatusResponse.txHash,
35
+ multisigTxHash: undefined,
36
+ txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${multisigStatusResponse.txHash}`,
37
+ })
38
+ }
39
+
40
+ if (multisigStatusResponse.status === 'FAILED') {
41
+ throw new TransactionError(
42
+ LiFiErrorCode.TransactionFailed,
43
+ 'Multisig transaction failed.'
44
+ )
45
+ }
46
+
47
+ if (multisigStatusResponse.status === 'CANCELLED') {
48
+ throw new TransactionError(
49
+ LiFiErrorCode.SignatureRejected,
50
+ 'Transaction was rejected by user.'
51
+ )
52
+ }
53
+ }
@@ -0,0 +1,54 @@
1
+ import { ChainId } from '@lifi/types'
2
+ import type { PublicClient } from 'viem'
3
+ import { createPublicClient, fallback, http } from 'viem'
4
+ import { mainnet, type Chain } from 'viem/chains'
5
+ import { config } from '../../config.js'
6
+ import { getRpcUrls } from '../rpc.js'
7
+
8
+ // cached providers
9
+ const publicClients: Record<number, PublicClient> = {}
10
+
11
+ /**
12
+ * Get an instance of a provider for a specific chain
13
+ * @param chainId - Id of the chain the provider is for
14
+ * @returns The public client for the given chain
15
+ */
16
+ export const getPublicClient = async (
17
+ chainId: number
18
+ ): Promise<PublicClient> => {
19
+ if (!publicClients[chainId]) {
20
+ const urls = await getRpcUrls(chainId)
21
+ const fallbackTransports = urls.map((url) =>
22
+ http(url, {
23
+ batch: true,
24
+ })
25
+ )
26
+ const _chain = await config.getChainById(chainId)
27
+ const chain: Chain = {
28
+ ..._chain,
29
+ ..._chain.metamask,
30
+ name: _chain.metamask.chainName,
31
+ rpcUrls: {
32
+ default: { http: _chain.metamask.rpcUrls },
33
+ public: { http: _chain.metamask.rpcUrls },
34
+ },
35
+ }
36
+ // Add ENS contracts
37
+ if (chain.id === ChainId.ETH) {
38
+ chain.contracts = {
39
+ ...mainnet.contracts,
40
+ ...chain.contracts,
41
+ }
42
+ }
43
+ publicClients[chainId] = createPublicClient({
44
+ chain: chain,
45
+ transport: fallback(fallbackTransports),
46
+ })
47
+ }
48
+
49
+ if (!publicClients[chainId]) {
50
+ throw new Error(`Unable to configure provider for chain ${chainId}`)
51
+ }
52
+
53
+ return publicClients[chainId]
54
+ }
@@ -0,0 +1,143 @@
1
+ import type {
2
+ Hash,
3
+ PublicClient,
4
+ SendTransactionParameters,
5
+ WalletClient,
6
+ } from 'viem'
7
+ import { encodeFunctionData, maxUint256, publicActions } from 'viem'
8
+ import { isNativeTokenAddress } from '../../utils/utils.js'
9
+ import type { ExecutionOptions, TransactionParameters } from '../types.js'
10
+ import { approveAbi } from './abi.js'
11
+ import { getAllowance } from './getAllowance.js'
12
+ import type { ApproveTokenRequest, RevokeApprovalRequest } from './types.js'
13
+ import { getMaxPriorityFeePerGas } from './utils.js'
14
+
15
+ export const setAllowance = async (
16
+ walletClient: WalletClient,
17
+ tokenAddress: string,
18
+ contractAddress: string,
19
+ amount: bigint,
20
+ settings?: ExecutionOptions,
21
+ returnPopulatedTransaction?: boolean
22
+ ): Promise<Hash> => {
23
+ const data = encodeFunctionData({
24
+ abi: approveAbi,
25
+ functionName: 'approve',
26
+ args: [contractAddress, amount],
27
+ })
28
+
29
+ if (returnPopulatedTransaction) {
30
+ return data
31
+ }
32
+ const client = walletClient.extend(publicActions)
33
+
34
+ let transactionRequest: TransactionParameters = {
35
+ to: tokenAddress,
36
+ data,
37
+ maxPriorityFeePerGas:
38
+ walletClient.account?.type === 'local'
39
+ ? await getMaxPriorityFeePerGas(client as PublicClient)
40
+ : undefined,
41
+ }
42
+
43
+ if (settings?.updateTransactionRequestHook) {
44
+ const customizedTransactionRequest: TransactionParameters =
45
+ await settings.updateTransactionRequestHook({
46
+ requestType: 'approve',
47
+ ...transactionRequest,
48
+ })
49
+
50
+ transactionRequest = {
51
+ ...transactionRequest,
52
+ ...customizedTransactionRequest,
53
+ }
54
+ }
55
+
56
+ return client.sendTransaction({
57
+ to: transactionRequest.to,
58
+ account: walletClient.account!,
59
+ data: transactionRequest.data,
60
+ gas: transactionRequest.gas,
61
+ gasPrice: transactionRequest.gasPrice,
62
+ maxFeePerGas: transactionRequest.maxFeePerGas,
63
+ maxPriorityFeePerGas: transactionRequest.maxPriorityFeePerGas,
64
+ chain: null,
65
+ } as SendTransactionParameters)
66
+ }
67
+
68
+ /**
69
+ * Set approval for a certain token and amount.
70
+ * @param request - The approval request
71
+ * @param request.walletClient
72
+ * @param request.token
73
+ * @param request.spenderAddress
74
+ * @param request.amount
75
+ * @param request.infiniteApproval
76
+ * @returns Returns Hash or nothing
77
+ */
78
+ export const setTokenAllowance = async ({
79
+ walletClient,
80
+ token,
81
+ spenderAddress,
82
+ amount,
83
+ infiniteApproval = false,
84
+ }: ApproveTokenRequest): Promise<Hash | void> => {
85
+ // native token don't need approval
86
+ if (isNativeTokenAddress(token.address)) {
87
+ return
88
+ }
89
+ const approvedAmount = await getAllowance(
90
+ token.chainId,
91
+ token.address,
92
+ walletClient.account!.address,
93
+ spenderAddress
94
+ )
95
+
96
+ if (amount > approvedAmount) {
97
+ const approvalAmount = infiniteApproval ? maxUint256 : amount
98
+
99
+ const approveTx = await setAllowance(
100
+ walletClient,
101
+ token.address,
102
+ spenderAddress,
103
+ approvalAmount
104
+ )
105
+
106
+ return approveTx
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Revoke approval for a certain token.
112
+ * @param request - The revoke request
113
+ * @param request.walletClient
114
+ * @param request.token
115
+ * @param request.spenderAddress
116
+ * @returns Returns Hash or nothing
117
+ */
118
+ export const revokeTokenApproval = async ({
119
+ walletClient,
120
+ token,
121
+ spenderAddress,
122
+ }: RevokeApprovalRequest): Promise<Hash | void> => {
123
+ // native token don't need approval
124
+ if (isNativeTokenAddress(token.address)) {
125
+ return
126
+ }
127
+ const approvedAmount = await getAllowance(
128
+ token.chainId,
129
+ token.address,
130
+ walletClient.account!.address,
131
+ spenderAddress
132
+ )
133
+ if (approvedAmount > 0) {
134
+ const approveTx = await setAllowance(
135
+ walletClient,
136
+ token.address,
137
+ spenderAddress,
138
+ 0n
139
+ )
140
+
141
+ return approveTx
142
+ }
143
+ }
@@ -0,0 +1,77 @@
1
+ import type { WalletClient } from 'viem'
2
+ import { LiFiErrorCode, ProviderError } from '../../utils/errors.js'
3
+ import type { StatusManager } from '../StatusManager.js'
4
+ import type { LiFiStepExtended, SwitchChainHook } from '../types.js'
5
+
6
+ /**
7
+ * This method checks whether the wallet client is configured for the correct chain.
8
+ * If yes it returns the wallet clien.
9
+ * If no and if user interaction is allowed it triggers the switchChainHook. If no user interaction is allowed it aborts.
10
+ *
11
+ * Account Type: local -
12
+ * We need to create and return a new WalletClient from the switchChainHook in order to continue execution on a new chain.
13
+ *
14
+ * Account Type: json-rpc -
15
+ * We can switch chain and return existing WalletClient from the switchChainHook in order to continue execution on a new chain.
16
+ * @param walletClient
17
+ * @param statusManager
18
+ * @param step
19
+ * @param switchChainHook
20
+ * @param allowUserInteraction
21
+ * @returns New WalletClient
22
+ */
23
+ export const switchChain = async (
24
+ walletClient: WalletClient,
25
+ statusManager: StatusManager,
26
+ step: LiFiStepExtended,
27
+ allowUserInteraction: boolean,
28
+ switchChainHook?: SwitchChainHook
29
+ ): Promise<WalletClient | undefined> => {
30
+ // if we are already on the correct chain we can proceed directly
31
+ const currentChainId = await walletClient.getChainId()
32
+ if (currentChainId === step.action.fromChainId) {
33
+ return walletClient
34
+ }
35
+
36
+ // -> set status message
37
+ step.execution = statusManager.initExecutionObject(step)
38
+ statusManager.updateExecution(step, 'ACTION_REQUIRED')
39
+
40
+ let switchProcess = statusManager.findOrCreateProcess(
41
+ step,
42
+ 'SWITCH_CHAIN',
43
+ 'ACTION_REQUIRED'
44
+ )
45
+
46
+ if (!allowUserInteraction) {
47
+ return
48
+ }
49
+
50
+ try {
51
+ const updatedWalletClient = await switchChainHook?.(step.action.fromChainId)
52
+ const updatedChainId = await updatedWalletClient?.getChainId()
53
+ if (updatedChainId !== step.action.fromChainId) {
54
+ throw new ProviderError(
55
+ LiFiErrorCode.ChainSwitchError,
56
+ 'Chain switch required.'
57
+ )
58
+ }
59
+
60
+ switchProcess = statusManager.updateProcess(
61
+ step,
62
+ switchProcess.type,
63
+ 'DONE'
64
+ )
65
+ statusManager.updateExecution(step, 'PENDING')
66
+ return updatedWalletClient
67
+ } catch (error: any) {
68
+ statusManager.updateProcess(step, switchProcess.type, 'FAILED', {
69
+ error: {
70
+ message: error.message,
71
+ code: LiFiErrorCode.ChainSwitchError,
72
+ },
73
+ })
74
+ statusManager.updateExecution(step, 'FAILED')
75
+ throw error
76
+ }
77
+ }
@@ -0,0 +1,73 @@
1
+ import { ChainType, type Token } from '@lifi/types'
2
+ import type { Hash, WalletClient } from 'viem'
3
+ import type { SwitchChainHook } from '../types.js'
4
+ import { type SDKProvider } from '../types.js'
5
+
6
+ export interface EVMProviderOptions {
7
+ getWalletClient?: () => Promise<WalletClient>
8
+ switchChain?: SwitchChainHook
9
+ multisig?: MultisigConfig
10
+ }
11
+
12
+ export interface EVMProvider extends SDKProvider {
13
+ setOptions(options: EVMProviderOptions): void
14
+ multisig?: MultisigConfig
15
+ }
16
+
17
+ export function isEVM(provider: SDKProvider): provider is EVMProvider {
18
+ return provider.type === ChainType.EVM
19
+ }
20
+
21
+ export type TokenSpender = {
22
+ token: Token
23
+ spenderAddress: string
24
+ }
25
+
26
+ export type TokenAllowance = {
27
+ token: Token
28
+ allowance?: bigint
29
+ }
30
+
31
+ export type TokenSpenderAllowance = {
32
+ token: Token
33
+ spenderAddress: string
34
+ allowance?: bigint
35
+ }
36
+
37
+ export interface ApproveTokenRequest {
38
+ walletClient: WalletClient
39
+ token: Token
40
+ spenderAddress: string
41
+ amount: bigint
42
+ infiniteApproval?: boolean
43
+ }
44
+
45
+ export interface RevokeApprovalRequest {
46
+ walletClient: WalletClient
47
+ token: Token
48
+ spenderAddress: string
49
+ }
50
+
51
+ export interface MultisigTxDetails {
52
+ status: 'DONE' | 'FAILED' | 'PENDING' | 'CANCELLED'
53
+ txHash?: Hash
54
+ }
55
+
56
+ export interface MultisigTransaction {
57
+ to: string
58
+ value?: bigint
59
+ data: string
60
+ }
61
+
62
+ export interface MultisigConfig {
63
+ isMultisigWalletClient: boolean
64
+ getMultisigTransactionDetails: (
65
+ txHash: Hash,
66
+ fromChainId: number,
67
+ updateIntermediateStatus?: () => void
68
+ ) => Promise<MultisigTxDetails>
69
+ sendBatchTransaction?: (
70
+ batchTransactions: MultisigTransaction[]
71
+ ) => Promise<Hash>
72
+ shouldBatchTransactions?: boolean
73
+ }