@lifi/sdk 3.2.0 → 3.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/package.json +10 -2
  2. package/src/_cjs/core/EVM/EVMStepExecutor.js +2 -1
  3. package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -1
  4. package/src/_cjs/core/EVM/getAllowance.js +5 -5
  5. package/src/_cjs/core/EVM/getAllowance.js.map +1 -1
  6. package/src/_cjs/core/EVM/getEVMBalance.js +5 -5
  7. package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -1
  8. package/src/_cjs/core/EVM/setAllowance.js +5 -5
  9. package/src/_cjs/core/EVM/setAllowance.js.map +1 -1
  10. package/src/_cjs/core/Solana/Solana.js +2 -2
  11. package/src/_cjs/core/Solana/Solana.js.map +1 -1
  12. package/src/_cjs/core/Solana/SolanaStepExecutor.js +7 -10
  13. package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -1
  14. package/src/_cjs/core/Solana/getSNSAddress.js +2 -2
  15. package/src/_cjs/core/Solana/getSNSAddress.js.map +1 -1
  16. package/src/_cjs/core/Solana/{isAddress.js → isSVMAddress.js} +3 -3
  17. package/src/_cjs/core/Solana/isSVMAddress.js.map +1 -0
  18. package/src/_cjs/core/UTXO/UTXO.js +38 -0
  19. package/src/_cjs/core/UTXO/UTXO.js.map +1 -0
  20. package/src/_cjs/core/UTXO/UTXOStepExecutor.js +219 -0
  21. package/src/_cjs/core/UTXO/UTXOStepExecutor.js.map +1 -0
  22. package/src/_cjs/core/UTXO/blockchairApi.js +169 -0
  23. package/src/_cjs/core/UTXO/blockchairApi.js.map +1 -0
  24. package/src/_cjs/core/UTXO/blockchairApiTypes.js +26 -0
  25. package/src/_cjs/core/UTXO/blockchairApiTypes.js.map +1 -0
  26. package/src/_cjs/core/UTXO/getUTXOAPIPublicClient.js +48 -0
  27. package/src/_cjs/core/UTXO/getUTXOAPIPublicClient.js.map +1 -0
  28. package/src/_cjs/core/UTXO/getUTXOBalance.js +30 -0
  29. package/src/_cjs/core/UTXO/getUTXOBalance.js.map +1 -0
  30. package/src/_cjs/core/UTXO/getUTXOPublicClient.js +36 -0
  31. package/src/_cjs/core/UTXO/getUTXOPublicClient.js.map +1 -0
  32. package/src/_cjs/core/UTXO/isUTXOAddress.js +133 -0
  33. package/src/_cjs/core/UTXO/isUTXOAddress.js.map +1 -0
  34. package/src/_cjs/core/UTXO/parseUTXOErrors.js +30 -0
  35. package/src/_cjs/core/UTXO/parseUTXOErrors.js.map +1 -0
  36. package/src/_cjs/core/UTXO/requestClient.js +63 -0
  37. package/src/_cjs/core/UTXO/requestClient.js.map +1 -0
  38. package/src/_cjs/core/UTXO/types.js +8 -0
  39. package/src/_cjs/core/UTXO/types.js.map +1 -0
  40. package/src/_cjs/core/UTXO/utxo-stack/actions/getBalance.js +11 -0
  41. package/src/_cjs/core/UTXO/utxo-stack/actions/getBalance.js.map +1 -0
  42. package/src/_cjs/core/UTXO/utxo-stack/actions/getBlockCount.js +11 -0
  43. package/src/_cjs/core/UTXO/utxo-stack/actions/getBlockCount.js.map +1 -0
  44. package/src/_cjs/core/UTXO/utxo-stack/actions/getUTXOTransaction.js +15 -0
  45. package/src/_cjs/core/UTXO/utxo-stack/actions/getUTXOTransaction.js.map +1 -0
  46. package/src/_cjs/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js +15 -0
  47. package/src/_cjs/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js.map +1 -0
  48. package/src/_cjs/core/UTXO/utxo-stack/actions/signPsbt.js +11 -0
  49. package/src/_cjs/core/UTXO/utxo-stack/actions/signPsbt.js.map +1 -0
  50. package/src/_cjs/core/UTXO/utxo-stack/clients/types.js +3 -0
  51. package/src/_cjs/core/UTXO/utxo-stack/clients/types.js.map +1 -0
  52. package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js +10 -0
  53. package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js.map +1 -0
  54. package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOActions.js +14 -0
  55. package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOActions.js.map +1 -0
  56. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/ankr.js +21 -0
  57. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/ankr.js.map +1 -0
  58. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockchair.js +24 -0
  59. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockchair.js.map +1 -0
  60. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockcypher.js +21 -0
  61. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockcypher.js.map +1 -0
  62. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js +77 -0
  63. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js.map +1 -0
  64. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js +22 -0
  65. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js.map +1 -0
  66. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/mempool.js +17 -0
  67. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/mempool.js.map +1 -0
  68. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/types.js +3 -0
  69. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/types.js.map +1 -0
  70. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/utxo.js +56 -0
  71. package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/utxo.js.map +1 -0
  72. package/src/_cjs/core/UTXO/utxo-stack/types/transaction.js +3 -0
  73. package/src/_cjs/core/UTXO/utxo-stack/types/transaction.js.map +1 -0
  74. package/src/_cjs/core/checkBalance.js +3 -3
  75. package/src/_cjs/core/checkBalance.js.map +1 -1
  76. package/src/_cjs/core/utils.js +0 -6
  77. package/src/_cjs/core/utils.js.map +1 -1
  78. package/src/_cjs/core/waitForReceivingTransaction.js +4 -4
  79. package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -1
  80. package/src/_cjs/createConfig.js +3 -1
  81. package/src/_cjs/createConfig.js.map +1 -1
  82. package/src/_cjs/index.js +10 -3
  83. package/src/_cjs/index.js.map +1 -1
  84. package/src/_cjs/request.js +3 -3
  85. package/src/_cjs/request.js.map +1 -1
  86. package/src/_cjs/services/api.js +8 -4
  87. package/src/_cjs/services/api.js.map +1 -1
  88. package/src/_cjs/services/balance.js +7 -3
  89. package/src/_cjs/services/balance.js.map +1 -1
  90. package/src/_cjs/utils/index.js +1 -1
  91. package/src/_cjs/utils/index.js.map +1 -1
  92. package/src/_cjs/utils/{utils.js → isZeroAddress.js} +2 -19
  93. package/src/_cjs/utils/isZeroAddress.js.map +1 -0
  94. package/src/_cjs/utils/sleep.js +9 -0
  95. package/src/_cjs/utils/sleep.js.map +1 -0
  96. package/src/_cjs/utils/waitForResult.js +16 -0
  97. package/src/_cjs/utils/waitForResult.js.map +1 -0
  98. package/src/_cjs/utils/withDedupe.js +37 -0
  99. package/src/_cjs/utils/withDedupe.js.map +1 -0
  100. package/src/_cjs/version.js +1 -1
  101. package/src/_cjs/version.js.map +1 -1
  102. package/src/_esm/core/EVM/EVMStepExecutor.js +2 -1
  103. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -1
  104. package/src/_esm/core/EVM/getAllowance.js +1 -1
  105. package/src/_esm/core/EVM/getAllowance.js.map +1 -1
  106. package/src/_esm/core/EVM/getEVMBalance.js +1 -1
  107. package/src/_esm/core/EVM/getEVMBalance.js.map +1 -1
  108. package/src/_esm/core/EVM/setAllowance.js +1 -1
  109. package/src/_esm/core/EVM/setAllowance.js.map +1 -1
  110. package/src/_esm/core/Solana/Solana.js +2 -2
  111. package/src/_esm/core/Solana/Solana.js.map +1 -1
  112. package/src/_esm/core/Solana/SolanaStepExecutor.js +6 -9
  113. package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -1
  114. package/src/_esm/core/Solana/getSNSAddress.js +2 -2
  115. package/src/_esm/core/Solana/getSNSAddress.js.map +1 -1
  116. package/src/_esm/core/Solana/{isAddress.js → isSVMAddress.js} +2 -2
  117. package/src/_esm/core/Solana/isSVMAddress.js.map +1 -0
  118. package/src/_esm/core/UTXO/UTXO.js +36 -0
  119. package/src/_esm/core/UTXO/UTXO.js.map +1 -0
  120. package/src/_esm/core/UTXO/UTXOStepExecutor.js +243 -0
  121. package/src/_esm/core/UTXO/UTXOStepExecutor.js.map +1 -0
  122. package/src/_esm/core/UTXO/blockchairApi.js +167 -0
  123. package/src/_esm/core/UTXO/blockchairApi.js.map +1 -0
  124. package/src/_esm/core/UTXO/blockchairApiTypes.js +23 -0
  125. package/src/_esm/core/UTXO/blockchairApiTypes.js.map +1 -0
  126. package/src/_esm/core/UTXO/getUTXOAPIPublicClient.js +50 -0
  127. package/src/_esm/core/UTXO/getUTXOAPIPublicClient.js.map +1 -0
  128. package/src/_esm/core/UTXO/getUTXOBalance.js +26 -0
  129. package/src/_esm/core/UTXO/getUTXOBalance.js.map +1 -0
  130. package/src/_esm/core/UTXO/getUTXOPublicClient.js +38 -0
  131. package/src/_esm/core/UTXO/getUTXOPublicClient.js.map +1 -0
  132. package/src/_esm/core/UTXO/isUTXOAddress.js +128 -0
  133. package/src/_esm/core/UTXO/isUTXOAddress.js.map +1 -0
  134. package/src/_esm/core/UTXO/parseUTXOErrors.js +26 -0
  135. package/src/_esm/core/UTXO/parseUTXOErrors.js.map +1 -0
  136. package/src/_esm/core/UTXO/requestClient.js +59 -0
  137. package/src/_esm/core/UTXO/requestClient.js.map +1 -0
  138. package/src/_esm/core/UTXO/types.js +6 -0
  139. package/src/_esm/core/UTXO/types.js.map +1 -0
  140. package/src/_esm/core/UTXO/utxo-stack/actions/getBalance.js +9 -0
  141. package/src/_esm/core/UTXO/utxo-stack/actions/getBalance.js.map +1 -0
  142. package/src/_esm/core/UTXO/utxo-stack/actions/getBlockCount.js +9 -0
  143. package/src/_esm/core/UTXO/utxo-stack/actions/getBlockCount.js.map +1 -0
  144. package/src/_esm/core/UTXO/utxo-stack/actions/getUTXOTransaction.js +13 -0
  145. package/src/_esm/core/UTXO/utxo-stack/actions/getUTXOTransaction.js.map +1 -0
  146. package/src/_esm/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js +13 -0
  147. package/src/_esm/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js.map +1 -0
  148. package/src/_esm/core/UTXO/utxo-stack/actions/signPsbt.js +9 -0
  149. package/src/_esm/core/UTXO/utxo-stack/actions/signPsbt.js.map +1 -0
  150. package/src/_esm/core/UTXO/utxo-stack/clients/types.js +2 -0
  151. package/src/_esm/core/UTXO/utxo-stack/clients/types.js.map +1 -0
  152. package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js +7 -0
  153. package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js.map +1 -0
  154. package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOActions.js +11 -0
  155. package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOActions.js.map +1 -0
  156. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/ankr.js +18 -0
  157. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/ankr.js.map +1 -0
  158. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockchair.js +21 -0
  159. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockchair.js.map +1 -0
  160. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockcypher.js +18 -0
  161. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockcypher.js.map +1 -0
  162. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js +74 -0
  163. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js.map +1 -0
  164. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js +19 -0
  165. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js.map +1 -0
  166. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/mempool.js +14 -0
  167. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/mempool.js.map +1 -0
  168. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/types.js +2 -0
  169. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/types.js.map +1 -0
  170. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/utxo.js +53 -0
  171. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/utxo.js.map +1 -0
  172. package/src/_esm/core/UTXO/utxo-stack/types/transaction.js +2 -0
  173. package/src/_esm/core/UTXO/utxo-stack/types/transaction.js.map +1 -0
  174. package/src/_esm/core/checkBalance.js +2 -2
  175. package/src/_esm/core/checkBalance.js.map +1 -1
  176. package/src/_esm/core/utils.js +0 -5
  177. package/src/_esm/core/utils.js.map +1 -1
  178. package/src/_esm/core/waitForReceivingTransaction.js +4 -4
  179. package/src/_esm/core/waitForReceivingTransaction.js.map +1 -1
  180. package/src/_esm/createConfig.js +3 -1
  181. package/src/_esm/createConfig.js.map +1 -1
  182. package/src/_esm/index.js +7 -3
  183. package/src/_esm/index.js.map +1 -1
  184. package/src/_esm/request.js +3 -3
  185. package/src/_esm/request.js.map +1 -1
  186. package/src/_esm/services/api.js +8 -4
  187. package/src/_esm/services/api.js.map +1 -1
  188. package/src/_esm/services/balance.js +9 -5
  189. package/src/_esm/services/balance.js.map +1 -1
  190. package/src/_esm/utils/index.js +1 -1
  191. package/src/_esm/utils/index.js.map +1 -1
  192. package/src/_esm/utils/isZeroAddress.js +17 -0
  193. package/src/_esm/utils/isZeroAddress.js.map +1 -0
  194. package/src/_esm/utils/sleep.js +6 -0
  195. package/src/_esm/utils/sleep.js.map +1 -0
  196. package/src/_esm/utils/waitForResult.js +18 -0
  197. package/src/_esm/utils/waitForResult.js.map +1 -0
  198. package/src/_esm/utils/withDedupe.js +40 -0
  199. package/src/_esm/utils/withDedupe.js.map +1 -0
  200. package/src/_esm/version.js +1 -1
  201. package/src/_esm/version.js.map +1 -1
  202. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -1
  203. package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -1
  204. package/src/_types/core/Solana/isSVMAddress.d.ts +2 -0
  205. package/src/_types/core/Solana/isSVMAddress.d.ts.map +1 -0
  206. package/src/_types/core/UTXO/UTXO.d.ts +3 -0
  207. package/src/_types/core/UTXO/UTXO.d.ts.map +1 -0
  208. package/src/_types/core/UTXO/UTXOStepExecutor.d.ts +13 -0
  209. package/src/_types/core/UTXO/UTXOStepExecutor.d.ts.map +1 -0
  210. package/src/_types/core/UTXO/blockchairApi.d.ts +37 -0
  211. package/src/_types/core/UTXO/blockchairApi.d.ts.map +1 -0
  212. package/src/_types/core/UTXO/blockchairApiTypes.d.ts +229 -0
  213. package/src/_types/core/UTXO/blockchairApiTypes.d.ts.map +1 -0
  214. package/src/_types/core/UTXO/getUTXOAPIPublicClient.d.ts +10 -0
  215. package/src/_types/core/UTXO/getUTXOAPIPublicClient.d.ts.map +1 -0
  216. package/src/_types/core/UTXO/getUTXOBalance.d.ts +3 -0
  217. package/src/_types/core/UTXO/getUTXOBalance.d.ts.map +1 -0
  218. package/src/_types/core/UTXO/getUTXOPublicClient.d.ts +10 -0
  219. package/src/_types/core/UTXO/getUTXOPublicClient.d.ts.map +1 -0
  220. package/src/_types/core/UTXO/isUTXOAddress.d.ts +21 -0
  221. package/src/_types/core/UTXO/isUTXOAddress.d.ts.map +1 -0
  222. package/src/_types/core/UTXO/parseUTXOErrors.d.ts +4 -0
  223. package/src/_types/core/UTXO/parseUTXOErrors.d.ts.map +1 -0
  224. package/src/_types/core/UTXO/requestClient.d.ts +22 -0
  225. package/src/_types/core/UTXO/requestClient.d.ts.map +1 -0
  226. package/src/_types/core/UTXO/types.d.ts +10 -0
  227. package/src/_types/core/UTXO/types.d.ts.map +1 -0
  228. package/src/_types/core/UTXO/utxo-stack/actions/getBalance.d.ts +9 -0
  229. package/src/_types/core/UTXO/utxo-stack/actions/getBalance.d.ts.map +1 -0
  230. package/src/_types/core/UTXO/utxo-stack/actions/getBlockCount.d.ts +5 -0
  231. package/src/_types/core/UTXO/utxo-stack/actions/getBlockCount.d.ts.map +1 -0
  232. package/src/_types/core/UTXO/utxo-stack/actions/getUTXOTransaction.d.ts +12 -0
  233. package/src/_types/core/UTXO/utxo-stack/actions/getUTXOTransaction.d.ts.map +1 -0
  234. package/src/_types/core/UTXO/utxo-stack/actions/sendUTXOTransaction.d.ts +11 -0
  235. package/src/_types/core/UTXO/utxo-stack/actions/sendUTXOTransaction.d.ts.map +1 -0
  236. package/src/_types/core/UTXO/utxo-stack/actions/signPsbt.d.ts +4 -0
  237. package/src/_types/core/UTXO/utxo-stack/actions/signPsbt.d.ts.map +1 -0
  238. package/src/_types/core/UTXO/utxo-stack/clients/types.d.ts +44 -0
  239. package/src/_types/core/UTXO/utxo-stack/clients/types.d.ts.map +1 -0
  240. package/src/_types/core/UTXO/utxo-stack/decorators/UTXOAPIActions.d.ts +7 -0
  241. package/src/_types/core/UTXO/utxo-stack/decorators/UTXOAPIActions.d.ts.map +1 -0
  242. package/src/_types/core/UTXO/utxo-stack/decorators/UTXOActions.d.ts +11 -0
  243. package/src/_types/core/UTXO/utxo-stack/decorators/UTXOActions.d.ts.map +1 -0
  244. package/src/_types/core/UTXO/utxo-stack/transports/utxo/ankr.d.ts +3 -0
  245. package/src/_types/core/UTXO/utxo-stack/transports/utxo/ankr.d.ts.map +1 -0
  246. package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockchair.d.ts +3 -0
  247. package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockchair.d.ts.map +1 -0
  248. package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockcypher.d.ts +3 -0
  249. package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockcypher.d.ts.map +1 -0
  250. package/src/_types/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.d.ts +25 -0
  251. package/src/_types/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.d.ts.map +1 -0
  252. package/src/_types/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.d.ts +3 -0
  253. package/src/_types/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.d.ts.map +1 -0
  254. package/src/_types/core/UTXO/utxo-stack/transports/utxo/mempool.d.ts +3 -0
  255. package/src/_types/core/UTXO/utxo-stack/transports/utxo/mempool.d.ts.map +1 -0
  256. package/src/_types/core/UTXO/utxo-stack/transports/utxo/types.d.ts +45 -0
  257. package/src/_types/core/UTXO/utxo-stack/transports/utxo/types.d.ts.map +1 -0
  258. package/src/_types/core/UTXO/utxo-stack/transports/utxo/utxo.d.ts +7 -0
  259. package/src/_types/core/UTXO/utxo-stack/transports/utxo/utxo.d.ts.map +1 -0
  260. package/src/_types/core/UTXO/utxo-stack/types/transaction.d.ts +42 -0
  261. package/src/_types/core/UTXO/utxo-stack/types/transaction.d.ts.map +1 -0
  262. package/src/_types/core/utils.d.ts +0 -1
  263. package/src/_types/core/utils.d.ts.map +1 -1
  264. package/src/_types/core/waitForReceivingTransaction.d.ts +1 -1
  265. package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -1
  266. package/src/_types/createConfig.d.ts.map +1 -1
  267. package/src/_types/index.d.ts +7 -3
  268. package/src/_types/index.d.ts.map +1 -1
  269. package/src/_types/request.d.ts.map +1 -1
  270. package/src/_types/services/api.d.ts.map +1 -1
  271. package/src/_types/services/balance.d.ts +3 -3
  272. package/src/_types/services/balance.d.ts.map +1 -1
  273. package/src/_types/utils/index.d.ts +1 -1
  274. package/src/_types/utils/index.d.ts.map +1 -1
  275. package/src/_types/utils/isZeroAddress.d.ts +3 -0
  276. package/src/_types/utils/isZeroAddress.d.ts.map +1 -0
  277. package/src/_types/utils/sleep.d.ts +2 -0
  278. package/src/_types/utils/sleep.d.ts.map +1 -0
  279. package/src/_types/utils/waitForResult.d.ts +8 -0
  280. package/src/_types/utils/waitForResult.d.ts.map +1 -0
  281. package/src/_types/utils/withDedupe.d.ts +20 -0
  282. package/src/_types/utils/withDedupe.d.ts.map +1 -0
  283. package/src/_types/version.d.ts +1 -1
  284. package/src/_types/version.d.ts.map +1 -1
  285. package/src/core/EVM/EVMStepExecutor.ts +2 -4
  286. package/src/core/EVM/getAllowance.ts +1 -1
  287. package/src/core/EVM/getEVMBalance.ts +1 -1
  288. package/src/core/EVM/setAllowance.ts +1 -1
  289. package/src/core/Solana/Solana.ts +2 -2
  290. package/src/core/Solana/SolanaStepExecutor.ts +14 -17
  291. package/src/core/Solana/getSNSAddress.ts +2 -2
  292. package/src/core/Solana/{isAddress.ts → isSVMAddress.ts} +1 -1
  293. package/src/core/UTXO/UTXO.ts +43 -0
  294. package/src/core/UTXO/UTXOStepExecutor.ts +351 -0
  295. package/src/core/UTXO/blockchairApi.ts +273 -0
  296. package/src/core/UTXO/blockchairApiTypes.ts +253 -0
  297. package/src/core/UTXO/getUTXOAPIPublicClient.ts +71 -0
  298. package/src/core/UTXO/getUTXOBalance.ts +31 -0
  299. package/src/core/UTXO/getUTXOPublicClient.ts +60 -0
  300. package/src/core/UTXO/isUTXOAddress.ts +166 -0
  301. package/src/core/UTXO/parseUTXOErrors.ts +36 -0
  302. package/src/core/UTXO/requestClient.ts +84 -0
  303. package/src/core/UTXO/types.ts +15 -0
  304. package/src/core/UTXO/utxo-stack/actions/getBalance.ts +26 -0
  305. package/src/core/UTXO/utxo-stack/actions/getBlockCount.ts +20 -0
  306. package/src/core/UTXO/utxo-stack/actions/getUTXOTransaction.ts +30 -0
  307. package/src/core/UTXO/utxo-stack/actions/sendUTXOTransaction.ts +29 -0
  308. package/src/core/UTXO/utxo-stack/actions/signPsbt.ts +23 -0
  309. package/src/core/UTXO/utxo-stack/clients/types.ts +48 -0
  310. package/src/core/UTXO/utxo-stack/decorators/UTXOAPIActions.ts +21 -0
  311. package/src/core/UTXO/utxo-stack/decorators/UTXOActions.ts +37 -0
  312. package/src/core/UTXO/utxo-stack/transports/utxo/ankr.ts +30 -0
  313. package/src/core/UTXO/utxo-stack/transports/utxo/blockchair.ts +27 -0
  314. package/src/core/UTXO/utxo-stack/transports/utxo/blockcypher.ts +32 -0
  315. package/src/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.ts +122 -0
  316. package/src/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.ts +22 -0
  317. package/src/core/UTXO/utxo-stack/transports/utxo/mempool.ts +34 -0
  318. package/src/core/UTXO/utxo-stack/transports/utxo/types.ts +55 -0
  319. package/src/core/UTXO/utxo-stack/transports/utxo/utxo.ts +84 -0
  320. package/src/core/UTXO/utxo-stack/types/transaction.ts +43 -0
  321. package/src/core/checkBalance.ts +2 -2
  322. package/src/core/utils.ts +0 -6
  323. package/src/core/waitForReceivingTransaction.ts +5 -4
  324. package/src/createConfig.ts +3 -1
  325. package/src/index.ts +7 -3
  326. package/src/request.ts +3 -3
  327. package/src/services/api.ts +26 -16
  328. package/src/services/balance.ts +11 -6
  329. package/src/utils/index.ts +1 -1
  330. package/src/utils/isZeroAddress.ts +20 -0
  331. package/src/utils/sleep.ts +5 -0
  332. package/src/utils/waitForResult.ts +21 -0
  333. package/src/utils/withDedupe.ts +46 -0
  334. package/src/version.ts +1 -1
  335. package/src/_cjs/core/Solana/isAddress.js.map +0 -1
  336. package/src/_cjs/utils/utils.js.map +0 -1
  337. package/src/_esm/core/Solana/isAddress.js.map +0 -1
  338. package/src/_esm/utils/utils.js +0 -38
  339. package/src/_esm/utils/utils.js.map +0 -1
  340. package/src/_types/core/Solana/isAddress.d.ts +0 -2
  341. package/src/_types/core/Solana/isAddress.d.ts.map +0 -1
  342. package/src/_types/utils/utils.d.ts +0 -11
  343. package/src/_types/utils/utils.d.ts.map +0 -1
  344. package/src/utils/utils.ts +0 -48
