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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/package.json +40 -98
  2. package/src/_cjs/config.js +90 -0
  3. package/src/_cjs/config.js.map +1 -0
  4. package/{dist/cjs → src/_cjs}/constants.js +3 -5
  5. package/src/_cjs/constants.js.map +1 -0
  6. package/src/_cjs/core/BaseStepExecutor.js +55 -0
  7. package/src/_cjs/core/BaseStepExecutor.js.map +1 -0
  8. package/src/_cjs/core/EVM/EVM.js +43 -0
  9. package/src/_cjs/core/EVM/EVM.js.map +1 -0
  10. package/src/_cjs/core/EVM/EVMStepExecutor.js +304 -0
  11. package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -0
  12. package/{dist/cjs/types → src/_cjs/core/EVM}/abi.js +1 -0
  13. package/src/_cjs/core/EVM/abi.js.map +1 -0
  14. package/{dist/cjs/execution → src/_cjs/core/EVM}/checkAllowance.js +19 -12
  15. package/src/_cjs/core/EVM/checkAllowance.js.map +1 -0
  16. package/{dist/cjs/allowance → src/_cjs/core/EVM}/getAllowance.js +13 -17
  17. package/src/_cjs/core/EVM/getAllowance.js.map +1 -0
  18. package/src/_cjs/core/EVM/getENSAddress.js +20 -0
  19. package/src/_cjs/core/EVM/getENSAddress.js.map +1 -0
  20. package/{dist/cjs/balance/getBalance.js → src/_cjs/core/EVM/getEVMBalance.js} +20 -22
  21. package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -0
  22. package/{dist/cjs/execution → src/_cjs/core/EVM}/multisig.js +7 -8
  23. package/src/_cjs/core/EVM/multisig.js.map +1 -0
  24. package/src/_cjs/core/EVM/publicClient.js +43 -0
  25. package/src/_cjs/core/EVM/publicClient.js.map +1 -0
  26. package/{dist/cjs/allowance → src/_cjs/core/EVM}/setAllowance.js +11 -12
  27. package/src/_cjs/core/EVM/setAllowance.js.map +1 -0
  28. package/src/_cjs/core/EVM/switchChain.js +38 -0
  29. package/src/_cjs/core/EVM/switchChain.js.map +1 -0
  30. package/src/_cjs/core/EVM/types.js +9 -0
  31. package/src/_cjs/core/EVM/types.js.map +1 -0
  32. package/{dist/cjs/utils/getMaxPriorityFeePerGas.js → src/_cjs/core/EVM/utils.js} +13 -3
  33. package/src/_cjs/core/EVM/utils.js.map +1 -0
  34. package/src/_cjs/core/Solana/KeypairWalletAdapter.js +88 -0
  35. package/src/_cjs/core/Solana/KeypairWalletAdapter.js.map +1 -0
  36. package/src/_cjs/core/Solana/Solana.js +38 -0
  37. package/src/_cjs/core/Solana/Solana.js.map +1 -0
  38. package/src/_cjs/core/Solana/SolanaStepExecutor.js +200 -0
  39. package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -0
  40. package/src/_cjs/core/Solana/connection.js +19 -0
  41. package/src/_cjs/core/Solana/connection.js.map +1 -0
  42. package/src/_cjs/core/Solana/getSNSAddress.js +26 -0
  43. package/src/_cjs/core/Solana/getSNSAddress.js.map +1 -0
  44. package/src/_cjs/core/Solana/getSolanaBalance.js +60 -0
  45. package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -0
  46. package/src/_cjs/core/Solana/isAddress.js +15 -0
  47. package/src/_cjs/core/Solana/isAddress.js.map +1 -0
  48. package/src/_cjs/core/Solana/types.js +10 -0
  49. package/src/_cjs/core/Solana/types.js.map +1 -0
  50. package/src/_cjs/core/StatusManager.js +168 -0
  51. package/src/_cjs/core/StatusManager.js.map +1 -0
  52. package/{dist/cjs/execution → src/_cjs/core}/checkBalance.js +6 -6
  53. package/src/_cjs/core/checkBalance.js.map +1 -0
  54. package/src/_cjs/core/execution.js +138 -0
  55. package/src/_cjs/core/execution.js.map +1 -0
  56. package/src/_cjs/core/executionState.js +29 -0
  57. package/src/_cjs/core/executionState.js.map +1 -0
  58. package/src/_cjs/core/index.js +7 -0
  59. package/src/_cjs/core/index.js.map +1 -0
  60. package/src/_cjs/core/prepareRestart.js +23 -0
  61. package/src/_cjs/core/prepareRestart.js.map +1 -0
  62. package/src/_cjs/core/provider.js +15 -0
  63. package/src/_cjs/core/provider.js.map +1 -0
  64. package/src/_cjs/core/rpc.js +18 -0
  65. package/src/_cjs/core/rpc.js.map +1 -0
  66. package/src/_cjs/core/stepComparison.js +25 -0
  67. package/src/_cjs/core/stepComparison.js.map +1 -0
  68. package/{dist/cjs/allowance → src/_cjs/core}/types.js +1 -0
  69. package/src/_cjs/core/types.js.map +1 -0
  70. package/{dist/cjs/execution → src/_cjs/core}/utils.js +2 -11
  71. package/src/_cjs/core/utils.js.map +1 -0
  72. package/{dist/cjs/execution → src/_cjs/core}/waitForReceivingTransaction.js +13 -14
  73. package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -0
  74. package/src/_cjs/createConfig.js +34 -0
  75. package/src/_cjs/createConfig.js.map +1 -0
  76. package/src/_cjs/helpers.js +50 -0
  77. package/src/_cjs/helpers.js.map +1 -0
  78. package/src/_cjs/index.js +30 -0
  79. package/src/_cjs/index.js.map +1 -0
  80. package/src/_cjs/package.json +1 -0
  81. package/{dist/cjs → src/_cjs}/request.js +18 -15
  82. package/src/_cjs/request.js.map +1 -0
  83. package/src/_cjs/services/api.js +309 -0
  84. package/src/_cjs/services/api.js.map +1 -0
  85. package/src/_cjs/services/balance.js +49 -0
  86. package/src/_cjs/services/balance.js.map +1 -0
  87. package/src/_cjs/services/getNameServiceAddress.js +29 -0
  88. package/src/_cjs/services/getNameServiceAddress.js.map +1 -0
  89. package/{dist/cjs → src/_cjs}/typeguards.js +1 -0
  90. package/src/_cjs/typeguards.js.map +1 -0
  91. package/src/_cjs/types/index.js +5 -0
  92. package/src/_cjs/types/index.js.map +1 -0
  93. package/{dist/cjs → src/_cjs}/types/internal.js +1 -0
  94. package/src/_cjs/types/internal.js.map +1 -0
  95. package/src/_cjs/utils/base64ToUint8Array.js +14 -0
  96. package/src/_cjs/utils/base64ToUint8Array.js.map +1 -0
  97. package/{dist/cjs → src/_cjs}/utils/errors.js +26 -3
  98. package/src/_cjs/utils/errors.js.map +1 -0
  99. package/src/_cjs/utils/getTransactionMessage.js +31 -0
  100. package/src/_cjs/utils/getTransactionMessage.js.map +1 -0
  101. package/src/_cjs/utils/index.js +9 -0
  102. package/src/_cjs/utils/index.js.map +1 -0
  103. package/{dist/cjs → src/_cjs}/utils/median.js +1 -0
  104. package/src/_cjs/utils/median.js.map +1 -0
  105. package/src/_cjs/utils/parseBackendError.js +27 -0
  106. package/src/_cjs/utils/parseBackendError.js.map +1 -0
  107. package/src/_cjs/utils/parseError.js +69 -0
  108. package/src/_cjs/utils/parseError.js.map +1 -0
  109. package/{dist/cjs → src/_cjs}/utils/utils.js +5 -11
  110. package/src/_cjs/utils/utils.js.map +1 -0
  111. package/{dist/cjs → src/_cjs}/version.js +2 -1
  112. package/src/_cjs/version.js.map +1 -0
  113. package/src/_esm/config.js +87 -0
  114. package/src/_esm/config.js.map +1 -0
  115. package/{dist → src/_esm}/constants.js +2 -4
  116. package/src/_esm/constants.js.map +1 -0
  117. package/src/_esm/core/BaseStepExecutor.js +52 -0
  118. package/src/_esm/core/BaseStepExecutor.js.map +1 -0
  119. package/src/_esm/core/EVM/EVM.js +39 -0
  120. package/src/_esm/core/EVM/EVM.js.map +1 -0
  121. package/src/_esm/core/EVM/EVMStepExecutor.js +329 -0
  122. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -0
  123. package/{dist/types → src/_esm/core/EVM}/abi.js +1 -0
  124. package/src/_esm/core/EVM/abi.js.map +1 -0
  125. package/{dist/execution → src/_esm/core/EVM}/checkAllowance.js +14 -5
  126. package/src/_esm/core/EVM/checkAllowance.js.map +1 -0
  127. package/{dist/allowance → src/_esm/core/EVM}/getAllowance.js +19 -6
  128. package/src/_esm/core/EVM/getAllowance.js.map +1 -0
  129. package/src/_esm/core/EVM/getENSAddress.js +17 -0
  130. package/src/_esm/core/EVM/getENSAddress.js.map +1 -0
  131. package/{dist/balance/getBalance.js → src/_esm/core/EVM/getEVMBalance.js} +10 -12
  132. package/src/_esm/core/EVM/getEVMBalance.js.map +1 -0
  133. package/{dist/execution → src/_esm/core/EVM}/multisig.js +5 -6
  134. package/src/_esm/core/EVM/multisig.js.map +1 -0
  135. package/src/_esm/core/EVM/publicClient.js +46 -0
  136. package/src/_esm/core/EVM/publicClient.js.map +1 -0
  137. package/{dist/allowance → src/_esm/core/EVM}/setAllowance.js +23 -4
  138. package/src/_esm/core/EVM/setAllowance.js.map +1 -0
  139. package/{dist/execution → src/_esm/core/EVM}/switchChain.js +6 -4
  140. package/src/_esm/core/EVM/switchChain.js.map +1 -0
  141. package/src/_esm/core/EVM/types.js +6 -0
  142. package/src/_esm/core/EVM/types.js.map +1 -0
  143. package/{dist/utils/getMaxPriorityFeePerGas.js → src/_esm/core/EVM/utils.js} +12 -1
  144. package/src/_esm/core/EVM/utils.js.map +1 -0
  145. package/src/_esm/core/Solana/KeypairWalletAdapter.js +92 -0
  146. package/src/_esm/core/Solana/KeypairWalletAdapter.js.map +1 -0
  147. package/src/_esm/core/Solana/Solana.js +34 -0
  148. package/src/_esm/core/Solana/Solana.js.map +1 -0
  149. package/src/_esm/core/Solana/SolanaStepExecutor.js +214 -0
  150. package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -0
  151. package/src/_esm/core/Solana/connection.js +20 -0
  152. package/src/_esm/core/Solana/connection.js.map +1 -0
  153. package/src/_esm/core/Solana/getSNSAddress.js +26 -0
  154. package/src/_esm/core/Solana/getSNSAddress.js.map +1 -0
  155. package/src/_esm/core/Solana/getSolanaBalance.js +56 -0
  156. package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -0
  157. package/src/_esm/core/Solana/isAddress.js +11 -0
  158. package/src/_esm/core/Solana/isAddress.js.map +1 -0
  159. package/src/_esm/core/Solana/types.js +7 -0
  160. package/src/_esm/core/Solana/types.js.map +1 -0
  161. package/src/_esm/core/StatusManager.js +204 -0
  162. package/src/_esm/core/StatusManager.js.map +1 -0
  163. package/{dist/execution → src/_esm/core}/checkBalance.js +4 -3
  164. package/src/_esm/core/checkBalance.js.map +1 -0
  165. package/src/_esm/core/execution.js +176 -0
  166. package/src/_esm/core/execution.js.map +1 -0
  167. package/src/_esm/core/executionState.js +26 -0
  168. package/src/_esm/core/executionState.js.map +1 -0
  169. package/src/_esm/core/index.js +4 -0
  170. package/src/_esm/core/index.js.map +1 -0
  171. package/src/_esm/core/prepareRestart.js +19 -0
  172. package/src/_esm/core/prepareRestart.js.map +1 -0
  173. package/src/_esm/core/provider.js +11 -0
  174. package/src/_esm/core/provider.js.map +1 -0
  175. package/src/_esm/core/rpc.js +14 -0
  176. package/src/_esm/core/rpc.js.map +1 -0
  177. package/{dist/execution → src/_esm/core}/stepComparison.js +6 -4
  178. package/src/_esm/core/stepComparison.js.map +1 -0
  179. package/src/_esm/core/types.js +2 -0
  180. package/src/_esm/core/types.js.map +1 -0
  181. package/{dist/execution → src/_esm/core}/utils.js +4 -3
  182. package/src/_esm/core/utils.js.map +1 -0
  183. package/{dist/execution → src/_esm/core}/waitForReceivingTransaction.js +11 -9
  184. package/src/_esm/core/waitForReceivingTransaction.js.map +1 -0
  185. package/src/_esm/createConfig.js +30 -0
  186. package/src/_esm/createConfig.js.map +1 -0
  187. package/{dist → src/_esm}/helpers.js +6 -30
  188. package/src/_esm/helpers.js.map +1 -0
  189. package/src/_esm/index.js +17 -0
  190. package/src/_esm/index.js.map +1 -0
  191. package/src/_esm/package.json +1 -0
  192. package/{dist → src/_esm}/request.js +14 -10
  193. package/src/_esm/request.js.map +1 -0
  194. package/src/_esm/services/api.js +378 -0
  195. package/src/_esm/services/api.js.map +1 -0
  196. package/src/_esm/services/balance.js +65 -0
  197. package/src/_esm/services/balance.js.map +1 -0
  198. package/src/_esm/services/getNameServiceAddress.js +25 -0
  199. package/src/_esm/services/getNameServiceAddress.js.map +1 -0
  200. package/{dist → src/_esm}/typeguards.js +1 -0
  201. package/src/_esm/typeguards.js.map +1 -0
  202. package/src/_esm/types/index.js +2 -0
  203. package/src/_esm/types/index.js.map +1 -0
  204. package/src/_esm/types/internal.js +2 -0
  205. package/src/_esm/types/internal.js.map +1 -0
  206. package/src/_esm/utils/base64ToUint8Array.js +10 -0
  207. package/src/_esm/utils/base64ToUint8Array.js.map +1 -0
  208. package/{dist → src/_esm}/utils/errors.js +26 -0
  209. package/src/_esm/utils/errors.js.map +1 -0
  210. package/src/_esm/utils/getTransactionMessage.js +28 -0
  211. package/src/_esm/utils/getTransactionMessage.js.map +1 -0
  212. package/src/_esm/utils/index.js +6 -0
  213. package/src/_esm/utils/index.js.map +1 -0
  214. package/{dist → src/_esm}/utils/median.js +1 -0
  215. package/src/_esm/utils/median.js.map +1 -0
  216. package/src/_esm/utils/parseBackendError.js +24 -0
  217. package/src/_esm/utils/parseBackendError.js.map +1 -0
  218. package/{dist → src/_esm}/utils/parseError.js +6 -53
  219. package/src/_esm/utils/parseError.js.map +1 -0
  220. package/{dist → src/_esm}/utils/utils.js +2 -1
  221. package/src/_esm/utils/utils.js.map +1 -0
  222. package/src/_esm/version.js +3 -0
  223. package/src/_esm/version.js.map +1 -0
  224. package/src/_types/config.d.ts +15 -0
  225. package/src/_types/config.d.ts.map +1 -0
  226. package/{dist/cjs → src/_types}/constants.d.ts +2 -4
  227. package/src/_types/constants.d.ts.map +1 -0
  228. package/src/_types/core/BaseStepExecutor.d.ts +13 -0
  229. package/src/_types/core/BaseStepExecutor.d.ts.map +1 -0
  230. package/src/_types/core/EVM/EVM.d.ts +3 -0
  231. package/src/_types/core/EVM/EVM.d.ts.map +1 -0
  232. package/src/_types/core/EVM/EVMStepExecutor.d.ts +17 -0
  233. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -0
  234. package/{dist/cjs/types → src/_types/core/EVM}/abi.d.ts +1 -0
  235. package/src/_types/core/EVM/abi.d.ts.map +1 -0
  236. package/src/_types/core/EVM/checkAllowance.d.ts +6 -0
  237. package/src/_types/core/EVM/checkAllowance.d.ts.map +1 -0
  238. package/{dist/cjs/allowance → src/_types/core/EVM}/getAllowance.d.ts +15 -1
  239. package/src/_types/core/EVM/getAllowance.d.ts.map +1 -0
  240. package/src/_types/core/EVM/getENSAddress.d.ts +2 -0
  241. package/src/_types/core/EVM/getENSAddress.d.ts.map +1 -0
  242. package/src/_types/core/EVM/getEVMBalance.d.ts +3 -0
  243. package/src/_types/core/EVM/getEVMBalance.d.ts.map +1 -0
  244. package/src/_types/core/EVM/multisig.d.ts +6 -0
  245. package/src/_types/core/EVM/multisig.d.ts.map +1 -0
  246. package/src/_types/core/EVM/publicClient.d.ts +8 -0
  247. package/src/_types/core/EVM/publicClient.d.ts.map +1 -0
  248. package/src/_types/core/EVM/setAllowance.d.ts +25 -0
  249. package/src/_types/core/EVM/setAllowance.d.ts.map +1 -0
  250. package/{dist/execution → src/_types/core/EVM}/switchChain.d.ts +4 -4
  251. package/src/_types/core/EVM/switchChain.d.ts.map +1 -0
  252. package/src/_types/core/EVM/types.d.ts +55 -0
  253. package/src/_types/core/EVM/types.d.ts.map +1 -0
  254. package/src/_types/core/EVM/utils.d.ts +10 -0
  255. package/src/_types/core/EVM/utils.d.ts.map +1 -0
  256. package/src/_types/core/Solana/KeypairWalletAdapter.d.ts +28 -0
  257. package/src/_types/core/Solana/KeypairWalletAdapter.d.ts.map +1 -0
  258. package/src/_types/core/Solana/Solana.d.ts +3 -0
  259. package/src/_types/core/Solana/Solana.d.ts.map +1 -0
  260. package/src/_types/core/Solana/SolanaStepExecutor.d.ts +13 -0
  261. package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -0
  262. package/src/_types/core/Solana/connection.d.ts +8 -0
  263. package/src/_types/core/Solana/connection.d.ts.map +1 -0
  264. package/src/_types/core/Solana/getSNSAddress.d.ts +2 -0
  265. package/src/_types/core/Solana/getSNSAddress.d.ts.map +1 -0
  266. package/src/_types/core/Solana/getSolanaBalance.d.ts +3 -0
  267. package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -0
  268. package/src/_types/core/Solana/isAddress.d.ts +2 -0
  269. package/src/_types/core/Solana/isAddress.d.ts.map +1 -0
  270. package/src/_types/core/Solana/types.d.ts +11 -0
  271. package/src/_types/core/Solana/types.d.ts.map +1 -0
  272. package/{dist/cjs/execution → src/_types/core}/StatusManager.d.ts +14 -28
  273. package/src/_types/core/StatusManager.d.ts.map +1 -0
  274. package/{dist/cjs/execution → src/_types/core}/checkBalance.d.ts +1 -0
  275. package/src/_types/core/checkBalance.d.ts.map +1 -0
  276. package/src/_types/core/execution.d.ts +42 -0
  277. package/src/_types/core/execution.d.ts.map +1 -0
  278. package/src/_types/core/executionState.d.ts +17 -0
  279. package/src/_types/core/executionState.d.ts.map +1 -0
  280. package/src/_types/core/index.d.ts +4 -0
  281. package/src/_types/core/index.d.ts.map +1 -0
  282. package/src/_types/core/prepareRestart.d.ts +3 -0
  283. package/src/_types/core/prepareRestart.d.ts.map +1 -0
  284. package/src/_types/core/provider.d.ts +3 -0
  285. package/src/_types/core/provider.d.ts.map +1 -0
  286. package/src/_types/core/rpc.d.ts +4 -0
  287. package/src/_types/core/rpc.d.ts.map +1 -0
  288. package/{dist/execution → src/_types/core}/stepComparison.d.ts +5 -3
  289. package/src/_types/core/stepComparison.d.ts.map +1 -0
  290. package/src/_types/core/types.d.ts +81 -0
  291. package/src/_types/core/types.d.ts.map +1 -0
  292. package/{dist/execution → src/_types/core}/utils.d.ts +3 -2
  293. package/src/_types/core/utils.d.ts.map +1 -0
  294. package/{dist/cjs/execution → src/_types/core}/waitForReceivingTransaction.d.ts +2 -1
  295. package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -0
  296. package/src/_types/createConfig.d.ts +4 -0
  297. package/src/_types/createConfig.d.ts.map +1 -0
  298. package/{dist/cjs → src/_types}/helpers.d.ts +3 -9
  299. package/src/_types/helpers.d.ts.map +1 -0
  300. package/src/_types/index.d.ts +18 -0
  301. package/src/_types/index.d.ts.map +1 -0
  302. package/{dist → src/_types}/request.d.ts +1 -0
  303. package/src/_types/request.d.ts.map +1 -0
  304. package/src/_types/services/api.d.ts +89 -0
  305. package/src/_types/services/api.d.ts.map +1 -0
  306. package/src/_types/services/balance.d.ts +30 -0
  307. package/src/_types/services/balance.d.ts.map +1 -0
  308. package/src/_types/services/getNameServiceAddress.d.ts +3 -0
  309. package/src/_types/services/getNameServiceAddress.d.ts.map +1 -0
  310. package/{dist/cjs → src/_types}/typeguards.d.ts +1 -0
  311. package/src/_types/typeguards.d.ts.map +1 -0
  312. package/src/_types/types/index.d.ts +2 -0
  313. package/src/_types/types/index.d.ts.map +1 -0
  314. package/{dist → src/_types}/types/internal.d.ts +14 -15
  315. package/src/_types/types/internal.d.ts.map +1 -0
  316. package/src/_types/utils/base64ToUint8Array.d.ts +2 -0
  317. package/src/_types/utils/base64ToUint8Array.d.ts.map +1 -0
  318. package/{dist/cjs → src/_types}/utils/errors.d.ts +3 -1
  319. package/src/_types/utils/errors.d.ts.map +1 -0
  320. package/src/_types/utils/getTransactionMessage.d.ts +4 -0
  321. package/src/_types/utils/getTransactionMessage.d.ts.map +1 -0
  322. package/src/_types/utils/index.d.ts +6 -0
  323. package/src/_types/utils/index.d.ts.map +1 -0
  324. package/{dist/cjs → src/_types}/utils/median.d.ts +1 -0
  325. package/src/_types/utils/median.d.ts.map +1 -0
  326. package/src/_types/utils/parseBackendError.d.ts +3 -0
  327. package/src/_types/utils/parseBackendError.d.ts.map +1 -0
  328. package/{dist → src/_types}/utils/parseError.d.ts +2 -4
  329. package/src/_types/utils/parseError.d.ts.map +1 -0
  330. package/{dist → src/_types}/utils/utils.d.ts +1 -0
  331. package/src/_types/utils/utils.d.ts.map +1 -0
  332. package/src/_types/version.d.ts +3 -0
  333. package/src/_types/version.d.ts.map +1 -0
  334. package/src/config.ts +91 -0
  335. package/src/constants.ts +4 -0
  336. package/src/core/BaseStepExecutor.ts +40 -0
  337. package/src/core/EVM/EVM.ts +47 -0
  338. package/src/core/EVM/EVMStepExecutor.ts +500 -0
  339. package/src/core/EVM/abi.ts +47 -0
  340. package/src/core/EVM/checkAllowance.ts +168 -0
  341. package/src/core/EVM/getAllowance.ts +144 -0
  342. package/src/core/EVM/getENSAddress.ts +18 -0
  343. package/src/core/EVM/getEVMBalance.ts +118 -0
  344. package/src/core/EVM/multisig.ts +53 -0
  345. package/src/core/EVM/publicClient.ts +54 -0
  346. package/src/core/EVM/setAllowance.ts +143 -0
  347. package/src/core/EVM/switchChain.ts +77 -0
  348. package/src/core/EVM/types.ts +73 -0
  349. package/src/core/EVM/utils.ts +48 -0
  350. package/src/core/Solana/KeypairWalletAdapter.ts +100 -0
  351. package/src/core/Solana/Solana.ts +41 -0
  352. package/src/core/Solana/SolanaStepExecutor.ts +331 -0
  353. package/src/core/Solana/connection.ts +20 -0
  354. package/src/core/Solana/getSNSAddress.ts +33 -0
  355. package/src/core/Solana/getSolanaBalance.ts +72 -0
  356. package/src/core/Solana/isAddress.ts +10 -0
  357. package/src/core/Solana/types.ts +17 -0
  358. package/src/core/StatusManager.ts +233 -0
  359. package/src/core/checkBalance.ts +48 -0
  360. package/src/core/execution.ts +214 -0
  361. package/src/core/executionState.ts +44 -0
  362. package/src/core/index.ts +3 -0
  363. package/src/core/prepareRestart.ts +26 -0
  364. package/src/core/provider.ts +12 -0
  365. package/src/core/rpc.ts +15 -0
  366. package/src/core/stepComparison.ts +51 -0
  367. package/src/core/types.ts +118 -0
  368. package/src/core/utils.ts +108 -0
  369. package/src/core/waitForReceivingTransaction.ts +74 -0
  370. package/src/createConfig.ts +35 -0
  371. package/src/helpers.ts +69 -0
  372. package/src/index.ts +24 -0
  373. package/src/request.ts +79 -0
  374. package/src/services/api.ts +509 -0
  375. package/src/services/balance.ts +93 -0
  376. package/src/services/getNameServiceAddress.ts +30 -0
  377. package/src/typeguards.ts +89 -0
  378. package/src/types/index.ts +1 -0
  379. package/src/types/internal.ts +62 -0
  380. package/src/utils/base64ToUint8Array.ts +9 -0
  381. package/src/utils/errors.ts +232 -0
  382. package/src/utils/getTransactionMessage.ts +46 -0
  383. package/src/utils/index.ts +5 -0
  384. package/src/utils/median.ts +11 -0
  385. package/src/utils/parseBackendError.ts +50 -0
  386. package/src/utils/parseError.ts +210 -0
  387. package/src/utils/utils.ts +48 -0
  388. package/src/version.ts +2 -0
  389. package/dist/LiFi.d.ts +0 -178
  390. package/dist/LiFi.js +0 -253
  391. package/dist/allowance/getAllowance.d.ts +0 -6
  392. package/dist/allowance/index.d.ts +0 -3
  393. package/dist/allowance/index.js +0 -3
  394. package/dist/allowance/setAllowance.d.ts +0 -6
  395. package/dist/allowance/types.d.ts +0 -27
  396. package/dist/allowance/types.js +0 -1
  397. package/dist/balance/getBalance.d.ts +0 -2
  398. package/dist/balance/getTokenBalance.d.ts +0 -8
  399. package/dist/balance/getTokenBalance.js +0 -27
  400. package/dist/balance/index.d.ts +0 -2
  401. package/dist/balance/index.js +0 -2
  402. package/dist/cjs/LiFi.d.ts +0 -178
  403. package/dist/cjs/LiFi.js +0 -283
  404. package/dist/cjs/allowance/index.d.ts +0 -3
  405. package/dist/cjs/allowance/index.js +0 -19
  406. package/dist/cjs/allowance/setAllowance.d.ts +0 -6
  407. package/dist/cjs/allowance/types.d.ts +0 -27
  408. package/dist/cjs/balance/getBalance.d.ts +0 -2
  409. package/dist/cjs/balance/getTokenBalance.d.ts +0 -8
  410. package/dist/cjs/balance/getTokenBalance.js +0 -33
  411. package/dist/cjs/balance/index.d.ts +0 -2
  412. package/dist/cjs/balance/index.js +0 -18
  413. package/dist/cjs/connectors.d.ts +0 -8
  414. package/dist/cjs/connectors.js +0 -72
  415. package/dist/cjs/execution/BaseStepExecutor.d.ts +0 -12
  416. package/dist/cjs/execution/BaseStepExecutor.js +0 -27
  417. package/dist/cjs/execution/EVMStepExecutor.d.ts +0 -13
  418. package/dist/cjs/execution/EVMStepExecutor.js +0 -292
  419. package/dist/cjs/execution/RouteExecutionManager.d.ts +0 -60
  420. package/dist/cjs/execution/RouteExecutionManager.js +0 -204
  421. package/dist/cjs/execution/StatusManager.js +0 -171
  422. package/dist/cjs/execution/StepExecutionManager.d.ts +0 -7
  423. package/dist/cjs/execution/StepExecutionManager.js +0 -272
  424. package/dist/cjs/execution/checkAllowance.d.ts +0 -5
  425. package/dist/cjs/execution/index.d.ts +0 -2
  426. package/dist/cjs/execution/index.js +0 -18
  427. package/dist/cjs/execution/multisig.d.ts +0 -4
  428. package/dist/cjs/execution/prepareRestart.d.ts +0 -2
  429. package/dist/cjs/execution/prepareRestart.js +0 -65
  430. package/dist/cjs/execution/stepComparison.d.ts +0 -15
  431. package/dist/cjs/execution/stepComparison.js +0 -37
  432. package/dist/cjs/execution/switchChain.d.ts +0 -22
  433. package/dist/cjs/execution/switchChain.js +0 -55
  434. package/dist/cjs/execution/types.d.ts +0 -82
  435. package/dist/cjs/execution/types.js +0 -2
  436. package/dist/cjs/execution/utils.d.ts +0 -12
  437. package/dist/cjs/helpers.js +0 -84
  438. package/dist/cjs/index.d.ts +0 -9
  439. package/dist/cjs/index.js +0 -30
  440. package/dist/cjs/providers/EVM.d.ts +0 -10
  441. package/dist/cjs/providers/EVM.js +0 -34
  442. package/dist/cjs/providers/Solana.d.ts +0 -9
  443. package/dist/cjs/providers/Solana.js +0 -38
  444. package/dist/cjs/providers/index.d.ts +0 -1
  445. package/dist/cjs/providers/index.js +0 -17
  446. package/dist/cjs/providers/types.d.ts +0 -12
  447. package/dist/cjs/providers/types.js +0 -8
  448. package/dist/cjs/request.d.ts +0 -9
  449. package/dist/cjs/services/ApiService.d.ts +0 -16
  450. package/dist/cjs/services/ApiService.js +0 -323
  451. package/dist/cjs/services/ChainsService.d.ts +0 -11
  452. package/dist/cjs/services/ChainsService.js +0 -40
  453. package/dist/cjs/services/ConfigService.d.ts +0 -26
  454. package/dist/cjs/services/ConfigService.js +0 -104
  455. package/dist/cjs/types/index.d.ts +0 -2
  456. package/dist/cjs/types/index.js +0 -18
  457. package/dist/cjs/types/internal.d.ts +0 -60
  458. package/dist/cjs/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  459. package/dist/cjs/utils/index.d.ts +0 -5
  460. package/dist/cjs/utils/index.js +0 -21
  461. package/dist/cjs/utils/parseError.d.ts +0 -37
  462. package/dist/cjs/utils/parseError.js +0 -154
  463. package/dist/cjs/utils/utils.d.ts +0 -10
  464. package/dist/cjs/version.d.ts +0 -2
  465. package/dist/connectors.d.ts +0 -8
  466. package/dist/connectors.js +0 -41
  467. package/dist/constants.d.ts +0 -6
  468. package/dist/execution/BaseStepExecutor.d.ts +0 -12
  469. package/dist/execution/BaseStepExecutor.js +0 -23
  470. package/dist/execution/EVMStepExecutor.d.ts +0 -13
  471. package/dist/execution/EVMStepExecutor.js +0 -285
  472. package/dist/execution/RouteExecutionManager.d.ts +0 -60
  473. package/dist/execution/RouteExecutionManager.js +0 -200
  474. package/dist/execution/StatusManager.d.ts +0 -68
  475. package/dist/execution/StatusManager.js +0 -167
  476. package/dist/execution/StepExecutionManager.d.ts +0 -7
  477. package/dist/execution/StepExecutionManager.js +0 -265
  478. package/dist/execution/checkAllowance.d.ts +0 -5
  479. package/dist/execution/checkBalance.d.ts +0 -2
  480. package/dist/execution/index.d.ts +0 -2
  481. package/dist/execution/index.js +0 -2
  482. package/dist/execution/multisig.d.ts +0 -4
  483. package/dist/execution/prepareRestart.d.ts +0 -2
  484. package/dist/execution/prepareRestart.js +0 -61
  485. package/dist/execution/types.d.ts +0 -82
  486. package/dist/execution/types.js +0 -1
  487. package/dist/execution/waitForReceivingTransaction.d.ts +0 -3
  488. package/dist/helpers.d.ts +0 -18
  489. package/dist/index.d.ts +0 -9
  490. package/dist/index.js +0 -9
  491. package/dist/providers/EVM.d.ts +0 -10
  492. package/dist/providers/EVM.js +0 -29
  493. package/dist/providers/Solana.d.ts +0 -9
  494. package/dist/providers/Solana.js +0 -33
  495. package/dist/providers/index.d.ts +0 -1
  496. package/dist/providers/index.js +0 -1
  497. package/dist/providers/types.d.ts +0 -12
  498. package/dist/providers/types.js +0 -5
  499. package/dist/services/ApiService.d.ts +0 -16
  500. package/dist/services/ApiService.js +0 -321
  501. package/dist/services/ChainsService.d.ts +0 -11
  502. package/dist/services/ChainsService.js +0 -33
  503. package/dist/services/ConfigService.d.ts +0 -26
  504. package/dist/services/ConfigService.js +0 -100
  505. package/dist/typeguards.d.ts +0 -4
  506. package/dist/types/abi.d.ts +0 -5
  507. package/dist/types/index.d.ts +0 -2
  508. package/dist/types/index.js +0 -2
  509. package/dist/types/internal.js +0 -1
  510. package/dist/utils/errors.d.ts +0 -107
  511. package/dist/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  512. package/dist/utils/index.d.ts +0 -5
  513. package/dist/utils/index.js +0 -5
  514. package/dist/utils/median.d.ts +0 -1
  515. package/dist/version.d.ts +0 -2
  516. package/dist/version.js +0 -2
