@lifi/sdk 3.0.0-alpha.4 → 3.0.0-alpha.41

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 (448) hide show
  1. package/package.json +31 -86
  2. package/src/_cjs/config.js +71 -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 +284 -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 +12 -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/{dist/cjs/balance/getBalance.js → src/_cjs/core/EVM/getEVMBalance.js} +20 -22
  19. package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -0
  20. package/{dist/cjs/execution → src/_cjs/core/EVM}/multisig.js +7 -11
  21. package/src/_cjs/core/EVM/multisig.js.map +1 -0
  22. package/src/_cjs/core/EVM/publicClient.js +35 -0
  23. package/src/_cjs/core/EVM/publicClient.js.map +1 -0
  24. package/src/_cjs/core/EVM/setAllowance.js +71 -0
  25. package/src/_cjs/core/EVM/setAllowance.js.map +1 -0
  26. package/src/_cjs/core/EVM/switchChain.js +38 -0
  27. package/src/_cjs/core/EVM/switchChain.js.map +1 -0
  28. package/src/_cjs/core/EVM/types.js +9 -0
  29. package/src/_cjs/core/EVM/types.js.map +1 -0
  30. package/{dist/cjs/utils/getMaxPriorityFeePerGas.js → src/_cjs/core/EVM/utils.js} +10 -3
  31. package/src/_cjs/core/EVM/utils.js.map +1 -0
  32. package/src/_cjs/core/Solana/Solana.js +44 -0
  33. package/src/_cjs/core/Solana/Solana.js.map +1 -0
  34. package/src/_cjs/core/Solana/SolanaStepExecutor.js +163 -0
  35. package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -0
  36. package/src/_cjs/core/Solana/connection.js +18 -0
  37. package/src/_cjs/core/Solana/connection.js.map +1 -0
  38. package/src/_cjs/core/Solana/getSolanaBalance.js +60 -0
  39. package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -0
  40. package/src/_cjs/core/Solana/types.js +10 -0
  41. package/src/_cjs/core/Solana/types.js.map +1 -0
  42. package/src/_cjs/core/StatusManager.js +167 -0
  43. package/src/_cjs/core/StatusManager.js.map +1 -0
  44. package/{dist/cjs/execution → src/_cjs/core}/checkBalance.js +5 -5
  45. package/src/_cjs/core/checkBalance.js.map +1 -0
  46. package/src/_cjs/core/execution.js +134 -0
  47. package/src/_cjs/core/execution.js.map +1 -0
  48. package/src/_cjs/core/executionState.js +23 -0
  49. package/src/_cjs/core/executionState.js.map +1 -0
  50. package/src/_cjs/core/index.js +7 -0
  51. package/src/_cjs/core/index.js.map +1 -0
  52. package/src/_cjs/core/prepareRestart.js +23 -0
  53. package/src/_cjs/core/prepareRestart.js.map +1 -0
  54. package/src/_cjs/core/provider.js +15 -0
  55. package/src/_cjs/core/provider.js.map +1 -0
  56. package/src/_cjs/core/stepComparison.js +25 -0
  57. package/src/_cjs/core/stepComparison.js.map +1 -0
  58. package/{dist/cjs/allowance → src/_cjs/core}/types.js +1 -0
  59. package/src/_cjs/core/types.js.map +1 -0
  60. package/{dist/cjs/execution → src/_cjs/core}/utils.js +16 -10
  61. package/src/_cjs/core/utils.js.map +1 -0
  62. package/{dist/cjs/execution → src/_cjs/core}/waitForReceivingTransaction.js +11 -12
  63. package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -0
  64. package/src/_cjs/createConfig.js +32 -0
  65. package/src/_cjs/createConfig.js.map +1 -0
  66. package/src/_cjs/helpers.js +57 -0
  67. package/src/_cjs/helpers.js.map +1 -0
  68. package/src/_cjs/index.js +22 -0
  69. package/src/_cjs/index.js.map +1 -0
  70. package/src/_cjs/package.json +1 -0
  71. package/src/_cjs/request.js +66 -0
  72. package/src/_cjs/request.js.map +1 -0
  73. package/src/_cjs/services/api.js +311 -0
  74. package/src/_cjs/services/api.js.map +1 -0
  75. package/src/_cjs/services/balance.js +49 -0
  76. package/src/_cjs/services/balance.js.map +1 -0
  77. package/{dist/cjs → src/_cjs}/typeguards.js +1 -0
  78. package/src/_cjs/typeguards.js.map +1 -0
  79. package/src/_cjs/types/index.js +5 -0
  80. package/src/_cjs/types/index.js.map +1 -0
  81. package/{dist/cjs/types/internal.types.js → src/_cjs/types/internal.js} +1 -0
  82. package/src/_cjs/types/internal.js.map +1 -0
  83. package/{dist/cjs → src/_cjs}/utils/errors.js +25 -3
  84. package/src/_cjs/utils/errors.js.map +1 -0
  85. package/src/_cjs/utils/getTransactionMessage.js +31 -0
  86. package/src/_cjs/utils/getTransactionMessage.js.map +1 -0
  87. package/src/_cjs/utils/index.js +9 -0
  88. package/src/_cjs/utils/index.js.map +1 -0
  89. package/{dist/cjs → src/_cjs}/utils/median.js +1 -0
  90. package/src/_cjs/utils/median.js.map +1 -0
  91. package/src/_cjs/utils/parseBackendError.js +27 -0
  92. package/src/_cjs/utils/parseBackendError.js.map +1 -0
  93. package/src/_cjs/utils/parseError.js +67 -0
  94. package/src/_cjs/utils/parseError.js.map +1 -0
  95. package/{dist/cjs → src/_cjs}/utils/utils.js +5 -11
  96. package/src/_cjs/utils/utils.js.map +1 -0
  97. package/{dist/cjs → src/_cjs}/version.js +2 -1
  98. package/src/_cjs/version.js.map +1 -0
  99. package/src/_esm/config.js +68 -0
  100. package/src/_esm/config.js.map +1 -0
  101. package/{dist → src/_esm}/constants.js +2 -4
  102. package/src/_esm/constants.js.map +1 -0
  103. package/src/_esm/core/BaseStepExecutor.js +52 -0
  104. package/src/_esm/core/BaseStepExecutor.js.map +1 -0
  105. package/src/_esm/core/EVM/EVM.js +39 -0
  106. package/src/_esm/core/EVM/EVM.js.map +1 -0
  107. package/src/_esm/core/EVM/EVMStepExecutor.js +309 -0
  108. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -0
  109. package/{dist/types → src/_esm/core/EVM}/abi.js +1 -0
  110. package/src/_esm/core/EVM/abi.js.map +1 -0
  111. package/{dist/execution → src/_esm/core/EVM}/checkAllowance.js +8 -6
  112. package/src/_esm/core/EVM/checkAllowance.js.map +1 -0
  113. package/{dist/allowance → src/_esm/core/EVM}/getAllowance.js +19 -6
  114. package/src/_esm/core/EVM/getAllowance.js.map +1 -0
  115. package/{dist/balance/getBalance.js → src/_esm/core/EVM/getEVMBalance.js} +10 -12
  116. package/src/_esm/core/EVM/getEVMBalance.js.map +1 -0
  117. package/{dist/execution → src/_esm/core/EVM}/multisig.js +5 -6
  118. package/src/_esm/core/EVM/multisig.js.map +1 -0
  119. package/src/_esm/core/EVM/publicClient.js +37 -0
  120. package/src/_esm/core/EVM/publicClient.js.map +1 -0
  121. package/{dist/allowance → src/_esm/core/EVM}/setAllowance.js +46 -11
  122. package/src/_esm/core/EVM/setAllowance.js.map +1 -0
  123. package/{dist/execution → src/_esm/core/EVM}/switchChain.js +7 -4
  124. package/src/_esm/core/EVM/switchChain.js.map +1 -0
  125. package/src/_esm/core/EVM/types.js +6 -0
  126. package/src/_esm/core/EVM/types.js.map +1 -0
  127. package/{dist/utils/getMaxPriorityFeePerGas.js → src/_esm/core/EVM/utils.js} +9 -1
  128. package/src/_esm/core/EVM/utils.js.map +1 -0
  129. package/src/_esm/core/Solana/Solana.js +40 -0
  130. package/src/_esm/core/Solana/Solana.js.map +1 -0
  131. package/src/_esm/core/Solana/SolanaStepExecutor.js +164 -0
  132. package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -0
  133. package/src/_esm/core/Solana/connection.js +19 -0
  134. package/src/_esm/core/Solana/connection.js.map +1 -0
  135. package/src/_esm/core/Solana/getSolanaBalance.js +56 -0
  136. package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -0
  137. package/src/_esm/core/Solana/types.js +7 -0
  138. package/src/_esm/core/Solana/types.js.map +1 -0
  139. package/src/_esm/core/StatusManager.js +203 -0
  140. package/src/_esm/core/StatusManager.js.map +1 -0
  141. package/{dist/execution → src/_esm/core}/checkBalance.js +3 -2
  142. package/src/_esm/core/checkBalance.js.map +1 -0
  143. package/src/_esm/core/execution.js +173 -0
  144. package/src/_esm/core/execution.js.map +1 -0
  145. package/src/_esm/core/executionState.js +20 -0
  146. package/src/_esm/core/executionState.js.map +1 -0
  147. package/src/_esm/core/index.js +4 -0
  148. package/src/_esm/core/index.js.map +1 -0
  149. package/src/_esm/core/prepareRestart.js +64 -0
  150. package/src/_esm/core/prepareRestart.js.map +1 -0
  151. package/src/_esm/core/provider.js +11 -0
  152. package/src/_esm/core/provider.js.map +1 -0
  153. package/{dist/execution → src/_esm/core}/stepComparison.js +7 -5
  154. package/src/_esm/core/stepComparison.js.map +1 -0
  155. package/src/_esm/core/types.js +2 -0
  156. package/src/_esm/core/types.js.map +1 -0
  157. package/{dist/execution → src/_esm/core}/utils.js +14 -0
  158. package/src/_esm/core/utils.js.map +1 -0
  159. package/{dist/execution → src/_esm/core}/waitForReceivingTransaction.js +9 -7
  160. package/src/_esm/core/waitForReceivingTransaction.js.map +1 -0
  161. package/src/_esm/createConfig.js +28 -0
  162. package/src/_esm/createConfig.js.map +1 -0
  163. package/{dist → src/_esm}/helpers.js +5 -17
  164. package/src/_esm/helpers.js.map +1 -0
  165. package/src/_esm/index.js +13 -0
  166. package/src/_esm/index.js.map +1 -0
  167. package/src/_esm/package.json +1 -0
  168. package/{dist → src/_esm}/request.js +23 -13
  169. package/src/_esm/request.js.map +1 -0
  170. package/src/_esm/services/api.js +380 -0
  171. package/src/_esm/services/api.js.map +1 -0
  172. package/src/_esm/services/balance.js +65 -0
  173. package/src/_esm/services/balance.js.map +1 -0
  174. package/{dist → src/_esm}/typeguards.js +1 -0
  175. package/src/_esm/typeguards.js.map +1 -0
  176. package/src/_esm/types/index.js +2 -0
  177. package/src/_esm/types/index.js.map +1 -0
  178. package/src/_esm/types/internal.js +2 -0
  179. package/src/_esm/types/internal.js.map +1 -0
  180. package/{dist → src/_esm}/utils/errors.js +25 -0
  181. package/src/_esm/utils/errors.js.map +1 -0
  182. package/src/_esm/utils/getTransactionMessage.js +28 -0
  183. package/src/_esm/utils/getTransactionMessage.js.map +1 -0
  184. package/src/_esm/utils/index.js +6 -0
  185. package/src/_esm/utils/index.js.map +1 -0
  186. package/{dist → src/_esm}/utils/median.js +1 -0
  187. package/src/_esm/utils/median.js.map +1 -0
  188. package/src/_esm/utils/parseBackendError.js +24 -0
  189. package/src/_esm/utils/parseBackendError.js.map +1 -0
  190. package/{dist → src/_esm}/utils/parseError.js +4 -53
  191. package/src/_esm/utils/parseError.js.map +1 -0
  192. package/{dist → src/_esm}/utils/utils.js +2 -1
  193. package/src/_esm/utils/utils.js.map +1 -0
  194. package/src/_esm/version.js +3 -0
  195. package/src/_esm/version.js.map +1 -0
  196. package/src/_types/config.d.ts +15 -0
  197. package/src/_types/config.d.ts.map +1 -0
  198. package/{dist/cjs → src/_types}/constants.d.ts +2 -4
  199. package/src/_types/constants.d.ts.map +1 -0
  200. package/src/_types/core/BaseStepExecutor.d.ts +13 -0
  201. package/src/_types/core/BaseStepExecutor.d.ts.map +1 -0
  202. package/src/_types/core/EVM/EVM.d.ts +3 -0
  203. package/src/_types/core/EVM/EVM.d.ts.map +1 -0
  204. package/src/_types/core/EVM/EVMStepExecutor.d.ts +16 -0
  205. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -0
  206. package/{dist/cjs/types → src/_types/core/EVM}/abi.d.ts +1 -0
  207. package/src/_types/core/EVM/abi.d.ts.map +1 -0
  208. package/src/_types/core/EVM/checkAllowance.d.ts +6 -0
  209. package/src/_types/core/EVM/checkAllowance.d.ts.map +1 -0
  210. package/{dist/cjs/allowance → src/_types/core/EVM}/getAllowance.d.ts +15 -1
  211. package/src/_types/core/EVM/getAllowance.d.ts.map +1 -0
  212. package/src/_types/core/EVM/getEVMBalance.d.ts +3 -0
  213. package/src/_types/core/EVM/getEVMBalance.d.ts.map +1 -0
  214. package/src/_types/core/EVM/multisig.d.ts +6 -0
  215. package/src/_types/core/EVM/multisig.d.ts.map +1 -0
  216. package/src/_types/core/EVM/publicClient.d.ts +8 -0
  217. package/src/_types/core/EVM/publicClient.d.ts.map +1 -0
  218. package/src/_types/core/EVM/setAllowance.d.ts +25 -0
  219. package/src/_types/core/EVM/setAllowance.d.ts.map +1 -0
  220. package/{dist/cjs/execution → src/_types/core/EVM}/switchChain.d.ts +5 -4
  221. package/src/_types/core/EVM/switchChain.d.ts.map +1 -0
  222. package/src/_types/core/EVM/types.d.ts +55 -0
  223. package/src/_types/core/EVM/types.d.ts.map +1 -0
  224. package/src/_types/core/EVM/utils.d.ts +5 -0
  225. package/src/_types/core/EVM/utils.d.ts.map +1 -0
  226. package/src/_types/core/Solana/Solana.d.ts +3 -0
  227. package/src/_types/core/Solana/Solana.d.ts.map +1 -0
  228. package/src/_types/core/Solana/SolanaStepExecutor.d.ts +12 -0
  229. package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -0
  230. package/src/_types/core/Solana/connection.d.ts +8 -0
  231. package/src/_types/core/Solana/connection.d.ts.map +1 -0
  232. package/src/_types/core/Solana/getSolanaBalance.d.ts +3 -0
  233. package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -0
  234. package/src/_types/core/Solana/types.d.ts +13 -0
  235. package/src/_types/core/Solana/types.d.ts.map +1 -0
  236. package/{dist/cjs/execution → src/_types/core}/StatusManager.d.ts +15 -28
  237. package/src/_types/core/StatusManager.d.ts.map +1 -0
  238. package/src/_types/core/checkBalance.d.ts +3 -0
  239. package/src/_types/core/checkBalance.d.ts.map +1 -0
  240. package/src/_types/core/execution.d.ts +42 -0
  241. package/src/_types/core/execution.d.ts.map +1 -0
  242. package/src/_types/core/executionState.d.ts +15 -0
  243. package/src/_types/core/executionState.d.ts.map +1 -0
  244. package/src/_types/core/index.d.ts +4 -0
  245. package/src/_types/core/index.d.ts.map +1 -0
  246. package/src/_types/core/prepareRestart.d.ts +3 -0
  247. package/src/_types/core/prepareRestart.d.ts.map +1 -0
  248. package/src/_types/core/provider.d.ts +3 -0
  249. package/src/_types/core/provider.d.ts.map +1 -0
  250. package/{dist/execution → src/_types/core}/stepComparison.d.ts +7 -4
  251. package/src/_types/core/stepComparison.d.ts.map +1 -0
  252. package/src/_types/core/types.d.ts +80 -0
  253. package/src/_types/core/types.d.ts.map +1 -0
  254. package/{dist/execution → src/_types/core}/utils.d.ts +5 -2
  255. package/src/_types/core/utils.d.ts.map +1 -0
  256. package/src/_types/core/waitForReceivingTransaction.d.ts +4 -0
  257. package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -0
  258. package/src/_types/createConfig.d.ts +4 -0
  259. package/src/_types/createConfig.d.ts.map +1 -0
  260. package/{dist → src/_types}/helpers.d.ts +4 -3
  261. package/src/_types/helpers.d.ts.map +1 -0
  262. package/src/_types/index.d.ts +13 -0
  263. package/src/_types/index.d.ts.map +1 -0
  264. package/{dist → src/_types}/request.d.ts +1 -0
  265. package/src/_types/request.d.ts.map +1 -0
  266. package/src/_types/services/api.d.ts +89 -0
  267. package/src/_types/services/api.d.ts.map +1 -0
  268. package/src/_types/services/balance.d.ts +30 -0
  269. package/src/_types/services/balance.d.ts.map +1 -0
  270. package/{dist/cjs → src/_types}/typeguards.d.ts +3 -2
  271. package/src/_types/typeguards.d.ts.map +1 -0
  272. package/src/_types/types/index.d.ts +2 -0
  273. package/src/_types/types/index.d.ts.map +1 -0
  274. package/src/_types/types/internal.d.ts +58 -0
  275. package/src/_types/types/internal.d.ts.map +1 -0
  276. package/{dist → src/_types}/utils/errors.d.ts +1 -0
  277. package/src/_types/utils/errors.d.ts.map +1 -0
  278. package/src/_types/utils/getTransactionMessage.d.ts +4 -0
  279. package/src/_types/utils/getTransactionMessage.d.ts.map +1 -0
  280. package/src/_types/utils/index.d.ts +6 -0
  281. package/src/_types/utils/index.d.ts.map +1 -0
  282. package/{dist/cjs → src/_types}/utils/median.d.ts +1 -0
  283. package/src/_types/utils/median.d.ts.map +1 -0
  284. package/src/_types/utils/parseBackendError.d.ts +3 -0
  285. package/src/_types/utils/parseBackendError.d.ts.map +1 -0
  286. package/{dist → src/_types}/utils/parseError.d.ts +4 -6
  287. package/src/_types/utils/parseError.d.ts.map +1 -0
  288. package/{dist → src/_types}/utils/utils.d.ts +1 -0
  289. package/src/_types/utils/utils.d.ts.map +1 -0
  290. package/src/_types/version.d.ts +3 -0
  291. package/src/_types/version.d.ts.map +1 -0
  292. package/src/config.ts +71 -0
  293. package/src/constants.ts +4 -0
  294. package/src/core/BaseStepExecutor.ts +40 -0
  295. package/src/core/EVM/EVM.ts +47 -0
  296. package/src/core/EVM/EVMStepExecutor.ts +461 -0
  297. package/src/core/EVM/abi.ts +47 -0
  298. package/src/core/EVM/checkAllowance.ts +152 -0
  299. package/src/core/EVM/getAllowance.ts +144 -0
  300. package/src/core/EVM/getEVMBalance.ts +118 -0
  301. package/src/core/EVM/multisig.ts +53 -0
  302. package/src/core/EVM/publicClient.ts +46 -0
  303. package/src/core/EVM/setAllowance.ts +144 -0
  304. package/src/core/EVM/switchChain.ts +77 -0
  305. package/src/core/EVM/types.ts +73 -0
  306. package/src/core/EVM/utils.ts +42 -0
  307. package/src/core/Solana/Solana.ts +46 -0
  308. package/src/core/Solana/SolanaStepExecutor.ts +259 -0
  309. package/src/core/Solana/connection.ts +19 -0
  310. package/src/core/Solana/getSolanaBalance.ts +72 -0
  311. package/src/core/Solana/types.ts +18 -0
  312. package/src/core/StatusManager.ts +231 -0
  313. package/src/core/checkBalance.ts +48 -0
  314. package/src/core/execution.ts +218 -0
  315. package/src/core/executionState.ts +39 -0
  316. package/src/core/index.ts +3 -0
  317. package/src/core/prepareRestart.ts +82 -0
  318. package/src/core/provider.ts +12 -0
  319. package/src/core/stepComparison.ts +51 -0
  320. package/src/core/types.ts +117 -0
  321. package/src/core/utils.ts +122 -0
  322. package/src/core/waitForReceivingTransaction.ts +74 -0
  323. package/src/createConfig.ts +33 -0
  324. package/src/helpers.ts +83 -0
  325. package/src/index.ts +12 -0
  326. package/src/request.ts +79 -0
  327. package/src/services/api.ts +511 -0
  328. package/src/services/balance.ts +93 -0
  329. package/src/typeguards.ts +89 -0
  330. package/src/types/index.ts +1 -0
  331. package/src/types/internal.ts +60 -0
  332. package/src/utils/errors.ts +231 -0
  333. package/src/utils/getTransactionMessage.ts +46 -0
  334. package/src/utils/index.ts +5 -0
  335. package/src/utils/median.ts +11 -0
  336. package/src/utils/parseBackendError.ts +50 -0
  337. package/src/utils/parseError.ts +204 -0
  338. package/src/utils/utils.ts +48 -0
  339. package/src/version.ts +2 -0
  340. package/dist/LiFi.d.ts +0 -171
  341. package/dist/LiFi.js +0 -246
  342. package/dist/allowance/getAllowance.d.ts +0 -6
  343. package/dist/allowance/index.d.ts +0 -3
  344. package/dist/allowance/index.js +0 -3
  345. package/dist/allowance/setAllowance.d.ts +0 -5
  346. package/dist/allowance/types.d.ts +0 -27
  347. package/dist/allowance/types.js +0 -1
  348. package/dist/balance/getBalance.d.ts +0 -2
  349. package/dist/balance/getTokenBalance.d.ts +0 -8
  350. package/dist/balance/getTokenBalance.js +0 -27
  351. package/dist/balance/index.d.ts +0 -2
  352. package/dist/balance/index.js +0 -2
  353. package/dist/cjs/LiFi.d.ts +0 -171
  354. package/dist/cjs/LiFi.js +0 -276
  355. package/dist/cjs/allowance/index.d.ts +0 -3
  356. package/dist/cjs/allowance/index.js +0 -19
  357. package/dist/cjs/allowance/setAllowance.d.ts +0 -5
  358. package/dist/cjs/allowance/setAllowance.js +0 -56
  359. package/dist/cjs/allowance/types.d.ts +0 -27
  360. package/dist/cjs/balance/getBalance.d.ts +0 -2
  361. package/dist/cjs/balance/getTokenBalance.d.ts +0 -8
  362. package/dist/cjs/balance/getTokenBalance.js +0 -33
  363. package/dist/cjs/balance/index.d.ts +0 -2
  364. package/dist/cjs/balance/index.js +0 -18
  365. package/dist/cjs/connectors.d.ts +0 -8
  366. package/dist/cjs/connectors.js +0 -75
  367. package/dist/cjs/execution/RouteExecutionManager.d.ts +0 -59
  368. package/dist/cjs/execution/RouteExecutionManager.js +0 -202
  369. package/dist/cjs/execution/StatusManager.js +0 -171
  370. package/dist/cjs/execution/StepExecutionManager.d.ts +0 -7
  371. package/dist/cjs/execution/StepExecutionManager.js +0 -267
  372. package/dist/cjs/execution/StepExecutor.d.ts +0 -15
  373. package/dist/cjs/execution/StepExecutor.js +0 -62
  374. package/dist/cjs/execution/checkAllowance.d.ts +0 -4
  375. package/dist/cjs/execution/checkBalance.d.ts +0 -2
  376. package/dist/cjs/execution/index.d.ts +0 -1
  377. package/dist/cjs/execution/index.js +0 -17
  378. package/dist/cjs/execution/multisig.d.ts +0 -4
  379. package/dist/cjs/execution/prepareRestart.d.ts +0 -3
  380. package/dist/cjs/execution/prepareRestart.js +0 -65
  381. package/dist/cjs/execution/stepComparison.d.ts +0 -14
  382. package/dist/cjs/execution/stepComparison.js +0 -37
  383. package/dist/cjs/execution/switchChain.js +0 -54
  384. package/dist/cjs/execution/utils.d.ts +0 -12
  385. package/dist/cjs/execution/waitForReceivingTransaction.d.ts +0 -3
  386. package/dist/cjs/helpers.d.ts +0 -18
  387. package/dist/cjs/helpers.js +0 -84
  388. package/dist/cjs/index.d.ts +0 -5
  389. package/dist/cjs/index.js +0 -24
  390. package/dist/cjs/request.d.ts +0 -9
  391. package/dist/cjs/request.js +0 -60
  392. package/dist/cjs/services/ApiService.d.ts +0 -17
  393. package/dist/cjs/services/ApiService.js +0 -326
  394. package/dist/cjs/services/ChainsService.d.ts +0 -11
  395. package/dist/cjs/services/ChainsService.js +0 -39
  396. package/dist/cjs/services/ConfigService.d.ts +0 -23
  397. package/dist/cjs/services/ConfigService.js +0 -101
  398. package/dist/cjs/types/index.d.ts +0 -4
  399. package/dist/cjs/types/index.js +0 -22
  400. package/dist/cjs/types/internal.types.d.ts +0 -142
  401. package/dist/cjs/utils/errors.d.ts +0 -107
  402. package/dist/cjs/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  403. package/dist/cjs/utils/index.d.ts +0 -5
  404. package/dist/cjs/utils/index.js +0 -21
  405. package/dist/cjs/utils/parseError.d.ts +0 -37
  406. package/dist/cjs/utils/parseError.js +0 -157
  407. package/dist/cjs/utils/utils.d.ts +0 -10
  408. package/dist/cjs/version.d.ts +0 -2
  409. package/dist/connectors.d.ts +0 -8
  410. package/dist/connectors.js +0 -41
  411. package/dist/constants.d.ts +0 -6
  412. package/dist/execution/RouteExecutionManager.d.ts +0 -59
  413. package/dist/execution/RouteExecutionManager.js +0 -195
  414. package/dist/execution/StatusManager.d.ts +0 -67
  415. package/dist/execution/StatusManager.js +0 -167
  416. package/dist/execution/StepExecutionManager.d.ts +0 -7
  417. package/dist/execution/StepExecutionManager.js +0 -260
  418. package/dist/execution/StepExecutor.d.ts +0 -15
  419. package/dist/execution/StepExecutor.js +0 -58
  420. package/dist/execution/checkAllowance.d.ts +0 -4
  421. package/dist/execution/checkBalance.d.ts +0 -2
  422. package/dist/execution/index.d.ts +0 -1
  423. package/dist/execution/index.js +0 -1
  424. package/dist/execution/multisig.d.ts +0 -4
  425. package/dist/execution/prepareRestart.d.ts +0 -3
  426. package/dist/execution/prepareRestart.js +0 -61
  427. package/dist/execution/switchChain.d.ts +0 -21
  428. package/dist/execution/waitForReceivingTransaction.d.ts +0 -3
  429. package/dist/index.d.ts +0 -5
  430. package/dist/index.js +0 -6
  431. package/dist/services/ApiService.d.ts +0 -17
  432. package/dist/services/ApiService.js +0 -321
  433. package/dist/services/ChainsService.d.ts +0 -11
  434. package/dist/services/ChainsService.js +0 -33
  435. package/dist/services/ConfigService.d.ts +0 -23
  436. package/dist/services/ConfigService.js +0 -99
  437. package/dist/typeguards.d.ts +0 -4
  438. package/dist/types/abi.d.ts +0 -5
  439. package/dist/types/index.d.ts +0 -4
  440. package/dist/types/index.js +0 -4
  441. package/dist/types/internal.types.d.ts +0 -142
  442. package/dist/types/internal.types.js +0 -1
  443. package/dist/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  444. package/dist/utils/index.d.ts +0 -5
  445. package/dist/utils/index.js +0 -5
  446. package/dist/utils/median.d.ts +0 -1
  447. package/dist/version.d.ts +0 -2
  448. package/dist/version.js +0 -2
