@lifi/sdk 3.0.0-alpha.6 → 3.0.0-alpha.61

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 (482) hide show
  1. package/package.json +40 -88
  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 -11
  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/Solana.js +38 -0
  35. package/src/_cjs/core/Solana/Solana.js.map +1 -0
  36. package/src/_cjs/core/Solana/SolanaStepExecutor.js +174 -0
  37. package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -0
  38. package/src/_cjs/core/Solana/connection.js +19 -0
  39. package/src/_cjs/core/Solana/connection.js.map +1 -0
  40. package/src/_cjs/core/Solana/getSNSAddress.js +26 -0
  41. package/src/_cjs/core/Solana/getSNSAddress.js.map +1 -0
  42. package/src/_cjs/core/Solana/getSolanaBalance.js +60 -0
  43. package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -0
  44. package/src/_cjs/core/Solana/isAddress.js +15 -0
  45. package/src/_cjs/core/Solana/isAddress.js.map +1 -0
  46. package/src/_cjs/core/Solana/types.js +10 -0
  47. package/src/_cjs/core/Solana/types.js.map +1 -0
  48. package/src/_cjs/core/StatusManager.js +167 -0
  49. package/src/_cjs/core/StatusManager.js.map +1 -0
  50. package/{dist/cjs/execution → src/_cjs/core}/checkBalance.js +6 -6
  51. package/src/_cjs/core/checkBalance.js.map +1 -0
  52. package/src/_cjs/core/execution.js +138 -0
  53. package/src/_cjs/core/execution.js.map +1 -0
  54. package/src/_cjs/core/executionState.js +29 -0
  55. package/src/_cjs/core/executionState.js.map +1 -0
  56. package/src/_cjs/core/index.js +7 -0
  57. package/src/_cjs/core/index.js.map +1 -0
  58. package/src/_cjs/core/prepareRestart.js +23 -0
  59. package/src/_cjs/core/prepareRestart.js.map +1 -0
  60. package/src/_cjs/core/provider.js +15 -0
  61. package/src/_cjs/core/provider.js.map +1 -0
  62. package/src/_cjs/core/rpc.js +18 -0
  63. package/src/_cjs/core/rpc.js.map +1 -0
  64. package/src/_cjs/core/stepComparison.js +25 -0
  65. package/src/_cjs/core/stepComparison.js.map +1 -0
  66. package/{dist/cjs/allowance → src/_cjs/core}/types.js +1 -0
  67. package/src/_cjs/core/types.js.map +1 -0
  68. package/{dist/cjs/execution → src/_cjs/core}/utils.js +2 -11
  69. package/src/_cjs/core/utils.js.map +1 -0
  70. package/{dist/cjs/execution → src/_cjs/core}/waitForReceivingTransaction.js +13 -14
  71. package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -0
  72. package/src/_cjs/createConfig.js +32 -0
  73. package/src/_cjs/createConfig.js.map +1 -0
  74. package/src/_cjs/helpers.js +57 -0
  75. package/src/_cjs/helpers.js.map +1 -0
  76. package/src/_cjs/index.js +23 -0
  77. package/src/_cjs/index.js.map +1 -0
  78. package/src/_cjs/package.json +1 -0
  79. package/src/_cjs/request.js +66 -0
  80. package/src/_cjs/request.js.map +1 -0
  81. package/src/_cjs/services/api.js +309 -0
  82. package/src/_cjs/services/api.js.map +1 -0
  83. package/src/_cjs/services/balance.js +49 -0
  84. package/src/_cjs/services/balance.js.map +1 -0
  85. package/src/_cjs/services/getNameServiceAddress.js +29 -0
  86. package/src/_cjs/services/getNameServiceAddress.js.map +1 -0
  87. package/{dist/cjs → src/_cjs}/typeguards.js +1 -0
  88. package/src/_cjs/typeguards.js.map +1 -0
  89. package/src/_cjs/types/index.js +5 -0
  90. package/src/_cjs/types/index.js.map +1 -0
  91. package/{dist/cjs/types/internal.types.js → src/_cjs/types/internal.js} +1 -0
  92. package/src/_cjs/types/internal.js.map +1 -0
  93. package/{dist/cjs → src/_cjs}/utils/errors.js +26 -3
  94. package/src/_cjs/utils/errors.js.map +1 -0
  95. package/src/_cjs/utils/getTransactionMessage.js +31 -0
  96. package/src/_cjs/utils/getTransactionMessage.js.map +1 -0
  97. package/src/_cjs/utils/index.js +9 -0
  98. package/src/_cjs/utils/index.js.map +1 -0
  99. package/{dist/cjs → src/_cjs}/utils/median.js +1 -0
  100. package/src/_cjs/utils/median.js.map +1 -0
  101. package/src/_cjs/utils/parseBackendError.js +27 -0
  102. package/src/_cjs/utils/parseBackendError.js.map +1 -0
  103. package/src/_cjs/utils/parseError.js +69 -0
  104. package/src/_cjs/utils/parseError.js.map +1 -0
  105. package/{dist/cjs → src/_cjs}/utils/utils.js +5 -11
  106. package/src/_cjs/utils/utils.js.map +1 -0
  107. package/{dist/cjs → src/_cjs}/version.js +2 -1
  108. package/src/_cjs/version.js.map +1 -0
  109. package/src/_esm/config.js +87 -0
  110. package/src/_esm/config.js.map +1 -0
  111. package/{dist → src/_esm}/constants.js +2 -4
  112. package/src/_esm/constants.js.map +1 -0
  113. package/src/_esm/core/BaseStepExecutor.js +52 -0
  114. package/src/_esm/core/BaseStepExecutor.js.map +1 -0
  115. package/src/_esm/core/EVM/EVM.js +39 -0
  116. package/src/_esm/core/EVM/EVM.js.map +1 -0
  117. package/src/_esm/core/EVM/EVMStepExecutor.js +329 -0
  118. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -0
  119. package/{dist/types → src/_esm/core/EVM}/abi.js +1 -0
  120. package/src/_esm/core/EVM/abi.js.map +1 -0
  121. package/{dist/execution → src/_esm/core/EVM}/checkAllowance.js +14 -5
  122. package/src/_esm/core/EVM/checkAllowance.js.map +1 -0
  123. package/{dist/allowance → src/_esm/core/EVM}/getAllowance.js +19 -6
  124. package/src/_esm/core/EVM/getAllowance.js.map +1 -0
  125. package/src/_esm/core/EVM/getENSAddress.js +17 -0
  126. package/src/_esm/core/EVM/getENSAddress.js.map +1 -0
  127. package/{dist/balance/getBalance.js → src/_esm/core/EVM/getEVMBalance.js} +10 -12
  128. package/src/_esm/core/EVM/getEVMBalance.js.map +1 -0
  129. package/{dist/execution → src/_esm/core/EVM}/multisig.js +5 -6
  130. package/src/_esm/core/EVM/multisig.js.map +1 -0
  131. package/src/_esm/core/EVM/publicClient.js +46 -0
  132. package/src/_esm/core/EVM/publicClient.js.map +1 -0
  133. package/{dist/allowance → src/_esm/core/EVM}/setAllowance.js +23 -4
  134. package/src/_esm/core/EVM/setAllowance.js.map +1 -0
  135. package/{dist/execution → src/_esm/core/EVM}/switchChain.js +7 -4
  136. package/src/_esm/core/EVM/switchChain.js.map +1 -0
  137. package/src/_esm/core/EVM/types.js +6 -0
  138. package/src/_esm/core/EVM/types.js.map +1 -0
  139. package/{dist/utils/getMaxPriorityFeePerGas.js → src/_esm/core/EVM/utils.js} +12 -1
  140. package/src/_esm/core/EVM/utils.js.map +1 -0
  141. package/src/_esm/core/Solana/Solana.js +34 -0
  142. package/src/_esm/core/Solana/Solana.js.map +1 -0
  143. package/src/_esm/core/Solana/SolanaStepExecutor.js +176 -0
  144. package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -0
  145. package/src/_esm/core/Solana/connection.js +20 -0
  146. package/src/_esm/core/Solana/connection.js.map +1 -0
  147. package/src/_esm/core/Solana/getSNSAddress.js +26 -0
  148. package/src/_esm/core/Solana/getSNSAddress.js.map +1 -0
  149. package/src/_esm/core/Solana/getSolanaBalance.js +56 -0
  150. package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -0
  151. package/src/_esm/core/Solana/isAddress.js +11 -0
  152. package/src/_esm/core/Solana/isAddress.js.map +1 -0
  153. package/src/_esm/core/Solana/types.js +7 -0
  154. package/src/_esm/core/Solana/types.js.map +1 -0
  155. package/src/_esm/core/StatusManager.js +203 -0
  156. package/src/_esm/core/StatusManager.js.map +1 -0
  157. package/{dist/execution → src/_esm/core}/checkBalance.js +4 -3
  158. package/src/_esm/core/checkBalance.js.map +1 -0
  159. package/src/_esm/core/execution.js +176 -0
  160. package/src/_esm/core/execution.js.map +1 -0
  161. package/src/_esm/core/executionState.js +26 -0
  162. package/src/_esm/core/executionState.js.map +1 -0
  163. package/src/_esm/core/index.js +4 -0
  164. package/src/_esm/core/index.js.map +1 -0
  165. package/src/_esm/core/prepareRestart.js +64 -0
  166. package/src/_esm/core/prepareRestart.js.map +1 -0
  167. package/src/_esm/core/provider.js +11 -0
  168. package/src/_esm/core/provider.js.map +1 -0
  169. package/src/_esm/core/rpc.js +14 -0
  170. package/src/_esm/core/rpc.js.map +1 -0
  171. package/{dist/execution → src/_esm/core}/stepComparison.js +7 -5
  172. package/src/_esm/core/stepComparison.js.map +1 -0
  173. package/src/_esm/core/types.js +2 -0
  174. package/src/_esm/core/types.js.map +1 -0
  175. package/{dist/execution → src/_esm/core}/utils.js +4 -3
  176. package/src/_esm/core/utils.js.map +1 -0
  177. package/{dist/execution → src/_esm/core}/waitForReceivingTransaction.js +11 -9
  178. package/src/_esm/core/waitForReceivingTransaction.js.map +1 -0
  179. package/src/_esm/createConfig.js +28 -0
  180. package/src/_esm/createConfig.js.map +1 -0
  181. package/{dist → src/_esm}/helpers.js +5 -17
  182. package/src/_esm/helpers.js.map +1 -0
  183. package/src/_esm/index.js +14 -0
  184. package/src/_esm/index.js.map +1 -0
  185. package/src/_esm/package.json +1 -0
  186. package/{dist → src/_esm}/request.js +23 -13
  187. package/src/_esm/request.js.map +1 -0
  188. package/src/_esm/services/api.js +378 -0
  189. package/src/_esm/services/api.js.map +1 -0
  190. package/src/_esm/services/balance.js +65 -0
  191. package/src/_esm/services/balance.js.map +1 -0
  192. package/src/_esm/services/getNameServiceAddress.js +25 -0
  193. package/src/_esm/services/getNameServiceAddress.js.map +1 -0
  194. package/{dist → src/_esm}/typeguards.js +1 -0
  195. package/src/_esm/typeguards.js.map +1 -0
  196. package/src/_esm/types/index.js +2 -0
  197. package/src/_esm/types/index.js.map +1 -0
  198. package/src/_esm/types/internal.js +2 -0
  199. package/src/_esm/types/internal.js.map +1 -0
  200. package/{dist → src/_esm}/utils/errors.js +26 -0
  201. package/src/_esm/utils/errors.js.map +1 -0
  202. package/src/_esm/utils/getTransactionMessage.js +28 -0
  203. package/src/_esm/utils/getTransactionMessage.js.map +1 -0
  204. package/src/_esm/utils/index.js +6 -0
  205. package/src/_esm/utils/index.js.map +1 -0
  206. package/{dist → src/_esm}/utils/median.js +1 -0
  207. package/src/_esm/utils/median.js.map +1 -0
  208. package/src/_esm/utils/parseBackendError.js +24 -0
  209. package/src/_esm/utils/parseBackendError.js.map +1 -0
  210. package/{dist → src/_esm}/utils/parseError.js +6 -53
  211. package/src/_esm/utils/parseError.js.map +1 -0
  212. package/{dist → src/_esm}/utils/utils.js +2 -1
  213. package/src/_esm/utils/utils.js.map +1 -0
  214. package/src/_esm/version.js +3 -0
  215. package/src/_esm/version.js.map +1 -0
  216. package/src/_types/config.d.ts +15 -0
  217. package/src/_types/config.d.ts.map +1 -0
  218. package/{dist/cjs → src/_types}/constants.d.ts +2 -4
  219. package/src/_types/constants.d.ts.map +1 -0
  220. package/src/_types/core/BaseStepExecutor.d.ts +13 -0
  221. package/src/_types/core/BaseStepExecutor.d.ts.map +1 -0
  222. package/src/_types/core/EVM/EVM.d.ts +3 -0
  223. package/src/_types/core/EVM/EVM.d.ts.map +1 -0
  224. package/src/_types/core/EVM/EVMStepExecutor.d.ts +17 -0
  225. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -0
  226. package/{dist/cjs/types → src/_types/core/EVM}/abi.d.ts +1 -0
  227. package/src/_types/core/EVM/abi.d.ts.map +1 -0
  228. package/src/_types/core/EVM/checkAllowance.d.ts +6 -0
  229. package/src/_types/core/EVM/checkAllowance.d.ts.map +1 -0
  230. package/{dist/cjs/allowance → src/_types/core/EVM}/getAllowance.d.ts +15 -1
  231. package/src/_types/core/EVM/getAllowance.d.ts.map +1 -0
  232. package/src/_types/core/EVM/getENSAddress.d.ts +2 -0
  233. package/src/_types/core/EVM/getENSAddress.d.ts.map +1 -0
  234. package/src/_types/core/EVM/getEVMBalance.d.ts +3 -0
  235. package/src/_types/core/EVM/getEVMBalance.d.ts.map +1 -0
  236. package/src/_types/core/EVM/multisig.d.ts +6 -0
  237. package/src/_types/core/EVM/multisig.d.ts.map +1 -0
  238. package/src/_types/core/EVM/publicClient.d.ts +8 -0
  239. package/src/_types/core/EVM/publicClient.d.ts.map +1 -0
  240. package/src/_types/core/EVM/setAllowance.d.ts +25 -0
  241. package/src/_types/core/EVM/setAllowance.d.ts.map +1 -0
  242. package/{dist/cjs/execution → src/_types/core/EVM}/switchChain.d.ts +5 -4
  243. package/src/_types/core/EVM/switchChain.d.ts.map +1 -0
  244. package/src/_types/core/EVM/types.d.ts +55 -0
  245. package/src/_types/core/EVM/types.d.ts.map +1 -0
  246. package/src/_types/core/EVM/utils.d.ts +10 -0
  247. package/src/_types/core/EVM/utils.d.ts.map +1 -0
  248. package/src/_types/core/Solana/Solana.d.ts +3 -0
  249. package/src/_types/core/Solana/Solana.d.ts.map +1 -0
  250. package/src/_types/core/Solana/SolanaStepExecutor.d.ts +13 -0
  251. package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -0
  252. package/src/_types/core/Solana/connection.d.ts +8 -0
  253. package/src/_types/core/Solana/connection.d.ts.map +1 -0
  254. package/src/_types/core/Solana/getSNSAddress.d.ts +2 -0
  255. package/src/_types/core/Solana/getSNSAddress.d.ts.map +1 -0
  256. package/src/_types/core/Solana/getSolanaBalance.d.ts +3 -0
  257. package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -0
  258. package/src/_types/core/Solana/isAddress.d.ts +2 -0
  259. package/src/_types/core/Solana/isAddress.d.ts.map +1 -0
  260. package/src/_types/core/Solana/types.d.ts +13 -0
  261. package/src/_types/core/Solana/types.d.ts.map +1 -0
  262. package/{dist/cjs/execution → src/_types/core}/StatusManager.d.ts +15 -28
  263. package/src/_types/core/StatusManager.d.ts.map +1 -0
  264. package/src/_types/core/checkBalance.d.ts +3 -0
  265. package/src/_types/core/checkBalance.d.ts.map +1 -0
  266. package/src/_types/core/execution.d.ts +42 -0
  267. package/src/_types/core/execution.d.ts.map +1 -0
  268. package/src/_types/core/executionState.d.ts +17 -0
  269. package/src/_types/core/executionState.d.ts.map +1 -0
  270. package/src/_types/core/index.d.ts +4 -0
  271. package/src/_types/core/index.d.ts.map +1 -0
  272. package/src/_types/core/prepareRestart.d.ts +3 -0
  273. package/src/_types/core/prepareRestart.d.ts.map +1 -0
  274. package/src/_types/core/provider.d.ts +3 -0
  275. package/src/_types/core/provider.d.ts.map +1 -0
  276. package/src/_types/core/rpc.d.ts +4 -0
  277. package/src/_types/core/rpc.d.ts.map +1 -0
  278. package/{dist/execution → src/_types/core}/stepComparison.d.ts +7 -4
  279. package/src/_types/core/stepComparison.d.ts.map +1 -0
  280. package/src/_types/core/types.d.ts +81 -0
  281. package/src/_types/core/types.d.ts.map +1 -0
  282. package/{dist/execution → src/_types/core}/utils.d.ts +3 -2
  283. package/src/_types/core/utils.d.ts.map +1 -0
  284. package/src/_types/core/waitForReceivingTransaction.d.ts +4 -0
  285. package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -0
  286. package/src/_types/createConfig.d.ts +4 -0
  287. package/src/_types/createConfig.d.ts.map +1 -0
  288. package/{dist → src/_types}/helpers.d.ts +4 -3
  289. package/src/_types/helpers.d.ts.map +1 -0
  290. package/src/_types/index.d.ts +15 -0
  291. package/src/_types/index.d.ts.map +1 -0
  292. package/{dist → src/_types}/request.d.ts +1 -0
  293. package/src/_types/request.d.ts.map +1 -0
  294. package/src/_types/services/api.d.ts +89 -0
  295. package/src/_types/services/api.d.ts.map +1 -0
  296. package/src/_types/services/balance.d.ts +30 -0
  297. package/src/_types/services/balance.d.ts.map +1 -0
  298. package/src/_types/services/getNameServiceAddress.d.ts +3 -0
  299. package/src/_types/services/getNameServiceAddress.d.ts.map +1 -0
  300. package/{dist/cjs → src/_types}/typeguards.d.ts +3 -2
  301. package/src/_types/typeguards.d.ts.map +1 -0
  302. package/src/_types/types/index.d.ts +2 -0
  303. package/src/_types/types/index.d.ts.map +1 -0
  304. package/src/_types/types/internal.d.ts +59 -0
  305. package/src/_types/types/internal.d.ts.map +1 -0
  306. package/{dist → src/_types}/utils/errors.d.ts +3 -1
  307. package/src/_types/utils/errors.d.ts.map +1 -0
  308. package/src/_types/utils/getTransactionMessage.d.ts +4 -0
  309. package/src/_types/utils/getTransactionMessage.d.ts.map +1 -0
  310. package/src/_types/utils/index.d.ts +6 -0
  311. package/src/_types/utils/index.d.ts.map +1 -0
  312. package/{dist/cjs → src/_types}/utils/median.d.ts +1 -0
  313. package/src/_types/utils/median.d.ts.map +1 -0
  314. package/src/_types/utils/parseBackendError.d.ts +3 -0
  315. package/src/_types/utils/parseBackendError.d.ts.map +1 -0
  316. package/{dist → src/_types}/utils/parseError.d.ts +4 -6
  317. package/src/_types/utils/parseError.d.ts.map +1 -0
  318. package/{dist → src/_types}/utils/utils.d.ts +1 -0
  319. package/src/_types/utils/utils.d.ts.map +1 -0
  320. package/src/_types/version.d.ts +3 -0
  321. package/src/_types/version.d.ts.map +1 -0
  322. package/src/config.ts +91 -0
  323. package/src/constants.ts +4 -0
  324. package/src/core/BaseStepExecutor.ts +40 -0
  325. package/src/core/EVM/EVM.ts +47 -0
  326. package/src/core/EVM/EVMStepExecutor.ts +503 -0
  327. package/src/core/EVM/abi.ts +47 -0
  328. package/src/core/EVM/checkAllowance.ts +168 -0
  329. package/src/core/EVM/getAllowance.ts +144 -0
  330. package/src/core/EVM/getENSAddress.ts +18 -0
  331. package/src/core/EVM/getEVMBalance.ts +118 -0
  332. package/src/core/EVM/multisig.ts +53 -0
  333. package/src/core/EVM/publicClient.ts +54 -0
  334. package/src/core/EVM/setAllowance.ts +144 -0
  335. package/src/core/EVM/switchChain.ts +77 -0
  336. package/src/core/EVM/types.ts +73 -0
  337. package/src/core/EVM/utils.ts +48 -0
  338. package/src/core/Solana/Solana.ts +41 -0
  339. package/src/core/Solana/SolanaStepExecutor.ts +272 -0
  340. package/src/core/Solana/connection.ts +20 -0
  341. package/src/core/Solana/getSNSAddress.ts +33 -0
  342. package/src/core/Solana/getSolanaBalance.ts +72 -0
  343. package/src/core/Solana/isAddress.ts +10 -0
  344. package/src/core/Solana/types.ts +18 -0
  345. package/src/core/StatusManager.ts +231 -0
  346. package/src/core/checkBalance.ts +48 -0
  347. package/src/core/execution.ts +214 -0
  348. package/src/core/executionState.ts +44 -0
  349. package/src/core/index.ts +3 -0
  350. package/src/core/prepareRestart.ts +82 -0
  351. package/src/core/provider.ts +12 -0
  352. package/src/core/rpc.ts +15 -0
  353. package/src/core/stepComparison.ts +51 -0
  354. package/src/core/types.ts +118 -0
  355. package/src/core/utils.ts +105 -0
  356. package/src/core/waitForReceivingTransaction.ts +74 -0
  357. package/src/createConfig.ts +33 -0
  358. package/src/helpers.ts +83 -0
  359. package/src/index.ts +18 -0
  360. package/src/request.ts +79 -0
  361. package/src/services/api.ts +509 -0
  362. package/src/services/balance.ts +93 -0
  363. package/src/services/getNameServiceAddress.ts +30 -0
  364. package/src/typeguards.ts +89 -0
  365. package/src/types/index.ts +1 -0
  366. package/src/types/internal.ts +62 -0
  367. package/src/utils/errors.ts +232 -0
  368. package/src/utils/getTransactionMessage.ts +46 -0
  369. package/src/utils/index.ts +5 -0
  370. package/src/utils/median.ts +11 -0
  371. package/src/utils/parseBackendError.ts +50 -0
  372. package/src/utils/parseError.ts +210 -0
  373. package/src/utils/utils.ts +48 -0
  374. package/src/version.ts +2 -0
  375. package/dist/LiFi.d.ts +0 -175
  376. package/dist/LiFi.js +0 -250
  377. package/dist/allowance/getAllowance.d.ts +0 -6
  378. package/dist/allowance/index.d.ts +0 -3
  379. package/dist/allowance/index.js +0 -3
  380. package/dist/allowance/setAllowance.d.ts +0 -6
  381. package/dist/allowance/types.d.ts +0 -27
  382. package/dist/allowance/types.js +0 -1
  383. package/dist/balance/getBalance.d.ts +0 -2
  384. package/dist/balance/getTokenBalance.d.ts +0 -8
  385. package/dist/balance/getTokenBalance.js +0 -27
  386. package/dist/balance/index.d.ts +0 -2
  387. package/dist/balance/index.js +0 -2
  388. package/dist/cjs/LiFi.d.ts +0 -175
  389. package/dist/cjs/LiFi.js +0 -280
  390. package/dist/cjs/allowance/index.d.ts +0 -3
  391. package/dist/cjs/allowance/index.js +0 -19
  392. package/dist/cjs/allowance/setAllowance.d.ts +0 -6
  393. package/dist/cjs/allowance/types.d.ts +0 -27
  394. package/dist/cjs/balance/getBalance.d.ts +0 -2
  395. package/dist/cjs/balance/getTokenBalance.d.ts +0 -8
  396. package/dist/cjs/balance/getTokenBalance.js +0 -33
  397. package/dist/cjs/balance/index.d.ts +0 -2
  398. package/dist/cjs/balance/index.js +0 -18
  399. package/dist/cjs/connectors.d.ts +0 -8
  400. package/dist/cjs/connectors.js +0 -75
  401. package/dist/cjs/execution/RouteExecutionManager.d.ts +0 -59
  402. package/dist/cjs/execution/RouteExecutionManager.js +0 -202
  403. package/dist/cjs/execution/StatusManager.js +0 -171
  404. package/dist/cjs/execution/StepExecutionManager.d.ts +0 -7
  405. package/dist/cjs/execution/StepExecutionManager.js +0 -272
  406. package/dist/cjs/execution/StepExecutor.d.ts +0 -15
  407. package/dist/cjs/execution/StepExecutor.js +0 -62
  408. package/dist/cjs/execution/checkAllowance.d.ts +0 -4
  409. package/dist/cjs/execution/checkBalance.d.ts +0 -2
  410. package/dist/cjs/execution/index.d.ts +0 -1
  411. package/dist/cjs/execution/index.js +0 -17
  412. package/dist/cjs/execution/multisig.d.ts +0 -4
  413. package/dist/cjs/execution/prepareRestart.d.ts +0 -3
  414. package/dist/cjs/execution/prepareRestart.js +0 -65
  415. package/dist/cjs/execution/stepComparison.d.ts +0 -14
  416. package/dist/cjs/execution/stepComparison.js +0 -37
  417. package/dist/cjs/execution/switchChain.js +0 -54
  418. package/dist/cjs/execution/utils.d.ts +0 -12
  419. package/dist/cjs/execution/waitForReceivingTransaction.d.ts +0 -3
  420. package/dist/cjs/helpers.d.ts +0 -18
  421. package/dist/cjs/helpers.js +0 -84
  422. package/dist/cjs/index.d.ts +0 -5
  423. package/dist/cjs/index.js +0 -24
  424. package/dist/cjs/request.d.ts +0 -9
  425. package/dist/cjs/request.js +0 -60
  426. package/dist/cjs/services/ApiService.d.ts +0 -17
  427. package/dist/cjs/services/ApiService.js +0 -326
  428. package/dist/cjs/services/ChainsService.d.ts +0 -11
  429. package/dist/cjs/services/ChainsService.js +0 -39
  430. package/dist/cjs/services/ConfigService.d.ts +0 -23
  431. package/dist/cjs/services/ConfigService.js +0 -101
  432. package/dist/cjs/types/index.d.ts +0 -4
  433. package/dist/cjs/types/index.js +0 -22
  434. package/dist/cjs/types/internal.types.d.ts +0 -145
  435. package/dist/cjs/utils/errors.d.ts +0 -107
  436. package/dist/cjs/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  437. package/dist/cjs/utils/index.d.ts +0 -5
  438. package/dist/cjs/utils/index.js +0 -21
  439. package/dist/cjs/utils/parseError.d.ts +0 -37
  440. package/dist/cjs/utils/parseError.js +0 -157
  441. package/dist/cjs/utils/utils.d.ts +0 -10
  442. package/dist/cjs/version.d.ts +0 -2
  443. package/dist/connectors.d.ts +0 -8
  444. package/dist/connectors.js +0 -41
  445. package/dist/constants.d.ts +0 -6
  446. package/dist/execution/RouteExecutionManager.d.ts +0 -59
  447. package/dist/execution/RouteExecutionManager.js +0 -195
  448. package/dist/execution/StatusManager.d.ts +0 -67
  449. package/dist/execution/StatusManager.js +0 -167
  450. package/dist/execution/StepExecutionManager.d.ts +0 -7
  451. package/dist/execution/StepExecutionManager.js +0 -265
  452. package/dist/execution/StepExecutor.d.ts +0 -15
  453. package/dist/execution/StepExecutor.js +0 -58
  454. package/dist/execution/checkAllowance.d.ts +0 -4
  455. package/dist/execution/checkBalance.d.ts +0 -2
  456. package/dist/execution/index.d.ts +0 -1
  457. package/dist/execution/index.js +0 -1
  458. package/dist/execution/multisig.d.ts +0 -4
  459. package/dist/execution/prepareRestart.d.ts +0 -3
  460. package/dist/execution/prepareRestart.js +0 -61
  461. package/dist/execution/switchChain.d.ts +0 -21
  462. package/dist/execution/waitForReceivingTransaction.d.ts +0 -3
  463. package/dist/index.d.ts +0 -5
  464. package/dist/index.js +0 -6
  465. package/dist/services/ApiService.d.ts +0 -17
  466. package/dist/services/ApiService.js +0 -321
  467. package/dist/services/ChainsService.d.ts +0 -11
  468. package/dist/services/ChainsService.js +0 -33
  469. package/dist/services/ConfigService.d.ts +0 -23
  470. package/dist/services/ConfigService.js +0 -99
  471. package/dist/typeguards.d.ts +0 -4
  472. package/dist/types/abi.d.ts +0 -5
  473. package/dist/types/index.d.ts +0 -4
  474. package/dist/types/index.js +0 -4
  475. package/dist/types/internal.types.d.ts +0 -145
  476. package/dist/types/internal.types.js +0 -1
  477. package/dist/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  478. package/dist/utils/index.d.ts +0 -5
  479. package/dist/utils/index.js +0 -5
  480. package/dist/utils/median.d.ts +0 -1
  481. package/dist/version.d.ts +0 -2
  482. package/dist/version.js +0 -2
