@ledgerhq/cryptoassets 13.32.0-nightly.1 → 13.32.0-nightly.3

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 (85) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +3 -6
  3. package/CHANGELOG.md +27 -0
  4. package/lib/abandonseed.d.ts.map +1 -1
  5. package/lib/abandonseed.js +1 -0
  6. package/lib/abandonseed.js.map +1 -1
  7. package/lib/api-token-converter.d.ts +29 -0
  8. package/lib/api-token-converter.d.ts.map +1 -1
  9. package/lib/api-token-converter.js +101 -110
  10. package/lib/api-token-converter.js.map +1 -1
  11. package/lib/cal-client/entities/index.d.ts +125 -0
  12. package/lib/cal-client/entities/index.d.ts.map +1 -0
  13. package/lib/cal-client/entities/index.js +57 -0
  14. package/lib/cal-client/entities/index.js.map +1 -0
  15. package/lib/cal-client/hooks/index.d.ts +2 -0
  16. package/lib/cal-client/hooks/index.d.ts.map +1 -0
  17. package/lib/cal-client/hooks/index.js +18 -0
  18. package/lib/cal-client/hooks/index.js.map +1 -0
  19. package/lib/cal-client/hooks/useTokensData.d.ts +11 -0
  20. package/lib/cal-client/hooks/useTokensData.d.ts.map +1 -0
  21. package/lib/cal-client/hooks/useTokensData.js +35 -0
  22. package/lib/cal-client/hooks/useTokensData.js.map +1 -0
  23. package/lib/cal-client/state-manager/api.d.ts +842 -0
  24. package/lib/cal-client/state-manager/api.d.ts.map +1 -0
  25. package/lib/cal-client/state-manager/api.js +86 -0
  26. package/lib/cal-client/state-manager/api.js.map +1 -0
  27. package/lib/cal-client/state-manager/fields.d.ts +2 -0
  28. package/lib/cal-client/state-manager/fields.d.ts.map +1 -0
  29. package/lib/cal-client/state-manager/fields.js +24 -0
  30. package/lib/cal-client/state-manager/fields.js.map +1 -0
  31. package/lib/cal-client/state-manager/types.d.ts +36 -0
  32. package/lib/cal-client/state-manager/types.d.ts.map +1 -0
  33. package/lib/cal-client/state-manager/types.js +8 -0
  34. package/lib/cal-client/state-manager/types.js.map +1 -0
  35. package/lib/currencies.d.ts.map +1 -1
  36. package/lib/currencies.js +52 -0
  37. package/lib/currencies.js.map +1 -1
  38. package/lib-es/abandonseed.d.ts.map +1 -1
  39. package/lib-es/abandonseed.js +1 -0
  40. package/lib-es/abandonseed.js.map +1 -1
  41. package/lib-es/api-token-converter.d.ts +29 -0
  42. package/lib-es/api-token-converter.d.ts.map +1 -1
  43. package/lib-es/api-token-converter.js +99 -109
  44. package/lib-es/api-token-converter.js.map +1 -1
  45. package/lib-es/cal-client/entities/index.d.ts +125 -0
  46. package/lib-es/cal-client/entities/index.d.ts.map +1 -0
  47. package/lib-es/cal-client/entities/index.js +54 -0
  48. package/lib-es/cal-client/entities/index.js.map +1 -0
  49. package/lib-es/cal-client/hooks/index.d.ts +2 -0
  50. package/lib-es/cal-client/hooks/index.d.ts.map +1 -0
  51. package/lib-es/cal-client/hooks/index.js +2 -0
  52. package/lib-es/cal-client/hooks/index.js.map +1 -0
  53. package/lib-es/cal-client/hooks/useTokensData.d.ts +11 -0
  54. package/lib-es/cal-client/hooks/useTokensData.d.ts.map +1 -0
  55. package/lib-es/cal-client/hooks/useTokensData.js +31 -0
  56. package/lib-es/cal-client/hooks/useTokensData.js.map +1 -0
  57. package/lib-es/cal-client/state-manager/api.d.ts +842 -0
  58. package/lib-es/cal-client/state-manager/api.d.ts.map +1 -0
  59. package/lib-es/cal-client/state-manager/api.js +83 -0
  60. package/lib-es/cal-client/state-manager/api.js.map +1 -0
  61. package/lib-es/cal-client/state-manager/fields.d.ts +2 -0
  62. package/lib-es/cal-client/state-manager/fields.d.ts.map +1 -0
  63. package/lib-es/cal-client/state-manager/fields.js +21 -0
  64. package/lib-es/cal-client/state-manager/fields.js.map +1 -0
  65. package/lib-es/cal-client/state-manager/types.d.ts +36 -0
  66. package/lib-es/cal-client/state-manager/types.d.ts.map +1 -0
  67. package/lib-es/cal-client/state-manager/types.js +5 -0
  68. package/lib-es/cal-client/state-manager/types.js.map +1 -0
  69. package/lib-es/currencies.d.ts.map +1 -1
  70. package/lib-es/currencies.js +52 -0
  71. package/lib-es/currencies.js.map +1 -1
  72. package/package.json +6 -3
  73. package/src/abandonseed.ts +1 -0
  74. package/src/api-token-converter.test.ts +217 -221
  75. package/src/api-token-converter.ts +124 -140
  76. package/src/cal-client/MIGRATION_GUIDE.md +276 -0
  77. package/src/cal-client/README.md +125 -0
  78. package/src/cal-client/entities/index.ts +59 -0
  79. package/src/cal-client/hooks/__tests__/useTokensData.test.ts +222 -0
  80. package/src/cal-client/hooks/index.ts +1 -0
  81. package/src/cal-client/hooks/useTokensData.ts +47 -0
  82. package/src/cal-client/state-manager/api.ts +97 -0
  83. package/src/cal-client/state-manager/fields.ts +20 -0
  84. package/src/cal-client/state-manager/types.ts +39 -0
  85. package/src/currencies.ts +52 -0