@@ -0,0 +1,122 @@
1
+ import { HttpRequestError, stringify, TimeoutError, withTimeout } from 'viem'
2
+ import type { HttpRequestReturnType, HttpRpcClientOptions } from 'viem/utils'
3
+
4
+ export type RpcRequest = {
5
+ jsonrpc?: '2.0'
6
+ method: string
7
+ params?: any
8
+ id?: number
9
+ }
10
+
11
+ export type HttpRequestParameters<
12
+ body extends RpcRequest | RpcRequest[] = RpcRequest,
13
+ > = {
14
+ url?: string
15
+ /** The RPC request body. */
16
+ body?: body
17
+ /** Request configuration to pass to `fetch`. */
18
+ fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined
19
+ /** A callback to handle the response. */
20
+ onRequest?: ((request: Request) => Promise<void> | void) | undefined
21
+ /** A callback to handle the response. */
22
+ onResponse?: ((response: Response) => Promise<void> | void) | undefined
23
+ /** The timeout (in ms) for the request. */
24
+ timeout?: HttpRpcClientOptions['timeout'] | undefined
25
+ }
26
+
27
+ export type HttpRpcClient = {
28
+ request<body extends RpcRequest | RpcRequest[]>(
29
+ params: HttpRequestParameters<body>
30
+ ): Promise<HttpRequestReturnType<body>>
31
+ }
32
+
33
+ export function getHttpRpcClient(
34
+ url: string,
35
+ options: HttpRpcClientOptions = {}
36
+ ): HttpRpcClient {
37
+ return {
38
+ async request(params) {
39
+ const {
40
+ body,
41
+ onRequest = options.onRequest,
42
+ onResponse = options.onResponse,
43
+ timeout = options.timeout ?? 10_000,
44
+ } = params
45
+
46
+ const fetchOptions = {
47
+ ...(options.fetchOptions ?? {}),
48
+ ...(params.fetchOptions ?? {}),
49
+ }
50
+
51
+ const { headers, method, signal: signal_ } = fetchOptions
52
+
53
+ try {
54
+ const response = await withTimeout(
55
+ async ({ signal }) => {
56
+ const init: RequestInit = {
57
+ ...fetchOptions,
58
+ body: body ? stringify(body) : undefined,
59
+ headers: {
60
+ ...(method !== 'GET'
61
+ ? { 'Content-Type': 'application/json' }
62
+ : undefined),
63
+ ...headers,
64
+ },
65
+ method: method,
66
+ signal: signal_ || (timeout > 0 ? signal : null),
67
+ }
68
+ const request = new Request(params.url ?? url, init)
69
+ if (onRequest) {
70
+ await onRequest(request)
71
+ }
72
+ const response = await fetch(params.url ?? url, init)
73
+ return response
74
+ },
75
+ {
76
+ errorInstance: new TimeoutError({ body: body ?? {}, url }),
77
+ timeout,
78
+ signal: true,
79
+ }
80
+ )
81
+
82
+ if (onResponse) {
83
+ await onResponse(response)
84
+ }
85
+
86
+ let data: any
87
+ if (
88
+ response.headers.get('Content-Type')?.startsWith('application/json')
89
+ ) {
90
+ data = await response.json()
91
+ } else {
92
+ data = await response.text()
93
+ data = JSON.parse(data || '{}')
94
+ }
95
+
96
+ if (!response.ok) {
97
+ throw new HttpRequestError({
98
+ body,
99
+ details: stringify(data.error) || response.statusText,
100
+ headers: response.headers,
101
+ status: response.status,
102
+ url,
103
+ })
104
+ }
105
+
106
+ return data
107
+ } catch (err) {
108
+ if (err instanceof HttpRequestError) {
109
+ throw err
110
+ }
111
+ if (err instanceof TimeoutError) {
112
+ throw err
113
+ }
114
+ throw new HttpRequestError({
115
+ body,
116
+ cause: err as Error,
117
+ url,
118
+ })
119
+ }
120
+ },
121
+ }
122
+ }
@@ -0,0 +1,22 @@
1
+ import { ankrMethods } from './ankr.js'
2
+ import { blockchairMethods } from './blockchair.js'
3
+ import { blockcypherMethods } from './blockcypher.js'
4
+ import { mempoolMethods } from './mempool.js'
5
+ import type { RpcMethods } from './types.js'
6
+
7
+ export function getRpcProviderMethods(
8
+ key: 'blockchair' | 'ankr' | 'blockcypher' | 'mempool' | string
9
+ ): RpcMethods | null {
10
+ switch (key) {
11
+ case 'blockchair':
12
+ return blockchairMethods
13
+ case 'ankr':
14
+ return ankrMethods
15
+ case 'blockcypher':
16
+ return blockcypherMethods
17
+ case 'mempool':
18
+ return mempoolMethods
19
+ default:
20
+ return null
21
+ }
22
+ }
@@ -0,0 +1,34 @@
1
+ import type { RpcMethods } from './types.js'
2
+
3
+ type MempoolBalanceResponse = {
4
+ address: string
5
+ chain_stats: {
6
+ funded_txo_count: number
7
+ funded_txo_sum: number
8
+ spent_txo_count: number
9
+ spent_txo_sum: number
10
+ tx_count: number
11
+ }
12
+ mempool_stats: {
13
+ funded_txo_count: number
14
+ funded_txo_sum: number
15
+ spent_txo_count: number
16
+ spent_txo_sum: number
17
+ tx_count: number
18
+ }
19
+ }
20
+
21
+ export const mempoolMethods: RpcMethods = {
22
+ getBalance: async (client, baseUrl, { address }) => {
23
+ const apiUrl = `${baseUrl}/address/${address}`
24
+ const response = (await client.request({
25
+ url: apiUrl,
26
+ fetchOptions: { method: 'GET' },
27
+ })) as unknown as MempoolBalanceResponse
28
+ const balance =
29
+ response.chain_stats.funded_txo_sum - response.chain_stats.spent_txo_sum
30
+ return {
31
+ result: BigInt(balance),
32
+ }
33
+ },
34
+ }
@@ -0,0 +1,55 @@
1
+ import type { UTXOTransaction } from '../../types/transaction.js'
2
+ import type { HttpRpcClient } from './getHttpRpcClient.js'
3
+
4
+ export type UTXOSchema = [
5
+ {
6
+ Method: 'getblockcount'
7
+ Parameters: []
8
+ ReturnType: number
9
+ },
10
+ {
11
+ Method: 'sendrawtransaction'
12
+ Parameters: [string, number?]
13
+ ReturnType: string
14
+ },
15
+ {
16
+ Method: 'getrawtransaction'
17
+ Parameters: [string, boolean, string?]
18
+ ReturnType: UTXOTransaction
19
+ },
20
+ ]
21
+
22
+ export type UTXOAPISchema = [
23
+ {
24
+ Method: 'getBalance'
25
+ Parameters: { address: string }
26
+ ReturnType: bigint
27
+ },
28
+ ]
29
+
30
+ export type UTXOAPIMethod = UTXOAPISchema[number]['Method']
31
+
32
+ export type SuccessResult<result> = {
33
+ method?: undefined
34
+ result: result
35
+ error?: undefined
36
+ }
37
+ export type ErrorResult<error> = {
38
+ method?: undefined
39
+ result?: undefined
40
+ error: error
41
+ }
42
+
43
+ export type RpcResponse<result = any, error = any> =
44
+ | SuccessResult<result>
45
+ | ErrorResult<error>
46
+
47
+ export type RpcMethodHandler = (
48
+ client: HttpRpcClient,
49
+ baseUrl: string,
50
+ params: any
51
+ ) => Promise<RpcResponse>
52
+
53
+ export type RpcMethods = {
54
+ [key in UTXOAPIMethod]: RpcMethodHandler
55
+ }
@@ -0,0 +1,84 @@
1
+ import {
2
+ createTransport,
3
+ RpcRequestError,
4
+ UrlRequiredError,
5
+ type HttpTransport,
6
+ type HttpTransportConfig,
7
+ } from 'viem'
8
+ import { getHttpRpcClient } from './getHttpRpcClient.js'
9
+ import { getRpcProviderMethods } from './getRpcProviderMethods.js'
10
+ import type { UTXOAPIMethod } from './types.js'
11
+
12
+ type UTXOHttpTransportConfig = HttpTransportConfig & {
13
+ includeChainToURL?: boolean
14
+ }
15
+
16
+ export function utxo(
17
+ url?: string,
18
+ config: UTXOHttpTransportConfig = {}
19
+ ): HttpTransport {
20
+ const {
21
+ fetchOptions,
22
+ key = 'utxo',
23
+ name = 'UTXO HTTP API',
24
+ onFetchRequest,
25
+ onFetchResponse,
26
+ retryDelay,
27
+ } = config
28
+ return ({ chain, retryCount: retryCount_, timeout: timeout_ }) => {
29
+ const retryCount = config.retryCount ?? retryCount_
30
+ const timeout = timeout_ ?? config.timeout ?? 10_000
31
+ let url_ = url
32
+ if (config.includeChainToURL) {
33
+ const chainName = chain?.name.replace(' ', '-').toLowerCase()
34
+ url_ = `${url}${chainName ? `/${chainName}` : ''}`
35
+ }
36
+ if (!url_) {
37
+ throw new UrlRequiredError()
38
+ }
39
+
40
+ const client = getHttpRpcClient(url_, {
41
+ fetchOptions,
42
+ onRequest: onFetchRequest,
43
+ onResponse: onFetchResponse,
44
+ timeout,
45
+ })
46
+
47
+ const rpcMethods = getRpcProviderMethods(key)
48
+
49
+ return createTransport(
50
+ {
51
+ key,
52
+ name,
53
+ async request({ method, params }) {
54
+ const body = { method, params }
55
+ const methodHandler = rpcMethods?.[method as UTXOAPIMethod]
56
+ const { error, result } = await (methodHandler?.(
57
+ client,
58
+ url_,
59
+ params
60
+ ) ??
61
+ client.request({
62
+ body,
63
+ }))
64
+ if (error) {
65
+ throw new RpcRequestError({
66
+ body,
67
+ error,
68
+ url: url_,
69
+ })
70
+ }
71
+ return result
72
+ },
73
+ retryCount,
74
+ retryDelay,
75
+ timeout,
76
+ type: 'http',
77
+ },
78
+ {
79
+ fetchOptions,
80
+ url: url_,
81
+ }
82
+ )
83
+ }
84
+ }
@@ -0,0 +1,43 @@
1
+ export type UTXOTransaction = {
2
+ blockhash?: string
3
+ blocktime?: number
4
+ confirmations?: number
5
+ hash: string
6
+ hex: string
7
+ in_active_chain?: boolean
8
+ locktime: number
9
+ size: number
10
+ time?: number
11
+ txid: string
12
+ version: number
13
+ vsize: number
14
+ weight: number
15
+ vin: {
16
+ scriptSig: {
17
+ asm: string
18
+ hex: string
19
+ }
20
+ sequence: number
21
+ txid: string
22
+ txinwitness: string[]
23
+ vout: number
24
+ }[]
25
+ vout: {
26
+ n: 0
27
+ scriptPubKey:
28
+ | {
29
+ address: string
30
+ asm: string
31
+ desc: string
32
+ hex: string
33
+ type: string
34
+ }
35
+ | {
36
+ asm: string
37
+ desc: string
38
+ hex: string
39
+ type: string
40
+ }
41
+ value: number
42
+ }[]
43
+ }
@@ -1,8 +1,8 @@
1
1
  import type { LiFiStep } from '@lifi/types'
