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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/package.json +40 -98
  2. package/src/_cjs/config.js +90 -0
  3. package/src/_cjs/config.js.map +1 -0
  4. package/{dist/cjs → src/_cjs}/constants.js +3 -5
  5. package/src/_cjs/constants.js.map +1 -0
  6. package/src/_cjs/core/BaseStepExecutor.js +55 -0
  7. package/src/_cjs/core/BaseStepExecutor.js.map +1 -0
  8. package/src/_cjs/core/EVM/EVM.js +43 -0
  9. package/src/_cjs/core/EVM/EVM.js.map +1 -0
  10. package/src/_cjs/core/EVM/EVMStepExecutor.js +304 -0
  11. package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -0
  12. package/{dist/cjs/types → src/_cjs/core/EVM}/abi.js +1 -0
  13. package/src/_cjs/core/EVM/abi.js.map +1 -0
  14. package/{dist/cjs/execution → src/_cjs/core/EVM}/checkAllowance.js +19 -12
  15. package/src/_cjs/core/EVM/checkAllowance.js.map +1 -0
  16. package/{dist/cjs/allowance → src/_cjs/core/EVM}/getAllowance.js +13 -17
  17. package/src/_cjs/core/EVM/getAllowance.js.map +1 -0
  18. package/src/_cjs/core/EVM/getENSAddress.js +20 -0
  19. package/src/_cjs/core/EVM/getENSAddress.js.map +1 -0
  20. package/{dist/cjs/balance/getBalance.js → src/_cjs/core/EVM/getEVMBalance.js} +20 -22
  21. package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -0
  22. package/{dist/cjs/execution → src/_cjs/core/EVM}/multisig.js +7 -8
  23. package/src/_cjs/core/EVM/multisig.js.map +1 -0
  24. package/src/_cjs/core/EVM/publicClient.js +43 -0
  25. package/src/_cjs/core/EVM/publicClient.js.map +1 -0
  26. package/{dist/cjs/allowance → src/_cjs/core/EVM}/setAllowance.js +11 -12
  27. package/src/_cjs/core/EVM/setAllowance.js.map +1 -0
  28. package/src/_cjs/core/EVM/switchChain.js +38 -0
  29. package/src/_cjs/core/EVM/switchChain.js.map +1 -0
  30. package/src/_cjs/core/EVM/types.js +9 -0
  31. package/src/_cjs/core/EVM/types.js.map +1 -0
  32. package/{dist/cjs/utils/getMaxPriorityFeePerGas.js → src/_cjs/core/EVM/utils.js} +13 -3
  33. package/src/_cjs/core/EVM/utils.js.map +1 -0
  34. package/src/_cjs/core/Solana/KeypairWalletAdapter.js +88 -0
  35. package/src/_cjs/core/Solana/KeypairWalletAdapter.js.map +1 -0
  36. package/src/_cjs/core/Solana/Solana.js +38 -0
  37. package/src/_cjs/core/Solana/Solana.js.map +1 -0
  38. package/src/_cjs/core/Solana/SolanaStepExecutor.js +200 -0
  39. package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -0
  40. package/src/_cjs/core/Solana/connection.js +19 -0
  41. package/src/_cjs/core/Solana/connection.js.map +1 -0
  42. package/src/_cjs/core/Solana/getSNSAddress.js +26 -0
  43. package/src/_cjs/core/Solana/getSNSAddress.js.map +1 -0
  44. package/src/_cjs/core/Solana/getSolanaBalance.js +60 -0
  45. package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -0
  46. package/src/_cjs/core/Solana/isAddress.js +15 -0
  47. package/src/_cjs/core/Solana/isAddress.js.map +1 -0
  48. package/src/_cjs/core/Solana/types.js +10 -0
  49. package/src/_cjs/core/Solana/types.js.map +1 -0
  50. package/src/_cjs/core/StatusManager.js +167 -0
  51. package/src/_cjs/core/StatusManager.js.map +1 -0
  52. package/{dist/cjs/execution → src/_cjs/core}/checkBalance.js +6 -6
  53. package/src/_cjs/core/checkBalance.js.map +1 -0
  54. package/src/_cjs/core/execution.js +138 -0
  55. package/src/_cjs/core/execution.js.map +1 -0
  56. package/src/_cjs/core/executionState.js +29 -0
  57. package/src/_cjs/core/executionState.js.map +1 -0
  58. package/src/_cjs/core/index.js +7 -0
  59. package/src/_cjs/core/index.js.map +1 -0
  60. package/src/_cjs/core/prepareRestart.js +23 -0
  61. package/src/_cjs/core/prepareRestart.js.map +1 -0
  62. package/src/_cjs/core/provider.js +15 -0
  63. package/src/_cjs/core/provider.js.map +1 -0
  64. package/src/_cjs/core/rpc.js +18 -0
  65. package/src/_cjs/core/rpc.js.map +1 -0
  66. package/src/_cjs/core/stepComparison.js +25 -0
  67. package/src/_cjs/core/stepComparison.js.map +1 -0
  68. package/{dist/cjs/allowance → src/_cjs/core}/types.js +1 -0
  69. package/src/_cjs/core/types.js.map +1 -0
  70. package/{dist/cjs/execution → src/_cjs/core}/utils.js +2 -11
  71. package/src/_cjs/core/utils.js.map +1 -0
  72. package/{dist/cjs/execution → src/_cjs/core}/waitForReceivingTransaction.js +13 -14
  73. package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -0
  74. package/src/_cjs/createConfig.js +34 -0
  75. package/src/_cjs/createConfig.js.map +1 -0
  76. package/src/_cjs/helpers.js +50 -0
  77. package/src/_cjs/helpers.js.map +1 -0
  78. package/src/_cjs/index.js +30 -0
  79. package/src/_cjs/index.js.map +1 -0
  80. package/src/_cjs/package.json +1 -0
  81. package/{dist/cjs → src/_cjs}/request.js +18 -15
  82. package/src/_cjs/request.js.map +1 -0
  83. package/src/_cjs/services/api.js +309 -0
  84. package/src/_cjs/services/api.js.map +1 -0
  85. package/src/_cjs/services/balance.js +49 -0
  86. package/src/_cjs/services/balance.js.map +1 -0
  87. package/src/_cjs/services/getNameServiceAddress.js +29 -0
  88. package/src/_cjs/services/getNameServiceAddress.js.map +1 -0
  89. package/{dist/cjs → src/_cjs}/typeguards.js +1 -0
  90. package/src/_cjs/typeguards.js.map +1 -0
  91. package/src/_cjs/types/index.js +5 -0
  92. package/src/_cjs/types/index.js.map +1 -0
  93. package/{dist/cjs → src/_cjs}/types/internal.js +1 -0
  94. package/src/_cjs/types/internal.js.map +1 -0
  95. package/src/_cjs/utils/base64ToUint8Array.js +14 -0
  96. package/src/_cjs/utils/base64ToUint8Array.js.map +1 -0
  97. package/{dist/cjs → src/_cjs}/utils/errors.js +26 -3
  98. package/src/_cjs/utils/errors.js.map +1 -0
  99. package/src/_cjs/utils/getTransactionMessage.js +31 -0
  100. package/src/_cjs/utils/getTransactionMessage.js.map +1 -0
  101. package/src/_cjs/utils/index.js +9 -0
  102. package/src/_cjs/utils/index.js.map +1 -0
  103. package/{dist/cjs → src/_cjs}/utils/median.js +1 -0
  104. package/src/_cjs/utils/median.js.map +1 -0
  105. package/src/_cjs/utils/parseBackendError.js +27 -0
  106. package/src/_cjs/utils/parseBackendError.js.map +1 -0
  107. package/src/_cjs/utils/parseError.js +69 -0
  108. package/src/_cjs/utils/parseError.js.map +1 -0
  109. package/{dist/cjs → src/_cjs}/utils/utils.js +5 -11
  110. package/src/_cjs/utils/utils.js.map +1 -0
  111. package/{dist/cjs → src/_cjs}/version.js +2 -1
  112. package/src/_cjs/version.js.map +1 -0
  113. package/src/_esm/config.js +87 -0
  114. package/src/_esm/config.js.map +1 -0
  115. package/{dist → src/_esm}/constants.js +2 -4
  116. package/src/_esm/constants.js.map +1 -0
  117. package/src/_esm/core/BaseStepExecutor.js +52 -0
  118. package/src/_esm/core/BaseStepExecutor.js.map +1 -0
  119. package/src/_esm/core/EVM/EVM.js +39 -0
  120. package/src/_esm/core/EVM/EVM.js.map +1 -0
  121. package/src/_esm/core/EVM/EVMStepExecutor.js +329 -0
  122. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -0
  123. package/{dist/types → src/_esm/core/EVM}/abi.js +1 -0
  124. package/src/_esm/core/EVM/abi.js.map +1 -0
  125. package/{dist/execution → src/_esm/core/EVM}/checkAllowance.js +14 -5
  126. package/src/_esm/core/EVM/checkAllowance.js.map +1 -0
  127. package/{dist/allowance → src/_esm/core/EVM}/getAllowance.js +19 -6
  128. package/src/_esm/core/EVM/getAllowance.js.map +1 -0
  129. package/src/_esm/core/EVM/getENSAddress.js +17 -0
  130. package/src/_esm/core/EVM/getENSAddress.js.map +1 -0
  131. package/{dist/balance/getBalance.js → src/_esm/core/EVM/getEVMBalance.js} +10 -12
  132. package/src/_esm/core/EVM/getEVMBalance.js.map +1 -0
  133. package/{dist/execution → src/_esm/core/EVM}/multisig.js +5 -6
  134. package/src/_esm/core/EVM/multisig.js.map +1 -0
  135. package/src/_esm/core/EVM/publicClient.js +46 -0
  136. package/src/_esm/core/EVM/publicClient.js.map +1 -0
  137. package/{dist/allowance → src/_esm/core/EVM}/setAllowance.js +23 -4
  138. package/src/_esm/core/EVM/setAllowance.js.map +1 -0
  139. package/{dist/execution → src/_esm/core/EVM}/switchChain.js +6 -4
  140. package/src/_esm/core/EVM/switchChain.js.map +1 -0
  141. package/src/_esm/core/EVM/types.js +6 -0
  142. package/src/_esm/core/EVM/types.js.map +1 -0
  143. package/{dist/utils/getMaxPriorityFeePerGas.js → src/_esm/core/EVM/utils.js} +12 -1
  144. package/src/_esm/core/EVM/utils.js.map +1 -0
  145. package/src/_esm/core/Solana/KeypairWalletAdapter.js +92 -0
  146. package/src/_esm/core/Solana/KeypairWalletAdapter.js.map +1 -0
  147. package/src/_esm/core/Solana/Solana.js +34 -0
  148. package/src/_esm/core/Solana/Solana.js.map +1 -0
  149. package/src/_esm/core/Solana/SolanaStepExecutor.js +214 -0
  150. package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -0
  151. package/src/_esm/core/Solana/connection.js +20 -0
  152. package/src/_esm/core/Solana/connection.js.map +1 -0
  153. package/src/_esm/core/Solana/getSNSAddress.js +26 -0
  154. package/src/_esm/core/Solana/getSNSAddress.js.map +1 -0
  155. package/src/_esm/core/Solana/getSolanaBalance.js +56 -0
  156. package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -0
  157. package/src/_esm/core/Solana/isAddress.js +11 -0
  158. package/src/_esm/core/Solana/isAddress.js.map +1 -0
  159. package/src/_esm/core/Solana/types.js +7 -0
  160. package/src/_esm/core/Solana/types.js.map +1 -0
  161. package/src/_esm/core/StatusManager.js +203 -0
  162. package/src/_esm/core/StatusManager.js.map +1 -0
  163. package/{dist/execution → src/_esm/core}/checkBalance.js +4 -3
  164. package/src/_esm/core/checkBalance.js.map +1 -0
  165. package/src/_esm/core/execution.js +176 -0
  166. package/src/_esm/core/execution.js.map +1 -0
  167. package/src/_esm/core/executionState.js +26 -0
  168. package/src/_esm/core/executionState.js.map +1 -0
  169. package/src/_esm/core/index.js +4 -0
  170. package/src/_esm/core/index.js.map +1 -0
  171. package/src/_esm/core/prepareRestart.js +64 -0
  172. package/src/_esm/core/prepareRestart.js.map +1 -0
  173. package/src/_esm/core/provider.js +11 -0
  174. package/src/_esm/core/provider.js.map +1 -0
  175. package/src/_esm/core/rpc.js +14 -0
  176. package/src/_esm/core/rpc.js.map +1 -0
  177. package/{dist/execution → src/_esm/core}/stepComparison.js +6 -4
  178. package/src/_esm/core/stepComparison.js.map +1 -0
  179. package/src/_esm/core/types.js +2 -0
  180. package/src/_esm/core/types.js.map +1 -0
  181. package/{dist/execution → src/_esm/core}/utils.js +4 -3
  182. package/src/_esm/core/utils.js.map +1 -0
  183. package/{dist/execution → src/_esm/core}/waitForReceivingTransaction.js +11 -9
  184. package/src/_esm/core/waitForReceivingTransaction.js.map +1 -0
  185. package/src/_esm/createConfig.js +30 -0
  186. package/src/_esm/createConfig.js.map +1 -0
  187. package/{dist → src/_esm}/helpers.js +6 -30
  188. package/src/_esm/helpers.js.map +1 -0
  189. package/src/_esm/index.js +17 -0
  190. package/src/_esm/index.js.map +1 -0
  191. package/src/_esm/package.json +1 -0
  192. package/{dist → src/_esm}/request.js +14 -10
  193. package/src/_esm/request.js.map +1 -0
  194. package/src/_esm/services/api.js +378 -0
  195. package/src/_esm/services/api.js.map +1 -0
  196. package/src/_esm/services/balance.js +65 -0
  197. package/src/_esm/services/balance.js.map +1 -0
  198. package/src/_esm/services/getNameServiceAddress.js +25 -0
  199. package/src/_esm/services/getNameServiceAddress.js.map +1 -0
  200. package/{dist → src/_esm}/typeguards.js +1 -0
  201. package/src/_esm/typeguards.js.map +1 -0
  202. package/src/_esm/types/index.js +2 -0
  203. package/src/_esm/types/index.js.map +1 -0
  204. package/src/_esm/types/internal.js +2 -0
  205. package/src/_esm/types/internal.js.map +1 -0
  206. package/src/_esm/utils/base64ToUint8Array.js +10 -0
  207. package/src/_esm/utils/base64ToUint8Array.js.map +1 -0
  208. package/{dist → src/_esm}/utils/errors.js +26 -0
  209. package/src/_esm/utils/errors.js.map +1 -0
  210. package/src/_esm/utils/getTransactionMessage.js +28 -0
  211. package/src/_esm/utils/getTransactionMessage.js.map +1 -0
  212. package/src/_esm/utils/index.js +6 -0
  213. package/src/_esm/utils/index.js.map +1 -0
  214. package/{dist → src/_esm}/utils/median.js +1 -0
  215. package/src/_esm/utils/median.js.map +1 -0
  216. package/src/_esm/utils/parseBackendError.js +24 -0
  217. package/src/_esm/utils/parseBackendError.js.map +1 -0
  218. package/{dist → src/_esm}/utils/parseError.js +6 -53
  219. package/src/_esm/utils/parseError.js.map +1 -0
  220. package/{dist → src/_esm}/utils/utils.js +2 -1
  221. package/src/_esm/utils/utils.js.map +1 -0
  222. package/src/_esm/version.js +3 -0
  223. package/src/_esm/version.js.map +1 -0
  224. package/src/_types/config.d.ts +15 -0
  225. package/src/_types/config.d.ts.map +1 -0
  226. package/{dist/cjs → src/_types}/constants.d.ts +2 -4
  227. package/src/_types/constants.d.ts.map +1 -0
  228. package/src/_types/core/BaseStepExecutor.d.ts +13 -0
  229. package/src/_types/core/BaseStepExecutor.d.ts.map +1 -0
  230. package/src/_types/core/EVM/EVM.d.ts +3 -0
  231. package/src/_types/core/EVM/EVM.d.ts.map +1 -0
  232. package/src/_types/core/EVM/EVMStepExecutor.d.ts +17 -0
  233. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -0
  234. package/{dist/cjs/types → src/_types/core/EVM}/abi.d.ts +1 -0
  235. package/src/_types/core/EVM/abi.d.ts.map +1 -0
  236. package/src/_types/core/EVM/checkAllowance.d.ts +6 -0
  237. package/src/_types/core/EVM/checkAllowance.d.ts.map +1 -0
  238. package/{dist/cjs/allowance → src/_types/core/EVM}/getAllowance.d.ts +15 -1
  239. package/src/_types/core/EVM/getAllowance.d.ts.map +1 -0
  240. package/src/_types/core/EVM/getENSAddress.d.ts +2 -0
  241. package/src/_types/core/EVM/getENSAddress.d.ts.map +1 -0
  242. package/src/_types/core/EVM/getEVMBalance.d.ts +3 -0
  243. package/src/_types/core/EVM/getEVMBalance.d.ts.map +1 -0
  244. package/src/_types/core/EVM/multisig.d.ts +6 -0
  245. package/src/_types/core/EVM/multisig.d.ts.map +1 -0
  246. package/src/_types/core/EVM/publicClient.d.ts +8 -0
  247. package/src/_types/core/EVM/publicClient.d.ts.map +1 -0
  248. package/src/_types/core/EVM/setAllowance.d.ts +25 -0
  249. package/src/_types/core/EVM/setAllowance.d.ts.map +1 -0
  250. package/{dist/execution → src/_types/core/EVM}/switchChain.d.ts +4 -4
  251. package/src/_types/core/EVM/switchChain.d.ts.map +1 -0
  252. package/src/_types/core/EVM/types.d.ts +55 -0
  253. package/src/_types/core/EVM/types.d.ts.map +1 -0
  254. package/src/_types/core/EVM/utils.d.ts +10 -0
  255. package/src/_types/core/EVM/utils.d.ts.map +1 -0
  256. package/src/_types/core/Solana/KeypairWalletAdapter.d.ts +28 -0
  257. package/src/_types/core/Solana/KeypairWalletAdapter.d.ts.map +1 -0
  258. package/src/_types/core/Solana/Solana.d.ts +3 -0
  259. package/src/_types/core/Solana/Solana.d.ts.map +1 -0
  260. package/src/_types/core/Solana/SolanaStepExecutor.d.ts +13 -0
  261. package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -0
  262. package/src/_types/core/Solana/connection.d.ts +8 -0
  263. package/src/_types/core/Solana/connection.d.ts.map +1 -0
  264. package/src/_types/core/Solana/getSNSAddress.d.ts +2 -0
  265. package/src/_types/core/Solana/getSNSAddress.d.ts.map +1 -0
  266. package/src/_types/core/Solana/getSolanaBalance.d.ts +3 -0
  267. package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -0
  268. package/src/_types/core/Solana/isAddress.d.ts +2 -0
  269. package/src/_types/core/Solana/isAddress.d.ts.map +1 -0
  270. package/src/_types/core/Solana/types.d.ts +11 -0
  271. package/src/_types/core/Solana/types.d.ts.map +1 -0
  272. package/{dist/cjs/execution → src/_types/core}/StatusManager.d.ts +14 -28
  273. package/src/_types/core/StatusManager.d.ts.map +1 -0
  274. package/{dist/cjs/execution → src/_types/core}/checkBalance.d.ts +1 -0
  275. package/src/_types/core/checkBalance.d.ts.map +1 -0
  276. package/src/_types/core/execution.d.ts +42 -0
  277. package/src/_types/core/execution.d.ts.map +1 -0
  278. package/src/_types/core/executionState.d.ts +17 -0
  279. package/src/_types/core/executionState.d.ts.map +1 -0
  280. package/src/_types/core/index.d.ts +4 -0
  281. package/src/_types/core/index.d.ts.map +1 -0
  282. package/src/_types/core/prepareRestart.d.ts +3 -0
  283. package/src/_types/core/prepareRestart.d.ts.map +1 -0
  284. package/src/_types/core/provider.d.ts +3 -0
  285. package/src/_types/core/provider.d.ts.map +1 -0
  286. package/src/_types/core/rpc.d.ts +4 -0
  287. package/src/_types/core/rpc.d.ts.map +1 -0
  288. package/{dist/execution → src/_types/core}/stepComparison.d.ts +5 -3
  289. package/src/_types/core/stepComparison.d.ts.map +1 -0
  290. package/src/_types/core/types.d.ts +81 -0
  291. package/src/_types/core/types.d.ts.map +1 -0
  292. package/{dist/execution → src/_types/core}/utils.d.ts +2 -1
  293. package/src/_types/core/utils.d.ts.map +1 -0
  294. package/{dist/cjs/execution → src/_types/core}/waitForReceivingTransaction.d.ts +2 -1
  295. package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -0
  296. package/src/_types/createConfig.d.ts +4 -0
  297. package/src/_types/createConfig.d.ts.map +1 -0
  298. package/{dist/cjs → src/_types}/helpers.d.ts +3 -9
  299. package/src/_types/helpers.d.ts.map +1 -0
  300. package/src/_types/index.d.ts +18 -0
  301. package/src/_types/index.d.ts.map +1 -0
  302. package/{dist → src/_types}/request.d.ts +1 -0
  303. package/src/_types/request.d.ts.map +1 -0
  304. package/src/_types/services/api.d.ts +89 -0
  305. package/src/_types/services/api.d.ts.map +1 -0
  306. package/src/_types/services/balance.d.ts +30 -0
  307. package/src/_types/services/balance.d.ts.map +1 -0
  308. package/src/_types/services/getNameServiceAddress.d.ts +3 -0
  309. package/src/_types/services/getNameServiceAddress.d.ts.map +1 -0
  310. package/{dist/cjs → src/_types}/typeguards.d.ts +1 -0
  311. package/src/_types/typeguards.d.ts.map +1 -0
  312. package/src/_types/types/index.d.ts +2 -0
  313. package/src/_types/types/index.d.ts.map +1 -0
  314. package/{dist → src/_types}/types/internal.d.ts +14 -15
  315. package/src/_types/types/internal.d.ts.map +1 -0
  316. package/src/_types/utils/base64ToUint8Array.d.ts +2 -0
  317. package/src/_types/utils/base64ToUint8Array.d.ts.map +1 -0
  318. package/{dist/cjs → src/_types}/utils/errors.d.ts +3 -1
  319. package/src/_types/utils/errors.d.ts.map +1 -0
  320. package/src/_types/utils/getTransactionMessage.d.ts +4 -0
  321. package/src/_types/utils/getTransactionMessage.d.ts.map +1 -0
  322. package/src/_types/utils/index.d.ts +6 -0
  323. package/src/_types/utils/index.d.ts.map +1 -0
  324. package/{dist/cjs → src/_types}/utils/median.d.ts +1 -0
  325. package/src/_types/utils/median.d.ts.map +1 -0
  326. package/src/_types/utils/parseBackendError.d.ts +3 -0
  327. package/src/_types/utils/parseBackendError.d.ts.map +1 -0
  328. package/{dist → src/_types}/utils/parseError.d.ts +2 -4
  329. package/src/_types/utils/parseError.d.ts.map +1 -0
  330. package/{dist → src/_types}/utils/utils.d.ts +1 -0
  331. package/src/_types/utils/utils.d.ts.map +1 -0
  332. package/src/_types/version.d.ts +3 -0
  333. package/src/_types/version.d.ts.map +1 -0
  334. package/src/config.ts +91 -0
  335. package/src/constants.ts +4 -0
  336. package/src/core/BaseStepExecutor.ts +40 -0
  337. package/src/core/EVM/EVM.ts +47 -0
  338. package/src/core/EVM/EVMStepExecutor.ts +500 -0
  339. package/src/core/EVM/abi.ts +47 -0
  340. package/src/core/EVM/checkAllowance.ts +168 -0
  341. package/src/core/EVM/getAllowance.ts +144 -0
  342. package/src/core/EVM/getENSAddress.ts +18 -0
  343. package/src/core/EVM/getEVMBalance.ts +118 -0
  344. package/src/core/EVM/multisig.ts +53 -0
  345. package/src/core/EVM/publicClient.ts +54 -0
  346. package/src/core/EVM/setAllowance.ts +143 -0
  347. package/src/core/EVM/switchChain.ts +77 -0
  348. package/src/core/EVM/types.ts +73 -0
  349. package/src/core/EVM/utils.ts +48 -0
  350. package/src/core/Solana/KeypairWalletAdapter.ts +100 -0
  351. package/src/core/Solana/Solana.ts +41 -0
  352. package/src/core/Solana/SolanaStepExecutor.ts +331 -0
  353. package/src/core/Solana/connection.ts +20 -0
  354. package/src/core/Solana/getSNSAddress.ts +33 -0
  355. package/src/core/Solana/getSolanaBalance.ts +72 -0
  356. package/src/core/Solana/isAddress.ts +10 -0
  357. package/src/core/Solana/types.ts +17 -0
  358. package/src/core/StatusManager.ts +231 -0
  359. package/src/core/checkBalance.ts +48 -0
  360. package/src/core/execution.ts +214 -0
  361. package/src/core/executionState.ts +44 -0
  362. package/src/core/index.ts +3 -0
  363. package/src/core/prepareRestart.ts +82 -0
  364. package/src/core/provider.ts +12 -0
  365. package/src/core/rpc.ts +15 -0
  366. package/src/core/stepComparison.ts +51 -0
  367. package/src/core/types.ts +118 -0
  368. package/src/core/utils.ts +105 -0
  369. package/src/core/waitForReceivingTransaction.ts +74 -0
  370. package/src/createConfig.ts +35 -0
  371. package/src/helpers.ts +69 -0
  372. package/src/index.ts +24 -0
  373. package/src/request.ts +79 -0
  374. package/src/services/api.ts +509 -0
  375. package/src/services/balance.ts +93 -0
  376. package/src/services/getNameServiceAddress.ts +30 -0
  377. package/src/typeguards.ts +89 -0
  378. package/src/types/index.ts +1 -0
  379. package/src/types/internal.ts +62 -0
  380. package/src/utils/base64ToUint8Array.ts +9 -0
  381. package/src/utils/errors.ts +232 -0
  382. package/src/utils/getTransactionMessage.ts +46 -0
  383. package/src/utils/index.ts +5 -0
  384. package/src/utils/median.ts +11 -0
  385. package/src/utils/parseBackendError.ts +50 -0
  386. package/src/utils/parseError.ts +210 -0
  387. package/src/utils/utils.ts +48 -0
  388. package/src/version.ts +2 -0
  389. package/dist/LiFi.d.ts +0 -178
  390. package/dist/LiFi.js +0 -253
  391. package/dist/allowance/getAllowance.d.ts +0 -6
  392. package/dist/allowance/index.d.ts +0 -3
  393. package/dist/allowance/index.js +0 -3
  394. package/dist/allowance/setAllowance.d.ts +0 -6
  395. package/dist/allowance/types.d.ts +0 -27
  396. package/dist/allowance/types.js +0 -1
  397. package/dist/balance/getBalance.d.ts +0 -2
  398. package/dist/balance/getTokenBalance.d.ts +0 -8
  399. package/dist/balance/getTokenBalance.js +0 -27
  400. package/dist/balance/index.d.ts +0 -2
  401. package/dist/balance/index.js +0 -2
  402. package/dist/cjs/LiFi.d.ts +0 -178
  403. package/dist/cjs/LiFi.js +0 -283
  404. package/dist/cjs/allowance/index.d.ts +0 -3
  405. package/dist/cjs/allowance/index.js +0 -19
  406. package/dist/cjs/allowance/setAllowance.d.ts +0 -6
  407. package/dist/cjs/allowance/types.d.ts +0 -27
  408. package/dist/cjs/balance/getBalance.d.ts +0 -2
  409. package/dist/cjs/balance/getTokenBalance.d.ts +0 -8
  410. package/dist/cjs/balance/getTokenBalance.js +0 -33
  411. package/dist/cjs/balance/index.d.ts +0 -2
  412. package/dist/cjs/balance/index.js +0 -18
  413. package/dist/cjs/connectors.d.ts +0 -8
  414. package/dist/cjs/connectors.js +0 -72
  415. package/dist/cjs/execution/BaseStepExecutor.d.ts +0 -12
  416. package/dist/cjs/execution/BaseStepExecutor.js +0 -27
  417. package/dist/cjs/execution/EVMStepExecutor.d.ts +0 -13
  418. package/dist/cjs/execution/EVMStepExecutor.js +0 -292
  419. package/dist/cjs/execution/RouteExecutionManager.d.ts +0 -60
  420. package/dist/cjs/execution/RouteExecutionManager.js +0 -204
  421. package/dist/cjs/execution/StatusManager.js +0 -171
  422. package/dist/cjs/execution/StepExecutionManager.d.ts +0 -7
  423. package/dist/cjs/execution/StepExecutionManager.js +0 -272
  424. package/dist/cjs/execution/checkAllowance.d.ts +0 -5
  425. package/dist/cjs/execution/index.d.ts +0 -2
  426. package/dist/cjs/execution/index.js +0 -18
  427. package/dist/cjs/execution/multisig.d.ts +0 -4
  428. package/dist/cjs/execution/prepareRestart.d.ts +0 -2
  429. package/dist/cjs/execution/prepareRestart.js +0 -65
  430. package/dist/cjs/execution/stepComparison.d.ts +0 -15
  431. package/dist/cjs/execution/stepComparison.js +0 -37
  432. package/dist/cjs/execution/switchChain.d.ts +0 -22
  433. package/dist/cjs/execution/switchChain.js +0 -55
  434. package/dist/cjs/execution/types.d.ts +0 -82
  435. package/dist/cjs/execution/types.js +0 -2
  436. package/dist/cjs/execution/utils.d.ts +0 -12
  437. package/dist/cjs/helpers.js +0 -84
  438. package/dist/cjs/index.d.ts +0 -9
  439. package/dist/cjs/index.js +0 -30
  440. package/dist/cjs/providers/EVM.d.ts +0 -10
  441. package/dist/cjs/providers/EVM.js +0 -34
  442. package/dist/cjs/providers/Solana.d.ts +0 -9
  443. package/dist/cjs/providers/Solana.js +0 -38
  444. package/dist/cjs/providers/index.d.ts +0 -1
  445. package/dist/cjs/providers/index.js +0 -17
  446. package/dist/cjs/providers/types.d.ts +0 -12
  447. package/dist/cjs/providers/types.js +0 -8
  448. package/dist/cjs/request.d.ts +0 -9
  449. package/dist/cjs/services/ApiService.d.ts +0 -16
  450. package/dist/cjs/services/ApiService.js +0 -323
  451. package/dist/cjs/services/ChainsService.d.ts +0 -11
  452. package/dist/cjs/services/ChainsService.js +0 -40
  453. package/dist/cjs/services/ConfigService.d.ts +0 -26
  454. package/dist/cjs/services/ConfigService.js +0 -104
  455. package/dist/cjs/types/index.d.ts +0 -2
  456. package/dist/cjs/types/index.js +0 -18
  457. package/dist/cjs/types/internal.d.ts +0 -60
  458. package/dist/cjs/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  459. package/dist/cjs/utils/index.d.ts +0 -5
  460. package/dist/cjs/utils/index.js +0 -21
  461. package/dist/cjs/utils/parseError.d.ts +0 -37
  462. package/dist/cjs/utils/parseError.js +0 -154
  463. package/dist/cjs/utils/utils.d.ts +0 -10
  464. package/dist/cjs/version.d.ts +0 -2
  465. package/dist/connectors.d.ts +0 -8
  466. package/dist/connectors.js +0 -41
  467. package/dist/constants.d.ts +0 -6
  468. package/dist/execution/BaseStepExecutor.d.ts +0 -12
  469. package/dist/execution/BaseStepExecutor.js +0 -23
  470. package/dist/execution/EVMStepExecutor.d.ts +0 -13
  471. package/dist/execution/EVMStepExecutor.js +0 -285
  472. package/dist/execution/RouteExecutionManager.d.ts +0 -60
  473. package/dist/execution/RouteExecutionManager.js +0 -200
  474. package/dist/execution/StatusManager.d.ts +0 -68
  475. package/dist/execution/StatusManager.js +0 -167
  476. package/dist/execution/StepExecutionManager.d.ts +0 -7
  477. package/dist/execution/StepExecutionManager.js +0 -265
  478. package/dist/execution/checkAllowance.d.ts +0 -5
  479. package/dist/execution/checkBalance.d.ts +0 -2
  480. package/dist/execution/index.d.ts +0 -2
  481. package/dist/execution/index.js +0 -2
  482. package/dist/execution/multisig.d.ts +0 -4
  483. package/dist/execution/prepareRestart.d.ts +0 -2
  484. package/dist/execution/prepareRestart.js +0 -61
  485. package/dist/execution/types.d.ts +0 -82
  486. package/dist/execution/types.js +0 -1
  487. package/dist/execution/waitForReceivingTransaction.d.ts +0 -3
  488. package/dist/helpers.d.ts +0 -18
  489. package/dist/index.d.ts +0 -9
  490. package/dist/index.js +0 -9
  491. package/dist/providers/EVM.d.ts +0 -10
  492. package/dist/providers/EVM.js +0 -29
  493. package/dist/providers/Solana.d.ts +0 -9
  494. package/dist/providers/Solana.js +0 -33
  495. package/dist/providers/index.d.ts +0 -1
  496. package/dist/providers/index.js +0 -1
  497. package/dist/providers/types.d.ts +0 -12
  498. package/dist/providers/types.js +0 -5
  499. package/dist/services/ApiService.d.ts +0 -16
  500. package/dist/services/ApiService.js +0 -321
  501. package/dist/services/ChainsService.d.ts +0 -11
  502. package/dist/services/ChainsService.js +0 -33
  503. package/dist/services/ConfigService.d.ts +0 -26
  504. package/dist/services/ConfigService.js +0 -100
  505. package/dist/typeguards.d.ts +0 -4
  506. package/dist/types/abi.d.ts +0 -5
  507. package/dist/types/index.d.ts +0 -2
  508. package/dist/types/index.js +0 -2
  509. package/dist/types/internal.js +0 -1
  510. package/dist/utils/errors.d.ts +0 -107
  511. package/dist/utils/getMaxPriorityFeePerGas.d.ts +0 -2
  512. package/dist/utils/index.d.ts +0 -5
  513. package/dist/utils/index.js +0 -5
  514. package/dist/utils/median.d.ts +0 -1
  515. package/dist/version.d.ts +0 -2
  516. package/dist/version.js +0 -2
