@ledgerhq/live-common 34.48.0-nightly.5 → 34.48.0-nightly.7

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 (31) hide show
  1. package/lib/bridge/generic-alpaca/tests/getAccountShape.test.d.ts +2 -0
  2. package/lib/bridge/generic-alpaca/tests/getAccountShape.test.d.ts.map +1 -0
  3. package/lib/bridge/generic-alpaca/tests/getAccountShape.test.js +144 -0
  4. package/lib/bridge/generic-alpaca/tests/getAccountShape.test.js.map +1 -0
  5. package/lib/families/canton/config.d.ts.map +1 -1
  6. package/lib/families/canton/config.js +2 -4
  7. package/lib/families/canton/config.js.map +1 -1
  8. package/lib/families/canton/setup.d.ts.map +1 -1
  9. package/lib/families/canton/setup.js +5 -5
  10. package/lib/families/canton/setup.js.map +1 -1
  11. package/lib/modularDrawer/hooks/useAssetsData.d.ts.map +1 -1
  12. package/lib/modularDrawer/hooks/useAssetsData.js +3 -2
  13. package/lib/modularDrawer/hooks/useAssetsData.js.map +1 -1
  14. package/lib-es/bridge/generic-alpaca/tests/getAccountShape.test.d.ts +2 -0
  15. package/lib-es/bridge/generic-alpaca/tests/getAccountShape.test.d.ts.map +1 -0
  16. package/lib-es/bridge/generic-alpaca/tests/getAccountShape.test.js +139 -0
  17. package/lib-es/bridge/generic-alpaca/tests/getAccountShape.test.js.map +1 -0
  18. package/lib-es/families/canton/config.d.ts.map +1 -1
  19. package/lib-es/families/canton/config.js +2 -4
  20. package/lib-es/families/canton/config.js.map +1 -1
  21. package/lib-es/families/canton/setup.d.ts.map +1 -1
  22. package/lib-es/families/canton/setup.js +5 -5
  23. package/lib-es/families/canton/setup.js.map +1 -1
  24. package/lib-es/modularDrawer/hooks/useAssetsData.d.ts.map +1 -1
  25. package/lib-es/modularDrawer/hooks/useAssetsData.js +3 -2
  26. package/lib-es/modularDrawer/hooks/useAssetsData.js.map +1 -1
  27. package/package.json +41 -41
  28. package/src/bridge/generic-alpaca/tests/getAccountShape.test.ts +173 -0
  29. package/src/families/canton/config.ts +2 -4
  30. package/src/families/canton/setup.ts +6 -5
  31. package/src/modularDrawer/hooks/useAssetsData.ts +21 -10
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getAccountShape.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccountShape.test.d.ts","sourceRoot":"","sources":["../../../../src/bridge/generic-alpaca/tests/getAccountShape.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
7
+ const getAccountShape_1 = require("../getAccountShape");
8
+ jest.mock("@ledgerhq/coin-framework/account/index", () => ({
9
+ encodeAccountId: jest.fn(() => "accId"),
10
+ }));
11
+ const mergeOpsMock = jest.fn();
12
+ jest.mock("@ledgerhq/coin-framework/bridge/jsHelpers", () => ({
13
+ mergeOps: (...args) => mergeOpsMock(...args),
14
+ }));
15
+ const listOperationsMock = jest.fn();
16
+ const getBalanceMock = jest.fn();
17
+ const lastBlockMock = jest.fn();
18
+ const getTokenFromAssetMock = jest.fn();
19
+ const chainSpecificGetAccountShapeMock = jest.fn();
20
+ jest.mock("../alpaca", () => ({
21
+ getAlpacaApi: () => ({
22
+ lastBlock: (...a) => lastBlockMock(...a),
23
+ getBalance: (...a) => getBalanceMock(...a),
24
+ listOperations: (...a) => listOperationsMock(...a),
25
+ getTokenFromAsset: (...a) => getTokenFromAssetMock(...a),
26
+ getChainSpecificRules: () => ({
27
+ getAccountShape: (...a) => chainSpecificGetAccountShapeMock(...a),
28
+ }),
29
+ }),
30
+ }));
31
+ const adaptCoreOperationToLiveOperationMock = jest.fn();
32
+ const extractBalanceMock = jest.fn();
33
+ jest.mock("../utils", () => ({
34
+ adaptCoreOperationToLiveOperation: (...a) => adaptCoreOperationToLiveOperationMock(...a),
35
+ extractBalance: (...a) => extractBalanceMock(...a),
36
+ }));
37
+ const inferSubOperationsMock = jest.fn();
38
+ jest.mock("@ledgerhq/coin-framework/serialization", () => ({
39
+ inferSubOperations: (...a) => inferSubOperationsMock(...a),
40
+ }));
41
+ const buildSubAccountsMock = jest.fn();
42
+ jest.mock("../buildSubAccounts", () => ({
43
+ buildSubAccounts: (...a) => buildSubAccountsMock(...a),
44
+ }));
45
+ // Test matrix for Stellar & XRP
46
+ const chains = [
47
+ { currency: { id: "stellar", name: "Stellar" }, network: "testnet" },
48
+ { currency: { id: "ripple", name: "XRP" }, network: "mainnet" },
49
+ ];
50
+ describe("genericGetAccountShape (stellar & xrp)", () => {
51
+ beforeEach(() => {
52
+ jest.clearAllMocks();
53
+ });
54
+ describe.each(chains)("$currency.id", ({ currency, network }) => {
55
+ test("builds account shape with existing operations, pagination and sub accounts", async () => {
56
+ const oldOp = {
57
+ hash: "h1",
58
+ blockHeight: 10,
59
+ type: "OPT_IN",
60
+ extra: { pagingToken: "pt1", assetReference: "ar1", assetOwner: "ow1" },
61
+ };
62
+ const initialAccount = { operations: [oldOp], blockHeight: 10 };
63
+ extractBalanceMock.mockReturnValue({ value: "1000", locked: "300" });
64
+ getBalanceMock.mockResolvedValue([
65
+ { asset: { type: "native" }, value: "1000", locked: "300" },
66
+ { asset: { type: "token", symbol: "TOK1" }, value: "42" },
67
+ { asset: { type: "token", symbol: "TOK_IGNORE" }, value: "5" },
68
+ ]);
69
+ getTokenFromAssetMock.mockImplementation(asset => asset.symbol === "TOK1" ? { id: `${currency.id}_token1` } : null);
70
+ const coreOp = { hash: "h2", height: 12 };
71
+ listOperationsMock.mockResolvedValue([[coreOp]]);
72
+ adaptCoreOperationToLiveOperationMock.mockImplementation((_accId, op) => ({
73
+ hash: op.hash,
74
+ type: "IN",
75
+ blockHeight: 12,
76
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
77
+ }));
78
+ mergeOpsMock.mockImplementation((oldOps, newOps) => [...newOps, ...oldOps]);
79
+ buildSubAccountsMock.mockReturnValue([
80
+ { id: `${currency.id}_subAcc1`, type: "TokenAccount" },
81
+ ]);
82
+ inferSubOperationsMock.mockImplementation(hash => hash === "h2" ? [{ id: `${currency.id}_subOp1` }] : []);
83
+ lastBlockMock.mockResolvedValue({ height: 123 });
84
+ const getShape = (0, getAccountShape_1.genericGetAccountShape)(network, currency.id);
85
+ const result = await getShape({
86
+ address: `${currency.id}_addr1`,
87
+ initialAccount,
88
+ currency,
89
+ derivationMode: "",
90
+ }, { paginationConfig: {} });
91
+ expect(chainSpecificGetAccountShapeMock).toHaveBeenCalledWith(`${currency.id}_addr1`);
92
+ expect(listOperationsMock).toHaveBeenCalledWith(`${currency.id}_addr1`, {
93
+ minHeight: 11,
94
+ order: "asc",
95
+ lastPagingToken: "pt1",
96
+ });
97
+ const assetsBalancePassed = buildSubAccountsMock.mock.calls[0][0].assetsBalance;
98
+ expect(assetsBalancePassed).toHaveLength(1);
99
+ expect(assetsBalancePassed[0].asset.symbol).toBe("TOK1");
100
+ const assetOpsPassed = buildSubAccountsMock.mock.calls[0][0].operations;
101
+ expect(assetOpsPassed).toHaveLength(1);
102
+ expect(assetOpsPassed[0].hash).toBe("h2");
103
+ expect(result).toMatchObject({
104
+ balance: new bignumber_js_1.default(1000),
105
+ spendableBalance: new bignumber_js_1.default(700),
106
+ blockHeight: 123,
107
+ operationsCount: 2,
108
+ subAccounts: [{ id: `${currency.id}_subAcc1`, type: "TokenAccount" }],
109
+ operations: [
110
+ {
111
+ hash: "h2",
112
+ type: "IN",
113
+ blockHeight: 12,
114
+ subOperations: [{ id: `${currency.id}_subOp1` }],
115
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
116
+ },
117
+ oldOp,
118
+ ],
119
+ });
120
+ });
121
+ test("handles empty operations (no old ops, no new ops) and blockHeight=0", async () => {
122
+ getBalanceMock.mockResolvedValue([{ asset: { type: "native" }, value: "0", locked: "0" }]);
123
+ extractBalanceMock.mockReturnValue({ value: "0", locked: "0" });
124
+ listOperationsMock.mockResolvedValue([[]]);
125
+ buildSubAccountsMock.mockReturnValue([]);
126
+ const getShape = (0, getAccountShape_1.genericGetAccountShape)(network, currency.id);
127
+ const result = await getShape({
128
+ address: `${currency.id}_addr2`,
129
+ initialAccount: undefined,
130
+ currency,
131
+ derivationMode: "",
132
+ }, { paginationConfig: {} });
133
+ expect(result).toMatchObject({
134
+ operations: [],
135
+ blockHeight: 0,
136
+ operationsCount: 0,
137
+ subAccounts: [],
138
+ balance: new bignumber_js_1.default(0),
139
+ spendableBalance: new bignumber_js_1.default(0),
140
+ });
141
+ });
142
+ });
143
+ });
144
+ //# sourceMappingURL=getAccountShape.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccountShape.test.js","sourceRoot":"","sources":["../../../../src/bridge/generic-alpaca/tests/getAccountShape.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/families/canton/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA8CnD,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/families/canton/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA4CnD,CAAC"}
@@ -8,10 +8,8 @@ exports.cantonConfig = {
8
8
  status: {
9
9
  type: "active",
10
10
  },
11
- // TBC
12
- nodeUrl: "https://wallet-validator-canton.ledger.com",
13
- nodeId: "figment",
14
- // TBC
11
+ nodeUrl: "https://canton-gateway.api.live.ledger.com/v1/node/ledger-mainnet-prd",
12
+ nodeId: "ledger-live-mainnet-prd",
15
13
  gatewayUrl: "https://canton-gateway.api.live.ledger.com",
16
14
  minReserve: 0,
17
15
  useGateway: true,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/families/canton/config.ts"],"names":[],"mappings":";;;AAEa,QAAA,YAAY,GAA+B;IACtD,8BAA8B,EAAE;QAC9B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,MAAM;YACN,OAAO,EAAE,4CAA4C;YACrD,MAAM,EAAE,SAAS;YACjB,MAAM;YACN,UAAU,EAAE,4CAA4C;YACxD,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,SAAS;SACvB;KACF;IACD,qCAAqC,EAAE;QACrC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,wDAAwD;YACjE,MAAM,EAAE,mBAAmB;YAC3B,UAAU,EAAE,iDAAiD;YAC7D,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,QAAQ;YACrB,kBAAkB,EAAE,QAAQ;SAC7B;KACF;IACD,uCAAuC,EAAE;QACvC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,0BAA0B;YACnC,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,UAAU;SACxB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/families/canton/config.ts"],"names":[],"mappings":";;;AAEa,QAAA,YAAY,GAA+B;IACtD,8BAA8B,EAAE;QAC9B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,uEAAuE;YAChF,MAAM,EAAE,yBAAyB;YACjC,UAAU,EAAE,4CAA4C;YACxD,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,SAAS;SACvB;KACF;IACD,qCAAqC,EAAE;QACrC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,wDAAwD;YACjE,MAAM,EAAE,mBAAmB;YAC3B,UAAU,EAAE,iDAAiD;YAC7D,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,QAAQ;YACrB,kBAAkB,EAAE,QAAQ;SAC7B;KACF;IACD,uCAAuC,EAAE;QACvC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,0BAA0B;YACnC,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,UAAU;SACxB;KACF;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/families/canton/setup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI7E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAcrD,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAES,CAAC;AAEtE,QAAA,MAAM,QAAQ,EAAE,QAAuD,CAAC;AAExE,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;CAAiB,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/families/canton/setup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI7E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAerD,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAES,CAAC;AAEtE,QAAA,MAAM,QAAQ,EAAE,QAAuD,CAAC;AAExE,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;CAAiB,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC"}
@@ -13,14 +13,14 @@ const live_signer_canton_1 = require("@ledgerhq/live-signer-canton");
13
13
  const setup_1 = require("../../bridge/setup");
14
14
  const mock_1 = __importDefault(require("./bridge/mock"));
15
15
  const config_1 = require("../../config");
16
- const currencies_1 = require("../../currencies");
17
16
  const createSigner = (transport) => {
18
17
  return new live_signer_canton_1.LegacySignerCanton(transport);
19
18
  };
20
- const getCurrencyConfig = () => {
21
- // Use devnet for development/testing
22
- const currencyId = (0, live_env_1.getEnv)("MOCK") ? "canton_network_devnet" : "canton_network_devnet";
23
- return (0, config_1.getCurrencyConfiguration)((0, currencies_1.getCryptoCurrencyById)(currencyId));
19
+ const getCurrencyConfig = (currency) => {
20
+ if (!currency) {
21
+ throw new Error("currency not defined");
22
+ }
23
+ return (0, config_1.getCurrencyConfiguration)(currency);
24
24
  };
25
25
  const bridge = (0, live_env_1.getEnv)("MOCK")
26
26
  ? mock_1.default
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/families/canton/setup.ts"],"names":[],"mappings":";AAAA,wFAAwF;;;;;;AAExF,8DAAmE;AACnE,iDAA4C;AAG5C,0EAA0D;AAE1D,yEAA0D;AAG1D,qEAAkE;AAClE,8CAAqF;AACrF,yDAA6C;AAE7C,yCAAwD;AACxD,iDAAyD;AAEzD,MAAM,YAAY,GAA+B,CAAC,SAAoB,EAAE,EAAE;IACxE,OAAO,IAAI,uCAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,qCAAqC;IACrC,MAAM,UAAU,GAAG,IAAA,iBAAM,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACtF,OAAO,IAAA,iCAAwB,EAAmB,IAAA,kCAAqB,EAAC,UAAU,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,MAAM,GAAoD,IAAA,iBAAM,EAAC,MAAM,CAAC;IAC5E,CAAC,CAAC,cAAgB;IAClB,CAAC,CAAC,IAAA,qBAAa,EAAC,IAAA,yBAAiB,EAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAM7D,wBAAM;AAJf,MAAM,QAAQ,GAAa,IAAA,sBAAc,EAAC,YAAY,EAAE,gBAAc,CAAC,CAAC;AAI7C,4BAAQ;AAFnC,MAAM,QAAQ,GAAG,IAAA,aAAY,GAAE,CAAC;AAEf,4BAAQ"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/families/canton/setup.ts"],"names":[],"mappings":";AAAA,wFAAwF;;;;;;AAExF,8DAAmE;AACnE,iDAA4C;AAG5C,0EAA0D;AAE1D,yEAA0D;AAG1D,qEAAkE;AAClE,8CAAqF;AACrF,yDAA6C;AAE7C,yCAAwD;AAGxD,MAAM,YAAY,GAA+B,CAAC,SAAoB,EAAE,EAAE;IACxE,OAAO,IAAI,uCAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAyB,EAAE,EAAE;IACtD,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACzC;IACD,OAAO,IAAA,iCAAwB,EAAmB,QAAQ,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,MAAM,GAAoD,IAAA,iBAAM,EAAC,MAAM,CAAC;IAC5E,CAAC,CAAC,cAAgB;IAClB,CAAC,CAAC,IAAA,qBAAa,EAAC,IAAA,yBAAiB,EAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAM7D,wBAAM;AAJf,MAAM,QAAQ,GAAa,IAAA,sBAAc,EAAC,YAAY,EAAE,gBAAc,CAAC,CAAC;AAI7C,4BAAQ;AAFnC,MAAM,QAAQ,GAAG,IAAA,aAAY,GAAE,CAAC;AAEf,4BAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetsData.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;EAyCA"}
1
+ {"version":3,"file":"useAssetsData.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;EAoDA"}
@@ -18,7 +18,7 @@ const emptyData = () => ({
18
18
  pagination: { nextCursor: "" },
19
19
  });