@@ -0,0 +1,233 @@
1
+ import type {
2
+ Execution,
3
+ ExecutionStatus,
4
+ LiFiStep,
5
+ Process,
6
+ ProcessStatus,
7
+ ProcessType,
8
+ } from '@lifi/types'
9
+ import { executionState } from './executionState.js'
10
+ import type { LiFiStepExtended } from './types.js'
11
+ import { getProcessMessage } from './utils.js'
12
+
13
+ type OptionalParameters = Partial<
14
+ Pick<
15
+ Process,
16
+ | 'doneAt'
17
+ | 'failedAt'
18
+ | 'txHash'
19
+ | 'txLink'
20
+ | 'error'
21
+ | 'substatus'
22
+ | 'substatusMessage'
23
+ | 'multisigTxHash'
24
+ >
25
+ >
26
+
27
+ /**
28
+ * Manages status updates of a route and provides various functions for tracking processes
29
+ * @param {string} routeId The route dd this StatusManger belongs to.
30
+ * @returns {StatusManager} An instance of StatusManager.
31
+ */
32
+ export class StatusManager {
33
+ private readonly routeId: string
34
+ private shouldUpdate = true
35
+
36
+ constructor(routeId: string) {
37
+ this.routeId = routeId
38
+ }
39
+
40
+ /**
41
+ * Initializes the execution object of a Step.
42
+ * @param step The current step in execution
43
+ * @returns The initialized execution object for this step and a function to update this step
44
+ */
45
+ initExecutionObject = (step: LiFiStepExtended): Execution => {
46
+ if (!step.execution) {
47
+ step.execution = {
48
+ status: 'PENDING',
49
+ process: [],
50
+ }
51
+ this.updateStepInRoute(step)
52
+ }
53
+
54
+ // Change status to PENDING after resuming from FAILED
55
+ if (step.execution.status === 'FAILED') {
56
+ step.execution.status = 'PENDING'
57
+ this.updateStepInRoute(step)
58
+ }
59
+
60
+ return step.execution
61
+ }
62
+
63
+ /**
64
+ * Updates the execution object of a Step.
65
+ * @param step The current step in execution
66
+ * @param status The status for the execution
67
+ * @param execution Optional. Information about received tokens
68
+ * @returns The step with the updated execution object
69
+ */
70
+ updateExecution(
71
+ step: LiFiStepExtended,
72
+ status: ExecutionStatus,
73
+ execution?: Partial<Execution>
74
+ ): LiFiStep {
75
+ if (!step.execution) {
76
+ throw Error("Can't update empty execution.")
77
+ }
78
+ step.execution.status = status
79
+ if (execution) {
80
+ step.execution = {
81
+ ...step.execution,
82
+ ...execution,
83
+ }
84
+ }
85
+ this.updateStepInRoute(step)
86
+ return step
87
+ }
88
+
89
+ /**
90
+ * Create and push a new process into the execution.
91
+ * @param step The step that should contain the new process.
92
+ * @param type Type of the process. Used to identify already existing processes.
93
+ * @param status By default created procces is set to the STARTED status. We can override new process with the needed status.
94
+ * @returns Returns process.
95
+ */
96
+ findOrCreateProcess = (
97
+ step: LiFiStepExtended,
98
+ type: ProcessType,
99
+ status?: ProcessStatus
100
+ ): Process => {
101
+ if (!step.execution?.process) {
102
+ throw new Error("Execution hasn't been initialized.")
103
+ }
104
+
105
+ const process = step.execution.process.find((p) => p.type === type)
106
+
107
+ if (process) {
108
+ if (status && process.status !== status) {
109
+ process.status = status
110
+ this.updateStepInRoute(step)
111
+ }
112
+ return process
113
+ }
114
+
115
+ const newProcess: Process = {
116
+ type: type,
117
+ startedAt: Date.now(),
118
+ message: getProcessMessage(type, status ?? 'STARTED'),
119
+ status: status ?? 'STARTED',
120
+ }
121
+
122
+ step.execution.process.push(newProcess)
123
+ this.updateStepInRoute(step)
124
+ return newProcess
125
+ }
126
+
127
+ /**
128
+ * Update a process object.
129
+ * @param step The step where the process should be updated
130
+ * @param type The process type to update
131
+ * @param status The status the process gets.
132
+ * @param [params] Additional parameters to append to the process.
133
+ * @returns The update process
134
+ */
135
+ updateProcess = (
136
+ step: LiFiStepExtended,
137
+ type: ProcessType,
138
+ status: ProcessStatus,
139
+ params?: OptionalParameters
140
+ ): Process => {
141
+ if (!step.execution) {
142
+ throw new Error("Can't update an empty step execution.")
143
+ }
144
+ const currentProcess = step?.execution?.process.find((p) => p.type === type)
145
+
146
+ if (!currentProcess) {
147
+ throw new Error("Can't find a process for the given type.")
148
+ }
149
+
150
+ switch (status) {
151
+ case 'CANCELLED':
152
+ currentProcess.doneAt = Date.now()
153
+ break
154
+ case 'FAILED':
155
+ currentProcess.doneAt = Date.now()
156
+ step.execution.status = 'FAILED'
157
+ break
158
+ case 'DONE':
159
+ currentProcess.doneAt = Date.now()
160
+ break
161
+ case 'PENDING':
162
+ step.execution.status = 'PENDING'
163
+ break
164
+ case 'ACTION_REQUIRED':
165
+ step.execution.status = 'ACTION_REQUIRED'
166
+ break
167
+ default:
168
+ break
169
+ }
170
+
171
+ currentProcess.status = status
172
+ currentProcess.message = getProcessMessage(type, status)
173
+ // set extra parameters or overwritte the standard params set in the switch statement
174
+ if (params) {
175
+ for (const [key, value] of Object.entries(params)) {
176
+ currentProcess[key] = value
177
+ }
178
+ }
179
+ // Sort processes, the ones with DONE status go first
180
+ step.execution.process = [
181
+ ...step?.execution?.process.filter(
182
+ (process) => process.status === 'DONE'
183
+ ),
184
+ ...step?.execution?.process.filter(
185
+ (process) => process.status !== 'DONE'
186
+ ),
187
+ ]
188
+ this.updateStepInRoute(step) // updates the step in the route
189
+ return currentProcess
190
+ }
191
+
192
+ /**
193
+ * Remove a process from the execution
194
+ * @param step The step where the process should be removed from
195
+ * @param type The process type to remove
196
+ */
197
+ removeProcess = (step: LiFiStepExtended, type: ProcessType): void => {
198
+ if (!step.execution) {
199
+ throw new Error("Execution hasn't been initialized.")
200
+ }
201
+ const index = step.execution.process.findIndex((p) => p.type === type)
202
+ step.execution.process.splice(index, 1)
203
+ this.updateStepInRoute(step)
204
+ }
205
+
206
+ updateStepInRoute = (step: LiFiStep): LiFiStep => {
207
+ if (!this.shouldUpdate) {
208
+ return step
209
+ }
210
+ const data = executionState.get(this.routeId)
211
+
212
+ if (!data) {
213
+ throw new Error('Execution data not found.')
214
+ }
215
+
216
+ const stepIndex = data.route.steps.findIndex(
217
+ (routeStep) => routeStep.id === step.id
218
+ )
219
+
220
+ if (stepIndex === -1) {
221
+ throw new Error("Couldn't find a step to update.")
222
+ }
223
+
224
+ data.route.steps[stepIndex] = { ...data.route.steps[stepIndex], ...step }
225
+
226
+ data.executionOptions?.updateRouteHook?.(data.route)
227
+ return data.route.steps[stepIndex]
228
+ }
229
+
230
+ allowUpdates(value: boolean): void {
231
+ this.shouldUpdate = value
232
+ }
233
+ }
@@ -0,0 +1,48 @@
1
+ import type { LiFiStep } from '@lifi/types'
2
+ import { formatUnits } from 'viem'
3
+ import { getTokenBalance } from '../services/balance.js'
4
+ import { BalanceError } from '../utils/errors.js'
5
+
6
+ export const checkBalance = async (
7
+ walletAddress: string,
8
+ step: LiFiStep,
9
+ depth = 0
10
+ ): Promise<void> => {
11
+ const token = await getTokenBalance(walletAddress, step.action.fromToken)
12
+ if (token) {
13
+ const currentBalance = token.amount ?? 0n
14
+ const neededBalance = BigInt(step.action.fromAmount)
15
+
16
+ if (currentBalance < neededBalance) {
17
+ if (depth <= 3) {
18
+ await new Promise((resolve) => {
19
+ setTimeout(resolve, 200)
20
+ })
21
+ await checkBalance(walletAddress, step, depth + 1)
22
+ } else if (
23
+ (neededBalance * BigInt((1 - step.action.slippage) * 1_000_000_000)) /
24
+ 1_000_000_000n <=
25
+ currentBalance
26
+ ) {
27
+ // adjust amount in slippage limits
28
+ step.action.fromAmount = currentBalance.toString()
29
+ } else {
30
+ const neeeded = formatUnits(neededBalance, token.decimals)
31
+ const current = formatUnits(currentBalance, token.decimals)
32
+ let errorMessage =
33
+ `Your ${token.symbol} balance is too low, ` +
34
+ `you try to transfer ${neeeded} ${token.symbol}, ` +
35
+ `but your wallet only holds ${current} ${token.symbol}. ` +
36
+ `No funds have been sent.`
37
+
38
+ if (currentBalance !== 0n) {
39
+ errorMessage +=
40
+ `If the problem consists, please delete this transfer and ` +
41
+ `start a new one with a maximum of ${current} ${token.symbol}.`
42
+ }
43
+
44
+ throw new BalanceError('The balance is too low.', errorMessage)
45
+ }
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,214 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
2
+ import type { Route } from '@lifi/types'
3
+ import { config } from '../config.js'
4
+ import { executionState } from './executionState.js'
5
+ import { prepareRestart } from './prepareRestart.js'
6
+ import type { ExecutionOptions, RouteExtended } from './types.js'
7
+
8
+ /**
9
+ * Execute a route.
10
+ * @param route - The route that should be executed. Cannot be an active route.
11
+ * @param executionOptions - An object containing settings and callbacks.
12
+ * @returns The executed route.
13
+ * @throws {LiFiError} Throws a LiFiError if the execution fails.
14
+ */
15
+ export const executeRoute = async (
16
+ route: Route,
17
+ executionOptions?: ExecutionOptions
18
+ ): Promise<RouteExtended> => {
19
+ // Deep clone to prevent side effects
20
+ const clonedRoute = structuredClone<Route>(route)
21
+
22
+ let executionPromise = executionState.get(clonedRoute.id)?.promise
23
+ // Check if route is already running
24
+ if (executionPromise) {
25
+ return executionPromise
26
+ }
27
+
28
+ executionState.create({ route: clonedRoute, executionOptions })
29
+ executionPromise = executeSteps(clonedRoute)
30
+ executionState.update({
31
+ route: clonedRoute,
32
+ promise: executionPromise,
33
+ })
34
+
35
+ return executionPromise
36
+ }
37
+
38
+ /**
39
+ * Resume the execution of a route that has been stopped or had an error while executing.
40
+ * @param route - The route that is to be executed. Cannot be an active route.
41
+ * @param executionOptions - An object containing settings and callbacks.
42
+ * @returns The executed route.
43
+ * @throws {LiFiError} Throws a LiFiError if the execution fails.
44
+ */
45
+ export const resumeRoute = async (
46
+ route: Route,
47
+ executionOptions?: ExecutionOptions
48
+ ): Promise<RouteExtended> => {
49
+ const execution = executionState.get(route.id)
50
+
51
+ if (execution) {
52
+ const executionHalted = execution.executors.some(
53
+ (executor) => !executor.allowExecution
54
+ )
55
+ if (!executionHalted) {
56
+ // Check if we want to resume route execution in the background
57
+ updateRouteExecution(route, {
58
+ executeInBackground: executionOptions?.executeInBackground,
59
+ })
60
+ if (!execution.promise) {
61
+ // We should never reach this point if we do clean-up properly
62
+ throw new Error('Route execution promise not found.')
63
+ }
64
+ return execution.promise
65
+ }
66
+ }
67
+
68
+ await prepareRestart(route)
69
+
70
+ return executeRoute(route, executionOptions)
71
+ }
72
+
73
+ const executeSteps = async (route: RouteExtended): Promise<RouteExtended> => {
74
+ // Loop over steps and execute them
75
+ for (let index = 0; index < route.steps.length; index++) {
76
+ const execution = executionState.get(route.id)
77
+ // Check if execution has stopped in the meantime
78
+ if (!execution) {
79
+ break
80
+ }
81
+
82
+ const step = route.steps[index]
83
+ const previousStep = route.steps[index - 1]
84
+ // Check if the step is already done
85
+ //
86
+ if (step.execution?.status === 'DONE') {
87
+ continue
88
+ }
89
+
90
+ // Update step fromAmount using output of the previous step execution. In the future this should be handled by calling `updateRoute`
91
+ if (previousStep?.execution?.toAmount) {
92
+ step.action.fromAmount = previousStep.execution.toAmount
93
+ if (step.includedSteps?.length) {
94
+ step.includedSteps[0].action.fromAmount =
95
+ previousStep.execution.toAmount
96
+ }
97
+ }
98
+
99
+ try {
100
+ const fromAddress = step.action.fromAddress
101
+ if (!fromAddress) {
102
+ throw new Error('Action fromAddress is not specified.')
103
+ }
104
+
105
+ const provider = config
106
+ .get()
107
+ .providers.find((provider) => provider.isAddress(fromAddress))
108
+
109
+ if (!provider) {
110
+ throw new Error('SDK Execution Provider not found.')
111
+ }
112
+
113
+ const stepExecutor = await provider.getStepExecutor({
114
+ routeId: route.id,
115
+ executionOptions: execution.executionOptions,
116
+ })
117
+ execution.executors.push(stepExecutor)
118
+
119
+ // Check if we want to execute this step in the background
120
+ if (execution.executionOptions) {
121
+ updateRouteExecution(route, execution.executionOptions)
122
+ }
123
+
124
+ const executedStep = await stepExecutor.executeStep(step)
125
+
126
+ // We may reach this point if user interaction isn't allowed. We want to stop execution until we resume it
127
+ if (executedStep.execution?.status !== 'DONE') {
128
+ stopRouteExecution(route)
129
+ }
130
+
131
+ // Execution stopped during the current step, we don't want to continue to the next step so we return already
132
+ if (!stepExecutor.allowExecution) {
133
+ return route
134
+ }
135
+ } catch (e) {
136
+ stopRouteExecution(route)
137
+ throw e
138
+ }
139
+ }
140
+
141
+ // Clean up after the execution
142
+ executionState.delete(route.id)
143
+ return route
144
+ }
145
+
146
+ /**
147
+ * Updates route execution to background or foreground state.
148
+ * @param route - A route that is currently in execution.
149
+ * @param options - An object with execution settings.
150
+ */
151
+ export const updateRouteExecution = (
152
+ route: Route,
153
+ options: ExecutionOptions
154
+ ): void => {
155
+ const execution = executionState.get(route.id)
156
+ if (!execution) {
157
+ return
158
+ }
159
+
160
+ if ('executeInBackground' in options) {
161
+ for (const executor of execution.executors) {
162
+ executor.setInteraction({
163
+ allowInteraction: !options?.executeInBackground,
164
+ allowUpdates: true,
165
+ })
166
+ }
167
+ }
168
+ // Update active route settings so we know what the current state of execution is
169
+ execution.executionOptions = {
170
+ ...execution.executionOptions,
171
+ ...options,
172
+ }
173
+ }
174
+
175
+ /**
176
+ * Stops the execution of an active route.
177
+ * @param route - A route that is currently in execution.
178
+ * @returns The stopped route.
179
+ */
180
+ export const stopRouteExecution = (route: Route): Route => {
181
+ const execution = executionState.get(route.id)
182
+ if (!execution) {
183
+ return route
184
+ }
185
+
186
+ for (const executor of execution.executors) {
187
+ executor.setInteraction({
188
+ allowInteraction: false,
189
+ allowUpdates: false,
190
+ allowExecution: false,
191
+ })
192
+ }
193
+ executionState.delete(route.id)
194
+ return execution.route
195
+ }
196
+
197
+ /**
198
+ * Get the list of active routes.
199
+ * @returns A list of routes.
200
+ */
201
+ export const getActiveRoutes = (): RouteExtended[] => {
202
+ return Object.values(executionState.state)
203
+ .map((dict) => dict?.route)
204
+ .filter(Boolean) as RouteExtended[]
205
+ }
206
+
207
+ /**
208
+ * Return the current route information for given route. The route has to be active.
209
+ * @param routeId - A route id.
210
+ * @returns The updated route.
211
+ */
212
+ export const getActiveRoute = (routeId: string): RouteExtended | undefined => {
213
+ return executionState.get(routeId)?.route
214
+ }
@@ -0,0 +1,44 @@
1
+ import type { ExecutionOptions, RouteExtended, StepExecutor } from './types.js'
2
+
3
+ export interface ExecutionData {
4
+ route: RouteExtended
5
+ executors: StepExecutor[]
6
+ executionOptions?: ExecutionOptions
7
+ promise?: Promise<RouteExtended>
8
+ }
9
+
10
+ export type ExecutionStateParams = Omit<ExecutionData, 'executors'>
11
+
12
+ export interface ExecutionState {
13
+ state: Partial<Record<string, ExecutionData>>
14
+ get(routeId: string): ExecutionData | undefined
15
+ create(params: ExecutionStateParams): ExecutionData
16
+ update(params: ExecutionStateParams): void
17
+ delete(routeId: string): void
18
+ }
19
+
20
+ export const executionState: ExecutionState = {
21
+ state: {},
22
+ get(routeId: string) {
23
+ return this.state[routeId]
24
+ },
25
+ create(params) {
26
+ this.state[params.route.id] = {
27
+ ...this.state[params.route.id],
28
+ ...params,
29
+ executors: this.state[params.route.id]?.executors ?? [],
30
+ }
31
+ return this.state[params.route.id]!
32
+ },
33
+ update(state) {
34
+ if (this.state[state.route.id]) {
35
+ this.state[state.route.id] = {
36
+ ...this.state[state.route.id]!,
37
+ ...state,
38
+ }
39
+ }
40
+ },
41
+ delete(routeId) {
42
+ delete this.state[routeId]
43
+ },
44
+ }
@@ -0,0 +1,3 @@
1
+ export * from './StatusManager.js'
2
+ export * from './execution.js'
3
+ export * from './types.js'
@@ -0,0 +1,26 @@
1
+ import type { LiFiStep } from '@lifi/types'
2
+ import type { LiFiStepExtended, RouteExtended } from './types.js'
3
+
4
+ export const prepareRestart = async (route: RouteExtended) => {
5
+ for (let index = 0; index < route.steps.length; index++) {
6
+ const step = route.steps[index]
7
+ const stepHasFailed = step.execution?.status === 'FAILED'
8
+
9
+ if (stepHasFailed) {
10
+ deleteFailedProcesses(step)
11
+ deleteTransactionData(step)
12
+ }
13
+ }
14
+ }
15
+
16
+ const deleteFailedProcesses = (step: LiFiStepExtended) => {
17
+ if (step.execution) {
18
+ step.execution.process = step.execution.process.filter(
19
+ (process) => process.status === 'DONE'
20
+ )
21
+ }
22
+ }
23
+
24
+ const deleteTransactionData = (step: LiFiStep) => {
25
+ step.transactionRequest = undefined
26
+ }
@@ -0,0 +1,12 @@
1
+ import type { ChainType } from '@lifi/types'
2
+ import { config } from '../config.js'
3
+
4
+ export const getProvider = <T>(type: ChainType): T => {
5
+ const provider = config
6
+ .get()
7
+ .providers.find((provider) => provider.type === type) as T
8
+ if (!provider) {
9
+ throw new Error(`${type} provider not found.`)
10
+ }
11
+ return provider
12
+ }
@@ -0,0 +1,15 @@
1
+ import { type ChainId } from '@lifi/types'
2
+ import { config } from '../config.js'
3
+
4
+ export const getRpcUrl = async (chainId: ChainId): Promise<string> => {
5
+ const rpcUrls = await getRpcUrls(chainId)
6
+ return rpcUrls[0]
7
+ }
8
+
9
+ export const getRpcUrls = async (chainId: ChainId): Promise<string[]> => {
10
+ const rpcUrls = (await config.getRPCUrls())[chainId]
11
+ if (!rpcUrls?.length) {
12
+ throw new Error('RPC URL not found')
13
+ }
14
+ return rpcUrls
15
+ }
@@ -0,0 +1,51 @@
1
+ import type { LiFiStep } from '@lifi/types'
2
+ import { LiFiErrorCode, TransactionError } from '../utils/errors.js'
3
+ import type { StatusManager } from './StatusManager.js'
4
+ import type { ExecutionOptions } from './types.js'
5
+ import { checkStepSlippageThreshold } from './utils.js'
6
+
7
+ /**
8
+ * This method checks whether the new and updated Step meets the required exchange rate conditions.
9
+ * If yes it returns the updated Step.
10
+ * If no and if user interaction is allowed it triggers the acceptExchangeRateUpdateHook. If no user interaction is allowed it aborts.
11
+ * @param statusManager
12
+ * @param oldStep
13
+ * @param newStep
14
+ * @param settings
15
+ * @param allowUserInteraction
16
+ * @param executionOptions
17
+ * @returns Return LiFiStep
18
+ */
19
+ export const stepComparison = async (
20
+ statusManager: StatusManager,
21
+ oldStep: LiFiStep,
22
+ newStep: LiFiStep,
23
+ allowUserInteraction: boolean,
24
+ executionOptions?: ExecutionOptions
25
+ ): Promise<LiFiStep> => {
26
+ // Check if changed exchange rate is in the range of slippage threshold
27
+ if (checkStepSlippageThreshold(oldStep, newStep)) {
28
+ return statusManager.updateStepInRoute(newStep)
29
+ }
30
+
31
+ let allowStepUpdate: boolean | undefined
32
+ if (allowUserInteraction) {
33
+ allowStepUpdate = await executionOptions?.acceptExchangeRateUpdateHook?.({
34
+ oldToAmount: oldStep.estimate.toAmount,
35
+ newToAmount: newStep.estimate.toAmount,
36
+ toToken: newStep.action.toToken,
37
+ })
38
+ }
39
+
40
+ if (!allowStepUpdate) {
41
+ // The user declined the new exchange rate, so we are not going to proceed
42
+ throw new TransactionError(
43
+ LiFiErrorCode.ExchangeRateUpdateCanceled,
44
+ 'Exchange rate has changed!',
45
+ `Transaction was not sent, your funds are still in your wallet.
46
+ The exchange rate has changed and the previous estimation can not be fulfilled due to value loss.`
47
+ )
48
+ }
49
+
50
+ return statusManager.updateStepInRoute(newStep)
51
+ }