@@ -0,0 +1,168 @@
1
+ import type { Chain, LiFiStep, Process, ProcessType } from '@lifi/types'
2
+ import type { Address, Hash, ReplacementReason, WalletClient } from 'viem'
3
+ import { maxUint256, publicActions } from 'viem'
4
+ import { LiFiErrorCode, TransactionError } from '../../utils/index.js'
5
+ import { parseError } from '../../utils/parseError.js'
6
+ import type { StatusManager } from '../StatusManager.js'
7
+ import type { ExecutionOptions } from '../types.js'
8
+ import { getAllowance } from './getAllowance.js'
9
+ import { setAllowance } from './setAllowance.js'
10
+ import { retryCount, retryDelay } from './utils.js'
11
+
12
+ export const checkAllowance = async (
13
+ chain: Chain,
14
+ step: LiFiStep,
15
+ walletClient: WalletClient,
16
+ statusManager: StatusManager,
17
+ settings?: ExecutionOptions,
18
+ allowUserInteraction = false,
19
+ shouldBatchTransactions = false
20
+ ): Promise<Hash | void> => {
21
+ // Ask the user to set an allowance
22
+ let allowanceProcess: Process = statusManager.findOrCreateProcess(
23
+ step,
24
+ 'TOKEN_ALLOWANCE'
25
+ )
26
+
27
+ // Check allowance
28
+ try {
29
+ if (allowanceProcess.txHash && allowanceProcess.status !== 'DONE') {
30
+ await waitForApprovalTransaction(
31
+ walletClient,
32
+ allowanceProcess.txHash! as Address,
33
+ allowanceProcess.type,
34
+ step,
35
+ chain,
36
+ statusManager
37
+ )
38
+ } else {
39
+ allowanceProcess = statusManager.updateProcess(
40
+ step,
41
+ allowanceProcess.type,
42
+ 'STARTED'
43
+ )
44
+
45
+ const approved = await getAllowance(
46
+ chain.id,
47
+ step.action.fromToken.address,
48
+ walletClient.account!.address,
49
+ step.estimate.approvalAddress
50
+ )
51
+
52
+ const fromAmount = BigInt(step.action.fromAmount)
53
+
54
+ if (fromAmount > approved) {
55
+ if (!allowUserInteraction) {
56
+ return
57
+ }
58
+ const approvalAmount = settings?.infiniteApproval
59
+ ? maxUint256
60
+ : fromAmount
61
+
62
+ if (shouldBatchTransactions) {
63
+ const approveTxHash = await setAllowance(
64
+ walletClient,
65
+ step.action.fromToken.address,
66
+ step.estimate.approvalAddress,
67
+ approvalAmount,
68
+ settings,
69
+ true
70
+ )
71
+
72
+ allowanceProcess = statusManager.updateProcess(
73
+ step,
74
+ allowanceProcess.type,
75
+ 'DONE'
76
+ )
77
+
78
+ return approveTxHash
79
+ }
80
+
81
+ const approveTxHash = await setAllowance(
82
+ walletClient,
83
+ step.action.fromToken.address,
84
+ step.estimate.approvalAddress,
85
+ approvalAmount
86
+ )
87
+ await waitForApprovalTransaction(
88
+ walletClient,
89
+ approveTxHash,
90
+ allowanceProcess.type,
91
+ step,
92
+ chain,
93
+ statusManager
94
+ )
95
+ } else {
96
+ allowanceProcess = statusManager.updateProcess(
97
+ step,
98
+ allowanceProcess.type,
99
+ 'DONE'
100
+ )
101
+ }
102
+ }
103
+ } catch (e: any) {
104
+ const error = await parseError(e, step, allowanceProcess)
105
+ allowanceProcess = statusManager.updateProcess(
106
+ step,
107
+ allowanceProcess.type,
108
+ 'FAILED',
109
+ {
110
+ error: {
111
+ message: error.message,
112
+ htmlMessage: error.htmlMessage,
113
+ code: error.code,
114
+ },
115
+ }
116
+ )
117
+ statusManager.updateExecution(step, 'FAILED')
118
+ throw error
119
+ }
120
+ }
121
+
122
+ const waitForApprovalTransaction = async (
123
+ walletClient: WalletClient,
124
+ txHash: Hash,
125
+ processType: ProcessType,
126
+ step: LiFiStep,
127
+ chain: Chain,
128
+ statusManager: StatusManager
129
+ ) => {
130
+ const client = walletClient.extend(publicActions)
131
+ statusManager.updateProcess(step, processType, 'PENDING', {
132
+ txHash,
133
+ txLink: `${chain.metamask.blockExplorerUrls[0]}tx/${txHash}`,
134
+ })
135
+
136
+ let replacementReason: ReplacementReason | undefined
137
+ const transactionReceipt = await client.waitForTransactionReceipt({
138
+ hash: txHash,
139
+ onReplaced(response) {
140
+ replacementReason = response.reason
141
+ statusManager.updateProcess(step, processType, 'PENDING', {
142
+ txHash: response.transaction.hash,
143
+ txLink: `${chain.metamask.blockExplorerUrls[0]}tx/${response.transaction.hash}`,
144
+ })
145
+ },
146
+ retryCount,
147
+ retryDelay,
148
+ })
149
+
150
+ if (transactionReceipt.status === 'reverted') {
151
+ throw new TransactionError(
152
+ LiFiErrorCode.TransactionFailed,
153
+ 'Transaction was reverted.'
154
+ )
155
+ }
156
+
157
+ if (replacementReason === 'cancelled') {
158
+ throw new TransactionError(
159
+ LiFiErrorCode.TransactionCanceled,
160
+ 'User canceled transaction.'
161
+ )
162
+ }
163
+
164
+ statusManager.updateProcess(step, processType, 'DONE', {
165
+ txHash: transactionReceipt.transactionHash,
166
+ txLink: `${chain.metamask.blockExplorerUrls[0]}tx/${transactionReceipt.transactionHash}`,
167
+ })
168
+ }
@@ -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,18 @@
1
+ import { ChainId } from '@lifi/types'
2
+ import { normalize } from 'viem/ens'
3
+ import { getPublicClient } from './publicClient.js'
4
+
5
+ export const getENSAddress = async (
6
+ name: string
7
+ ): Promise<string | undefined> => {
8
+ try {
9
+ const client = await getPublicClient(ChainId.ETH)
10
+ const address = await client.getEnsAddress({
11
+ name: normalize(name),
12
+ })
13
+ return address as string | undefined
14
+ } catch (_) {
15
+ // ignore
16
+ return
17
+ }
18
+ }
@@ -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,54 @@
1
+ import { ChainId } from '@lifi/types'
2
+ import type { PublicClient } from 'viem'
3
+ import { createPublicClient, fallback, http } from 'viem'
4
+ import { mainnet, type Chain } from 'viem/chains'
5
+ import { config } from '../../config.js'
6
+ import { getRpcUrls } from '../rpc.js'
7
+
8
+ // cached providers
9
+ const publicClients: Record<number, PublicClient> = {}
10
+
11
+ /**
12
+ * Get an instance of a provider for a specific chain
13
+ * @param chainId - Id of the chain the provider is for
14
+ * @returns The public client for the given chain
15
+ */
16
+ export const getPublicClient = async (
17
+ chainId: number
18
+ ): Promise<PublicClient> => {
19
+ if (!publicClients[chainId]) {
20
+ const urls = await getRpcUrls(chainId)
21
+ const fallbackTransports = urls.map((url) =>
22
+ http(url, {
23
+ batch: true,
24
+ })
25
+ )
26
+ const _chain = await config.getChainById(chainId)
27
+ const chain: Chain = {
28
+ ..._chain,
29
+ ..._chain.metamask,
30
+ name: _chain.metamask.chainName,
31
+ rpcUrls: {
32
+ default: { http: _chain.metamask.rpcUrls },
33
+ public: { http: _chain.metamask.rpcUrls },
34
+ },
35
+ }
36
+ // Add ENS contracts
37
+ if (chain.id === ChainId.ETH) {
38
+ chain.contracts = {
39
+ ...mainnet.contracts,
40
+ ...chain.contracts,
41
+ }
42
+ }
43
+ publicClients[chainId] = createPublicClient({
44
+ chain: chain,
45
+ transport: fallback(fallbackTransports),
46
+ })
47
+ }
48
+
49
+ if (!publicClients[chainId]) {
50
+ throw new Error(`Unable to configure provider for chain ${chainId}`)
51
+ }
52
+
53
+ return publicClients[chainId]
54
+ }
@@ -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
+ }