@@ -0,0 +1,461 @@
1
+ import type { ExtendedTransactionInfo, FullStatusData } from '@lifi/types'
2
+ import type {
3
+ Address,
4
+ Hash,
5
+ PublicClient,
6
+ ReplacementReason,
7
+ SendTransactionParameters,
8
+ WalletClient,
9
+ } from 'viem'
10
+ import { publicActions } from 'viem'
11
+ import { config } from '../../config.js'
12
+ import { getStepTransaction } from '../../services/api.js'
13
+ import {
14
+ LiFiErrorCode,
15
+ TransactionError,
16
+ ValidationError,
17
+ getTransactionFailedMessage,
18
+ isZeroAddress,
19
+ parseError,
20
+ } from '../../utils/index.js'
21
+ import { BaseStepExecutor } from '../BaseStepExecutor.js'
22
+ import { checkBalance } from '../checkBalance.js'
23
+ import { stepComparison } from '../stepComparison.js'
24
+ import type {
25
+ LiFiStepExtended,
26
+ StepExecutorOptions,
27
+ TransactionParameters,
28
+ } from '../types.js'
29
+ import { getSubstatusMessage } from '../utils.js'
30
+ import { waitForReceivingTransaction } from '../waitForReceivingTransaction.js'
31
+ import { checkAllowance } from './checkAllowance.js'
32
+ import { updateMultisigRouteProcess } from './multisig.js'
33
+ import { switchChain } from './switchChain.js'
34
+ import type { MultisigConfig, MultisigTransaction } from './types.js'
35
+ import { getMaxPriorityFeePerGas } from './utils.js'
36
+
37
+ export interface EVMStepExecutorOptions extends StepExecutorOptions {
38
+ walletClient: WalletClient
39
+ multisig?: MultisigConfig
40
+ }
41
+
42
+ export class EVMStepExecutor extends BaseStepExecutor {
43
+ private walletClient: WalletClient
44
+ private multisig?: MultisigConfig
45
+
46
+ constructor(options: EVMStepExecutorOptions) {
47
+ super(options)
48
+ this.walletClient = options.walletClient
49
+ this.multisig = options.multisig
50
+ }
51
+
52
+ // TODO: add checkChain method and update wallet client inside executors
53
+ // This can come in handy when we execute multiple routes simultaneously and
54
+ // should be sure that we are on the right chain when waiting for transactions.
55
+ checkChain = async (
56
+ step: LiFiStepExtended
57
+ ): Promise<WalletClient | undefined> => {
58
+ const updatedWalletClient = await switchChain(
59
+ this.walletClient,
60
+ this.statusManager,
61
+ step,
62
+ this.allowUserInteraction,
63
+ this.executionOptions?.switchChainHook
64
+ )
65
+ if (updatedWalletClient) {
66
+ this.walletClient = updatedWalletClient
67
+ }
68
+ return updatedWalletClient
69
+ }
70
+
71
+ executeStep = async (step: LiFiStepExtended): Promise<LiFiStepExtended> => {
72
+ // Make sure that the chain is still correct
73
+
74
+ // Find if it's bridging and the step is waiting for a transaction on the receiving chain
75
+ const recievingChainProcess = step.execution?.process.find(
76
+ (process) => process.type === 'RECEIVING_CHAIN'
77
+ )
78
+
79
+ // If the step is waiting for a transaction on the receiving chain, we do not switch the chain
80
+ // All changes are already done from the source chain
81
+ // Return the step
82
+ if (recievingChainProcess?.substatus !== 'WAIT_DESTINATION_TRANSACTION') {
83
+ const updatedWalletClient = await this.checkChain(step)
84
+ if (!updatedWalletClient) {
85
+ return step
86
+ }
87
+ }
88
+
89
+ const isMultisigWalletClient = !!this.multisig?.isMultisigWalletClient
90
+ const multisigBatchTransactions: MultisigTransaction[] = []
91
+
92
+ const shouldBatchTransactions =
93
+ this.multisig?.shouldBatchTransactions &&
94
+ !!this.multisig.sendBatchTransaction
95
+
96
+ step.execution = this.statusManager.initExecutionObject(step)
97
+
98
+ const fromChain = await config.getChainById(step.action.fromChainId)
99
+ const toChain = await config.getChainById(step.action.toChainId)
100
+
101
+ const isBridgeExecution = fromChain.id !== toChain.id
102
+ const currentProcessType = isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'
103
+
104
+ // STEP 1: Check allowance
105
+ const existingProcess = step.execution.process.find(
106
+ (p) => p.type === currentProcessType
107
+ )
108
+
109
+ // Check token approval only if fromToken is not the native token => no approval needed in that case
110
+ const checkForAllowance =
111
+ !existingProcess?.txHash &&
112
+ !isZeroAddress(step.action.fromToken.address) &&
113
+ (shouldBatchTransactions || !isMultisigWalletClient)
114
+
115
+ if (checkForAllowance) {
116
+ const data = await checkAllowance(
117
+ fromChain,
118
+ step,
119
+ this.walletClient,
120
+ this.statusManager,
121
+ this.executionOptions,
122
+ this.allowUserInteraction,
123
+ shouldBatchTransactions
124
+ )
125
+
126
+ if (data) {
127
+ // allowance doesn't need value
128
+ const baseTransaction: MultisigTransaction = {
129
+ to: step.action.fromToken.address,
130
+ data,
131
+ }
132
+
133
+ multisigBatchTransactions.push(baseTransaction)
134
+ }
135
+ }
136
+
137
+ // STEP 2: Get transaction
138
+ let process = this.statusManager.findOrCreateProcess(
139
+ step,
140
+ currentProcessType
141
+ )
142
+
143
+ if (process.status !== 'DONE') {
144
+ const multisigProcess = step.execution.process.find(
145
+ (p) => !!p.multisigTxHash
146
+ )
147
+
148
+ try {
149
+ if (isMultisigWalletClient && multisigProcess) {
150
+ const multisigTxHash = multisigProcess.multisigTxHash as Hash
151
+ if (!multisigTxHash) {
152
+ throw new ValidationError(
153
+ 'Multisig internal transaction hash is undefined.'
154
+ )
155
+ }
156
+ await updateMultisigRouteProcess(
157
+ multisigTxHash,
158
+ step,
159
+ process.type,
160
+ fromChain,
161
+ this.statusManager,
162
+ this.multisig
163
+ )
164
+ }
165
+
166
+ let txHash: Hash
167
+ if (process.txHash) {
168
+ // Make sure that the chain is still correct
169
+ const updatedWalletClient = await this.checkChain(step)
170
+ if (!updatedWalletClient) {
171
+ return step
172
+ }
173
+
174
+ // Wait for exiting transaction
175
+ txHash = process.txHash as Hash
176
+ } else {
177
+ process = this.statusManager.updateProcess(
178
+ step,
179
+ process.type,
180
+ 'STARTED'
181
+ )
182
+
183
+ // Check balance
184
+ await checkBalance(this.walletClient.account!.address, step)
185
+
186
+ // Create new transaction
187
+ if (!step.transactionRequest) {
188
+ const { execution, ...stepBase } = step
189
+ const updatedStep = await getStepTransaction(stepBase)
190
+ const comparedStep = await stepComparison(
191
+ this.statusManager,
192
+ step,
193
+ updatedStep,
194
+ this.allowUserInteraction,
195
+ this.executionOptions
196
+ )
197
+ step = {
198
+ ...comparedStep,
199
+ execution: step.execution,
200
+ }
201
+ }
202
+
203
+ if (!step.transactionRequest) {
204
+ throw new TransactionError(
205
+ LiFiErrorCode.TransactionUnprepared,
206
+ 'Unable to prepare transaction.'
207
+ )
208
+ }
209
+
210
+ // STEP 3: Send the transaction
211
+ // Make sure that the chain is still correct
212
+ const updatedWalletClient = await this.checkChain(step)
213
+ if (!updatedWalletClient) {
214
+ return step
215
+ }
216
+
217
+ process = this.statusManager.updateProcess(
218
+ step,
219
+ process.type,
220
+ 'ACTION_REQUIRED'
221
+ )
222
+
223
+ if (!this.allowUserInteraction) {
224
+ return step
225
+ }
226
+
227
+ let transactionRequest: TransactionParameters = {
228
+ to: step.transactionRequest.to as Hash,
229
+ from: step.transactionRequest.from as Hash,
230
+ data: step.transactionRequest.data as Hash,
231
+ value: step.transactionRequest.value
232
+ ? BigInt(step.transactionRequest.value as string)
233
+ : undefined,
234
+ gas: step.transactionRequest.gasLimit
235
+ ? BigInt(step.transactionRequest.gasLimit as string)
236
+ : undefined,
237
+ // gasPrice: step.transactionRequest.gasPrice
238
+ // ? BigInt(step.transactionRequest.gasPrice as string)
239
+ // : undefined,
240
+ // maxFeePerGas: step.transactionRequest.maxFeePerGas
241
+ // ? BigInt(step.transactionRequest.maxFeePerGas as string)
242
+ // : undefined,
243
+ maxPriorityFeePerGas:
244
+ this.walletClient.account?.type === 'local'
245
+ ? await getMaxPriorityFeePerGas(
246
+ this.walletClient.extend(publicActions) as PublicClient
247
+ )
248
+ : step.transactionRequest.maxPriorityFeePerGas
249
+ ? BigInt(
250
+ step.transactionRequest.maxPriorityFeePerGas as string
251
+ )
252
+ : undefined,
253
+ }
254
+
255
+ if (this.executionOptions?.updateTransactionRequestHook) {
256
+ const customizedTransactionRequest: TransactionParameters =
257
+ await this.executionOptions.updateTransactionRequestHook({
258
+ requestType: 'transaction',
259
+ ...transactionRequest,
260
+ })
261
+
262
+ transactionRequest = {
263
+ ...transactionRequest,
264
+ ...customizedTransactionRequest,
265
+ }
266
+ }
267
+
268
+ if (shouldBatchTransactions && this.multisig?.sendBatchTransaction) {
269
+ if (transactionRequest.to && transactionRequest.data) {
270
+ const populatedTransaction: MultisigTransaction = {
271
+ value: transactionRequest.value,
272
+ to: transactionRequest.to,
273
+ data: transactionRequest.data,
274
+ }
275
+ multisigBatchTransactions.push(populatedTransaction)
276
+
277
+ txHash = await this.multisig?.sendBatchTransaction(
278
+ multisigBatchTransactions
279
+ )
280
+ } else {
281
+ throw new TransactionError(
282
+ LiFiErrorCode.TransactionUnprepared,
283
+ 'Unable to prepare transaction.'
284
+ )
285
+ }
286
+ } else {
287
+ txHash = await this.walletClient.sendTransaction({
288
+ to: transactionRequest.to as Address,
289
+ account: this.walletClient.account!,
290
+ data: transactionRequest.data,
291
+ value: transactionRequest.value,
292
+ gas: transactionRequest.gas,
293
+ gasPrice: transactionRequest.gasPrice,
294
+ maxFeePerGas: transactionRequest.maxFeePerGas,
295
+ maxPriorityFeePerGas: transactionRequest.maxPriorityFeePerGas,
296
+ chain: null,
297
+ } as SendTransactionParameters)
298
+ }
299
+
300
+ // STEP 4: Wait for the transaction
301
+ if (isMultisigWalletClient) {
302
+ process = this.statusManager.updateProcess(
303
+ step,
304
+ process.type,
305
+ 'ACTION_REQUIRED',
306
+ {
307
+ multisigTxHash: txHash,
308
+ }
309
+ )
310
+ } else {
311
+ process = this.statusManager.updateProcess(
312
+ step,
313
+ process.type,
314
+ 'PENDING',
315
+ {
316
+ txHash: txHash,
317
+ txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txHash}`,
318
+ }
319
+ )
320
+ }
321
+ }
322
+
323
+ let replacementReason: ReplacementReason | undefined
324
+ const transactionReceipt = await this.walletClient
325
+ .extend(publicActions)
326
+ .waitForTransactionReceipt({
327
+ hash: txHash,
328
+ onReplaced: (response) => {
329
+ replacementReason = response.reason
330
+ this.statusManager.updateProcess(step, process.type, 'PENDING', {
331
+ txHash: response.transaction.hash,
332
+ txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${response.transaction.hash}`,
333
+ })
334
+ },
335
+ })
336
+
337
+ if (replacementReason === 'cancelled') {
338
+ throw new TransactionError(
339
+ LiFiErrorCode.TransactionCanceled,
340
+ 'User canceled transaction.'
341
+ )
342
+ }
343
+
344
+ // if it's multisig wallet client and the process is in ACTION_REQUIRED
345
+ // then signatures are still needed
346
+ if (isMultisigWalletClient && process.status === 'ACTION_REQUIRED') {
347
+ await updateMultisigRouteProcess(
348
+ transactionReceipt.transactionHash,
349
+ step,
350
+ process.type,
351
+ fromChain,
352
+ this.statusManager,
353
+ this.multisig
354
+ )
355
+ }
356
+
357
+ if (!isMultisigWalletClient) {
358
+ process = this.statusManager.updateProcess(
359
+ step,
360
+ process.type,
361
+ 'PENDING',
362
+ {
363
+ txHash: transactionReceipt.transactionHash,
364
+ txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${transactionReceipt.transactionHash}`,
365
+ }
366
+ )
367
+ }
368
+
369
+ if (isBridgeExecution) {
370
+ process = this.statusManager.updateProcess(step, process.type, 'DONE')
371
+ }
372
+ } catch (e: any) {
373
+ const error = await parseError(e, step, process)
374
+ process = this.statusManager.updateProcess(
375
+ step,
376
+ process.type,
377
+ 'FAILED',
378
+ {
379
+ error: {
380
+ message: error.message,
381
+ htmlMessage: error.htmlMessage,
382
+ code: error.code,
383
+ },
384
+ }
385
+ )
386
+ this.statusManager.updateExecution(step, 'FAILED')
387
+ throw error
388
+ }
389
+ }
390
+
391
+ // STEP 5: Wait for the receiving chain
392
+ const processTxHash = process.txHash
393
+ if (isBridgeExecution) {
394
+ process = this.statusManager.findOrCreateProcess(
395
+ step,
396
+ 'RECEIVING_CHAIN',
397
+ 'PENDING'
398
+ )
399
+ }
400
+ let statusResponse: FullStatusData
401
+ try {
402
+ if (!processTxHash) {
403
+ throw new Error('Transaction hash is undefined.')
404
+ }
405
+ statusResponse = (await waitForReceivingTransaction(
406
+ processTxHash,
407
+ this.statusManager,
408
+ process.type,
409
+ step
410
+ )) as FullStatusData
411
+
412
+ const statusReceiving =
413
+ statusResponse.receiving as ExtendedTransactionInfo
414
+
415
+ process = this.statusManager.updateProcess(step, process.type, 'DONE', {
416
+ substatus: statusResponse.substatus,
417
+ substatusMessage:
418
+ statusResponse.substatusMessage ||
419
+ getSubstatusMessage(statusResponse.status, statusResponse.substatus),
420
+ txHash: statusReceiving?.txHash,
421
+ txLink: `${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
422
+ })
423
+
424
+ this.statusManager.updateExecution(step, 'DONE', {
425
+ fromAmount: statusResponse.sending.amount,
426
+ toAmount: statusReceiving?.amount,
427
+ toToken: statusReceiving?.token,
428
+ gasCosts: [
429
+ {
430
+ amount: statusResponse.sending.gasAmount,
431
+ amountUSD: statusResponse.sending.gasAmountUSD,
432
+ token: statusResponse.sending.gasToken,
433
+ estimate: statusResponse.sending.gasUsed,
434
+ limit: statusResponse.sending.gasUsed,
435
+ price: statusResponse.sending.gasPrice,
436
+ type: 'SEND',
437
+ },
438
+ ],
439
+ })
440
+ } catch (e: unknown) {
441
+ const htmlMessage = await getTransactionFailedMessage(
442
+ step,
443
+ process.txLink
444
+ )
445
+
446
+ process = this.statusManager.updateProcess(step, process.type, 'FAILED', {
447
+ error: {
448
+ code: LiFiErrorCode.TransactionFailed,
449
+ message: 'Failed while waiting for receiving chain.',
450
+ htmlMessage,
451
+ },
452
+ })
453
+ this.statusManager.updateExecution(step, 'FAILED')
454
+ console.warn(e)
455
+ throw e
456
+ }
457
+
458
+ // DONE
459
+ return step
460
+ }
461
+ }
@@ -0,0 +1,47 @@
1
+ import type { Abi } from 'viem'
2
+
3
+ export const approveAbi: Abi = [
4
+ {
5
+ name: 'approve',
6
+ inputs: [
7
+ { internalType: 'address', name: 'spender', type: 'address' },
8
+ { internalType: 'uint256', name: 'amount', type: 'uint256' },
9
+ ],
10
+ outputs: [{ internalType: 'bool', name: 'approved', type: 'bool' }],
11
+ stateMutability: 'nonpayable',
12
+ type: 'function',
13
+ },
14
+ ]
15
+
16
+ export const allowanceAbi: Abi = [
17
+ {
18
+ name: 'allowance',
19
+ inputs: [
20
+ { internalType: 'address', name: 'owner', type: 'address' },
21
+ { internalType: 'address', name: 'spender', type: 'address' },
22
+ ],
23
+ outputs: [{ internalType: 'uint256', name: 'allowance', type: 'uint256' }],
24
+ stateMutability: 'view',
25
+ type: 'function',
26
+ },
27
+ ]
28
+
29
+ export const getEthBalanceAbi: Abi = [
30
+ {
31
+ inputs: [{ name: '_owner', type: 'address' }],
32
+ name: 'getEthBalance',
33
+ outputs: [{ name: 'balance', type: 'uint256' }],
34
+ type: 'function',
35
+ stateMutability: 'view',
36
+ },
37
+ ]
38
+
39
+ export const balanceOfAbi: Abi = [
40
+ {
41
+ inputs: [{ name: '_owner', type: 'address' }],
42
+ name: 'balanceOf',
43
+ outputs: [{ name: 'balance', type: 'uint256' }],
44
+ type: 'function',
45
+ stateMutability: 'view',
46
+ },
47
+ ]
@@ -0,0 +1,152 @@
1
+ import type { Chain, LiFiStep, Process, ProcessType } from '@lifi/types'
2
+ import type { Address, Hash, ReplacementReason, WalletClient } from 'viem'
3
+ import { maxUint256, publicActions } from 'viem'
4
+ import { LiFiErrorCode, TransactionError } from '../../utils/index.js'
5
+ import { parseError } from '../../utils/parseError.js'
6
+ import type { StatusManager } from '../StatusManager.js'
7
+ import type { ExecutionOptions } from '../types.js'
8
+ import { getAllowance } from './getAllowance.js'
9
+ import { setAllowance } from './setAllowance.js'
10
+
11
+ export const checkAllowance = async (
12
+ chain: Chain,
13
+ step: LiFiStep,
14
+ walletClient: WalletClient,
15
+ statusManager: StatusManager,
16
+ settings?: ExecutionOptions,
17
+ allowUserInteraction = false,
18
+ shouldBatchTransactions = false
19
+ ): Promise<Hash | void> => {
20
+ // Ask the user to set an allowance
21
+ let allowanceProcess: Process = statusManager.findOrCreateProcess(
22
+ step,
23
+ 'TOKEN_ALLOWANCE'
24
+ )
25
+
26
+ // Check allowance
27
+ try {
28
+ if (allowanceProcess.txHash && allowanceProcess.status !== 'DONE') {
29
+ await waitForApprovalTransaction(
30
+ walletClient,
31
+ allowanceProcess.txHash! as Address,
32
+ allowanceProcess.type,
33
+ step,
34
+ chain,
35
+ statusManager
36
+ )
37
+ } else {
38
+ const approved = await getAllowance(
39
+ chain.id,
40
+ step.action.fromToken.address,
41
+ walletClient.account!.address,
42
+ step.estimate.approvalAddress
43
+ )
44
+
45
+ const fromAmount = BigInt(step.action.fromAmount)
46
+
47
+ if (fromAmount > approved) {
48
+ if (!allowUserInteraction) {
49
+ return
50
+ }
51
+ const approvalAmount = settings?.infiniteApproval
52
+ ? maxUint256
53
+ : fromAmount
54
+
55
+ if (shouldBatchTransactions) {
56
+ const approveTxHash = await setAllowance(
57
+ walletClient,
58
+ step.action.fromToken.address,
59
+ step.estimate.approvalAddress,
60
+ approvalAmount,
61
+ settings,
62
+ true
63
+ )
64
+
65
+ allowanceProcess = statusManager.updateProcess(
66
+ step,
67
+ allowanceProcess.type,
68
+ 'DONE'
69
+ )
70
+
71
+ return approveTxHash
72
+ }
73
+
74
+ const approveTxHash = await setAllowance(
75
+ walletClient,
76
+ step.action.fromToken.address,
77
+ step.estimate.approvalAddress,
78
+ approvalAmount
79
+ )
80
+ await waitForApprovalTransaction(
81
+ walletClient,
82
+ approveTxHash,
83
+ allowanceProcess.type,
84
+ step,
85
+ chain,
86
+ statusManager
87
+ )
88
+ } else {
89
+ allowanceProcess = statusManager.updateProcess(
90
+ step,
91
+ allowanceProcess.type,
92
+ 'DONE'
93
+ )
94
+ }
95
+ }
96
+ } catch (e: any) {
97
+ const error = await parseError(e, step, allowanceProcess)
98
+ allowanceProcess = statusManager.updateProcess(
99
+ step,
100
+ allowanceProcess.type,
101
+ 'FAILED',
102
+ {
103
+ error: {
104
+ message: error.message,
105
+ htmlMessage: error.htmlMessage,
106
+ code: error.code,
107
+ },
108
+ }
109
+ )
110
+ statusManager.updateExecution(step, 'FAILED')
111
+ throw error
112
+ }
113
+ }
114
+
115
+ const waitForApprovalTransaction = async (
116
+ walletClient: WalletClient,
117
+ txHash: Hash,
118
+ processType: ProcessType,
119
+ step: LiFiStep,
120
+ chain: Chain,
121
+ statusManager: StatusManager
122
+ ) => {
123
+ const client = walletClient.extend(publicActions)
124
+ statusManager.updateProcess(step, processType, 'PENDING', {
125
+ txHash,
126
+ txLink: `${chain.metamask.blockExplorerUrls[0]}tx/${txHash}`,
127
+ })
128
+
129
+ let replacementReason: ReplacementReason | undefined
130
+ const transactionReceipt = await client.waitForTransactionReceipt({
131
+ hash: txHash,
132
+ onReplaced(response) {
133
+ replacementReason = response.reason
134
+ statusManager.updateProcess(step, processType, 'PENDING', {
135
+ txHash: response.transaction.hash,
136
+ txLink: `${chain.metamask.blockExplorerUrls[0]}tx/${response.transaction.hash}`,
137
+ })
138
+ },
139
+ })
140
+
141
+ if (replacementReason === 'cancelled') {
142
+ throw new TransactionError(
143
+ LiFiErrorCode.TransactionCanceled,
144
+ 'User canceled transaction.'
145
+ )
146
+ }
147
+
148
+ statusManager.updateProcess(step, processType, 'DONE', {
149
+ txHash: transactionReceipt.transactionHash,
150
+ txLink: `${chain.metamask.blockExplorerUrls[0]}tx/${transactionReceipt.transactionHash}`,
151
+ })
152
+ }