@lifi/sdk 3.0.0-alpha.8 → 3.0.0-beta.0

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