@@ -0,0 +1,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,100 @@
1
+ import { ed25519 } from '@noble/curves/ed25519'
2
+ import type {
3
+ SignerWalletAdapter,
4
+ WalletName,
5
+ } from '@solana/wallet-adapter-base'
6
+ import {
7
+ BaseSignerWalletAdapter,
8
+ WalletConfigError,
9
+ WalletNotConnectedError,
10
+ WalletReadyState,
11
+ isVersionedTransaction,
12
+ } from '@solana/wallet-adapter-base'
13
+ import type {
14
+ Transaction,
15
+ TransactionVersion,
16
+ VersionedTransaction,
17
+ } from '@solana/web3.js'
18
+ import { Keypair } from '@solana/web3.js'
19
+ import { decode } from 'bs58'
20
+
21
+ export const KeypairWalletName =
22
+ 'Keypair Wallet' as WalletName<'Keypair Wallet'>
23
+
24
+ /**
25
+ * This keypair wallet adapter is unsafe to use on the frontend and is only included to provide an easy way for applications to test
26
+ * Wallet Adapter without using a third-party wallet.
27
+ */
28
+ export class KeypairWalletAdapter
29
+ extends BaseSignerWalletAdapter
30
+ implements SignerWalletAdapter
31
+ {
32
+ name = KeypairWalletName
33
+ url = 'https://github.com/anza-xyz/wallet-adapter'
34
+ icon = ''
35
+ supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set([
36
+ 'legacy',
37
+ 0,
38
+ ])
39
+
40
+ /**
41
+ * Storing a keypair locally like this is not safe because any application using this adapter could retrieve the
42
+ * secret key, and because the keypair will be lost any time the wallet is disconnected or the window is refreshed.
43
+ */
44
+ private _keypair: Keypair | undefined
45
+
46
+ constructor(privateKey: string) {
47
+ if (!privateKey) {
48
+ throw new WalletConfigError()
49
+ }
50
+ super()
51
+ this._keypair = Keypair.fromSecretKey(decode(privateKey))
52
+ }
53
+
54
+ get connecting() {
55
+ return false
56
+ }
57
+
58
+ get publicKey() {
59
+ return this._keypair?.publicKey || null
60
+ }
61
+
62
+ get readyState() {
63
+ return WalletReadyState.Loadable
64
+ }
65
+
66
+ async connect(privateKey?: string): Promise<void> {
67
+ if (!privateKey) {
68
+ throw new WalletConfigError()
69
+ }
70
+ this._keypair = Keypair.fromSecretKey(decode(privateKey))
71
+ }
72
+
73
+ async disconnect(): Promise<void> {
74
+ this._keypair = undefined
75
+ }
76
+
77
+ async signTransaction<T extends Transaction | VersionedTransaction>(
78
+ transaction: T
79
+ ): Promise<T> {
80
+ if (!this._keypair) {
81
+ throw new WalletNotConnectedError()
82
+ }
83
+
84
+ if (isVersionedTransaction(transaction)) {
85
+ transaction.sign([this._keypair])
86
+ } else {
87
+ transaction.partialSign(this._keypair)
88
+ }
89
+
90
+ return transaction
91
+ }
92
+
93
+ async signMessage(message: Uint8Array): Promise<Uint8Array> {
94
+ if (!this._keypair) {
95
+ throw new WalletNotConnectedError()
96
+ }
97
+
98
+ return ed25519.sign(message, this._keypair.secretKey.slice(0, 32))
99
+ }
100
+ }
@@ -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,331 @@
1
+ import type { ExtendedTransactionInfo, FullStatusData } from '@lifi/types'
2
+ import { type SignerWalletAdapter } from '@solana/wallet-adapter-base'
3
+ import {
4
+ VersionedTransaction,
5
+ type SendOptions,
6
+ type SignatureResult,
7
+ } from '@solana/web3.js'
8
+ import { config } from '../../config.js'
9
+ import { getStepTransaction } from '../../services/api.js'
10
+ import { base64ToUint8Array } from '../../utils/base64ToUint8Array.js'
11
+ import {
12
+ LiFiErrorCode,
13
+ TransactionError,
14
+ getTransactionFailedMessage,
15
+ parseError,
16
+ } from '../../utils/index.js'
17
+ import { BaseStepExecutor } from '../BaseStepExecutor.js'
18
+ import { checkBalance } from '../checkBalance.js'
19
+ import { stepComparison } from '../stepComparison.js'
20
+ import type {
21
+ LiFiStepExtended,
22
+ StepExecutorOptions,
23
+ TransactionParameters,
24
+ } from '../types.js'
25
+ import { getSubstatusMessage } from '../utils.js'
26
+ import { waitForReceivingTransaction } from '../waitForReceivingTransaction.js'
27
+ import { getSolanaConnection } from './connection.js'
28
+
29
+ export interface SolanaStepExecutorOptions extends StepExecutorOptions {
30
+ walletAdapter: SignerWalletAdapter
31
+ }
32
+
33
+ const TX_RETRY_INTERVAL = 500
34
+ // https://solana.com/docs/advanced/confirmation
35
+ const TIMEOUT_PERIOD = 60_000
36
+
37
+ export class SolanaStepExecutor extends BaseStepExecutor {
38
+ private walletAdapter: SignerWalletAdapter
39
+
40
+ constructor(options: SolanaStepExecutorOptions) {
41
+ super(options)
42
+ this.walletAdapter = options.walletAdapter
43
+ }
44
+
45
+ checkWalletAdapter = (step: LiFiStepExtended) => {
46
+ // Prevent execution of the quote by wallet different from the one which requested the quote
47
+ if (this.walletAdapter.publicKey!.toString() !== step.action.fromAddress) {
48
+ throw new TransactionError(
49
+ LiFiErrorCode.WalletChangedDuringExecution,
50
+ 'The wallet address that requested the quote does not match the wallet address attempting to sign the transaction.'
51
+ )
52
+ }
53
+ }
54
+
55
+ executeStep = async (step: LiFiStepExtended): Promise<LiFiStepExtended> => {
56
+ step.execution = this.statusManager.initExecutionObject(step)
57
+
58
+ const fromChain = await config.getChainById(step.action.fromChainId)
59
+ const toChain = await config.getChainById(step.action.toChainId)
60
+
61
+ const isBridgeExecution = fromChain.id !== toChain.id
62
+ const currentProcessType = isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'
63
+
64
+ // STEP 2: Get transaction
65
+ let process = this.statusManager.findOrCreateProcess(
66
+ step,
67
+ currentProcessType
68
+ )
69
+
70
+ if (process.status !== 'DONE') {
71
+ try {
72
+ const connection = await getSolanaConnection()
73
+
74
+ process = this.statusManager.updateProcess(
75
+ step,
76
+ process.type,
77
+ 'STARTED'
78
+ )
79
+
80
+ // Check balance
81
+ await checkBalance(this.walletAdapter.publicKey!.toString(), step)
82
+
83
+ // Create new transaction
84
+ if (!step.transactionRequest) {
85
+ const updatedStep = await getStepTransaction(step)
86
+ const comparedStep = await stepComparison(
87
+ this.statusManager,
88
+ step,
89
+ updatedStep,
90
+ this.allowUserInteraction,
91
+ this.executionOptions
92
+ )
93
+ step = {
94
+ ...comparedStep,
95
+ execution: step.execution,
96
+ }
97
+ }
98
+
99
+ if (!step.transactionRequest?.data) {
100
+ throw new TransactionError(
101
+ LiFiErrorCode.TransactionUnprepared,
102
+ 'Unable to prepare transaction.'
103
+ )
104
+ }
105
+
106
+ process = this.statusManager.updateProcess(
107
+ step,
108
+ process.type,
109
+ 'ACTION_REQUIRED'
110
+ )
111
+
112
+ if (!this.allowUserInteraction) {
113
+ return step
114
+ }
115
+
116
+ let transactionRequest: TransactionParameters = {
117
+ data: step.transactionRequest.data,
118
+ }
119
+
120
+ if (this.executionOptions?.updateTransactionRequestHook) {
121
+ const customizedTransactionRequest: TransactionParameters =
122
+ await this.executionOptions.updateTransactionRequestHook({
123
+ requestType: 'transaction',
124
+ ...transactionRequest,
125
+ })
126
+
127
+ transactionRequest = {
128
+ ...transactionRequest,
129
+ ...customizedTransactionRequest,
130
+ }
131
+ }
132
+
133
+ if (!transactionRequest.data) {
134
+ throw new TransactionError(
135
+ LiFiErrorCode.TransactionUnprepared,
136
+ 'Unable to prepare transaction.'
137
+ )
138
+ }
139
+
140
+ const versionedTransaction = VersionedTransaction.deserialize(
141
+ base64ToUint8Array(transactionRequest.data)
142
+ )
143
+
144
+ const blockhashResult = await connection.getLatestBlockhashAndContext({
145
+ commitment: 'confirmed',
146
+ })
147
+
148
+ // Update transaction recent blockhash with the latest blockhash
149
+ versionedTransaction.message.recentBlockhash =
150
+ blockhashResult.value.blockhash
151
+
152
+ this.checkWalletAdapter(step)
153
+
154
+ const signedTx =
155
+ await this.walletAdapter.signTransaction(versionedTransaction)
156
+
157
+ process = this.statusManager.updateProcess(
158
+ step,
159
+ process.type,
160
+ 'PENDING'
161
+ )
162
+
163
+ const rawTransactionOptions: SendOptions = {
164
+ // Skipping preflight i.e. tx simulation by RPC as we simulated the tx above
165
+ skipPreflight: true,
166
+ // Setting max retries to 0 as we are handling retries manually
167
+ // Set this manually so that the default is skipped
168
+ maxRetries: 0,
169
+ // https://solana.com/docs/advanced/confirmation#use-an-appropriate-preflight-commitment-level
170
+ preflightCommitment: 'confirmed',
171
+ // minContextSlot: blockhashResult.context.slot,
172
+ }
173
+
174
+ const txSignature = await connection.sendRawTransaction(
175
+ signedTx.serialize(),
176
+ rawTransactionOptions
177
+ )
178
+
179
+ // In the following section, we wait and constantly check for the transaction to be confirmed
180
+ // and resend the transaction if it is not confirmed within a certain time interval
181
+ // thus handling tx retries on the client side rather than relying on the RPC
182
+ const confirmTransactionPromise = connection
183
+ .confirmTransaction(
184
+ {
185
+ signature: txSignature,
186
+ blockhash: blockhashResult.value.blockhash,
187
+ lastValidBlockHeight: blockhashResult.value.lastValidBlockHeight,
188
+ },
189
+ 'confirmed'
190
+ )
191
+ .then((result) => result.value)
192
+
193
+ let confirmedTx: SignatureResult | null = null
194
+ const startTime = Date.now()
195
+
196
+ while (!confirmedTx && Date.now() - startTime <= TIMEOUT_PERIOD) {
197
+ confirmedTx = await Promise.race([
198
+ confirmTransactionPromise,
199
+ new Promise<null>((resolve) =>
200
+ setTimeout(() => {
201
+ resolve(null)
202
+ }, TX_RETRY_INTERVAL)
203
+ ),
204
+ ])
205
+ if (confirmedTx) {
206
+ break
207
+ }
208
+
209
+ await connection.sendRawTransaction(
210
+ signedTx.serialize(),
211
+ rawTransactionOptions
212
+ )
213
+ }
214
+
215
+ if (confirmedTx?.err) {
216
+ throw new TransactionError(
217
+ LiFiErrorCode.TransactionFailed,
218
+ `Transaction failed: ${confirmedTx?.err}`
219
+ )
220
+ }
221
+
222
+ if (!confirmedTx) {
223
+ throw new TransactionError(
224
+ LiFiErrorCode.TransactionFailed,
225
+ 'Failed to land the transaction'
226
+ )
227
+ }
228
+
229
+ // Transaction has been confirmed and we can update the process
230
+ process = this.statusManager.updateProcess(
231
+ step,
232
+ process.type,
233
+ 'PENDING',
234
+ {
235
+ txHash: txSignature,
236
+ txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txSignature}`,
237
+ }
238
+ )
239
+
240
+ if (isBridgeExecution) {
241
+ process = this.statusManager.updateProcess(step, process.type, 'DONE')
242
+ }
243
+ } catch (e: any) {
244
+ const error = await parseError(e, step, process)
245
+ process = this.statusManager.updateProcess(
246
+ step,
247
+ process.type,
248
+ 'FAILED',
249
+ {
250
+ error: {
251
+ message: error.message,
252
+ htmlMessage: error.htmlMessage,
253
+ code: error.code,
254
+ },
255
+ }
256
+ )
257
+ this.statusManager.updateExecution(step, 'FAILED')
258
+ throw error
259
+ }
260
+ }
261
+
262
+ // STEP 5: Wait for the receiving chain
263
+ if (isBridgeExecution) {
264
+ process = this.statusManager.findOrCreateProcess(
265
+ step,
266
+ 'RECEIVING_CHAIN',
267
+ 'PENDING'
268
+ )
269
+ }
270
+ let statusResponse: FullStatusData
271
+ try {
272
+ if (!process.txHash) {
273
+ throw new Error('Transaction hash is undefined.')
274
+ }
275
+ statusResponse = (await waitForReceivingTransaction(
276
+ process.txHash,
277
+ this.statusManager,
278
+ process.type,
279
+ step
280
+ )) as FullStatusData
281
+
282
+ const statusReceiving =
283
+ statusResponse.receiving as ExtendedTransactionInfo
284
+
285
+ process = this.statusManager.updateProcess(step, process.type, 'DONE', {
286
+ substatus: statusResponse.substatus,
287
+ substatusMessage:
288
+ statusResponse.substatusMessage ||
289
+ getSubstatusMessage(statusResponse.status, statusResponse.substatus),
290
+ txHash: statusReceiving?.txHash,
291
+ txLink: `${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
292
+ })
293
+
294
+ this.statusManager.updateExecution(step, 'DONE', {
295
+ fromAmount: statusResponse.sending.amount,
296
+ toAmount: statusReceiving?.amount,
297
+ toToken: statusReceiving?.token,
298
+ gasCosts: [
299
+ {
300
+ amount: statusResponse.sending.gasAmount,
301
+ amountUSD: statusResponse.sending.gasAmountUSD,
302
+ token: statusResponse.sending.gasToken,
303
+ estimate: statusResponse.sending.gasUsed,
304
+ limit: statusResponse.sending.gasUsed,
305
+ price: statusResponse.sending.gasPrice,
306
+ type: 'SEND',
307
+ },
308
+ ],
309
+ })
310
+ } catch (e: unknown) {
311
+ const htmlMessage = await getTransactionFailedMessage(
312
+ step,
313
+ process.txLink
314
+ )
315
+
316
+ process = this.statusManager.updateProcess(step, process.type, 'FAILED', {
317
+ error: {
318
+ code: LiFiErrorCode.TransactionFailed,
319
+ message: 'Failed while waiting for receiving chain.',
320
+ htmlMessage,
321
+ },
322
+ })
323
+ this.statusManager.updateExecution(step, 'FAILED')
324
+ console.warn(e)
325
+ throw e
326
+ }
327
+
328
+ // DONE
329
+ return step
330
+ }
331
+ }
@@ -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,17 @@
1
+ import { ChainType } from '@lifi/types'
2
+ import type { SignerWalletAdapter } from '@solana/wallet-adapter-base'
3
+ import { type SDKProvider } from '../types.js'
4
+
5
+ export interface SolanaProviderOptions {
6
+ getWalletAdapter?: () => Promise<SignerWalletAdapter>
7
+ }
8
+
9
+ export interface SolanaProvider extends SDKProvider {
10
+ setOptions(options: SolanaProviderOptions): void
11
+ }
12
+
13
+ export function isSolana(provider: SDKProvider): provider is SolanaProvider {
14
+ return provider.type === ChainType.SVM
15
+ }
16
+
17
+ export const TokenProgramAddress = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'