2
2
  import { formatUnits } from 'viem'
3
- import { getTokenBalance } from '../services/balance.js'
4
3
  import { BalanceError } from '../errors/errors.js'
5
- import { sleep } from './utils.js'
4
+ import { getTokenBalance } from '../services/balance.js'
5
+ import { sleep } from '../utils/sleep.js'
6
6
 
7
7
  export const checkBalance = async (
8
8
  walletAddress: string,
package/src/core/utils.ts CHANGED
@@ -25,9 +25,3 @@ export function checkStepSlippageThreshold(
25
25
  }
26
26
  return actualSlippage <= setSlippage
27
27
  }
28
-
29
- export function sleep(ms: number): Promise<null> {
30
- return new Promise((resolve) => {
31
- setTimeout(() => resolve(null), ms)
32
- })
33
- }
@@ -4,9 +4,9 @@ import type {
4
4
  ProcessType,
5
5
  StatusResponse,
6
6
  } from '@lifi/types'
7
- import { getStatus } from '../services/api.js'
8
7
  import { ServerError } from '../errors/errors.js'
9
- import { repeatUntilDone } from '../utils/utils.js'
8
+ import { getStatus } from '../services/api.js'
9
+ import { waitForResult } from '../utils/waitForResult.js'
10
10
  import type { StatusManager } from './StatusManager.js'
