@lifi/sdk 3.0.0-alpha.3 → 3.0.0-alpha.30

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