@ledgerhq/cryptoassets 13.31.0-nightly.6 → 13.31.0-nightly.8

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 (284) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +1 -0
  3. package/CHANGELOG.md +27 -0
  4. package/jest.config.ts +1 -0
  5. package/lib/api-asset-converter.d.ts.map +1 -1
  6. package/lib/api-asset-converter.js +31 -1
  7. package/lib/api-asset-converter.js.map +1 -1
  8. package/lib/hooks.d.ts +27 -0
  9. package/lib/hooks.d.ts.map +1 -0
  10. package/lib/hooks.js +115 -0
  11. package/lib/hooks.js.map +1 -0
  12. package/lib/index.d.ts +0 -1
  13. package/lib/index.d.ts.map +1 -1
  14. package/lib/index.js +0 -1
  15. package/lib/index.js.map +1 -1
  16. package/lib-es/api-asset-converter.d.ts.map +1 -1
  17. package/lib-es/api-asset-converter.js +31 -1
  18. package/lib-es/api-asset-converter.js.map +1 -1
  19. package/lib-es/hooks.d.ts +27 -0
  20. package/lib-es/hooks.d.ts.map +1 -0
  21. package/lib-es/hooks.js +111 -0
  22. package/lib-es/hooks.js.map +1 -0
  23. package/lib-es/index.d.ts +0 -1
  24. package/lib-es/index.d.ts.map +1 -1
  25. package/lib-es/index.js +0 -1
  26. package/lib-es/index.js.map +1 -1
  27. package/package.json +17 -4
  28. package/src/api-asset-converter.test.ts +22 -5
  29. package/src/api-asset-converter.ts +32 -1
  30. package/src/hooks.test.ts +411 -0
  31. package/src/hooks.ts +147 -0
  32. package/src/index.ts +0 -1
  33. package/lib/api-asset-converter.test.d.ts +0 -2
  34. package/lib/api-asset-converter.test.d.ts.map +0 -1
  35. package/lib/api-asset-converter.test.js +0 -240
  36. package/lib/api-asset-converter.test.js.map +0 -1
  37. package/lib/api-token-converter.test.d.ts +0 -2
  38. package/lib/api-token-converter.test.d.ts.map +0 -1
  39. package/lib/api-token-converter.test.js +0 -316
  40. package/lib/api-token-converter.test.js.map +0 -1
  41. package/lib/backtest-tokenTypes.test.d.ts +0 -2
  42. package/lib/backtest-tokenTypes.test.d.ts.map +0 -1
  43. package/lib/backtest-tokenTypes.test.js +0 -31
  44. package/lib/backtest-tokenTypes.test.js.map +0 -1
  45. package/lib/crypto-assets-importer/fetch/fetch.test.d.ts +0 -2
  46. package/lib/crypto-assets-importer/fetch/fetch.test.d.ts.map +0 -1
  47. package/lib/crypto-assets-importer/fetch/fetch.test.js +0 -28
  48. package/lib/crypto-assets-importer/fetch/fetch.test.js.map +0 -1
  49. package/lib/crypto-assets-importer/importers/apt/aptos.test.d.ts +0 -2
  50. package/lib/crypto-assets-importer/importers/apt/aptos.test.d.ts.map +0 -1
  51. package/lib/crypto-assets-importer/importers/apt/aptos.test.js +0 -69
  52. package/lib/crypto-assets-importer/importers/apt/aptos.test.js.map +0 -1
  53. package/lib/crypto-assets-importer/importers/asa/asa.test.d.ts +0 -2
  54. package/lib/crypto-assets-importer/importers/asa/asa.test.d.ts.map +0 -1
  55. package/lib/crypto-assets-importer/importers/asa/asa.test.js +0 -63
  56. package/lib/crypto-assets-importer/importers/asa/asa.test.js.map +0 -1
  57. package/lib/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.d.ts +0 -2
  58. package/lib/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.d.ts.map +0 -1
  59. package/lib/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.js +0 -74
  60. package/lib/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.js.map +0 -1
  61. package/lib/crypto-assets-importer/importers/eip712/eip712.test.d.ts +0 -2
  62. package/lib/crypto-assets-importer/importers/eip712/eip712.test.d.ts.map +0 -1
  63. package/lib/crypto-assets-importer/importers/eip712/eip712.test.js +0 -45
  64. package/lib/crypto-assets-importer/importers/eip712/eip712.test.js.map +0 -1
  65. package/lib/crypto-assets-importer/importers/esdt/esdt.test.d.ts +0 -2
  66. package/lib/crypto-assets-importer/importers/esdt/esdt.test.d.ts.map +0 -1
  67. package/lib/crypto-assets-importer/importers/esdt/esdt.test.js +0 -65
  68. package/lib/crypto-assets-importer/importers/esdt/esdt.test.js.map +0 -1
  69. package/lib/crypto-assets-importer/importers/evm/evm.test.d.ts +0 -2
  70. package/lib/crypto-assets-importer/importers/evm/evm.test.d.ts.map +0 -1
  71. package/lib/crypto-assets-importer/importers/evm/evm.test.js +0 -62
  72. package/lib/crypto-assets-importer/importers/evm/evm.test.js.map +0 -1
  73. package/lib/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.d.ts +0 -2
  74. package/lib/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.d.ts.map +0 -1
  75. package/lib/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.js +0 -66
  76. package/lib/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.js.map +0 -1
  77. package/lib/crypto-assets-importer/importers/hedera/hedera.test.d.ts +0 -2
  78. package/lib/crypto-assets-importer/importers/hedera/hedera.test.d.ts.map +0 -1
  79. package/lib/crypto-assets-importer/importers/hedera/hedera.test.js +0 -64
  80. package/lib/crypto-assets-importer/importers/hedera/hedera.test.js.map +0 -1
  81. package/lib/crypto-assets-importer/importers/spl/spl.test.d.ts +0 -2
  82. package/lib/crypto-assets-importer/importers/spl/spl.test.d.ts.map +0 -1
  83. package/lib/crypto-assets-importer/importers/spl/spl.test.js +0 -73
  84. package/lib/crypto-assets-importer/importers/spl/spl.test.js.map +0 -1
  85. package/lib/crypto-assets-importer/importers/stellar/stellar.test.d.ts +0 -2
  86. package/lib/crypto-assets-importer/importers/stellar/stellar.test.d.ts.map +0 -1
  87. package/lib/crypto-assets-importer/importers/stellar/stellar.test.js +0 -56
  88. package/lib/crypto-assets-importer/importers/stellar/stellar.test.js.map +0 -1
  89. package/lib/crypto-assets-importer/importers/sui/sui.test.d.ts +0 -2
  90. package/lib/crypto-assets-importer/importers/sui/sui.test.d.ts.map +0 -1
  91. package/lib/crypto-assets-importer/importers/sui/sui.test.js +0 -74
  92. package/lib/crypto-assets-importer/importers/sui/sui.test.js.map +0 -1
  93. package/lib/crypto-assets-importer/importers/ton/ton-jetton.test.d.ts +0 -2
  94. package/lib/crypto-assets-importer/importers/ton/ton-jetton.test.d.ts.map +0 -1
  95. package/lib/crypto-assets-importer/importers/ton/ton-jetton.test.js +0 -59
  96. package/lib/crypto-assets-importer/importers/ton/ton-jetton.test.js.map +0 -1
  97. package/lib/crypto-assets-importer/importers/trc20/trc20.test.d.ts +0 -2
  98. package/lib/crypto-assets-importer/importers/trc20/trc20.test.d.ts.map +0 -1
  99. package/lib/crypto-assets-importer/importers/trc20/trc20.test.js +0 -71
  100. package/lib/crypto-assets-importer/importers/trc20/trc20.test.js.map +0 -1
  101. package/lib/crypto-assets-importer/importers/vip180/vip180.test.d.ts +0 -2
  102. package/lib/crypto-assets-importer/importers/vip180/vip180.test.d.ts.map +0 -1
  103. package/lib/crypto-assets-importer/importers/vip180/vip180.test.js +0 -64
  104. package/lib/crypto-assets-importer/importers/vip180/vip180.test.js.map +0 -1
  105. package/lib/currencies.test.d.ts +0 -2
  106. package/lib/currencies.test.d.ts.map +0 -1
  107. package/lib/currencies.test.js +0 -230
  108. package/lib/currencies.test.js.map +0 -1
  109. package/lib/data/exchange/bep20-hash.json +0 -1
  110. package/lib/data/exchange/bep20.d.ts +0 -5
  111. package/lib/data/exchange/bep20.d.ts.map +0 -1
  112. package/lib/data/exchange/bep20.js +0 -11
  113. package/lib/data/exchange/bep20.js.map +0 -1
  114. package/lib/data/exchange/bep20.json +0 -1
  115. package/lib/data/exchange/coin-hash.json +0 -1
  116. package/lib/data/exchange/coins.d.ts +0 -5
  117. package/lib/data/exchange/coins.d.ts.map +0 -1
  118. package/lib/data/exchange/coins.js +0 -11
  119. package/lib/data/exchange/coins.js.map +0 -1
  120. package/lib/data/exchange/coins.json +0 -1
  121. package/lib/data/exchange/erc20-hash.json +0 -1
  122. package/lib/data/exchange/erc20.d.ts +0 -5
  123. package/lib/data/exchange/erc20.d.ts.map +0 -1
  124. package/lib/data/exchange/erc20.js +0 -11
  125. package/lib/data/exchange/erc20.js.map +0 -1
  126. package/lib/data/exchange/erc20.json +0 -1
  127. package/lib/data/exchange/polygon-erc20-hash.json +0 -1
  128. package/lib/data/exchange/polygon-erc20.d.ts +0 -5
  129. package/lib/data/exchange/polygon-erc20.d.ts.map +0 -1
  130. package/lib/data/exchange/polygon-erc20.js +0 -11
  131. package/lib/data/exchange/polygon-erc20.js.map +0 -1
  132. package/lib/data/exchange/polygon-erc20.json +0 -1
  133. package/lib/data/exchange/trc20-hash.json +0 -1
  134. package/lib/data/exchange/trc20.d.ts +0 -5
  135. package/lib/data/exchange/trc20.d.ts.map +0 -1
  136. package/lib/data/exchange/trc20.js +0 -11
  137. package/lib/data/exchange/trc20.js.map +0 -1
  138. package/lib/data/exchange/trc20.json +0 -1
  139. package/lib/exchange.d.ts +0 -8
  140. package/lib/exchange.d.ts.map +0 -1
  141. package/lib/exchange.js +0 -25
  142. package/lib/exchange.js.map +0 -1
  143. package/lib/legacy/legacy.test.d.ts +0 -2
  144. package/lib/legacy/legacy.test.d.ts.map +0 -1
  145. package/lib/legacy/legacy.test.js +0 -466
  146. package/lib/legacy/legacy.test.js.map +0 -1
  147. package/lib/tokens.test.d.ts +0 -2
  148. package/lib/tokens.test.d.ts.map +0 -1
  149. package/lib/tokens.test.js +0 -118
  150. package/lib/tokens.test.js.map +0 -1
  151. package/lib-es/api-asset-converter.test.d.ts +0 -2
  152. package/lib-es/api-asset-converter.test.d.ts.map +0 -1
  153. package/lib-es/api-asset-converter.test.js +0 -238
  154. package/lib-es/api-asset-converter.test.js.map +0 -1
  155. package/lib-es/api-token-converter.test.d.ts +0 -2
  156. package/lib-es/api-token-converter.test.d.ts.map +0 -1
  157. package/lib-es/api-token-converter.test.js +0 -314
  158. package/lib-es/api-token-converter.test.js.map +0 -1
  159. package/lib-es/backtest-tokenTypes.test.d.ts +0 -2
  160. package/lib-es/backtest-tokenTypes.test.d.ts.map +0 -1
  161. package/lib-es/backtest-tokenTypes.test.js +0 -29
  162. package/lib-es/backtest-tokenTypes.test.js.map +0 -1
  163. package/lib-es/crypto-assets-importer/fetch/fetch.test.d.ts +0 -2
  164. package/lib-es/crypto-assets-importer/fetch/fetch.test.d.ts.map +0 -1
  165. package/lib-es/crypto-assets-importer/fetch/fetch.test.js +0 -23
  166. package/lib-es/crypto-assets-importer/fetch/fetch.test.js.map +0 -1
  167. package/lib-es/crypto-assets-importer/importers/apt/aptos.test.d.ts +0 -2
  168. package/lib-es/crypto-assets-importer/importers/apt/aptos.test.d.ts.map +0 -1
  169. package/lib-es/crypto-assets-importer/importers/apt/aptos.test.js +0 -64
  170. package/lib-es/crypto-assets-importer/importers/apt/aptos.test.js.map +0 -1
  171. package/lib-es/crypto-assets-importer/importers/asa/asa.test.d.ts +0 -2
  172. package/lib-es/crypto-assets-importer/importers/asa/asa.test.d.ts.map +0 -1
  173. package/lib-es/crypto-assets-importer/importers/asa/asa.test.js +0 -58
  174. package/lib-es/crypto-assets-importer/importers/asa/asa.test.js.map +0 -1
  175. package/lib-es/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.d.ts +0 -2
  176. package/lib-es/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.d.ts.map +0 -1
  177. package/lib-es/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.js +0 -69
  178. package/lib-es/crypto-assets-importer/importers/cardanoNative/cardanoNative.test.js.map +0 -1
  179. package/lib-es/crypto-assets-importer/importers/eip712/eip712.test.d.ts +0 -2
  180. package/lib-es/crypto-assets-importer/importers/eip712/eip712.test.d.ts.map +0 -1
  181. package/lib-es/crypto-assets-importer/importers/eip712/eip712.test.js +0 -40
  182. package/lib-es/crypto-assets-importer/importers/eip712/eip712.test.js.map +0 -1
  183. package/lib-es/crypto-assets-importer/importers/esdt/esdt.test.d.ts +0 -2
  184. package/lib-es/crypto-assets-importer/importers/esdt/esdt.test.d.ts.map +0 -1
  185. package/lib-es/crypto-assets-importer/importers/esdt/esdt.test.js +0 -60
  186. package/lib-es/crypto-assets-importer/importers/esdt/esdt.test.js.map +0 -1
  187. package/lib-es/crypto-assets-importer/importers/evm/evm.test.d.ts +0 -2
  188. package/lib-es/crypto-assets-importer/importers/evm/evm.test.d.ts.map +0 -1
  189. package/lib-es/crypto-assets-importer/importers/evm/evm.test.js +0 -57
  190. package/lib-es/crypto-assets-importer/importers/evm/evm.test.js.map +0 -1
  191. package/lib-es/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.d.ts +0 -2
  192. package/lib-es/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.d.ts.map +0 -1
  193. package/lib-es/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.js +0 -61
  194. package/lib-es/crypto-assets-importer/importers/filecoin/filecoin-erc20.test.js.map +0 -1
  195. package/lib-es/crypto-assets-importer/importers/hedera/hedera.test.d.ts +0 -2
  196. package/lib-es/crypto-assets-importer/importers/hedera/hedera.test.d.ts.map +0 -1
  197. package/lib-es/crypto-assets-importer/importers/hedera/hedera.test.js +0 -59
  198. package/lib-es/crypto-assets-importer/importers/hedera/hedera.test.js.map +0 -1
  199. package/lib-es/crypto-assets-importer/importers/spl/spl.test.d.ts +0 -2
  200. package/lib-es/crypto-assets-importer/importers/spl/spl.test.d.ts.map +0 -1
  201. package/lib-es/crypto-assets-importer/importers/spl/spl.test.js +0 -68
  202. package/lib-es/crypto-assets-importer/importers/spl/spl.test.js.map +0 -1
  203. package/lib-es/crypto-assets-importer/importers/stellar/stellar.test.d.ts +0 -2
  204. package/lib-es/crypto-assets-importer/importers/stellar/stellar.test.d.ts.map +0 -1
  205. package/lib-es/crypto-assets-importer/importers/stellar/stellar.test.js +0 -51
  206. package/lib-es/crypto-assets-importer/importers/stellar/stellar.test.js.map +0 -1
  207. package/lib-es/crypto-assets-importer/importers/sui/sui.test.d.ts +0 -2
  208. package/lib-es/crypto-assets-importer/importers/sui/sui.test.d.ts.map +0 -1
  209. package/lib-es/crypto-assets-importer/importers/sui/sui.test.js +0 -69
  210. package/lib-es/crypto-assets-importer/importers/sui/sui.test.js.map +0 -1
  211. package/lib-es/crypto-assets-importer/importers/ton/ton-jetton.test.d.ts +0 -2
  212. package/lib-es/crypto-assets-importer/importers/ton/ton-jetton.test.d.ts.map +0 -1
  213. package/lib-es/crypto-assets-importer/importers/ton/ton-jetton.test.js +0 -54
  214. package/lib-es/crypto-assets-importer/importers/ton/ton-jetton.test.js.map +0 -1
  215. package/lib-es/crypto-assets-importer/importers/trc20/trc20.test.d.ts +0 -2
  216. package/lib-es/crypto-assets-importer/importers/trc20/trc20.test.d.ts.map +0 -1
  217. package/lib-es/crypto-assets-importer/importers/trc20/trc20.test.js +0 -66
  218. package/lib-es/crypto-assets-importer/importers/trc20/trc20.test.js.map +0 -1
  219. package/lib-es/crypto-assets-importer/importers/vip180/vip180.test.d.ts +0 -2
  220. package/lib-es/crypto-assets-importer/importers/vip180/vip180.test.d.ts.map +0 -1
  221. package/lib-es/crypto-assets-importer/importers/vip180/vip180.test.js +0 -59
  222. package/lib-es/crypto-assets-importer/importers/vip180/vip180.test.js.map +0 -1
  223. package/lib-es/currencies.test.d.ts +0 -2
  224. package/lib-es/currencies.test.d.ts.map +0 -1
  225. package/lib-es/currencies.test.js +0 -228
  226. package/lib-es/currencies.test.js.map +0 -1
  227. package/lib-es/data/exchange/bep20-hash.json +0 -1
  228. package/lib-es/data/exchange/bep20.d.ts +0 -5
  229. package/lib-es/data/exchange/bep20.d.ts.map +0 -1
  230. package/lib-es/data/exchange/bep20.js +0 -4
  231. package/lib-es/data/exchange/bep20.js.map +0 -1
  232. package/lib-es/data/exchange/bep20.json +0 -1
  233. package/lib-es/data/exchange/coin-hash.json +0 -1
  234. package/lib-es/data/exchange/coins.d.ts +0 -5
  235. package/lib-es/data/exchange/coins.d.ts.map +0 -1
  236. package/lib-es/data/exchange/coins.js +0 -4
  237. package/lib-es/data/exchange/coins.js.map +0 -1
  238. package/lib-es/data/exchange/coins.json +0 -1
  239. package/lib-es/data/exchange/erc20-hash.json +0 -1
  240. package/lib-es/data/exchange/erc20.d.ts +0 -5
  241. package/lib-es/data/exchange/erc20.d.ts.map +0 -1
  242. package/lib-es/data/exchange/erc20.js +0 -4
  243. package/lib-es/data/exchange/erc20.js.map +0 -1
  244. package/lib-es/data/exchange/erc20.json +0 -1
  245. package/lib-es/data/exchange/polygon-erc20-hash.json +0 -1
  246. package/lib-es/data/exchange/polygon-erc20.d.ts +0 -5
  247. package/lib-es/data/exchange/polygon-erc20.d.ts.map +0 -1
  248. package/lib-es/data/exchange/polygon-erc20.js +0 -4
  249. package/lib-es/data/exchange/polygon-erc20.js.map +0 -1
  250. package/lib-es/data/exchange/polygon-erc20.json +0 -1
  251. package/lib-es/data/exchange/trc20-hash.json +0 -1
  252. package/lib-es/data/exchange/trc20.d.ts +0 -5
  253. package/lib-es/data/exchange/trc20.d.ts.map +0 -1
  254. package/lib-es/data/exchange/trc20.js +0 -4
  255. package/lib-es/data/exchange/trc20.js.map +0 -1
  256. package/lib-es/data/exchange/trc20.json +0 -1
  257. package/lib-es/exchange.d.ts +0 -8
  258. package/lib-es/exchange.d.ts.map +0 -1
  259. package/lib-es/exchange.js +0 -18
  260. package/lib-es/exchange.js.map +0 -1
  261. package/lib-es/legacy/legacy.test.d.ts +0 -2
  262. package/lib-es/legacy/legacy.test.d.ts.map +0 -1
  263. package/lib-es/legacy/legacy.test.js +0 -464
  264. package/lib-es/legacy/legacy.test.js.map +0 -1
  265. package/lib-es/tokens.test.d.ts +0 -2
  266. package/lib-es/tokens.test.d.ts.map +0 -1
  267. package/lib-es/tokens.test.js +0 -116
  268. package/lib-es/tokens.test.js.map +0 -1
  269. package/src/data/exchange/bep20-hash.json +0 -1
  270. package/src/data/exchange/bep20.json +0 -1
  271. package/src/data/exchange/bep20.ts +0 -7
  272. package/src/data/exchange/coin-hash.json +0 -1
  273. package/src/data/exchange/coins.json +0 -1
  274. package/src/data/exchange/coins.ts +0 -7
  275. package/src/data/exchange/erc20-hash.json +0 -1
  276. package/src/data/exchange/erc20.json +0 -1
  277. package/src/data/exchange/erc20.ts +0 -7
  278. package/src/data/exchange/polygon-erc20-hash.json +0 -1
  279. package/src/data/exchange/polygon-erc20.json +0 -1
  280. package/src/data/exchange/polygon-erc20.ts +0 -7
  281. package/src/data/exchange/trc20-hash.json +0 -1
  282. package/src/data/exchange/trc20.json +0 -1
  283. package/src/data/exchange/trc20.ts +0 -7
  284. package/src/exchange.ts +0 -29