11
11
  import { getSubstatusMessage } from './processMessages.js'
12
12
 
@@ -16,7 +16,8 @@ export async function waitForReceivingTransaction(
16
16
  txHash: string,
17
17
  statusManager: StatusManager,
18
18
  processType: ProcessType,
19
- step: LiFiStep
19
+ step: LiFiStep,
20
+ interval: number = 5_000
20
21
  ): Promise<StatusResponse> {
21
22
  const _getStatus = (): Promise<StatusResponse | undefined> =>
22
23
  new Promise(async (resolve, reject) => {
@@ -62,7 +63,7 @@ export async function waitForReceivingTransaction(
62
63
  if (txHash in TRANSACTION_HASH_OBSERVERS) {
63
64
  status = await TRANSACTION_HASH_OBSERVERS[txHash]
64
65
  } else {
65
- TRANSACTION_HASH_OBSERVERS[txHash] = repeatUntilDone(_getStatus, 5_000)
66
+ TRANSACTION_HASH_OBSERVERS[txHash] = waitForResult(_getStatus, interval)
66
67
  status = await TRANSACTION_HASH_OBSERVERS[txHash]
67
68
  }
68
69
 
@@ -20,7 +20,9 @@ function createBaseConfig(options: SDKConfig) {
20
20
  }
21
21
 
22
22
  export async function createChainsConfig() {
23
- config.loading = getChains({ chainTypes: [ChainType.EVM, ChainType.SVM] })
23
+ config.loading = getChains({
24
+ chainTypes: [ChainType.EVM, ChainType.SVM, ChainType.UTXO],
25
+ })
24
26
  .then((chains) => config.setChains(chains))
25
27
  .catch()
26
28
  await config.loading
package/src/index.ts CHANGED
@@ -14,17 +14,21 @@ export type {
14
14
  MultisigTransaction,
15
15
  MultisigTxDetails,
16
16
  } from './core/EVM/types.js'
17
+ export * from './core/index.js'
18
+ export { isSVMAddress } from './core/Solana/isSVMAddress.js'
17
19
  export {
18
20
  KeypairWalletAdapter,
19
21
  KeypairWalletName,
20
22
  } from './core/Solana/KeypairWalletAdapter.js'
21
23
  export { Solana } from './core/Solana/Solana.js'
22
- export * from './core/index.js'
24
+ export { isUTXOAddress } from './core/UTXO/isUTXOAddress.js'
25
+ export * from './core/UTXO/utxo-stack/clients/types.js'
26
+ export { UTXO } from './core/UTXO/UTXO.js'
23
27
  export { createConfig } from './createConfig.js'
28
+ export * from './errors/index.js'
29
+ export { type ErrorCode } from './errors/index.js'
24
30
  export * from './helpers.js'
25
31
  export * from './services/api.js'
26
32
  export * from './services/balance.js'
27
33
  export * from './services/getNameServiceAddress.js'
28
34
  export * from './types/index.js'
29
- export * from './errors/index.js'
30
- export { type ErrorCode } from './errors/index.js'
package/src/request.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { config } from './config.js'
2
- import { HTTPError } from './errors/httpError.js'
3
- import { wait } from './utils/utils.js'
4
2
  import { ValidationError } from './errors/errors.js'
3
+ import { HTTPError } from './errors/httpError.js'
5
4
  import { SDKError } from './errors/SDKError.js'
6
5
  import type { ExtendedRequestInit } from './types/request.js'
6
+ import { sleep } from './utils/sleep.js'
7
7
  import { version } from './version.js'
8
8
 
9
9
  export const requestSettings = {
@@ -82,7 +82,7 @@ export const request = async <T = Response>(
82
82
  return await response.json()
83
83
  } catch (error) {
84
84
  if (options.retries > 0 && (error as HTTPError).status === 500) {
85
- await wait(500)
85
+ await sleep(500)
86
86
  return request<T>(url, { ...options, retries: options.retries - 1 })
87
87
  }
88
88
 
@@ -31,6 +31,7 @@ import { ValidationError } from '../errors/errors.js'
31
31
  import { SDKError } from '../errors/SDKError.js'
32
32
  import { request } from '../request.js'
33
33
  import { isRoutesRequest, isStep } from '../typeguards.js'
34
+ import { withDedupe } from '../utils/withDedupe.js'
34
35
  /**
35
36
  * Fetch information about a Token
36
37
  * @param chain - Id or key of the chain that contains the token
@@ -231,14 +232,18 @@ export const getChains = async (
231
232
  delete params[key as keyof ChainsRequest]
232
233
  )
233
234
  }
234
-
235
- const response = await request<ChainsResponse>(
236
- `${config.get().apiUrl}/chains?${new URLSearchParams(
237
- params as Record<string, string>
238
- )}`,
239
- {
240
- signal: options?.signal,
241
- }
235
+ const urlSearchParams = new URLSearchParams(
236
+ params as Record<string, string>
237
+ ).toString()
238
+ const response = await withDedupe(
239
+ () =>
240
+ request<ChainsResponse>(
241
+ `${config.get().apiUrl}/chains?${urlSearchParams}`,
242
+ {
243
+ signal: options?.signal,
244
+ }
245
+ ),
246
+ { id: `${getChains.name}.${urlSearchParams}` }
242
247
  )
243
248
  return response.chains
244
249
  }
@@ -349,15 +354,20 @@ export const getTokens = async (
349
354
  delete params[key as keyof TokensRequest]
350
355
  )
351
356
  }
352
-
353
- return await request<TokensResponse>(
354
- `${config.get().apiUrl}/tokens?${new URLSearchParams(
355
- params as Record<string, string>
356
- )}`,
357
- {
358
- signal: options?.signal,
359
- }
357
+ const urlSearchParams = new URLSearchParams(
358
+ params as Record<string, string>
359
+ ).toString()
360
+ const response = await withDedupe(
361
+ () =>
362
+ request<TokensResponse>(
363
+ `${config.get().apiUrl}/tokens?${urlSearchParams}`,
364
+ {
365
+ signal: options?.signal,
366
+ }
367
+ ),
368
+ { id: `${getTokens.name}.${urlSearchParams}` }
360
369
  )
370
+ return response
361
371
  }
362
372
 
363
373
  /**
@@ -1,7 +1,7 @@
1
- import type { Token, TokenAmount } from '@lifi/types'
1
+ import { ChainType, type Token, type TokenAmount } from '@lifi/types'
2
2
  import { config } from '../config.js'
3
- import { isToken } from '../typeguards.js'
4
3
  import { ValidationError } from '../errors/errors.js'
4
+ import { isToken } from '../typeguards.js'
5
5
 
6
6
  /**
7
7
  * Returns the balances of a specific token a wallet holds across all aggregated chains.
@@ -50,8 +50,8 @@ export const getTokenBalances = async (
50
50
 
51
51
  /**
52
52
  * This method queries the balances of tokens for a specific list of chains for a given wallet.
53
- * @param walletAddress - A walletaddress.
54
- * @param tokensByChain - A list of Token objects organized by chain ids.
53
+ * @param walletAddress - A wallet address.
54
+ * @param tokensByChain - A list of token objects organized by chain ids.
55
55
  * @returns A list of objects containing the tokens and the amounts on different chains organized by the chosen chains.
56
56
  * @throws {BaseError} Throws a ValidationError if parameters are invalid.
57
57
  */
@@ -73,10 +73,15 @@ export const getTokenBalancesByChain = async (
73
73
  await Promise.allSettled(
74
74
  Object.keys(tokensByChain).map(async (chainIdStr) => {
75
75
  const chainId = parseInt(chainIdStr)
76
- const baseTokenAddress = tokensByChain[chainId][0].address
76
+ const chain = await config.getChainById(chainId)
77
+ const tokenAddress = tokensByChain[chainId][0].address
77
78
  const provider = config
78
79
  .get()
79
- .providers.find((provider) => provider.isAddress(baseTokenAddress))
80
+ .providers.find((provider) =>
81
+ chain.chainType === ChainType.UTXO
82
+ ? provider.isAddress(walletAddress)
83
+ : provider.isAddress(tokenAddress)
84
+ )
80
85
  if (!provider) {
81
86
  throw new Error('SDK Token Provider not found.')
82
87
  }
@@ -1,4 +1,4 @@
1
1
  export * from '../errors/index.js'
2
2
  export * from './getTransactionMessage.js'
3
3
  export * from './median.js'
4
- export * from './utils.js'
4
+ export * from './waitForResult.js'
@@ -0,0 +1,20 @@
1
+ import { AddressZero, AlternativeAddressZero } from '../constants.js'
2
+
3
+ export const isZeroAddress = (address: string): boolean => {
4
+ if (address === AddressZero || address === AlternativeAddressZero) {
5
+ return true
6
+ }
7
+ return false
8
+ }
9
+
10
+ export const isNativeTokenAddress = (address: string): boolean => {
11
+ if (
12
+ address === AddressZero ||
13
+ address === AlternativeAddressZero ||
14
+ // CELO native token
15
+ address === '0x471ece3750da237f93b8e339c536989b8978a438'
16
+ ) {
17
+ return true
18
+ }
19
+ return false
20
+ }
@@ -0,0 +1,5 @@
1
+ export function sleep(ms: number): Promise<null> {
2
+ return new Promise((resolve) => {
3
+ setTimeout(() => resolve(null), ms)
4
+ })
5
+ }
@@ -0,0 +1,21 @@
1
+ import { sleep } from './sleep.js'
2
+
3
+ /**
4
+ * Repeatedly calls a given asynchronous function until it resolves with a value
5
+ * @param fn The function that should be repeated
6
+ * @param interval The timeout in milliseconds between retries, defaults to 5000
7
+ * @returns The result of the fn function
8
+ */
9
+ export const waitForResult = async <T>(
10
+ fn: () => Promise<T | undefined>,
11
+ interval = 5000
12
+ ): Promise<T> => {
13
+ let result: T | undefined
14
+ while (!result) {
15
+ result = await fn()
16
+ if (!result) {
17
+ await sleep(interval)
18
+ }
19
+ }
20
+ return result
21
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Map with a LRU (Least recently used) policy.
3
+ *
4
+ * https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU
5
+ */
6
+ export class LruMap<value = unknown> extends Map<string, value> {
7
+ maxSize: number
8
+
9
+ constructor(size: number) {
10
+ super()
11
+ this.maxSize = size
12
+ }
13
+
14
+ override set(key: string, value: value) {
15
+ super.set(key, value)
16
+ if (this.maxSize && this.size > this.maxSize) {
17
+ this.delete(this.keys().next().value!)
18
+ }
19
+ return this
20
+ }
21
+ }
22
+
23
+ /** @internal */
24
+ export const promiseCache = /*#__PURE__*/ new LruMap<Promise<any>>(8192)
25
+
26
+ type WithDedupeOptions = {
27
+ enabled?: boolean | undefined
28
+ id?: string | undefined
29
+ }
30
+
31
+ // eslint-disable-next-line jsdoc/require-param, jsdoc/require-returns
32
+ /** Deduplicates in-flight promises. */
33
+ export function withDedupe<data>(
34
+ fn: () => Promise<data>,
35
+ { enabled = true, id }: WithDedupeOptions
36
+ ): Promise<data> {
37
+ if (!enabled || !id) {
38
+ return fn()
39
+ }
40
+ if (promiseCache.get(id)) {
41
+ return promiseCache.get(id)!
42
+ }
43
+ const promise = fn().finally(() => promiseCache.delete(id))
44
+ promiseCache.set(id, promise)
45
+ return promise
46
+ }