@lifi/sdk 3.2.0-alpha.1 → 3.3.0-alpha.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 (345) hide show
  1. package/package.json +12 -4
  2. package/src/_cjs/core/EVM/EVMStepExecutor.js +3 -2
  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 +15 -7
  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/_esm/core/EVM/EVMStepExecutor.js +3 -2
  102. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -1
  103. package/src/_esm/core/EVM/getAllowance.js +1 -1
  104. package/src/_esm/core/EVM/getAllowance.js.map +1 -1
  105. package/src/_esm/core/EVM/getEVMBalance.js +1 -1
  106. package/src/_esm/core/EVM/getEVMBalance.js.map +1 -1
  107. package/src/_esm/core/EVM/setAllowance.js +1 -1
  108. package/src/_esm/core/EVM/setAllowance.js.map +1 -1
  109. package/src/_esm/core/Solana/Solana.js +2 -2
  110. package/src/_esm/core/Solana/Solana.js.map +1 -1
  111. package/src/_esm/core/Solana/SolanaStepExecutor.js +6 -9
  112. package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -1
  113. package/src/_esm/core/Solana/getSNSAddress.js +2 -2
  114. package/src/_esm/core/Solana/getSNSAddress.js.map +1 -1
  115. package/src/_esm/core/Solana/{isAddress.js → isSVMAddress.js} +2 -2
  116. package/src/_esm/core/Solana/isSVMAddress.js.map +1 -0
  117. package/src/_esm/core/UTXO/UTXO.js +36 -0
  118. package/src/_esm/core/UTXO/UTXO.js.map +1 -0
  119. package/src/_esm/core/UTXO/UTXOStepExecutor.js +243 -0
  120. package/src/_esm/core/UTXO/UTXOStepExecutor.js.map +1 -0
  121. package/src/_esm/core/UTXO/blockchairApi.js +167 -0
  122. package/src/_esm/core/UTXO/blockchairApi.js.map +1 -0
  123. package/src/_esm/core/UTXO/blockchairApiTypes.js +23 -0
  124. package/src/_esm/core/UTXO/blockchairApiTypes.js.map +1 -0
  125. package/src/_esm/core/UTXO/getUTXOAPIPublicClient.js +50 -0
  126. package/src/_esm/core/UTXO/getUTXOAPIPublicClient.js.map +1 -0
  127. package/src/_esm/core/UTXO/getUTXOBalance.js +26 -0
  128. package/src/_esm/core/UTXO/getUTXOBalance.js.map +1 -0
  129. package/src/_esm/core/UTXO/getUTXOPublicClient.js +38 -0
  130. package/src/_esm/core/UTXO/getUTXOPublicClient.js.map +1 -0
  131. package/src/_esm/core/UTXO/isUTXOAddress.js +128 -0
  132. package/src/_esm/core/UTXO/isUTXOAddress.js.map +1 -0
  133. package/src/_esm/core/UTXO/parseUTXOErrors.js +26 -0
  134. package/src/_esm/core/UTXO/parseUTXOErrors.js.map +1 -0
  135. package/src/_esm/core/UTXO/requestClient.js +59 -0
  136. package/src/_esm/core/UTXO/requestClient.js.map +1 -0
  137. package/src/_esm/core/UTXO/types.js +6 -0
  138. package/src/_esm/core/UTXO/types.js.map +1 -0
  139. package/src/_esm/core/UTXO/utxo-stack/actions/getBalance.js +9 -0
  140. package/src/_esm/core/UTXO/utxo-stack/actions/getBalance.js.map +1 -0
  141. package/src/_esm/core/UTXO/utxo-stack/actions/getBlockCount.js +9 -0
  142. package/src/_esm/core/UTXO/utxo-stack/actions/getBlockCount.js.map +1 -0
  143. package/src/_esm/core/UTXO/utxo-stack/actions/getUTXOTransaction.js +13 -0
  144. package/src/_esm/core/UTXO/utxo-stack/actions/getUTXOTransaction.js.map +1 -0
  145. package/src/_esm/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js +13 -0
  146. package/src/_esm/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js.map +1 -0
  147. package/src/_esm/core/UTXO/utxo-stack/actions/signPsbt.js +9 -0
  148. package/src/_esm/core/UTXO/utxo-stack/actions/signPsbt.js.map +1 -0
  149. package/src/_esm/core/UTXO/utxo-stack/clients/types.js +2 -0
  150. package/src/_esm/core/UTXO/utxo-stack/clients/types.js.map +1 -0
  151. package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js +7 -0
  152. package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js.map +1 -0
  153. package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOActions.js +11 -0
  154. package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOActions.js.map +1 -0
  155. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/ankr.js +18 -0
  156. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/ankr.js.map +1 -0
  157. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockchair.js +21 -0
  158. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockchair.js.map +1 -0
  159. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockcypher.js +18 -0
  160. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockcypher.js.map +1 -0
  161. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js +74 -0
  162. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js.map +1 -0
  163. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js +19 -0
  164. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js.map +1 -0
  165. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/mempool.js +14 -0
  166. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/mempool.js.map +1 -0
  167. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/types.js +2 -0
  168. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/types.js.map +1 -0
  169. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/utxo.js +53 -0
  170. package/src/_esm/core/UTXO/utxo-stack/transports/utxo/utxo.js.map +1 -0
  171. package/src/_esm/core/UTXO/utxo-stack/types/transaction.js +2 -0
  172. package/src/_esm/core/UTXO/utxo-stack/types/transaction.js.map +1 -0
  173. package/src/_esm/core/checkBalance.js +2 -2
  174. package/src/_esm/core/checkBalance.js.map +1 -1
  175. package/src/_esm/core/utils.js +0 -5
  176. package/src/_esm/core/utils.js.map +1 -1
  177. package/src/_esm/core/waitForReceivingTransaction.js +4 -4
  178. package/src/_esm/core/waitForReceivingTransaction.js.map +1 -1
  179. package/src/_esm/createConfig.js +3 -1
  180. package/src/_esm/createConfig.js.map +1 -1
  181. package/src/_esm/index.js +7 -3
  182. package/src/_esm/index.js.map +1 -1
  183. package/src/_esm/request.js +3 -3
  184. package/src/_esm/request.js.map +1 -1
  185. package/src/_esm/services/api.js +15 -7
  186. package/src/_esm/services/api.js.map +1 -1
  187. package/src/_esm/services/balance.js +9 -5
  188. package/src/_esm/services/balance.js.map +1 -1
  189. package/src/_esm/utils/index.js +1 -1
  190. package/src/_esm/utils/index.js.map +1 -1
  191. package/src/_esm/utils/isZeroAddress.js +17 -0
  192. package/src/_esm/utils/isZeroAddress.js.map +1 -0
  193. package/src/_esm/utils/sleep.js +6 -0
  194. package/src/_esm/utils/sleep.js.map +1 -0
  195. package/src/_esm/utils/waitForResult.js +18 -0
  196. package/src/_esm/utils/waitForResult.js.map +1 -0
  197. package/src/_esm/utils/withDedupe.js +40 -0
  198. package/src/_esm/utils/withDedupe.js.map +1 -0
  199. package/src/_esm/version.js +1 -1
  200. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -1
  201. package/src/_types/core/EVM/types.d.ts +1 -1
  202. package/src/_types/core/EVM/types.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 +1 -1
  271. package/src/_types/services/api.d.ts.map +1 -1
  272. package/src/_types/services/balance.d.ts +3 -3
  273. package/src/_types/services/balance.d.ts.map +1 -1
  274. package/src/_types/utils/index.d.ts +1 -1
  275. package/src/_types/utils/index.d.ts.map +1 -1
  276. package/src/_types/utils/isZeroAddress.d.ts +3 -0
  277. package/src/_types/utils/isZeroAddress.d.ts.map +1 -0
  278. package/src/_types/utils/sleep.d.ts +2 -0
  279. package/src/_types/utils/sleep.d.ts.map +1 -0
  280. package/src/_types/utils/waitForResult.d.ts +8 -0
  281. package/src/_types/utils/waitForResult.d.ts.map +1 -0
  282. package/src/_types/utils/withDedupe.d.ts +20 -0
  283. package/src/_types/utils/withDedupe.d.ts.map +1 -0
  284. package/src/_types/version.d.ts +1 -1
  285. package/src/core/EVM/EVMStepExecutor.ts +3 -5
  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/EVM/types.ts +1 -1
  290. package/src/core/Solana/Solana.ts +2 -2
  291. package/src/core/Solana/SolanaStepExecutor.ts +14 -17
  292. package/src/core/Solana/getSNSAddress.ts +2 -2
  293. package/src/core/Solana/{isAddress.ts → isSVMAddress.ts} +1 -1
  294. package/src/core/UTXO/UTXO.ts +43 -0
  295. package/src/core/UTXO/UTXOStepExecutor.ts +351 -0
  296. package/src/core/UTXO/blockchairApi.ts +273 -0
  297. package/src/core/UTXO/blockchairApiTypes.ts +253 -0
  298. package/src/core/UTXO/getUTXOAPIPublicClient.ts +71 -0
  299. package/src/core/UTXO/getUTXOBalance.ts +31 -0
  300. package/src/core/UTXO/getUTXOPublicClient.ts +60 -0
  301. package/src/core/UTXO/isUTXOAddress.ts +166 -0
  302. package/src/core/UTXO/parseUTXOErrors.ts +36 -0
  303. package/src/core/UTXO/requestClient.ts +84 -0
  304. package/src/core/UTXO/types.ts +15 -0
  305. package/src/core/UTXO/utxo-stack/actions/getBalance.ts +26 -0
  306. package/src/core/UTXO/utxo-stack/actions/getBlockCount.ts +20 -0
  307. package/src/core/UTXO/utxo-stack/actions/getUTXOTransaction.ts +30 -0
  308. package/src/core/UTXO/utxo-stack/actions/sendUTXOTransaction.ts +29 -0
  309. package/src/core/UTXO/utxo-stack/actions/signPsbt.ts +23 -0
  310. package/src/core/UTXO/utxo-stack/clients/types.ts +48 -0
  311. package/src/core/UTXO/utxo-stack/decorators/UTXOAPIActions.ts +21 -0
  312. package/src/core/UTXO/utxo-stack/decorators/UTXOActions.ts +37 -0
  313. package/src/core/UTXO/utxo-stack/transports/utxo/ankr.ts +30 -0
  314. package/src/core/UTXO/utxo-stack/transports/utxo/blockchair.ts +27 -0
  315. package/src/core/UTXO/utxo-stack/transports/utxo/blockcypher.ts +32 -0
  316. package/src/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.ts +122 -0
  317. package/src/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.ts +22 -0
  318. package/src/core/UTXO/utxo-stack/transports/utxo/mempool.ts +34 -0
  319. package/src/core/UTXO/utxo-stack/transports/utxo/types.ts +55 -0
  320. package/src/core/UTXO/utxo-stack/transports/utxo/utxo.ts +84 -0
  321. package/src/core/UTXO/utxo-stack/types/transaction.ts +43 -0
  322. package/src/core/checkBalance.ts +2 -2
  323. package/src/core/utils.ts +0 -6
  324. package/src/core/waitForReceivingTransaction.ts +5 -4
  325. package/src/createConfig.ts +3 -1
  326. package/src/index.ts +7 -3
  327. package/src/request.ts +3 -3
  328. package/src/services/api.ts +65 -44
  329. package/src/services/balance.ts +11 -6
  330. package/src/utils/index.ts +1 -1
  331. package/src/utils/isZeroAddress.ts +20 -0
  332. package/src/utils/sleep.ts +5 -0
  333. package/src/utils/waitForResult.ts +21 -0
  334. package/src/utils/withDedupe.ts +46 -0
  335. package/src/version.ts +1 -1
  336. package/src/_cjs/core/Solana/isAddress.js.map +0 -1
  337. package/src/_cjs/utils/utils.js.map +0 -1
  338. package/src/_esm/core/Solana/isAddress.js.map +0 -1
  339. package/src/_esm/utils/utils.js +0 -38
  340. package/src/_esm/utils/utils.js.map +0 -1
  341. package/src/_types/core/Solana/isAddress.d.ts +0 -2
  342. package/src/_types/core/Solana/isAddress.d.ts.map +0 -1
  343. package/src/_types/utils/utils.d.ts +0 -11
  344. package/src/_types/utils/utils.d.ts.map +0 -1
  345. 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
 