20
20
  function useAssetsData({ search, currencyIds, useCase, areCurrenciesFiltered, product, version, isStaging, }) {
21
- const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError } = (0, api_1.useGetAssetsDataInfiniteQuery)({
21
+ const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError, isFetchingNextPage, } = (0, api_1.useGetAssetsDataInfiniteQuery)({
22
22
  search,
23
23
  useCase,
24
24
  currencyIds: areCurrenciesFiltered ? currencyIds : undefined,
@@ -42,9 +42,10 @@ function useAssetsData({ search, currencyIds, useCase, areCurrenciesFiltered, pr
42
42
  }, emptyData());
43
43
  }, [data]);
44
44
  const hasMore = Boolean(joinedPages?.pagination.nextCursor);
45
+ const isInitialLoading = isLoading || (isFetching && !isFetchingNextPage);
45
46
  return {
46
47
  data: joinedPages,
47
- isLoading: isLoading || isFetching,
48
+ isLoading: isInitialLoading,
48
49
  error,
49
50
  loadNext: hasMore ? fetchNextPage : undefined,
50
51
  isSuccess,
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetsData.js","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,mDAA0E;AAG1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV;IACD,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,SAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GASV;IACC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GACtF,IAAA,mCAA6B,EAAC;QAC5B,MAAM;QACN,OAAO;QACP,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEL,MAAM,WAAW,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9E,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAElF,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAEvD,OAAO,GAAG,CAAC;QACb,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,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,SAAS,IAAI,UAAU;QAClC,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC7C,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC;AAzDD,sCAyDC"}
1
+ {"version":3,"file":"useAssetsData.js","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,mDAA0E;AAG1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV;IACD,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,SAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GASV;IACC,MAAM,EACJ,IAAI,EACJ,SAAS,EACT,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,OAAO,EACP,kBAAkB,GACnB,GAAG,IAAA,mCAA6B,EAAC;QAChC,MAAM;QACN,OAAO;QACP,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9E,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAElF,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAEvD,OAAO,GAAG,CAAC;QACb,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;AApED,sCAoEC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getAccountShape.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccountShape.test.d.ts","sourceRoot":"","sources":["../../../../src/bridge/generic-alpaca/tests/getAccountShape.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,139 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { genericGetAccountShape } from "../getAccountShape";
3
+ jest.mock("@ledgerhq/coin-framework/account/index", () => ({
4
+ encodeAccountId: jest.fn(() => "accId"),
5
+ }));
6
+ const mergeOpsMock = jest.fn();
7
+ jest.mock("@ledgerhq/coin-framework/bridge/jsHelpers", () => ({
8
+ mergeOps: (...args) => mergeOpsMock(...args),
9
+ }));
10
+ const listOperationsMock = jest.fn();
11
+ const getBalanceMock = jest.fn();
12
+ const lastBlockMock = jest.fn();
13
+ const getTokenFromAssetMock = jest.fn();
14
+ const chainSpecificGetAccountShapeMock = jest.fn();
15
+ jest.mock("../alpaca", () => ({
16
+ getAlpacaApi: () => ({
17
+ lastBlock: (...a) => lastBlockMock(...a),
18
+ getBalance: (...a) => getBalanceMock(...a),
19
+ listOperations: (...a) => listOperationsMock(...a),
20
+ getTokenFromAsset: (...a) => getTokenFromAssetMock(...a),
21
+ getChainSpecificRules: () => ({
22
+ getAccountShape: (...a) => chainSpecificGetAccountShapeMock(...a),
23
+ }),
24
+ }),
25
+ }));
26
+ const adaptCoreOperationToLiveOperationMock = jest.fn();
27
+ const extractBalanceMock = jest.fn();
28
+ jest.mock("../utils", () => ({
29
+ adaptCoreOperationToLiveOperation: (...a) => adaptCoreOperationToLiveOperationMock(...a),
30
+ extractBalance: (...a) => extractBalanceMock(...a),
31
+ }));
32
+ const inferSubOperationsMock = jest.fn();
33
+ jest.mock("@ledgerhq/coin-framework/serialization", () => ({
34
+ inferSubOperations: (...a) => inferSubOperationsMock(...a),
35
+ }));
36
+ const buildSubAccountsMock = jest.fn();
37
+ jest.mock("../buildSubAccounts", () => ({
38
+ buildSubAccounts: (...a) => buildSubAccountsMock(...a),
39
+ }));
40
+ // Test matrix for Stellar & XRP
41
+ const chains = [
42
+ { currency: { id: "stellar", name: "Stellar" }, network: "testnet" },
43
+ { currency: { id: "ripple", name: "XRP" }, network: "mainnet" },
44
+ ];
45
+ describe("genericGetAccountShape (stellar & xrp)", () => {
46
+ beforeEach(() => {
47
+ jest.clearAllMocks();
48
+ });
49
+ describe.each(chains)("$currency.id", ({ currency, network }) => {
50
+ test("builds account shape with existing operations, pagination and sub accounts", async () => {
51
+ const oldOp = {
52
+ hash: "h1",
53
+ blockHeight: 10,
54
+ type: "OPT_IN",
55
+ extra: { pagingToken: "pt1", assetReference: "ar1", assetOwner: "ow1" },
56
+ };
57
+ const initialAccount = { operations: [oldOp], blockHeight: 10 };
58
+ extractBalanceMock.mockReturnValue({ value: "1000", locked: "300" });
59
+ getBalanceMock.mockResolvedValue([
60
+ { asset: { type: "native" }, value: "1000", locked: "300" },
61
+ { asset: { type: "token", symbol: "TOK1" }, value: "42" },
62
+ { asset: { type: "token", symbol: "TOK_IGNORE" }, value: "5" },
63
+ ]);
64
+ getTokenFromAssetMock.mockImplementation(asset => asset.symbol === "TOK1" ? { id: `${currency.id}_token1` } : null);
65
+ const coreOp = { hash: "h2", height: 12 };
66
+ listOperationsMock.mockResolvedValue([[coreOp]]);
67
+ adaptCoreOperationToLiveOperationMock.mockImplementation((_accId, op) => ({
68
+ hash: op.hash,
69
+ type: "IN",
70
+ blockHeight: 12,
71
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
72
+ }));
73
+ mergeOpsMock.mockImplementation((oldOps, newOps) => [...newOps, ...oldOps]);
74
+ buildSubAccountsMock.mockReturnValue([
75
+ { id: `${currency.id}_subAcc1`, type: "TokenAccount" },
76
+ ]);
77
+ inferSubOperationsMock.mockImplementation(hash => hash === "h2" ? [{ id: `${currency.id}_subOp1` }] : []);
78
+ lastBlockMock.mockResolvedValue({ height: 123 });
79
+ const getShape = genericGetAccountShape(network, currency.id);
80
+ const result = await getShape({
81
+ address: `${currency.id}_addr1`,
82
+ initialAccount,
83
+ currency,
84
+ derivationMode: "",
85
+ }, { paginationConfig: {} });
86
+ expect(chainSpecificGetAccountShapeMock).toHaveBeenCalledWith(`${currency.id}_addr1`);
87
+ expect(listOperationsMock).toHaveBeenCalledWith(`${currency.id}_addr1`, {
88
+ minHeight: 11,
89
+ order: "asc",
90
+ lastPagingToken: "pt1",
91
+ });
92
+ const assetsBalancePassed = buildSubAccountsMock.mock.calls[0][0].assetsBalance;
93
+ expect(assetsBalancePassed).toHaveLength(1);
94
+ expect(assetsBalancePassed[0].asset.symbol).toBe("TOK1");
95
+ const assetOpsPassed = buildSubAccountsMock.mock.calls[0][0].operations;
96
+ expect(assetOpsPassed).toHaveLength(1);
97
+ expect(assetOpsPassed[0].hash).toBe("h2");
98
+ expect(result).toMatchObject({
99
+ balance: new BigNumber(1000),
100
+ spendableBalance: new BigNumber(700),
101
+ blockHeight: 123,
102
+ operationsCount: 2,
103
+ subAccounts: [{ id: `${currency.id}_subAcc1`, type: "TokenAccount" }],
104
+ operations: [
105
+ {
106
+ hash: "h2",
107
+ type: "IN",
108
+ blockHeight: 12,
109
+ subOperations: [{ id: `${currency.id}_subOp1` }],
110
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
111
+ },
112
+ oldOp,
113
+ ],
114
+ });
115
+ });
116
+ test("handles empty operations (no old ops, no new ops) and blockHeight=0", async () => {
117
+ getBalanceMock.mockResolvedValue([{ asset: { type: "native" }, value: "0", locked: "0" }]);
118
+ extractBalanceMock.mockReturnValue({ value: "0", locked: "0" });
119
+ listOperationsMock.mockResolvedValue([[]]);
120
+ buildSubAccountsMock.mockReturnValue([]);
121
+ const getShape = genericGetAccountShape(network, currency.id);
122
+ const result = await getShape({
123
+ address: `${currency.id}_addr2`,
124
+ initialAccount: undefined,
125
+ currency,
126
+ derivationMode: "",
127
+ }, { paginationConfig: {} });
128
+ expect(result).toMatchObject({
129
+ operations: [],
130
+ blockHeight: 0,
131
+ operationsCount: 0,
132
+ subAccounts: [],
133
+ balance: new BigNumber(0),
134
+ spendableBalance: new BigNumber(0),
135
+ });
136
+ });
137
+ });
138
+ });
139
+ //# sourceMappingURL=getAccountShape.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccountShape.test.js","sourceRoot":"","sources":["../../../../src/bridge/generic-alpaca/tests/getAccountShape.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/families/canton/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA8CnD,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/families/canton/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA4CnD,CAAC"}
@@ -5,10 +5,8 @@ export const cantonConfig = {
5
5
  status: {
6
6
  type: "active",
7
7
  },
8
- // TBC
9
- nodeUrl: "https://wallet-validator-canton.ledger.com",
10
- nodeId: "figment",
11
- // TBC
8
+ nodeUrl: "https://canton-gateway.api.live.ledger.com/v1/node/ledger-mainnet-prd",
9
+ nodeId: "ledger-live-mainnet-prd",
12
10
  gatewayUrl: "https://canton-gateway.api.live.ledger.com",
13
11
  minReserve: 0,
14
12
  useGateway: true,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/families/canton/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD,8BAA8B,EAAE;QAC9B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,MAAM;YACN,OAAO,EAAE,4CAA4C;YACrD,MAAM,EAAE,SAAS;YACjB,MAAM;YACN,UAAU,EAAE,4CAA4C;YACxD,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,SAAS;SACvB;KACF;IACD,qCAAqC,EAAE;QACrC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,wDAAwD;YACjE,MAAM,EAAE,mBAAmB;YAC3B,UAAU,EAAE,iDAAiD;YAC7D,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,QAAQ;YACrB,kBAAkB,EAAE,QAAQ;SAC7B;KACF;IACD,uCAAuC,EAAE;QACvC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,0BAA0B;YACnC,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,UAAU;SACxB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/families/canton/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD,8BAA8B,EAAE;QAC9B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,uEAAuE;YAChF,MAAM,EAAE,yBAAyB;YACjC,UAAU,EAAE,4CAA4C;YACxD,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,SAAS;SACvB;KACF;IACD,qCAAqC,EAAE;QACrC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,wDAAwD;YACjE,MAAM,EAAE,mBAAmB;YAC3B,UAAU,EAAE,iDAAiD;YAC7D,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,QAAQ;YACrB,kBAAkB,EAAE,QAAQ;SAC7B;KACF;IACD,uCAAuC,EAAE;QACvC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE,0BAA0B;YACnC,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,UAAU;SACxB;KACF;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/families/canton/setup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI7E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAcrD,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAES,CAAC;AAEtE,QAAA,MAAM,QAAQ,EAAE,QAAuD,CAAC;AAExE,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;CAAiB,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/families/canton/setup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI7E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAerD,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAES,CAAC;AAEtE,QAAA,MAAM,QAAQ,EAAE,QAAuD,CAAC;AAExE,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;CAAiB,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC"}
@@ -7,14 +7,14 @@ import { LegacySignerCanton } from "@ledgerhq/live-signer-canton";
7
7
  import { createResolver, executeWithSigner } from "../../bridge/setup";
8
8
  import cantonBridgeMock from "./bridge/mock";
9
9
  import { getCurrencyConfiguration } from "../../config";
10
- import { getCryptoCurrencyById } from "../../currencies";
11
10
  const createSigner = (transport) => {
12
11
  return new LegacySignerCanton(transport);
13
12
  };
14
- const getCurrencyConfig = () => {
15
- // Use devnet for development/testing
16
- const currencyId = getEnv("MOCK") ? "canton_network_devnet" : "canton_network_devnet";
17
- return getCurrencyConfiguration(getCryptoCurrencyById(currencyId));
13
+ const getCurrencyConfig = (currency) => {
14
+ if (!currency) {
15
+ throw new Error("currency not defined");
16
+ }
17
+ return getCurrencyConfiguration(currency);
18
18
  };
19
19
  const bridge = getEnv("MOCK")
20
20
  ? cantonBridgeMock
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/families/canton/setup.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAE1D,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAG1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAgB,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,gBAAgB,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,YAAY,GAA+B,CAAC,SAAoB,EAAE,EAAE;IACxE,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,qCAAqC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACtF,OAAO,wBAAwB,CAAmB,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,MAAM,GAAoD,MAAM,CAAC,MAAM,CAAC;IAC5E,CAAC,CAAC,gBAAgB;IAClB,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAEtE,MAAM,QAAQ,GAAa,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAExE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/families/canton/setup.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAE1D,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAG1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAgB,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,gBAAgB,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAGxD,MAAM,YAAY,GAA+B,CAAC,SAAoB,EAAE,EAAE;IACxE,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAyB,EAAE,EAAE;IACtD,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACzC;IACD,OAAO,wBAAwB,CAAmB,QAAQ,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,MAAM,GAAoD,MAAM,CAAC,MAAM,CAAC;IAC5E,CAAC,CAAC,gBAAgB;IAClB,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAEtE,MAAM,QAAQ,GAAa,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAExE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetsData.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;EAyCA"}
1
+ {"version":3,"file":"useAssetsData.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;EAoDA"}
@@ -15,7 +15,7 @@ const emptyData = () => ({
15
15
  pagination: { nextCursor: "" },
16
16
  });
17
17
  export function useAssetsData({ search, currencyIds, useCase, areCurrenciesFiltered, product, version, isStaging, }) {
18
- const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError } = useGetAssetsDataInfiniteQuery({
18
+ const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError, isFetchingNextPage, } = useGetAssetsDataInfiniteQuery({
19
19
  search,
20
20
  useCase,
21
21
  currencyIds: areCurrenciesFiltered ? currencyIds : undefined,
@@ -39,9 +39,10 @@ export function useAssetsData({ search, currencyIds, useCase, areCurrenciesFilte
39
39
  }, emptyData());
40
40
  }, [data]);
41
41
  const hasMore = Boolean(joinedPages?.pagination.nextCursor);
42
+ const isInitialLoading = isLoading || (isFetching && !isFetchingNextPage);
42
43
  return {
43
44
  data: joinedPages,
44
- isLoading: isLoading || isFetching,
45
+ isLoading: isInitialLoading,
45
46
  error,
46
47
  loadNext: hasMore ? fetchNextPage : undefined,
47
48
  isSuccess,
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetsData.js","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAG1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV;IACD,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GASV;IACC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GACtF,6BAA6B,CAAC;QAC5B,MAAM;QACN,OAAO;QACP,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEL,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9E,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAElF,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAEvD,OAAO,GAAG,CAAC;QACb,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,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,SAAS,IAAI,UAAU;QAClC,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC7C,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useAssetsData.js","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAG1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV;IACD,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GASV;IACC,MAAM,EACJ,IAAI,EACJ,SAAS,EACT,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,OAAO,EACP,kBAAkB,GACnB,GAAG,6BAA6B,CAAC;QAChC,MAAM;QACN,OAAO;QACP,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9E,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAElF,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAEvD,OAAO,GAAG,CAAC;QACb,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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ledgerhq/live-common",
3
3
  "description": "Common ground for the Ledger Live apps",
4
- "version": "34.48.0-nightly.5",
4
+ "version": "34.48.0-nightly.7",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/LedgerHQ/ledger-live.git"
@@ -166,36 +166,36 @@
166
166
  "xstate": "^5.19.2",
167
167
  "yargs": "^17.0.0",
168
168
  "zod": "^3.22.4",
169
- "@ledgerhq/coin-algorand": "^0.10.1-nightly.4",
170
- "@ledgerhq/coin-canton": "^0.5.0-nightly.4",
171
- "@ledgerhq/coin-cardano": "^0.12.1-nightly.4",
172
- "@ledgerhq/coin-casper": "^2.1.1-nightly.4",
173
- "@ledgerhq/coin-aptos": "^3.3.0-nightly.4",
174
- "@ledgerhq/coin-celo": "^1.4.0-nightly.4",
175
- "@ledgerhq/coin-cosmos": "^0.17.1-nightly.4",
176
- "@ledgerhq/coin-bitcoin": "^0.21.1-nightly.4",
177
- "@ledgerhq/coin-evm": "^2.30.0-nightly.4",
178
- "@ledgerhq/coin-filecoin": "^1.11.1-nightly.4",
179
- "@ledgerhq/coin-framework": "^6.4.0-nightly.4",
180
- "@ledgerhq/coin-icon": "^0.12.1-nightly.4",
181
- "@ledgerhq/coin-hedera": "^1.11.1-nightly.4",
182
- "@ledgerhq/coin-internet_computer": "^1.8.1-nightly.4",
183
- "@ledgerhq/coin-kaspa": "^1.1.0-nightly.5",
184
- "@ledgerhq/coin-mina": "^1.2.1-nightly.4",
185
- "@ledgerhq/coin-multiversx": "^0.5.1-nightly.4",
186
- "@ledgerhq/coin-near": "^0.13.1-nightly.4",
187
- "@ledgerhq/coin-polkadot": "^6.10.0-nightly.4",
188
- "@ledgerhq/coin-solana": "^0.32.1-nightly.4",
189
- "@ledgerhq/coin-stacks": "^0.9.1-nightly.4",
190
- "@ledgerhq/coin-stellar": "^6.4.0-nightly.4",
191
- "@ledgerhq/coin-sui": "^0.13.0-nightly.4",
192
- "@ledgerhq/coin-tezos": "^6.4.0-nightly.4",
193
- "@ledgerhq/coin-ton": "^0.14.1-nightly.4",
194
- "@ledgerhq/coin-tron": "^5.4.0-nightly.4",
195
- "@ledgerhq/coin-vechain": "^2.10.0-nightly.4",
169
+ "@ledgerhq/coin-algorand": "^0.10.1-nightly.5",
170
+ "@ledgerhq/coin-aptos": "^3.3.0-nightly.5",
171
+ "@ledgerhq/coin-bitcoin": "^0.21.1-nightly.5",
172
+ "@ledgerhq/coin-canton": "^0.5.0-nightly.5",
173
+ "@ledgerhq/coin-cardano": "^0.12.1-nightly.5",
174
+ "@ledgerhq/coin-casper": "^2.1.1-nightly.5",
175
+ "@ledgerhq/coin-celo": "^1.4.0-nightly.5",
176
+ "@ledgerhq/coin-cosmos": "^0.17.1-nightly.5",
177
+ "@ledgerhq/coin-evm": "^2.30.0-nightly.5",
178
+ "@ledgerhq/coin-filecoin": "^1.11.1-nightly.5",
179
+ "@ledgerhq/coin-framework": "^6.4.0-nightly.5",
180
+ "@ledgerhq/coin-hedera": "^1.11.1-nightly.5",
181
+ "@ledgerhq/coin-icon": "^0.12.1-nightly.5",
182
+ "@ledgerhq/coin-internet_computer": "^1.8.1-nightly.5",
183
+ "@ledgerhq/coin-kaspa": "^1.1.0-nightly.6",
184
+ "@ledgerhq/coin-mina": "^1.2.1-nightly.5",
185
+ "@ledgerhq/coin-multiversx": "^0.5.1-nightly.5",
186
+ "@ledgerhq/coin-near": "^0.13.1-nightly.5",
187
+ "@ledgerhq/coin-polkadot": "^6.10.0-nightly.5",
188
+ "@ledgerhq/coin-solana": "^0.32.1-nightly.5",
189
+ "@ledgerhq/coin-stacks": "^0.9.1-nightly.5",
190
+ "@ledgerhq/coin-stellar": "^6.4.0-nightly.5",
191
+ "@ledgerhq/coin-sui": "^0.13.0-nightly.5",
192
+ "@ledgerhq/coin-tezos": "^6.4.0-nightly.5",
193
+ "@ledgerhq/coin-ton": "^0.14.1-nightly.5",
194
+ "@ledgerhq/coin-tron": "^5.4.0-nightly.5",
195
+ "@ledgerhq/coin-vechain": "^2.10.0-nightly.5",
196
+ "@ledgerhq/coin-xrp": "^7.4.0-nightly.6",
196
197
  "@ledgerhq/crypto-icons-ui": "^1.19.0-nightly.1",
197
- "@ledgerhq/coin-xrp": "^7.4.0-nightly.4",
198
- "@ledgerhq/cryptoassets": "^13.28.0-nightly.2",
198
+ "@ledgerhq/cryptoassets": "^13.28.0-nightly.3",
199
199
  "@ledgerhq/device-core": "^0.6.3-nightly.2",
200
200
  "@ledgerhq/devices": "8.5.1",
201
201
  "@ledgerhq/errors": "^6.25.0",
@@ -213,31 +213,31 @@
213
213
  "@ledgerhq/hw-app-near": "^6.31.6",
214
214
  "@ledgerhq/hw-app-polkadot": "^6.34.6",
215
215
  "@ledgerhq/hw-app-str": "^7.2.6",
216
- "@ledgerhq/hw-app-tezos": "^6.31.6",
217
216
  "@ledgerhq/hw-app-sui": "^1.4.0",
217
+ "@ledgerhq/hw-app-tezos": "^6.31.6",
218
218
  "@ledgerhq/hw-app-trx": "^6.31.6",
219
- "@ledgerhq/hw-app-vet": "^0.6.0-nightly.2",
219
+ "@ledgerhq/hw-app-vet": "^0.6.0-nightly.3",
220
220
  "@ledgerhq/hw-app-xrp": "^6.32.4",
221
221
  "@ledgerhq/hw-transport": "^6.31.10",
222
222
  "@ledgerhq/hw-transport-mocker": "^6.29.10",
223
223
  "@ledgerhq/ledger-cal-service": "^1.3.2-nightly.1",
224
224
  "@ledgerhq/live-config": "^3.2.0",
225
- "@ledgerhq/live-countervalues": "^0.7.1-nightly.4",
226
- "@ledgerhq/live-countervalues-react": "^0.5.2-nightly.4",
225
+ "@ledgerhq/live-countervalues": "^0.7.1-nightly.5",
226
+ "@ledgerhq/live-countervalues-react": "^0.5.2-nightly.5",
227
227
  "@ledgerhq/live-dmk-shared": "^0.12.3",
228
228
  "@ledgerhq/live-env": "^2.16.0-nightly.1",
229
229
  "@ledgerhq/live-hooks": "0.1.0",
230
230
  "@ledgerhq/live-network": "^2.0.17-nightly.1",
231
- "@ledgerhq/live-nft": "^0.8.20-nightly.4",
231
+ "@ledgerhq/live-nft": "^0.8.20-nightly.5",
232
232
  "@ledgerhq/live-promise": "^0.1.1",
233
- "@ledgerhq/live-signer-canton": "^0.2.4-nightly.4",
234
- "@ledgerhq/live-signer-evm": "^0.7.5-nightly.4",
235
- "@ledgerhq/live-signer-solana": "^0.5.5-nightly.4",
236
- "@ledgerhq/live-wallet": "^0.13.1-nightly.5",
233
+ "@ledgerhq/live-signer-canton": "^0.2.4-nightly.5",
234
+ "@ledgerhq/live-signer-evm": "^0.7.5-nightly.5",
235
+ "@ledgerhq/live-signer-solana": "^0.5.5-nightly.5",
236
+ "@ledgerhq/live-wallet": "^0.13.1-nightly.6",
237
237
  "@ledgerhq/logs": "^6.13.0",
238
238
  "@ledgerhq/speculos-transport": "^0.2.10-nightly.1",
239
- "@ledgerhq/wallet-api-exchange-module": "^0.16.0",
240
- "@ledgerhq/wallet-api-acre-module": "^0.7.0-nightly.0"
239
+ "@ledgerhq/wallet-api-acre-module": "^0.7.0-nightly.0",
240
+ "@ledgerhq/wallet-api-exchange-module": "^0.16.0"
241
241
  },
242
242
  "devDependencies": {
243
243
  "@solana/web3.js": "1.95.4",
@@ -0,0 +1,173 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { genericGetAccountShape } from "../getAccountShape";
3
+
4
+ jest.mock("@ledgerhq/coin-framework/account/index", () => ({
5
+ encodeAccountId: jest.fn(() => "accId"),
6
+ }));
7
+
8
+ const mergeOpsMock = jest.fn();
9
+ jest.mock("@ledgerhq/coin-framework/bridge/jsHelpers", () => ({
10
+ mergeOps: (...args: any[]) => mergeOpsMock(...args),
11
+ }));
12
+
13
+ const listOperationsMock = jest.fn();
14
+ const getBalanceMock = jest.fn();
15
+ const lastBlockMock = jest.fn();
16
+ const getTokenFromAssetMock = jest.fn();
17
+ const chainSpecificGetAccountShapeMock = jest.fn();
18
+ jest.mock("../alpaca", () => ({
19
+ getAlpacaApi: () => ({
20
+ lastBlock: (...a: any[]) => lastBlockMock(...a),
21
+ getBalance: (...a: any[]) => getBalanceMock(...a),
22
+ listOperations: (...a: any[]) => listOperationsMock(...a),
23
+ getTokenFromAsset: (...a: any[]) => getTokenFromAssetMock(...a),
24
+ getChainSpecificRules: () => ({
25
+ getAccountShape: (...a: any[]) => chainSpecificGetAccountShapeMock(...a),
26
+ }),
27
+ }),
28
+ }));
29
+
30
+ const adaptCoreOperationToLiveOperationMock = jest.fn();
31
+ const extractBalanceMock = jest.fn();
32
+ jest.mock("../utils", () => ({
33
+ adaptCoreOperationToLiveOperation: (...a: any[]) => adaptCoreOperationToLiveOperationMock(...a),
34
+ extractBalance: (...a: any[]) => extractBalanceMock(...a),
35
+ }));
36
+
37
+ const inferSubOperationsMock = jest.fn();
38
+ jest.mock("@ledgerhq/coin-framework/serialization", () => ({
39
+ inferSubOperations: (...a: any[]) => inferSubOperationsMock(...a),
40
+ }));
41
+
42
+ const buildSubAccountsMock = jest.fn();
43
+ jest.mock("../buildSubAccounts", () => ({
44
+ buildSubAccounts: (...a: any[]) => buildSubAccountsMock(...a),
45
+ }));
46
+
47
+ // Test matrix for Stellar & XRP
48
+ const chains = [
49
+ { currency: { id: "stellar", name: "Stellar" }, network: "testnet" },
50
+ { currency: { id: "ripple", name: "XRP" }, network: "mainnet" },
51
+ ];
52
+
53
+ describe("genericGetAccountShape (stellar & xrp)", () => {
54
+ beforeEach(() => {
55
+ jest.clearAllMocks();
56
+ });
57
+
58
+ describe.each(chains)("$currency.id", ({ currency, network }) => {
59
+ test("builds account shape with existing operations, pagination and sub accounts", async () => {
60
+ const oldOp = {
61
+ hash: "h1",
62
+ blockHeight: 10,
63
+ type: "OPT_IN",
64
+ extra: { pagingToken: "pt1", assetReference: "ar1", assetOwner: "ow1" },
65
+ };
66
+ const initialAccount = { operations: [oldOp], blockHeight: 10 };
67
+
68
+ extractBalanceMock.mockReturnValue({ value: "1000", locked: "300" });
69
+ getBalanceMock.mockResolvedValue([
70
+ { asset: { type: "native" }, value: "1000", locked: "300" },
71
+ { asset: { type: "token", symbol: "TOK1" }, value: "42" },
72
+ { asset: { type: "token", symbol: "TOK_IGNORE" }, value: "5" },
73
+ ]);
74
+
75
+ getTokenFromAssetMock.mockImplementation(asset =>
76
+ asset.symbol === "TOK1" ? { id: `${currency.id}_token1` } : null,
77
+ );
78
+
79
+ const coreOp = { hash: "h2", height: 12 };
80
+ listOperationsMock.mockResolvedValue([[coreOp]]);
81
+
82
+ adaptCoreOperationToLiveOperationMock.mockImplementation((_accId, op) => ({
83
+ hash: op.hash,
84
+ type: "IN",
85
+ blockHeight: 12,
86
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
87
+ }));
88
+
89
+ mergeOpsMock.mockImplementation((oldOps, newOps) => [...newOps, ...oldOps]);
90
+
91
+ buildSubAccountsMock.mockReturnValue([
92
+ { id: `${currency.id}_subAcc1`, type: "TokenAccount" },
93
+ ]);
94
+
95
+ inferSubOperationsMock.mockImplementation(hash =>
96
+ hash === "h2" ? [{ id: `${currency.id}_subOp1` }] : [],
97
+ );
98
+
99
+ lastBlockMock.mockResolvedValue({ height: 123 });
100
+
101
+ const getShape = genericGetAccountShape(network, currency.id);
102
+ const result = await getShape(
103
+ {
104
+ address: `${currency.id}_addr1`,
105
+ initialAccount,
106
+ currency,
107
+ derivationMode: "",
108
+ } as any,
109
+ { paginationConfig: {} as any },
110
+ );
111
+
112
+ expect(chainSpecificGetAccountShapeMock).toHaveBeenCalledWith(`${currency.id}_addr1`);
113
+
114
+ expect(listOperationsMock).toHaveBeenCalledWith(`${currency.id}_addr1`, {
115
+ minHeight: 11,
116
+ order: "asc",
117
+ lastPagingToken: "pt1",
118
+ });
119
+
120
+ const assetsBalancePassed = buildSubAccountsMock.mock.calls[0][0].assetsBalance;
121
+ expect(assetsBalancePassed).toHaveLength(1);
122
+ expect(assetsBalancePassed[0].asset.symbol).toBe("TOK1");
123
+
124
+ const assetOpsPassed = buildSubAccountsMock.mock.calls[0][0].operations;
125
+ expect(assetOpsPassed).toHaveLength(1);
126
+ expect(assetOpsPassed[0].hash).toBe("h2");
127
+
128
+ expect(result).toMatchObject({
129
+ balance: new BigNumber(1000),
130
+ spendableBalance: new BigNumber(700),
131
+ blockHeight: 123,
132
+ operationsCount: 2,
133
+ subAccounts: [{ id: `${currency.id}_subAcc1`, type: "TokenAccount" }],
134
+ operations: [
135
+ {
136
+ hash: "h2",
137
+ type: "IN",
138
+ blockHeight: 12,
139
+ subOperations: [{ id: `${currency.id}_subOp1` }],
140
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
141
+ },
142
+ oldOp,
143
+ ],
144
+ });
145
+ });
146
+
147
+ test("handles empty operations (no old ops, no new ops) and blockHeight=0", async () => {
148
+ getBalanceMock.mockResolvedValue([{ asset: { type: "native" }, value: "0", locked: "0" }]);
149
+ extractBalanceMock.mockReturnValue({ value: "0", locked: "0" });
150
+ listOperationsMock.mockResolvedValue([[]]);
151
+ buildSubAccountsMock.mockReturnValue([]);
152
+
153
+ const getShape = genericGetAccountShape(network, currency.id);
154
+ const result = await getShape(
155
+ {
156
+ address: `${currency.id}_addr2`,
157
+ initialAccount: undefined,
158
+ currency,
159
+ derivationMode: "",
160
+ } as any,
161
+ { paginationConfig: {} as any },
162
+ );
163
+ expect(result).toMatchObject({
164
+ operations: [], // Empty array check for `operations`
165
+ blockHeight: 0,
166
+ operationsCount: 0,
167
+ subAccounts: [], // Empty array check for `subAccounts`
168
+ balance: new BigNumber(0),
169
+ spendableBalance: new BigNumber(0),
170
+ });
171
+ });
172
+ });
173
+ });
@@ -7,10 +7,8 @@ export const cantonConfig: Record<string, ConfigInfo> = {
7
7
  status: {
8
8
  type: "active",
9
9
  },
10
- // TBC
11
- nodeUrl: "https://wallet-validator-canton.ledger.com",
12
- nodeId: "figment",
13
- // TBC
10
+ nodeUrl: "https://canton-gateway.api.live.ledger.com/v1/node/ledger-mainnet-prd",
11
+ nodeId: "ledger-live-mainnet-prd",
14
12
  gatewayUrl: "https://canton-gateway.api.live.ledger.com",
15
13
  minReserve: 0,
16
14
  useGateway: true,
@@ -14,16 +14,17 @@ import { CreateSigner, createResolver, executeWithSigner } from "../../bridge/se
14
14
  import cantonBridgeMock from "./bridge/mock";
15
15
  import { Resolver } from "../../hw/getAddress/types";
16
16
  import { getCurrencyConfiguration } from "../../config";
17
- import { getCryptoCurrencyById } from "../../currencies";
17
+ import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
18
18
 
19
19
  const createSigner: CreateSigner<CantonSigner> = (transport: Transport) => {
20
20
  return new LegacySignerCanton(transport);
21
21
  };
22
22
 
23
- const getCurrencyConfig = () => {
24
- // Use devnet for development/testing
25
- const currencyId = getEnv("MOCK") ? "canton_network_devnet" : "canton_network_devnet";
26
- return getCurrencyConfiguration<CantonCoinConfig>(getCryptoCurrencyById(currencyId));
23
+ const getCurrencyConfig = (currency?: CryptoCurrency) => {
24
+ if (!currency) {
25
+ throw new Error("currency not defined");
26
+ }
27
+ return getCurrencyConfiguration<CantonCoinConfig>(currency);
27
28
  };
28
29
 
29
30
  const bridge: Bridge<Transaction, Account, TransactionStatus> = getEnv("MOCK")
@@ -34,15 +34,24 @@ export function useAssetsData({
34
34
  version: string;
35
35
  isStaging?: boolean;
36
36
  }) {
37
- const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError } =
38
- useGetAssetsDataInfiniteQuery({
39
- search,
40
- useCase,
41
- currencyIds: areCurrenciesFiltered ? currencyIds : undefined,
42
- product,
43
- version,
44
- isStaging,
45
- });
37
+ const {
38
+ data,
39
+ isLoading,
40
+ error,
41
+ fetchNextPage,
42
+ isSuccess,
43
+ refetch,
44
+ isFetching,
45
+ isError,
46
+ isFetchingNextPage,
47
+ } = useGetAssetsDataInfiniteQuery({
48
+ search,
49
+ useCase,
50
+ currencyIds: areCurrenciesFiltered ? currencyIds : undefined,
51
+ product,
52
+ version,
53
+ isStaging,
54
+ });
46
55
 
47
56
  const joinedPages = useMemo(() => {
48
57
  return data?.pages.reduce<AssetsDataWithPagination>((acc, page) => {
@@ -65,9 +74,11 @@ export function useAssetsData({
65
74
 
66
75
  const hasMore = Boolean(joinedPages?.pagination.nextCursor);
67
76
 
77
+ const isInitialLoading = isLoading || (isFetching && !isFetchingNextPage);
78
+
68
79
  return {
69
80
  data: joinedPages,
70
- isLoading: isLoading || isFetching,
81
+ isLoading: isInitialLoading,
71
82
  error,
72
83
  loadNext: hasMore ? fetchNextPage : undefined,
73
84
  isSuccess,