@@ -29,7 +29,7 @@ describe("convertApiAsset", () => {
29
29
  expect(result?.ticker).toBe("BTC");
30
30
  });
31
31
 
32
- it("should return undefined for unknown crypto currency", () => {
32
+ it("should create dynamic crypto currency for unknown crypto currency", () => {
33
33
  const apiCrypto: ApiCryptoCurrency = {
34
34
  type: "crypto_currency",
35
35
  id: "nonexistent_coin",
@@ -40,7 +40,20 @@ describe("convertApiAsset", () => {
40
40
 
41
41
  const result = convertApiAsset(apiCrypto);
42
42
 
43
- expect(result).toBeUndefined();
43
+ expect(result).toBeDefined();
44
+ expect(result?.type).toBe("CryptoCurrency");
45
+ expect(result?.id).toBe("nonexistent_coin");
46
+ expect(result?.name).toBe("Nonexistent Coin");
47
+ expect(result?.ticker).toBe("NONE");
48
+ // Check default/placeholder values
49
+ if (result?.type === "CryptoCurrency") {
50
+ expect(result.managerAppName).toBe("Nonexistent Coin");
51
+ expect(result.coinType).toBe(0);
52
+ expect(result.scheme).toBe("nonexistent_coin");
53
+ expect(result.color).toBe("#999999");
54
+ expect(result.family).toBe("nonexistent_coin");
55
+ expect(result.explorerViews).toEqual([]);
56
+ }
44
57
  });
45
58
 
46
59
  it("should handle crypto currency with all optional fields", () => {
@@ -193,7 +206,7 @@ describe("convertApiAssets", () => {
193
206
  expect(result.eth?.id).toBe("ethereum");
194
207
  });
195
208
 
196
- it("should skip assets that fail conversion", () => {
209
+ it("should convert known crypto and create dynamic crypto, but skip unsupported tokens", () => {
197
210
  const apiAssets: Record<string, ApiAsset> = {
198
211
  valid: {
199
212
  type: "crypto_currency",
@@ -222,9 +235,13 @@ describe("convertApiAssets", () => {
222
235
 
223
236
  const result = convertApiAssets(apiAssets);
224
237
 
225
- expect(Object.keys(result)).toHaveLength(1);
238
+ // Now converts both known and unknown cryptocurrencies, but skips unsupported tokens
239
+ expect(Object.keys(result)).toHaveLength(2);
226
240
  expect(result.valid).toBeDefined();
227
- expect(result.invalid_crypto).toBeUndefined();
241
+ expect(result.valid?.id).toBe("bitcoin");
242
+ expect(result.invalid_crypto).toBeDefined();
243
+ expect(result.invalid_crypto?.type).toBe("CryptoCurrency");
244
+ expect(result.invalid_crypto?.id).toBe("nonexistent");
228
245
  expect(result.invalid_token).toBeUndefined();
229
246
  });
230
247
 
@@ -47,7 +47,38 @@ export function convertApiAsset(apiAsset: ApiAsset): CryptoOrTokenCurrency | und
47
47
  }
48
48
 
49
49
  function convertApiCryptoCurrency(apiCrypto: ApiCryptoCurrency): CryptoOrTokenCurrency | undefined {
50
- return findCryptoCurrencyById(apiCrypto.id);
50
+ const localCrypto = findCryptoCurrencyById(apiCrypto.id);
51
+ if (localCrypto) {
52
+ return localCrypto;
53
+ }
54
+
55
+ // Create a dynamic CryptoCurrency object with placeholders for fields we can't infer
56
+ return {
57
+ type: "CryptoCurrency" as const,
58
+ id: apiCrypto.id,
59
+ name: apiCrypto.name,
60
+ ticker: apiCrypto.ticker,
61
+ units: apiCrypto.units.map(unit => ({
62
+ name: unit.name,
63
+ code: unit.code,
64
+ magnitude: unit.magnitude,
65
+ })),
66
+ // Required fields with placeholders when not available in API
67
+ managerAppName: apiCrypto.name, // Placeholder: use name as fallback
68
+ coinType: apiCrypto.coinType ?? 0, // Placeholder: default to 0 if not provided
69
+ scheme: apiCrypto.id.toLowerCase(), // Placeholder: use lowercase ticker
70
+ color: "#999999", // Placeholder: default gray color
71
+ family: apiCrypto.family ?? apiCrypto.id, // Placeholder: default to "unknown" if not provided
72
+ explorerViews: [], // Placeholder: empty array
73
+ // Optional fields from API
74
+ symbol: apiCrypto.symbol,
75
+ disableCountervalue: apiCrypto.disableCountervalue,
76
+ supportsSegwit: apiCrypto.hasSegwit,
77
+ // Add ethereumLikeInfo if chainId is present
78
+ ...(apiCrypto.chainId && {
79
+ ethereumLikeInfo: { chainId: parseInt(apiCrypto.chainId, 10) },
80
+ }),
81
+ };
51
82
  }
52
83
 
53
84
  function convertApiTokenCurrency(apiToken: ApiTokenCurrency): CryptoOrTokenCurrency | undefined {
@@ -0,0 +1,411 @@
1
+ import { renderHook, waitFor } from "@testing-library/react";
2
+ import { createCryptoAssetsHooks } from "./hooks";
3
+ import type { TokenCurrency, CryptoCurrency } from "@ledgerhq/types-cryptoassets";
4
+
5
+ // Mock the legacy store
6
+ jest.mock("./legacy/legacy-store", () => ({
7
+ legacyCryptoAssetsStore: {
8
+ findTokenById: jest.fn(),
9
+ findTokenByAddressInCurrency: jest.fn(),
10
+ },
11
+ }));
12
+
13
+ // Mock the currencies module
14
+ jest.mock("./currencies", () => ({
15
+ findCryptoCurrencyById: jest.fn(),
16
+ }));
17
+
18
+ import { legacyCryptoAssetsStore } from "./legacy/legacy-store";
19
+ import { findCryptoCurrencyById } from "./currencies";
20
+
21
+ // Mock crypto currency data
22
+ const mockCryptoCurrency: CryptoCurrency = {
23
+ type: "CryptoCurrency",
24
+ id: "bitcoin",
25
+ name: "Bitcoin",
26
+ ticker: "BTC",
27
+ units: [
28
+ {
29
+ code: "BTC",
30
+ name: "Bitcoin",
31
+ magnitude: 8,
32
+ },
33
+ ],
34
+ family: "bitcoin",
35
+ managerAppName: "Bitcoin",
36
+ coinType: 0,
37
+ scheme: "bitcoin",
38
+ color: "#FF9900",
39
+ explorerViews: [],
40
+ };
41
+
42
+ // Mock token data
43
+ const mockToken: TokenCurrency = {
44
+ type: "TokenCurrency",
45
+ id: "ethereum/erc20/usd_coin",
46
+ ledgerSignature: "3045022100...",
47
+ contractAddress: "0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4",
48
+ parentCurrency: {
49
+ type: "CryptoCurrency",
50
+ id: "ethereum",
51
+ name: "Ethereum",
52
+ ticker: "ETH",
53
+ units: [],
54
+ family: "ethereum",
55
+ managerAppName: "Ethereum",
56
+ coinType: 60,
57
+ scheme: "ethereum",
58
+ color: "#627EEA",
59
+ explorerViews: [],
60
+ },
61
+ tokenType: "erc20",
62
+ name: "USD Coin",
63
+ ticker: "USDC",
64
+ units: [
65
+ {
66
+ code: "USDC",
67
+ name: "USD Coin",
68
+ magnitude: 6,
69
+ },
70
+ ],
71
+ };
72
+
73
+ // Setup mock implementations
74
+ const mockFindTokenById = legacyCryptoAssetsStore.findTokenById as jest.MockedFunction<
75
+ typeof legacyCryptoAssetsStore.findTokenById
76
+ >;
77
+ const mockFindTokenByAddressInCurrency =
78
+ legacyCryptoAssetsStore.findTokenByAddressInCurrency as jest.MockedFunction<
79
+ typeof legacyCryptoAssetsStore.findTokenByAddressInCurrency
80
+ >;
81
+ const mockFindCryptoCurrencyById = findCryptoCurrencyById as jest.MockedFunction<
82
+ typeof findCryptoCurrencyById
83
+ >;
84
+
85
+ beforeEach(() => {
86
+ jest.clearAllMocks();
87
+
88
+ // Default mock implementations
89
+ mockFindTokenById.mockImplementation((id: string) => {
90
+ if (id === "ethereum/erc20/usd_coin") {
91
+ return mockToken;
92
+ }
93
+ return undefined;
94
+ });
95
+
96
+ mockFindTokenByAddressInCurrency.mockImplementation((address: string, currencyId: string) => {
97
+ if (address === "0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4" && currencyId === "ethereum") {
98
+ return mockToken;
99
+ }
100
+ return undefined;
101
+ });
102
+
103
+ mockFindCryptoCurrencyById.mockImplementation((id: string) => {
104
+ if (id === "bitcoin") {
105
+ return mockCryptoCurrency;
106
+ }
107
+ return undefined;
108
+ });
109
+ });
110
+
111
+ describe("Hooks Factory", () => {
112
+ it("should return legacy hooks when useCALBackend is false", () => {
113
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
114
+
115
+ expect(hooks.useTokenById).toBeDefined();
116
+ expect(hooks.useTokenByAddressInCurrency).toBeDefined();
117
+ expect(hooks.useCurrencyById).toBeDefined();
118
+ expect(hooks.useTokenById).toBeInstanceOf(Function);
119
+ expect(hooks.useTokenByAddressInCurrency).toBeInstanceOf(Function);
120
+ expect(hooks.useCurrencyById).toBeInstanceOf(Function);
121
+ });
122
+
123
+ it("should throw an error when useCALBackend is true", () => {
124
+ // @ts-expect-error useCALBackend is not supported yet
125
+ expect(() => createCryptoAssetsHooks({ useCALBackend: true })).toThrow();
126
+ });
127
+ });
128
+
129
+ describe("Legacy hooks", () => {
130
+ describe("useTokenById", () => {
131
+ it("should start with loading state and then return token", async () => {
132
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
133
+ const { result } = renderHook(() => hooks.useTokenById("ethereum/erc20/usd_coin"));
134
+
135
+ // Initial loading state
136
+ expect(result.current.loading).toBe(true);
137
+ expect(result.current.token).toBeUndefined();
138
+ expect(result.current.error).toBeUndefined();
139
+
140
+ // Wait for the async operation to complete
141
+ await waitFor(() => {
142
+ expect(result.current.loading).toBe(false);
143
+ });
144
+
145
+ // Settled state with token
146
+ expect(result.current.token).toBe(mockToken);
147
+ expect(result.current.error).toBeUndefined();
148
+ });
149
+
150
+ it("should handle empty id parameter", async () => {
151
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
152
+ const { result } = renderHook(() => hooks.useTokenById(""));
153
+
154
+ // Should immediately settle with no token
155
+ expect(result.current.loading).toBe(false);
156
+ expect(result.current.token).toBeUndefined();
157
+ expect(result.current.error).toBeUndefined();
158
+ });
159
+
160
+ it("should handle non-existent token id", async () => {
161
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
162
+ const { result } = renderHook(() => hooks.useTokenById("non-existent-token"));
163
+
164
+ // Initial loading state
165
+ expect(result.current.loading).toBe(true);
166
+
167
+ // Wait for the async operation to complete
168
+ await waitFor(() => {
169
+ expect(result.current.loading).toBe(false);
170
+ });
171
+
172
+ // Settled state with no token (but no error since the store returns undefined)
173
+ expect(result.current.token).toBeUndefined();
174
+ expect(result.current.error).toBeUndefined();
175
+ });
176
+
177
+ it("should re-run when id changes", async () => {
178
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
179
+ const { result, rerender } = renderHook(({ id }) => hooks.useTokenById(id), {
180
+ initialProps: { id: "ethereum/erc20/usd_coin" },
181
+ });
182
+
183
+ // Wait for first token to load
184
+ await waitFor(() => {
185
+ expect(result.current.loading).toBe(false);
186
+ expect(result.current.token).toBe(mockToken);
187
+ });
188
+
189
+ // Change the id
190
+ rerender({ id: "different-token" });
191
+
192
+ // Should start loading again and reset token
193
+ expect(result.current.loading).toBe(true);
194
+
195
+ // Wait for the token to be reset
196
+ await waitFor(() => {
197
+ expect(result.current.token).toBeUndefined();
198
+ });
199
+
200
+ // Wait for new search to complete
201
+ await waitFor(() => {
202
+ expect(result.current.loading).toBe(false);
203
+ });
204
+
205
+ // Should have no token for the new id
206
+ expect(result.current.token).toBeUndefined();
207
+ });
208
+ });
209
+
210
+ describe("useTokenByAddressInCurrency", () => {
211
+ it("should start with loading state and then return token", async () => {
212
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
213
+ const { result } = renderHook(() =>
214
+ hooks.useTokenByAddressInCurrency(
215
+ "0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4",
216
+ "ethereum",
217
+ ),
218
+ );
219
+
220
+ // Initial loading state
221
+ expect(result.current.loading).toBe(true);
222
+ expect(result.current.token).toBeUndefined();
223
+ expect(result.current.error).toBeUndefined();
224
+
225
+ // Wait for the async operation to complete
226
+ await waitFor(() => {
227
+ expect(result.current.loading).toBe(false);
228
+ });
229
+
230
+ // Settled state with token
231
+ expect(result.current.token).toBe(mockToken);
232
+ expect(result.current.error).toBeUndefined();
233
+ });
234
+
235
+ it("should handle empty address parameter", async () => {
236
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
237
+ const { result } = renderHook(() => hooks.useTokenByAddressInCurrency("", "ethereum"));
238
+
239
+ // Should immediately settle with no token
240
+ expect(result.current.loading).toBe(false);
241
+ expect(result.current.token).toBeUndefined();
242
+ expect(result.current.error).toBeUndefined();
243
+ });
244
+
245
+ it("should handle empty currencyId parameter", async () => {
246
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
247
+ const { result } = renderHook(() =>
248
+ hooks.useTokenByAddressInCurrency("0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4", ""),
249
+ );
250
+
251
+ // Should immediately settle with no token
252
+ expect(result.current.loading).toBe(false);
253
+ expect(result.current.token).toBeUndefined();
254
+ expect(result.current.error).toBeUndefined();
255
+ });
256
+
257
+ it("should handle non-existent token address", async () => {
258
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
259
+ const { result } = renderHook(() =>
260
+ hooks.useTokenByAddressInCurrency("0xNonExistentAddress", "ethereum"),
261
+ );
262
+
263
+ // Initial loading state
264
+ expect(result.current.loading).toBe(true);
265
+
266
+ // Wait for the async operation to complete
267
+ await waitFor(() => {
268
+ expect(result.current.loading).toBe(false);
269
+ });
270
+
271
+ // Settled state with no token (but no error since the store returns undefined)
272
+ expect(result.current.token).toBeUndefined();
273
+ expect(result.current.error).toBeUndefined();
274
+ });
275
+
276
+ it("should re-run when address or currencyId changes", async () => {
277
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
278
+ const { result, rerender } = renderHook(
279
+ ({ address, currencyId }) => hooks.useTokenByAddressInCurrency(address, currencyId),
280
+ {
281
+ initialProps: {
282
+ address: "0xA0b86a33E6441b8c4C8C0e4b8b8c4C8C0e4b8b8c4",
283
+ currencyId: "ethereum",
284
+ },
285
+ },
286
+ );
287
+
288
+ // Wait for first token to load
289
+ await waitFor(() => {
290
+ expect(result.current.loading).toBe(false);
291
+ expect(result.current.token).toBe(mockToken);
292
+ });
293
+
294
+ // Change the address
295
+ rerender({
296
+ address: "0xDifferentAddress",
297
+ currencyId: "ethereum",
298
+ });
299
+
300
+ // Should start loading again and reset token
301
+ expect(result.current.loading).toBe(true);
302
+
303
+ // Wait for the token to be reset
304
+ await waitFor(() => {
305
+ expect(result.current.token).toBeUndefined();
306
+ });
307
+
308
+ // Wait for new search to complete
309
+ await waitFor(() => {
310
+ expect(result.current.loading).toBe(false);
311
+ });
312
+
313
+ // Should have no token for the new address
314
+ expect(result.current.token).toBeUndefined();
315
+ });
316
+ });
317
+
318
+ describe("useCurrencyById", () => {
319
+ it("should return crypto currency when found", async () => {
320
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
321
+ const { result } = renderHook(() => hooks.useCurrencyById("bitcoin"));
322
+
323
+ // Initial loading state
324
+ expect(result.current.loading).toBe(true);
325
+ expect(result.current.currency).toBeUndefined();
326
+ expect(result.current.error).toBeUndefined();
327
+
328
+ // Wait for the async operation to complete
329
+ await waitFor(() => {
330
+ expect(result.current.loading).toBe(false);
331
+ });
332
+
333
+ // Settled state with crypto currency
334
+ expect(result.current.currency).toBe(mockCryptoCurrency);
335
+ expect(result.current.error).toBeUndefined();
336
+ });
337
+
338
+ it("should fallback to token when crypto currency not found", async () => {
339
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
340
+ const { result } = renderHook(() => hooks.useCurrencyById("ethereum/erc20/usd_coin"));
341
+
342
+ // Initial loading state
343
+ expect(result.current.loading).toBe(true);
344
+
345
+ // Wait for the async operation to complete
346
+ await waitFor(() => {
347
+ expect(result.current.loading).toBe(false);
348
+ });
349
+
350
+ // Settled state with token
351
+ expect(result.current.currency).toBe(mockToken);
352
+ expect(result.current.error).toBeUndefined();
353
+ expect(mockFindCryptoCurrencyById).toHaveBeenCalledWith("ethereum/erc20/usd_coin");
354
+ expect(mockFindTokenById).toHaveBeenCalledWith("ethereum/erc20/usd_coin");
355
+ });
356
+
357
+ it("should handle empty id parameter", async () => {
358
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
359
+ const { result } = renderHook(() => hooks.useCurrencyById(""));
360
+
361
+ // Should immediately settle with no currency
362
+ expect(result.current.loading).toBe(false);
363
+ expect(result.current.currency).toBeUndefined();
364
+ expect(result.current.error).toBeUndefined();
365
+ });
366
+
367
+ it("should handle non-existent currency id", async () => {
368
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
369
+ const { result } = renderHook(() => hooks.useCurrencyById("non-existent"));
370
+
371
+ // Initial loading state
372
+ expect(result.current.loading).toBe(true);
373
+
374
+ // Wait for the async operation to complete
375
+ await waitFor(() => {
376
+ expect(result.current.loading).toBe(false);
377
+ });
378
+
379
+ // Settled state with no currency
380
+ expect(result.current.currency).toBeUndefined();
381
+ expect(result.current.error).toBeUndefined();
382
+ });
383
+
384
+ it("should re-run when id changes", async () => {
385
+ const hooks = createCryptoAssetsHooks({ useCALBackend: false });
386
+ const { result, rerender } = renderHook(({ id }) => hooks.useCurrencyById(id), {
387
+ initialProps: { id: "bitcoin" },
388
+ });
389
+
390
+ // Wait for first currency to load
391
+ await waitFor(() => {
392
+ expect(result.current.loading).toBe(false);
393
+ expect(result.current.currency).toBe(mockCryptoCurrency);
394
+ });
395
+
396
+ // Change the id to a token
397
+ rerender({ id: "ethereum/erc20/usd_coin" });
398
+
399
+ // Should start loading again
400
+ expect(result.current.loading).toBe(true);
401
+
402
+ // Wait for new search to complete
403
+ await waitFor(() => {
404
+ expect(result.current.loading).toBe(false);
405
+ });
406
+
407
+ // Should have token for the new id
408
+ expect(result.current.currency).toBe(mockToken);
409
+ });
410
+ });
411
+ });
package/src/hooks.ts ADDED
@@ -0,0 +1,147 @@
1
+ import { useState, useEffect } from "react";
2
+ import { legacyCryptoAssetsStore } from "./legacy/legacy-store";
3
+ import type { TokenCurrency, CryptoCurrency } from "@ledgerhq/types-cryptoassets";
4
+ import { findCryptoCurrencyById } from "./currencies";
5
+
6
+ /**
7
+ * CryptoAssetsHooks is the hooks interface version of the CryptoAssetsStore
8
+ * This work provide a common interface for the hooks, and the backend implementation will be completed in the future
9
+ * See https://github.com/LedgerHQ/ledger-live/pull/11951
10
+ */
11
+ export function createCryptoAssetsHooks(
12
+ config: {
13
+ useCALBackend?: false; // at the moment, we only support legacy
14
+ api?: unknown; // placeholder for the future
15
+ } = {},
16
+ ): Hooks {
17
+ if (config.useCALBackend) {
18
+ throw new Error("backend is not supported yet");
19
+ } else {
20
+ return {
21
+ useTokenById: useLegacyTokenById,
22
+ useTokenByAddressInCurrency: useLegacyTokenByAddressInCurrency,
23
+ useCurrencyById: useLegacyCurrencyById,
24
+ };
25
+ }
26
+ }
27
+
28
+ type TokenResult = {
29
+ token: TokenCurrency | undefined;
30
+ loading: boolean;
31
+ error: unknown;
32
+ };
33
+
34
+ type CurrencyResult = {
35
+ currency: CryptoCurrency | TokenCurrency | undefined;
36
+ loading: boolean;
37
+ error: unknown;
38
+ };
39
+
40
+ type Hooks = {
41
+ useTokenById: (id: string) => TokenResult;
42
+ useTokenByAddressInCurrency: (address: string, currencyId: string) => TokenResult;
43
+ useCurrencyById: (id: string) => CurrencyResult;
44
+ };
45
+
46
+ /////////// Legacy hooks using legacyCryptoAssetsStore ///////////
47
+
48
+ function useLegacyTokenById(id: string) {
49
+ const [token, setToken] = useState<TokenCurrency | undefined>(undefined);
50
+ const [loading, setLoading] = useState<boolean>(true);
51
+ const [error, setError] = useState<unknown>(undefined);
52
+
53
+ useEffect(() => {
54
+ if (!id) {
55
+ setToken(undefined);
56
+ setLoading(false);
57
+ return;
58
+ }
59
+
60
+ const fetchToken = async () => {
61
+ try {
62
+ setLoading(true);
63
+ setError(undefined);
64
+ const result = await legacyCryptoAssetsStore.findTokenById(id);
65
+ setToken(result);
66
+ } catch (err) {
67
+ setError(err);
68
+ setToken(undefined);
69
+ } finally {
70
+ setLoading(false);
71
+ }
72
+ };
73
+
74
+ fetchToken();
75
+ }, [id]);
76
+
77
+ return { token, loading, error };
78
+ }
79
+
80
+ function useLegacyTokenByAddressInCurrency(address: string, currencyId: string) {
81
+ const [token, setToken] = useState<TokenCurrency | undefined>(undefined);
82
+ const [loading, setLoading] = useState<boolean>(true);
83
+ const [error, setError] = useState<unknown>(undefined);
84
+
85
+ useEffect(() => {
86
+ if (!address || !currencyId) {
87
+ setToken(undefined);
88
+ setLoading(false);
89
+ return;
90
+ }
91
+
92
+ const fetchToken = async () => {
93
+ try {
94
+ setLoading(true);
95
+ setError(undefined);
96
+ const result = await legacyCryptoAssetsStore.findTokenByAddressInCurrency(
97
+ address,
98
+ currencyId,
99
+ );
100
+ setToken(result);
101
+ } catch (err) {
102
+ setError(err);
103
+ setToken(undefined);
104
+ } finally {
105
+ setLoading(false);
106
+ }
107
+ };
108
+
109
+ fetchToken();
110
+ }, [address, currencyId]);
111
+
112
+ return { token, loading, error };
113
+ }
114
+
115
+ function useLegacyCurrencyById(id: string) {
116
+ const [currency, setCurrency] = useState<CryptoCurrency | TokenCurrency | undefined>(undefined);
117
+ const [loading, setLoading] = useState<boolean>(true);
118
+ const [error, setError] = useState<unknown>(undefined);
119
+
120
+ useEffect(() => {
121
+ if (!id) {
122
+ setCurrency(undefined);
123
+ setLoading(false);
124
+ return;
125
+ }
126
+
127
+ const fetchCurrency = async () => {
128
+ try {
129
+ setLoading(true);
130
+ setError(undefined);
131
+ // First try to find as a crypto currency
132
+ const cryptoCurrency = await Promise.resolve(findCryptoCurrencyById(id));
133
+ const result = cryptoCurrency || (await legacyCryptoAssetsStore.findTokenById(id));
134
+ setCurrency(result);
135
+ } catch (err) {
136
+ setError(err);
137
+ setCurrency(undefined);
138
+ } finally {
139
+ setLoading(false);
140
+ }
141
+ };
142
+
143
+ fetchCurrency();
144
+ }, [id]);
145
+
146
+ return { currency, loading, error };
147
+ }
package/src/index.ts CHANGED
@@ -3,6 +3,5 @@ export * from "./currencies";
3
3
  export * from "./tokens";
4
4
  export * from "./api-token-converter";
5
5
  export * from "./api-asset-converter";
6
- export * from "./exchange";
7
6
  export * from "./abandonseed";
8
7
  export * from "./types";
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=api-asset-converter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-asset-converter.test.d.ts","sourceRoot":"","sources":["../src/api-asset-converter.test.ts"],"names":[],"mappings":""}