@@ -1,34 +1,37 @@
1
- import type {
2
- ChainId,
3
- ChainKey,
4
- ChainsRequest,
5
- ChainsResponse,
6
- ConnectionsRequest,
7
- ConnectionsResponse,
8
- ContractCallsQuoteRequest,
9
- ExtendedChain,
10
- GasRecommendationRequest,
11
- GasRecommendationResponse,
12
- GetStatusRequest,
13
- LiFiStep,
14
- QuoteRequest,
15
- RequestOptions,
16
- RoutesRequest,
17
- RoutesResponse,
18
- StatusResponse,
19
- Token,
20
- TokensRequest,
21
- TokensResponse,
22
- ToolsRequest,
23
- ToolsResponse,
24
- TransactionAnalyticsRequest,
25
- TransactionAnalyticsResponse,
1
+ import {
2
+ isContractCallsRequestWithFromAmount,
3
+ isContractCallsRequestWithToAmount,
4
+ type ChainId,
5
+ type ChainKey,
6
+ type ChainsRequest,
7
+ type ChainsResponse,
8
+ type ConnectionsRequest,
9
+ type ConnectionsResponse,
10
+ type ContractCallsQuoteRequest,
11
+ type ExtendedChain,
12
+ type GasRecommendationRequest,
13
+ type GasRecommendationResponse,
14
+ type GetStatusRequest,
15
+ type LiFiStep,
16
+ type QuoteRequest,
17
+ type RequestOptions,
18
+ type RoutesRequest,
19
+ type RoutesResponse,
20
+ type StatusResponse,
21
+ type Token,
22
+ type TokensRequest,
23
+ type TokensResponse,
24
+ type ToolsRequest,
25
+ type ToolsResponse,
26
+ type TransactionAnalyticsRequest,
27
+ type TransactionAnalyticsResponse,
26
28
  } from '@lifi/types'
27
29
  import { config } from '../config.js'
28
- import { request } from '../request.js'
29
- import { isRoutesRequest, isStep } from '../typeguards.js'
30
30
  import { ValidationError } from '../errors/errors.js'
31
31
  import { SDKError } from '../errors/SDKError.js'
32
+ import { request } from '../request.js'
33
+ import { isRoutesRequest, isStep } from '../typeguards.js'
34
+ import { withDedupe } from '../utils/withDedupe.js'
32
35
  /**
33
36
  * Fetch information about a Token
34
37
  * @param chain - Id or key of the chain that contains the token
@@ -139,7 +142,6 @@ export const getContractCallsQuote = async (
139
142
  'fromAddress',
140
143
  'toChain',
141
144
  'toToken',
142
- 'toAmount',
143
145
  'contractCalls',
144
146
  ]
145
147
  requiredParameters.forEach((requiredParameter) => {
@@ -151,6 +153,16 @@ export const getContractCallsQuote = async (
151
153
  )
152
154
  }
153
155
  })
156
+ if (
157
+ !isContractCallsRequestWithFromAmount(params) ||
158
+ !isContractCallsRequestWithToAmount(params)
159
+ ) {
160
+ throw new SDKError(
161
+ new ValidationError(
162
+ `Required parameter "fromAmount" or "toAmount" is missing.`
163
+ )
164
+ )
165
+ }
154
166
  const _config = config.get()
155
167
  // apply defaults
156
168
  // option.order is not used in this endpoint
@@ -220,14 +232,18 @@ export const getChains = async (
220
232
  delete params[key as keyof ChainsRequest]
221
233
  )
222
234
  }
223
-
224
- const response = await request<ChainsResponse>(
225
- `${config.get().apiUrl}/chains?${new URLSearchParams(
226
- params as Record<string, string>
227
- )}`,
228
- {
229
- signal: options?.signal,
230
- }
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}` }
231
247
  )
232
248
  return response.chains
233
249
  }
@@ -338,15 +354,20 @@ export const getTokens = async (
338
354
  delete params[key as keyof TokensRequest]
339
355
  )
340
356
  }
341
-
342
- return await request<TokensResponse>(
343
- `${config.get().apiUrl}/tokens?${new URLSearchParams(
344
- params as Record<string, string>
345
- )}`,
346
- {
347
- signal: options?.signal,
348
- }
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}` }
349
369
  )
370
+ return response
350
371
  }
351
372
 
352
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
+ }