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

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