@@ -1,114 +1,104 @@
1
- import { convertERC20, convertSplTokens, convertJettonToken, convertAlgorandASATokens, convertVechainToken, convertTRONTokens, convertMultiversXESDTTokens, convertCardanoNativeTokens, convertStellarTokens, convertSuiTokens, convertAptCoinTokens, convertAptFaTokens, } from "./legacy/legacy-utils";
1
+ import { findCryptoCurrencyById } from "./currencies";
2
+ /**
3
+ * Transforms Ledger Live token ID to backend API format for querying
4
+ *
5
+ * This handles cases where LL uses different ID conventions than backend APIs.
6
+ * Applied BEFORE querying the API to ensure the request uses the correct format:
7
+ *
8
+ * - MultiversX: multiversx/esdt/* → elrond/esdt/* (API uses old name) [LIVE-22557]
9
+ * - Stellar: UPPERCASE → lowercase (API uses lowercase) [LIVE-22558]
10
+ *
11
+ * @param legacyId - Token ID in Ledger Live format
12
+ * @returns Token ID in backend API format
13
+ */
14
+ export function legacyIdToApiId(legacyId) {
15
+ let apiId = legacyId;
16
+ // LIVE-22557: MultiversX - API uses old "elrond" name
17
+ if (apiId.startsWith("multiversx/esdt/")) {
18
+ apiId = apiId.replace("multiversx/esdt/", "elrond/esdt/");
19
+ }
20
+ // LIVE-22558: Stellar - API uses all lowercase (including the address part)
21
+ if (apiId.startsWith("stellar/asset/")) {
22
+ apiId = apiId.toLowerCase();
23
+ }
24
+ return apiId;
25
+ }
26
+ /**
27
+ * Converts API token data to Ledger Live TokenCurrency format
28
+ *
29
+ * This function applies client-side transformations to reconcile differences between
30
+ * backend APIs (CAL/DaDa) and Ledger Live's expected token format:
31
+ *
32
+ * - MultiversX: elrond/esdt/* → multiversx/esdt/* [LIVE-22557]
33
+ * - Stellar: Normalizes casing to stellar/asset/UPPERCASE_ADDRESS and tokenType asset → stellar [LIVE-22558]
34
+ * - Cardano: Reconstructs contractAddress from policyId + tokenIdentifier [LIVE-22559]
35
+ * - Sui: Transforms tokenType from "coin" to "sui" [LIVE-22560]
36
+ * - TON Jetton: Removes name prefix from ID (ton/jetton/name_address → ton/jetton/address) [LIVE-22561]
37
+ *
38
+ * @param apiToken - Token data from backend API
39
+ * @returns TokenCurrency object in Ledger Live format, or undefined if parent currency not found
40
+ */
2
41
  export function convertApiToken(apiToken) {
3
- const { standard, id, contractAddress, name, ticker, units, delisted = false } = apiToken;
4
- const magnitude = units[0]?.magnitude || 0;
5
- switch (standard) {
6
- case "erc20":
7
- case "bep20": {
8
- const parentCurrencyId = id.split("/")[0];
9
- const tokenIdentifier = id.split("/")[2] || contractAddress;
10
- const erc20Data = [
11
- parentCurrencyId,
12
- tokenIdentifier,
13
- ticker,
14
- magnitude,
15
- name,
16
- "",
17
- contractAddress,
18
- false,
19
- delisted,
20
- ];
21
- return convertERC20(erc20Data);
22
- }
23
- case "spl": {
24
- const parentCurrencyId = id.split("/")[0];
25
- const splData = [id, parentCurrencyId, name, ticker, contractAddress, magnitude];
26
- return convertSplTokens(splData);
27
- }
28
- case "jetton": {
29
- const jettonData = [contractAddress, name, ticker, magnitude, delisted];
30
- return convertJettonToken(jettonData);
31
- }
32
- case "asa": {
33
- const tokenId = id.split("/")[2] || contractAddress;
34
- const asaData = [tokenId, ticker, name, contractAddress, magnitude];
35
- return convertAlgorandASATokens(asaData);
36
- }
37
- case "esdt": {
38
- const tokenIdentifier = id.split("/")[2] || contractAddress;
39
- const esdtData = [ticker, tokenIdentifier, magnitude, "", name];
40
- return convertMultiversXESDTTokens(esdtData);
41
- }
42
- case "trc10": {
43
- const tokenId = parseInt(id.split("/")[2] || contractAddress);
44
- const trc10Data = [
45
- tokenId,
46
- ticker,
47
- name,
48
- contractAddress,
49
- magnitude,
50
- delisted,
51
- "",
52
- ];
53
- return convertTRONTokens("trc10")(trc10Data);
54
- }
55
- case "trc20": {
56
- const tokenId = id.split("/")[2] || contractAddress;
57
- const trc20Data = [
58
- tokenId,
59
- ticker,
60
- name,
61
- contractAddress,
62
- magnitude,
63
- delisted,
64
- "",
65
- ];
66
- return convertTRONTokens("trc20")(trc20Data);
67
- }
68
- case "vip180": {
69
- const tokenIdentifier = id.split("/")[2] || contractAddress;
70
- const vip180Data = [tokenIdentifier, ticker, name, contractAddress, magnitude];
71
- return convertVechainToken(vip180Data);
72
- }
73
- case "native": {
74
- const parentCurrencyId = id.split("/")[0];
75
- if (parentCurrencyId !== "cardano")
76
- return undefined;
77
- const tokenIdentifier = id.split("/")[2] || contractAddress;
78
- const parts = tokenIdentifier.split(".");
79
- const [policyId, assetName = ""] = parts;
80
- const cardanoData = [
81
- "cardano",
82
- policyId,
83
- assetName,
84
- name,
85
- ticker,
86
- magnitude,
87
- delisted,
88
- ];
89
- return convertCardanoNativeTokens(cardanoData);
90
- }
91
- case "stellar": {
92
- const parts = contractAddress.split(":");
93
- const assetCode = parts[0] || ticker;
94
- const assetIssuer = parts[1] || contractAddress;
95
- const stellarData = [assetCode, assetIssuer, "stellar", name, magnitude];
96
- return convertStellarTokens(stellarData);
97
- }
98
- case "coin": {
99
- const aptCoinData = [id, ticker, name, contractAddress, magnitude, delisted];
100
- return convertAptCoinTokens(aptCoinData);
101
- }
102
- case "fungible_asset": {
103
- const aptFaData = [id, ticker, name, contractAddress, magnitude, delisted];
104
- return convertAptFaTokens(aptFaData);
105
- }
106
- case "sui": {
107
- const suiData = [id, name, ticker, contractAddress, magnitude, ""];
108
- return convertSuiTokens(suiData);
42
+ const { standard, id, contractAddress, name, ticker, units, delisted = false, tokenIdentifier, ledgerSignature, } = apiToken;
43
+ // Apply client-side patches to reconcile CAL format with LL format
44
+ let patchedId = id;
45
+ let patchedContractAddress = contractAddress;
46
+ let patchedStandard = standard;
47
+ // Get parent currency from the ORIGINAL ID (before transformation)
48
+ // This is important for currencies that changed names (elrond -> multiversx)
49
+ const parentCurrencyId = id.split("/")[0];
50
+ const parentCurrency = findCryptoCurrencyById(parentCurrencyId);
51
+ if (!parentCurrency) {
52
+ return undefined;
53
+ }
54
+ // LIVE-22557: MultiversX - Transform elrond/* to multiversx/*
55
+ if (patchedId.startsWith("elrond/esdt/")) {
56
+ patchedId = patchedId.replace("elrond/esdt/", "multiversx/esdt/");
57
+ }
58
+ // LIVE-22558: Stellar - Transform to LL mixed-case format: stellar/asset/ + UPPERCASE_REST
59
+ // Also fix tokenType: API returns "asset", LL expects "stellar"
60
+ const stellarPrefix = "stellar/asset/";
61
+ if (patchedId.toLowerCase().startsWith(stellarPrefix)) {
62
+ const rest = patchedId.substring(stellarPrefix.length);
63
+ patchedId = stellarPrefix + rest.toUpperCase();
64
+ patchedStandard = patchedStandard === "asset" ? "stellar" : patchedStandard;
65
+ }
66
+ // LIVE-22559: Cardano - Reconstruct full assetId (policyId + assetName)
67
+ if (standard === "native" && tokenIdentifier) {
68
+ patchedContractAddress = contractAddress + tokenIdentifier;
69
+ }
70
+ // LIVE-22560: Sui - Transform "coin" standard to "sui" tokenType (LL format)
71
+ if (standard === "coin" && patchedId.startsWith("sui/")) {
72
+ patchedStandard = "sui";
73
+ }
74
+ // LIVE-22561: TON Jetton - Remove name prefix from ID (API: ton/jetton/name_address -> LL: ton/jetton/address)
75
+ if (patchedId.startsWith("ton/jetton/") && patchedId.indexOf("_") > 0) {
76
+ const parts = patchedId.split("_");
77
+ if (parts.length === 2) {
78
+ patchedId = "ton/jetton/" + parts[1];
109
79
  }
110
- default:
111
- return undefined;
112
80
  }
81
+ // Construct TokenCurrency directly from API data
82
+ const tokenCurrency = {
83
+ type: "TokenCurrency",
84
+ id: patchedId,
85
+ contractAddress: patchedContractAddress,
86
+ parentCurrency,
87
+ tokenType: patchedStandard,
88
+ name,
89
+ ticker,
90
+ delisted,
91
+ disableCountervalue: !!parentCurrency.isTestnetFor || !!apiToken.disableCountervalue,
92
+ units: units.map(unit => ({
93
+ name: unit.name,
94
+ code: unit.code,
95
+ magnitude: unit.magnitude,
96
+ })),
97
+ };
98
+ // Add ledgerSignature if present
99
+ if (ledgerSignature) {
100
+ tokenCurrency.ledgerSignature = ledgerSignature;
101
+ }
102
+ return tokenCurrency;
113
103
  }
114
104
  //# sourceMappingURL=api-token-converter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-token-converter.js","sourceRoot":"","sources":["../src/api-token-converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-token-converter.js","sourceRoot":"","sources":["../src/api-token-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for token unit
4
+ */
5
+ export declare const TokenUnitSchema: z.ZodObject<{
6
+ /** Code identifier for the unit */
7
+ code: z.ZodString;
8
+ /** Display name of the unit */
9
+ name: z.ZodString;
10
+ /** Magnitude (number of decimals) */
11
+ magnitude: z.ZodNumber;
12
+ }, "strip", z.ZodTypeAny, {
13
+ name: string;
14
+ magnitude: number;
15
+ code: string;
16
+ }, {
17
+ name: string;
18
+ magnitude: number;
19
+ code: string;
20
+ }>;
21
+ export type TokenUnit = z.infer<typeof TokenUnitSchema>;
22
+ /**
23
+ * Zod schema for API token response
24
+ */
25
+ export declare const ApiTokenResponseSchema: z.ZodObject<{
26
+ /** Type of asset (token or currency) */
27
+ type: z.ZodString;
28
+ /** Unique identifier for the token */
29
+ id: z.ZodString;
30
+ /** Smart contract address */
31
+ contract_address: z.ZodString;
32
+ /** Token standard (e.g., erc20, bep20, spl) */
33
+ standard: z.ZodString;
34
+ /** Number of decimals */
35
+ decimals: z.ZodNumber;
36
+ /** Network identifier (e.g., arbitrum, ethereum) */
37
+ network: z.ZodString;
38
+ /** Network family (e.g., ethereum, solana) */
39
+ network_family: z.ZodString;
40
+ /** Whether the token is delisted */
41
+ delisted: z.ZodBoolean;
42
+ /** Full name of the token */
43
+ name: z.ZodString;
44
+ /** Ticker symbol */
45
+ ticker: z.ZodString;
46
+ /** Array of unit representations */
47
+ units: z.ZodArray<z.ZodObject<{
48
+ /** Code identifier for the unit */
49
+ code: z.ZodString;
50
+ /** Display name of the unit */
51
+ name: z.ZodString;
52
+ /** Magnitude (number of decimals) */
53
+ magnitude: z.ZodNumber;
54
+ }, "strip", z.ZodTypeAny, {
55
+ name: string;
56
+ magnitude: number;
57
+ code: string;
58
+ }, {
59
+ name: string;
60
+ magnitude: number;
61
+ code: string;
62
+ }>, "many">;
63
+ /** Symbol */
64
+ symbol: z.ZodString;
65
+ /** Chain ID */
66
+ chain_id: z.ZodString;
67
+ /** Token identifier */
68
+ token_identifier: z.ZodOptional<z.ZodString>;
69
+ /** Network type */
70
+ network_type: z.ZodString;
71
+ /** Meta currency ID */
72
+ meta_currency_id: z.ZodString;
73
+ /** Blockchain name */
74
+ blockchain_name: z.ZodString;
75
+ /** Live signature */
76
+ live_signature: z.ZodOptional<z.ZodString>;
77
+ }, "strip", z.ZodTypeAny, {
78
+ symbol: string;
79
+ id: string;
80
+ type: string;
81
+ name: string;
82
+ ticker: string;
83
+ standard: string;
84
+ units: {
85
+ name: string;
86
+ magnitude: number;
87
+ code: string;
88
+ }[];
89
+ delisted: boolean;
90
+ decimals: number;
91
+ network: string;
92
+ contract_address: string;
93
+ network_family: string;
94
+ chain_id: string;
95
+ network_type: string;
96
+ meta_currency_id: string;
97
+ blockchain_name: string;
98
+ token_identifier?: string | undefined;
99
+ live_signature?: string | undefined;
100
+ }, {
101
+ symbol: string;
102
+ id: string;
103
+ type: string;
104
+ name: string;
105
+ ticker: string;
106
+ standard: string;
107
+ units: {
108
+ name: string;
109
+ magnitude: number;
110
+ code: string;
111
+ }[];
112
+ delisted: boolean;
113
+ decimals: number;
114
+ network: string;
115
+ contract_address: string;
116
+ network_family: string;
117
+ chain_id: string;
118
+ network_type: string;
119
+ meta_currency_id: string;
120
+ blockchain_name: string;
121
+ token_identifier?: string | undefined;
122
+ live_signature?: string | undefined;
123
+ }>;
124
+ export type ApiTokenResponse = z.infer<typeof ApiTokenResponseSchema>;
125
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cal-client/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B,mCAAmC;;IAEnC,+BAA+B;;IAE/B,qCAAqC;;;;;;;;;;EAErC,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,sBAAsB;IACjC,wCAAwC;;IAExC,sCAAsC;;IAEtC,6BAA6B;;IAE7B,+CAA+C;;IAE/C,yBAAyB;;IAEzB,oDAAoD;;IAEpD,8CAA8C;;IAE9C,oCAAoC;;IAEpC,6BAA6B;;IAE7B,oBAAoB;;IAEpB,oCAAoC;;QAlCpC,mCAAmC;;QAEnC,+BAA+B;;QAE/B,qCAAqC;;;;;;;;;;;IAgCrC,aAAa;;IAEb,eAAe;;IAEf,uBAAuB;;IAEvB,mBAAmB;;IAEnB,uBAAuB;;IAEvB,sBAAsB;;IAEtB,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAErB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for token unit
4
+ */
5
+ export const TokenUnitSchema = z.object({
6
+ /** Code identifier for the unit */
7
+ code: z.string(),
8
+ /** Display name of the unit */
9
+ name: z.string(),
10
+ /** Magnitude (number of decimals) */
11
+ magnitude: z.number(),
12
+ });
13
+ /**
14
+ * Zod schema for API token response
15
+ */
16
+ export const ApiTokenResponseSchema = z.object({
17
+ /** Type of asset (token or currency) */
18
+ type: z.string(),
19
+ /** Unique identifier for the token */
20
+ id: z.string(),
21
+ /** Smart contract address */
22
+ contract_address: z.string(),
23
+ /** Token standard (e.g., erc20, bep20, spl) */
24
+ standard: z.string(),
25
+ /** Number of decimals */
26
+ decimals: z.number(),
27
+ /** Network identifier (e.g., arbitrum, ethereum) */
28
+ network: z.string(),
29
+ /** Network family (e.g., ethereum, solana) */
30
+ network_family: z.string(),
31
+ /** Whether the token is delisted */
32
+ delisted: z.boolean(),
33
+ /** Full name of the token */
34
+ name: z.string(),
35
+ /** Ticker symbol */
36
+ ticker: z.string(),
37
+ /** Array of unit representations */
38
+ units: z.array(TokenUnitSchema).min(1),
39
+ /** Symbol */
40
+ symbol: z.string(),
41
+ /** Chain ID */
42
+ chain_id: z.string(),
43
+ /** Token identifier */
44
+ token_identifier: z.string().optional(),
45
+ /** Network type */
46
+ network_type: z.string(),
47
+ /** Meta currency ID */
48
+ meta_currency_id: z.string(),
49
+ /** Blockchain name */
50
+ blockchain_name: z.string(),
51
+ /** Live signature */
52
+ live_signature: z.string().optional(),
53
+ });
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cal-client/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,mCAAmC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,+BAA+B;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,qCAAqC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,wCAAwC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,sCAAsC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,6BAA6B;IAC7B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,yBAAyB;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,oDAAoD;IACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,8CAA8C;IAC9C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,oCAAoC;IACpC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,6BAA6B;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,oBAAoB;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,oCAAoC;IACpC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,aAAa;IACb,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,eAAe;IACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,uBAAuB;IACvB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,mBAAmB;IACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,uBAAuB;IACvB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,sBAAsB;IACtB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,qBAAqB;IACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./useTokensData";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cal-client/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./useTokensData";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cal-client/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { TokensDataWithPagination, GetTokensDataParams } from "../state-manager/types";
2
+ export declare function useTokensData(params: GetTokensDataParams): {
3
+ data: TokensDataWithPagination | undefined;
4
+ isLoading: boolean;
5
+ error: import("@reduxjs/toolkit").SerializedError | undefined;
6
+ loadNext: (() => import("@reduxjs/toolkit/query").InfiniteQueryActionCreatorResult<import("@reduxjs/toolkit/query").InfiniteQueryDefinition<GetTokensDataParams, import("../state-manager/types").PageParam, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, import("../state-manager/types").TokensDataTags, TokensDataWithPagination, "cryptoAssetsApi", unknown>>) | undefined;
7
+ isSuccess: boolean;
8
+ isError: boolean;
9
+ refetch: () => import("@reduxjs/toolkit/query").InfiniteQueryActionCreatorResult<import("@reduxjs/toolkit/query").InfiniteQueryDefinition<GetTokensDataParams, import("../state-manager/types").PageParam, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, import("../state-manager/types").TokensDataTags, TokensDataWithPagination, "cryptoAssetsApi", unknown>>;
10
+ };
11
+ //# sourceMappingURL=useTokensData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTokensData.d.ts","sourceRoot":"","sources":["../../../src/cal-client/hooks/useTokensData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAOvF,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB;;;;;;;;EAqCxD"}
@@ -0,0 +1,31 @@
1
+ import { useMemo } from "react";
2
+ import { useGetTokensDataInfiniteQuery } from "../state-manager/api";
3
+ const emptyData = () => ({
4
+ tokens: [],
5
+ pagination: { nextCursor: "" },
6
+ });
7
+ export function useTokensData(params) {
8
+ const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError, isFetchingNextPage, } = useGetTokensDataInfiniteQuery(params);
9
+ const joinedPages = useMemo(() => {
10
+ return data?.pages.reduce((acc, page) => {
11
+ return {
12
+ tokens: [...acc.tokens, ...page.tokens],
13
+ pagination: {
14
+ nextCursor: page.pagination.nextCursor,
15
+ },
16
+ };
17
+ }, emptyData());
18
+ }, [data]);
19
+ const hasMore = Boolean(joinedPages?.pagination.nextCursor);
20
+ const isInitialLoading = isLoading || (isFetching && !isFetchingNextPage);
21
+ return {
22
+ data: joinedPages,
23
+ isLoading: isInitialLoading,
24
+ error,
25
+ loadNext: hasMore ? fetchNextPage : undefined,
26
+ isSuccess,
27
+ isError,
28
+ refetch,
29
+ };
30
+ }
31
+ //# sourceMappingURL=useTokensData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTokensData.js","sourceRoot":"","sources":["../../../src/cal-client/hooks/useTokensData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAGrE,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,MAA2B;IACvD,MAAM,EACJ,IAAI,EACJ,SAAS,EACT,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,OAAO,EACP,kBAAkB,GACnB,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,OAAO;gBACL,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;gBACvC,UAAU,EAAE;oBACV,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;iBACvC;aACF,CAAC;QACJ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,gBAAgB,GAAG,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE1E,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,gBAAgB;QAC3B,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC7C,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}