@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,77 @@
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
+ const currentChainId = await walletClient.getChainId()
32
+ if (currentChainId === step.action.fromChainId) {
33
+ return walletClient
34
+ }
35
+
36
+ // -> set status message
37
+ step.execution = statusManager.initExecutionObject(step)
38
+ statusManager.updateExecution(step, 'ACTION_REQUIRED')
39
+
40
+ let switchProcess = statusManager.findOrCreateProcess(
41
+ step,
42
+ 'SWITCH_CHAIN',
43
+ 'ACTION_REQUIRED'
44
+ )
45
+
46
+ if (!allowUserInteraction) {
47
+ return
48
+ }
49
+
50
+ try {
51
+ const updatedWalletClient = await switchChainHook?.(step.action.fromChainId)
52
+ const updatedChainId = await updatedWalletClient?.getChainId()
53
+ if (updatedChainId !== step.action.fromChainId) {
54
+ throw new ProviderError(
55
+ LiFiErrorCode.ChainSwitchError,
56
+ 'Chain switch required.'
57
+ )
58
+ }
59
+
60
+ switchProcess = statusManager.updateProcess(
61
+ step,
62
+ switchProcess.type,
63
+ 'DONE'
64
+ )
65
+ statusManager.updateExecution(step, 'PENDING')
66
+ return updatedWalletClient
67
+ } catch (error: any) {
68
+ statusManager.updateProcess(step, switchProcess.type, 'FAILED', {
69
+ error: {
70
+ message: error.message,
71
+ code: LiFiErrorCode.ChainSwitchError,
72
+ },
73
+ })
74
+ statusManager.updateExecution(step, 'FAILED')
75
+ throw error
76
+ }
77
+ }
@@ -0,0 +1,73 @@
1
+ import { ChainType, 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
+ multisig?: MultisigConfig
10
+ }
11
+
12
+ export interface EVMProvider extends SDKProvider {
13
+ setOptions(options: EVMProviderOptions): void
14
+ multisig?: MultisigConfig
15
+ }
16
+
17
+ export function isEVM(provider: SDKProvider): provider is EVMProvider {
18
+ return provider.type === ChainType.EVM
19
+ }
20
+
21
+ export type TokenSpender = {
22
+ token: Token
23
+ spenderAddress: string
24
+ }
25
+
26
+ export type TokenAllowance = {
27
+ token: Token
28
+ allowance?: bigint
29
+ }
30
+
31
+ export type TokenSpenderAllowance = {
32
+ token: Token
33
+ spenderAddress: string
34
+ allowance?: bigint
35
+ }
36
+
37
+ export interface ApproveTokenRequest {
38
+ walletClient: WalletClient
39
+ token: Token
40
+ spenderAddress: string
41
+ amount: bigint
42
+ infiniteApproval?: boolean
43
+ }
44
+
45
+ export interface RevokeApprovalRequest {
46
+ walletClient: WalletClient
47
+ token: Token
48
+ spenderAddress: string
49
+ }
50
+
51
+ export interface MultisigTxDetails {
52
+ status: 'DONE' | 'FAILED' | 'PENDING' | 'CANCELLED'
53
+ txHash?: Hash
54
+ }
55
+
56
+ export interface MultisigTransaction {
57
+ to: string
58
+ value?: bigint
59
+ data: string
60
+ }
61
+
62
+ export interface MultisigConfig {
63
+ isMultisigWalletClient: boolean
64
+ getMultisigTransactionDetails: (
65
+ txHash: Hash,
66
+ fromChainId: number,
67
+ updateIntermediateStatus?: () => void
68
+ ) => Promise<MultisigTxDetails>
69
+ sendBatchTransaction?: (
70
+ batchTransactions: MultisigTransaction[]
71
+ ) => Promise<Hash>
72
+ shouldBatchTransactions?: boolean
73
+ }
@@ -0,0 +1,48 @@
1
+ import { 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
+
6
+ export const getMaxPriorityFeePerGas = async (
7
+ client: PublicClient
8
+ ): Promise<bigint | undefined> => {
9
+ const block = await client.getBlock({
10
+ includeTransactions: true,
11
+ })
12
+
13
+ const maxPriorityFeePerGasList = (block.transactions as Transaction[])
14
+ .filter((tx) => tx.maxPriorityFeePerGas)
15
+ .map((tx) => tx.maxPriorityFeePerGas) as bigint[]
16
+
17
+ if (!maxPriorityFeePerGasList.length) {
18
+ return
19
+ }
20
+
21
+ const maxPriorityFeePerGasSum = maxPriorityFeePerGasList.reduce(
22
+ (acc, value) => (acc += value),
23
+ 0n
24
+ )
25
+
26
+ const maxPriorityFeePerGasMedian = median(maxPriorityFeePerGasList) ?? 0n
27
+
28
+ const maxPriorityFeePerGasAvg =
29
+ maxPriorityFeePerGasSum / BigInt(maxPriorityFeePerGasList.length)
30
+
31
+ return maxPriorityFeePerGasMedian > maxPriorityFeePerGasAvg
32
+ ? maxPriorityFeePerGasAvg
33
+ : maxPriorityFeePerGasMedian
34
+ }
35
+
36
+ // Multicall
37
+ export const getMulticallAddress = async (
38
+ chainId: ChainId
39
+ ): Promise<string | undefined> => {
40
+ const chains = await config.getChains()
41
+ return chains.find((chain) => chain.id === chainId)?.multicallAddress
42
+ }
43
+
44
+ // Modified viem retryDelay exponential backoff function.
45
+ export const retryDelay = ({ count }: { count: number; error: Error }) =>
46
+ Math.min(~~(1 << count) * 200, 3000)
47
+
48
+ export const retryCount = 20
@@ -0,0 +1,41 @@
1
+ import { ChainType } from '@lifi/types'
2
+ import type { StepExecutorOptions } from '../types.js'
3
+ import { SolanaStepExecutor } from './SolanaStepExecutor.js'
4
+ import { getSNSAddress } from './getSNSAddress.js'
5
+ import { getSolanaBalance } from './getSolanaBalance.js'
6
+ import { isAddress } from './isAddress.js'
7
+ import type { SolanaProvider, SolanaProviderOptions } from './types.js'
8
+
9
+ export function Solana(options?: SolanaProviderOptions): SolanaProvider {
10
+ const _options: SolanaProviderOptions = options ?? {}
11
+ return {
12
+ get type() {
13
+ return ChainType.SVM
14
+ },
15
+ isAddress,
16
+ resolveAddress: getSNSAddress,
17
+ getBalance: getSolanaBalance,
18
+ async getStepExecutor(
19
+ options: StepExecutorOptions
20
+ ): Promise<SolanaStepExecutor> {
21
+ if (!_options.getWalletAdapter) {
22
+ throw new Error(`getWalletAdapter is not provided.`)
23
+ }
24
+
25
+ const walletAdapter = await _options.getWalletAdapter()
26
+
27
+ const executor = new SolanaStepExecutor({
28
+ walletAdapter,
29
+ routeId: options.routeId,
30
+ executionOptions: {
31
+ ...options.executionOptions,
32
+ },
33
+ })
34
+
35
+ return executor
36
+ },
37
+ setOptions(options: SolanaProviderOptions) {
38
+ Object.assign(_options, options)
39
+ },
40
+ }
41
+ }
@@ -0,0 +1,272 @@
1
+ import type { ExtendedTransactionInfo, FullStatusData } from '@lifi/types'
2
+ import type { Adapter } from '@solana/wallet-adapter-base'
3
+ import {
4
+ VersionedTransaction,
5
+ type TransactionConfirmationStrategy,
6
+ type TransactionSignature,
7
+ } from '@solana/web3.js'
8
+ import { config } from '../../config.js'
9
+ import { getStepTransaction } from '../../services/api.js'
10
+ import {
11
+ LiFiErrorCode,
12
+ TransactionError,
13
+ getTransactionFailedMessage,
14
+ parseError,
15
+ } from '../../utils/index.js'
16
+ import { BaseStepExecutor } from '../BaseStepExecutor.js'
17
+ import { checkBalance } from '../checkBalance.js'
18
+ import { stepComparison } from '../stepComparison.js'
19
+ import type {
20
+ LiFiStepExtended,
21
+ StepExecutorOptions,
22
+ TransactionParameters,
23
+ } from '../types.js'
24
+ import { getSubstatusMessage } from '../utils.js'
25
+ import { waitForReceivingTransaction } from '../waitForReceivingTransaction.js'
26
+ import { getSolanaConnection } from './connection.js'
27
+
28
+ export interface SolanaStepExecutorOptions extends StepExecutorOptions {
29
+ walletAdapter: Adapter
30
+ }
31
+
32
+ export class SolanaStepExecutor extends BaseStepExecutor {
33
+ private walletAdapter: Adapter
34
+
35
+ constructor(options: SolanaStepExecutorOptions) {
36
+ super(options)
37
+ this.walletAdapter = options.walletAdapter
38
+ }
39
+
40
+ checkWalletAdapter = (step: LiFiStepExtended) => {
41
+ // Prevent execution of the quote by wallet different from the one which requested the quote
42
+ if (this.walletAdapter.publicKey!.toString() !== step.action.fromAddress) {
43
+ throw new TransactionError(
44
+ LiFiErrorCode.WalletChangedDuringExecution,
45
+ 'The wallet address that requested the quote does not match the wallet address attempting to sign the transaction.'
46
+ )
47
+ }
48
+ }
49
+
50
+ executeStep = async (step: LiFiStepExtended): Promise<LiFiStepExtended> => {
51
+ step.execution = this.statusManager.initExecutionObject(step)
52
+
53
+ const fromChain = await config.getChainById(step.action.fromChainId)
54
+ const toChain = await config.getChainById(step.action.toChainId)
55
+
56
+ const isBridgeExecution = fromChain.id !== toChain.id
57
+ const currentProcessType = isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'
58
+
59
+ // STEP 2: Get transaction
60
+ let process = this.statusManager.findOrCreateProcess(
61
+ step,
62
+ currentProcessType
63
+ )
64
+
65
+ if (process.status !== 'DONE') {
66
+ try {
67
+ const connection = await getSolanaConnection()
68
+ let txHash: TransactionSignature
69
+ if (process.txHash) {
70
+ txHash = process.txHash as TransactionSignature
71
+ } else {
72
+ process = this.statusManager.updateProcess(
73
+ step,
74
+ process.type,
75
+ 'STARTED'
76
+ )
77
+
78
+ // Check balance
79
+ await checkBalance(this.walletAdapter.publicKey!.toString(), step)
80
+
81
+ // Create new transaction
82
+ if (!step.transactionRequest) {
83
+ const updatedStep = await getStepTransaction(step)
84
+ const comparedStep = await stepComparison(
85
+ this.statusManager,
86
+ step,
87
+ updatedStep,
88
+ this.allowUserInteraction,
89
+ this.executionOptions
90
+ )
91
+ step = {
92
+ ...comparedStep,
93
+ execution: step.execution,
94
+ }
95
+ }
96
+
97
+ if (!step.transactionRequest?.data) {
98
+ throw new TransactionError(
99
+ LiFiErrorCode.TransactionUnprepared,
100
+ 'Unable to prepare transaction.'
101
+ )
102
+ }
103
+
104
+ process = this.statusManager.updateProcess(
105
+ step,
106
+ process.type,
107
+ 'ACTION_REQUIRED'
108
+ )
109
+
110
+ if (!this.allowUserInteraction) {
111
+ return step
112
+ }
113
+
114
+ let transactionRequest: TransactionParameters = {
115
+ data: step.transactionRequest.data,
116
+ }
117
+
118
+ if (this.executionOptions?.updateTransactionRequestHook) {
119
+ const customizedTransactionRequest: TransactionParameters =
120
+ await this.executionOptions.updateTransactionRequestHook({
121
+ requestType: 'transaction',
122
+ ...transactionRequest,
123
+ })
124
+
125
+ transactionRequest = {
126
+ ...transactionRequest,
127
+ ...customizedTransactionRequest,
128
+ }
129
+ }
130
+
131
+ if (!transactionRequest.data) {
132
+ throw new TransactionError(
133
+ LiFiErrorCode.TransactionUnprepared,
134
+ 'Unable to prepare transaction.'
135
+ )
136
+ }
137
+
138
+ const versionedTransaction = VersionedTransaction.deserialize(
139
+ Uint8Array.from(atob(transactionRequest.data), (c) =>
140
+ c.charCodeAt(0)
141
+ )
142
+ )
143
+
144
+ this.checkWalletAdapter(step)
145
+
146
+ txHash = await this.walletAdapter.sendTransaction(
147
+ versionedTransaction,
148
+ connection,
149
+ {
150
+ maxRetries: 5,
151
+ skipPreflight: true,
152
+ }
153
+ )
154
+
155
+ process = this.statusManager.updateProcess(
156
+ step,
157
+ process.type,
158
+ 'PENDING',
159
+ {
160
+ txHash: txHash,
161
+ txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txHash}`,
162
+ }
163
+ )
164
+ }
165
+
166
+ const signatureResult = await connection.confirmTransaction(
167
+ {
168
+ signature: txHash,
169
+ } as TransactionConfirmationStrategy,
170
+ 'confirmed'
171
+ )
172
+
173
+ if (signatureResult.value.err) {
174
+ throw new TransactionError(
175
+ LiFiErrorCode.TransactionFailed,
176
+ `Transaction failed: ${signatureResult.value.err}`
177
+ )
178
+ }
179
+
180
+ if (isBridgeExecution) {
181
+ process = this.statusManager.updateProcess(step, process.type, 'DONE')
182
+ }
183
+ } catch (e: any) {
184
+ const error = await parseError(e, step, process)
185
+ process = this.statusManager.updateProcess(
186
+ step,
187
+ process.type,
188
+ 'FAILED',
189
+ {
190
+ error: {
191
+ message: error.message,
192
+ htmlMessage: error.htmlMessage,
193
+ code: error.code,
194
+ },
195
+ }
196
+ )
197
+ this.statusManager.updateExecution(step, 'FAILED')
198
+ throw error
199
+ }
200
+ }
201
+
202
+ // STEP 5: Wait for the receiving chain
203
+ const processTxHash = process.txHash
204
+ if (isBridgeExecution) {
205
+ process = this.statusManager.findOrCreateProcess(
206
+ step,
207
+ 'RECEIVING_CHAIN',
208
+ 'PENDING'
209
+ )
210
+ }
211
+ let statusResponse: FullStatusData
212
+ try {
213
+ if (!processTxHash) {
214
+ throw new Error('Transaction hash is undefined.')
215
+ }
216
+ statusResponse = (await waitForReceivingTransaction(
217
+ processTxHash,
218
+ this.statusManager,
219
+ process.type,
220
+ step
221
+ )) as FullStatusData
222
+
223
+ const statusReceiving =
224
+ statusResponse.receiving as ExtendedTransactionInfo
225
+
226
+ process = this.statusManager.updateProcess(step, process.type, 'DONE', {
227
+ substatus: statusResponse.substatus,
228
+ substatusMessage:
229
+ statusResponse.substatusMessage ||
230
+ getSubstatusMessage(statusResponse.status, statusResponse.substatus),
231
+ txHash: statusReceiving?.txHash,
232
+ txLink: `${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
233
+ })
234
+
235
+ this.statusManager.updateExecution(step, 'DONE', {
236
+ fromAmount: statusResponse.sending.amount,
237
+ toAmount: statusReceiving?.amount,
238
+ toToken: statusReceiving?.token,
239
+ gasCosts: [
240
+ {
241
+ amount: statusResponse.sending.gasAmount,
242
+ amountUSD: statusResponse.sending.gasAmountUSD,
243
+ token: statusResponse.sending.gasToken,
244
+ estimate: statusResponse.sending.gasUsed,
245
+ limit: statusResponse.sending.gasUsed,
246
+ price: statusResponse.sending.gasPrice,
247
+ type: 'SEND',
248
+ },
249
+ ],
250
+ })
251
+ } catch (e: unknown) {
252
+ const htmlMessage = await getTransactionFailedMessage(
253
+ step,
254
+ process.txLink
255
+ )
256
+
257
+ process = this.statusManager.updateProcess(step, process.type, 'FAILED', {
258
+ error: {
259
+ code: LiFiErrorCode.TransactionFailed,
260
+ message: 'Failed while waiting for receiving chain.',
261
+ htmlMessage,
262
+ },
263
+ })
264
+ this.statusManager.updateExecution(step, 'FAILED')
265
+ console.warn(e)
266
+ throw e
267
+ }
268
+
269
+ // DONE
270
+ return step
271
+ }
272
+ }
@@ -0,0 +1,20 @@
1
+ import { ChainId } from '@lifi/types'
2
+ import { Connection } from '@solana/web3.js'
3
+ import { getRpcUrl } from '../rpc.js'
4
+
5
+ let connection: Connection | undefined = undefined
6
+
7
+ /**
8
+ * getSolanaConnection is just a thin wrapper around getting the
9
+ * connection (rpc provider) for Solana
10
+ * @returns - Solana rpc connection
11
+ */
12
+ export const getSolanaConnection = async (): Promise<Connection> => {
13
+ if (!connection) {
14
+ const rpcUrl = await getRpcUrl(ChainId.SOL)
15
+ connection = new Connection(rpcUrl)
16
+ return connection
17
+ } else {
18
+ return connection
19
+ }
20
+ }
@@ -0,0 +1,33 @@
1
+ import { isAddress } from './isAddress.js'
2
+
3
+ interface SNSResult {
4
+ s: 'ok' | 'error'
5
+ result: string
6
+ }
7
+
8
+ // Subject to change
9
+ // https://github.com/Bonfida/sns-sdk?tab=readme-ov-file#sdk-proxy
10
+ export const getSNSAddress = async (name: string) => {
11
+ try {
12
+ if (!name.endsWith('.sol')) {
13
+ return
14
+ }
15
+ // const rpcUrl = await getRpcUrl(ChainId.SOL)
16
+ const snsWorkerUrl = `https://sns-sdk-proxy.bonfida.workers.dev/resolve/${name}`
17
+ const response: Response = await fetch(snsWorkerUrl)
18
+ if (!response.ok) {
19
+ return
20
+ }
21
+
22
+ const data: SNSResult = await response.json()
23
+
24
+ if (!isAddress(data.result)) {
25
+ return
26
+ }
27
+
28
+ return data.result
29
+ } catch (_) {
30
+ // ignore
31
+ return
32
+ }
33
+ }
@@ -0,0 +1,72 @@
1
+ import type { ChainId, Token, TokenAmount } from '@lifi/types'
2
+ import { PublicKey } from '@solana/web3.js'
3
+ import { wrappedSolAddress } from '../../constants.js'
4
+ import { getSolanaConnection } from './connection.js'
5
+ import { TokenProgramAddress } from './types.js'
6
+
7
+ export const getSolanaBalance = async (
8
+ walletAddress: string,
9
+ tokens: Token[]
10
+ ): Promise<TokenAmount[]> => {
11
+ if (tokens.length === 0) {
12
+ return []
13
+ }
14
+ const { chainId } = tokens[0]
15
+ tokens.forEach((token) => {
16
+ if (token.chainId !== chainId) {
17
+ console.warn(`Requested tokens have to be on the same chain.`)
18
+ }
19
+ })
20
+
21
+ return getSolanaBalanceDefault(chainId, tokens, walletAddress)
22
+ }
23
+
24
+ const getSolanaBalanceDefault = async (
25
+ _chainId: ChainId,
26
+ tokens: Token[],
27
+ walletAddress: string
28
+ ): Promise<TokenAmount[]> => {
29
+ const connection = await getSolanaConnection()
30
+ const accountPublicKey = new PublicKey(walletAddress)
31
+ const tokenProgramPublicKey = new PublicKey(TokenProgramAddress)
32
+ const [slot, balance, tokenAccountsByOwner] = await Promise.allSettled([
33
+ connection.getSlot(),
34
+ connection.getBalance(accountPublicKey),
35
+ connection.getParsedTokenAccountsByOwner(accountPublicKey, {
36
+ programId: tokenProgramPublicKey,
37
+ }),
38
+ ])
39
+ const blockNumber = slot.status === 'fulfilled' ? BigInt(slot.value) : 0n
40
+ const solBalance = balance.status === 'fulfilled' ? BigInt(balance.value) : 0n
41
+ const walletTokenAmounts =
42
+ tokenAccountsByOwner.status === 'fulfilled'
43
+ ? tokenAccountsByOwner.value.value.reduce(
44
+ (tokenAmounts, value) => {
45
+ const amount = BigInt(
46
+ value.account.data.parsed.info.tokenAmount.amount
47
+ )
48
+ if (amount > 0n) {
49
+ tokenAmounts[value.account.data.parsed.info.mint] = amount
50
+ }
51
+ return tokenAmounts
52
+ },
53
+ {} as Record<string, bigint>
54
+ )
55
+ : {}
56
+ walletTokenAmounts[wrappedSolAddress] ??= 0n
57
+ walletTokenAmounts[wrappedSolAddress] += solBalance
58
+ const tokenAmounts: TokenAmount[] = tokens.map((token) => {
59
+ if (walletTokenAmounts[token.address]) {
60
+ return {
61
+ ...token,
62
+ amount: walletTokenAmounts[token.address],
63
+ blockNumber,
64
+ }
65
+ }
66
+ return {
67
+ ...token,
68
+ blockNumber,
69
+ }
70
+ })
71
+ return tokenAmounts
72
+ }
@@ -0,0 +1,10 @@
1
+ import { PublicKey } from '@solana/web3.js'
2
+
3
+ export function isAddress(address: string): boolean {
4
+ try {
5
+ new PublicKey(address)
6
+ return true
7
+ } catch (error) {
8
+ return false
9
+ }
10
+ }
@@ -0,0 +1,18 @@
1
+ import { ChainType, type ChainId } from '@lifi/types'
2
+ import type { Adapter } from '@solana/wallet-adapter-base'
3
+ import { type SDKProvider } from '../types.js'
4
+
5
+ export interface SolanaProviderOptions {
6
+ getWalletAdapter?: () => Promise<Adapter>
7
+ }
8
+
9
+ export interface SolanaProvider extends SDKProvider {
10
+ rpcUrls?: Record<ChainId, string[]>
11
+ setOptions(options: SolanaProviderOptions): void
12
+ }
13
+
14
+ export function isSolana(provider: SDKProvider): provider is SolanaProvider {
15
+ return provider.type === ChainType.SVM
16
+ }
17
+
18
+ export const TokenProgramAddress = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'