@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.
- package/lib/bridge/generic-alpaca/tests/getAccountShape.test.d.ts +2 -0
- package/lib/bridge/generic-alpaca/tests/getAccountShape.test.d.ts.map +1 -0
- package/lib/bridge/generic-alpaca/tests/getAccountShape.test.js +144 -0
- package/lib/bridge/generic-alpaca/tests/getAccountShape.test.js.map +1 -0
- package/lib/families/canton/config.d.ts.map +1 -1
- package/lib/families/canton/config.js +2 -4
- package/lib/families/canton/config.js.map +1 -1
- package/lib/families/canton/setup.d.ts.map +1 -1
- package/lib/families/canton/setup.js +5 -5
- package/lib/families/canton/setup.js.map +1 -1
- package/lib/modularDrawer/hooks/useAssetsData.d.ts.map +1 -1
- package/lib/modularDrawer/hooks/useAssetsData.js +3 -2
- package/lib/modularDrawer/hooks/useAssetsData.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/tests/getAccountShape.test.d.ts +2 -0
- package/lib-es/bridge/generic-alpaca/tests/getAccountShape.test.d.ts.map +1 -0
- package/lib-es/bridge/generic-alpaca/tests/getAccountShape.test.js +139 -0
- package/lib-es/bridge/generic-alpaca/tests/getAccountShape.test.js.map +1 -0
- package/lib-es/families/canton/config.d.ts.map +1 -1
- package/lib-es/families/canton/config.js +2 -4
- package/lib-es/families/canton/config.js.map +1 -1
- package/lib-es/families/canton/setup.d.ts.map +1 -1
- package/lib-es/families/canton/setup.js +5 -5
- package/lib-es/families/canton/setup.js.map +1 -1
- package/lib-es/modularDrawer/hooks/useAssetsData.d.ts.map +1 -1
- package/lib-es/modularDrawer/hooks/useAssetsData.js +3 -2
- package/lib-es/modularDrawer/hooks/useAssetsData.js.map +1 -1
- package/package.json +41 -41
- package/src/bridge/generic-alpaca/tests/getAccountShape.test.ts +173 -0
- package/src/families/canton/config.ts +2 -4
- package/src/families/canton/setup.ts +6 -5
- package/src/modularDrawer/hooks/useAssetsData.ts +21 -10
@@ -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":";;;;;AAAA,gEAAqC;AACrC,wDAA4D;AAE5D,IAAI,CAAC,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC,CAAC;IACzD,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;CACxC,CAAC,CAAC,CAAC;AAEJ,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAC/B,IAAI,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,QAAQ,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CACpD,CAAC,CAAC,CAAC;AAEJ,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACrC,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACjC,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAChC,MAAM,qBAAqB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACxC,MAAM,gCAAgC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACnD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QACnB,SAAS,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/C,UAAU,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjD,cAAc,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACzD,iBAAiB,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC/D,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5B,eAAe,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAC;SACzE,CAAC;KACH,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,MAAM,qCAAqC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACrC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3B,iCAAiC,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,qCAAqC,CAAC,GAAG,CAAC,CAAC;IAC/F,cAAc,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;CAC1D,CAAC,CAAC,CAAC;AAEJ,MAAM,sBAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACzC,IAAI,CAAC,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC,CAAC;IACzD,kBAAkB,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;CAClE,CAAC,CAAC,CAAC;AAEJ,MAAM,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACvC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,gBAAgB,EAAE,CAAC,GAAG,CAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;CAC9D,CAAC,CAAC,CAAC;AAEJ,gCAAgC;AAChC,MAAM,MAAM,GAAG;IACb,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;IACpE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;CAChE,CAAC;AAEF,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9D,IAAI,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,KAAK,GAAG;gBACZ,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;aACxE,CAAC;YACF,MAAM,cAAc,GAAG,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YAEhE,kBAAkB,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACrE,cAAc,CAAC,iBAAiB,CAAC;gBAC/B,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC3D,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;gBACzD,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;aAC/D,CAAC,CAAC;YAEH,qBAAqB,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAC/C,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CACjE,CAAC;YAEF,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC1C,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEjD,qCAAqC,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxE,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,EAAE;gBACf,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;aACpD,CAAC,CAAC,CAAC;YAEJ,YAAY,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;YAE5E,oBAAoB,CAAC,eAAe,CAAC;gBACnC,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE;aACvD,CAAC,CAAC;YAEH,sBAAsB,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAC/C,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CACvD,CAAC;YAEF,aAAa,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAEjD,MAAM,QAAQ,GAAG,IAAA,wCAAsB,EAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B;gBACE,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE,QAAQ;gBAC/B,cAAc;gBACd,QAAQ;gBACR,cAAc,EAAE,EAAE;aACZ,EACR,EAAE,gBAAgB,EAAE,EAAS,EAAE,CAChC,CAAC;YAEF,MAAM,CAAC,gCAAgC,CAAC,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;YAEtF,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC,EAAE,QAAQ,EAAE;gBACtE,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,KAAK;gBACZ,eAAe,EAAE,KAAK;aACvB,CAAC,CAAC;YAEH,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAChF,MAAM,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEzD,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YACxE,MAAM,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE1C,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;gBAC3B,OAAO,EAAE,IAAI,sBAAS,CAAC,IAAI,CAAC;gBAC5B,gBAAgB,EAAE,IAAI,sBAAS,CAAC,GAAG,CAAC;gBACpC,WAAW,EAAE,GAAG;gBAChB,eAAe,EAAE,CAAC;gBAClB,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;gBACrE,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,IAAI;wBACV,WAAW,EAAE,EAAE;wBACf,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;wBAChD,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;qBACpD;oBACD,KAAK;iBACN;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACrF,cAAc,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3F,kBAAkB,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAChE,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAEzC,MAAM,QAAQ,GAAG,IAAA,wCAAsB,EAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B;gBACE,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE,QAAQ;gBAC/B,cAAc,EAAE,SAAS;gBACzB,QAAQ;gBACR,cAAc,EAAE,EAAE;aACZ,EACR,EAAE,gBAAgB,EAAE,EAAS,EAAE,CAChC,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;gBAC3B,UAAU,EAAE,EAAE;gBACd,WAAW,EAAE,CAAC;gBACd,eAAe,EAAE,CAAC;gBAClB,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC;gBACzB,gBAAgB,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC;aACnC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
@@ -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,
|
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
|
-
|
12
|
-
|
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,
|
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;
|
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
|
-
|
22
|
-
|
23
|
-
|
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;
|
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;;;;;;;;
|
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:
|
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,
|
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 @@
|
|
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,
|
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
|
-
|
9
|
-
|
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,
|
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;
|
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
|
-
|
16
|
-
|
17
|
-
|
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;
|
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;;;;;;;;
|
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:
|
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,
|
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.
|
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.
|
170
|
-
"@ledgerhq/coin-
|
171
|
-
"@ledgerhq/coin-
|
172
|
-
"@ledgerhq/coin-
|
173
|
-
"@ledgerhq/coin-
|
174
|
-
"@ledgerhq/coin-
|
175
|
-
"@ledgerhq/coin-
|
176
|
-
"@ledgerhq/coin-
|
177
|
-
"@ledgerhq/coin-evm": "^2.30.0-nightly.
|
178
|
-
"@ledgerhq/coin-filecoin": "^1.11.1-nightly.
|
179
|
-
"@ledgerhq/coin-framework": "^6.4.0-nightly.
|
180
|
-
"@ledgerhq/coin-
|
181
|
-
"@ledgerhq/coin-
|
182
|
-
"@ledgerhq/coin-internet_computer": "^1.8.1-nightly.
|
183
|
-
"@ledgerhq/coin-kaspa": "^1.1.0-nightly.
|
184
|
-
"@ledgerhq/coin-mina": "^1.2.1-nightly.
|
185
|
-
"@ledgerhq/coin-multiversx": "^0.5.1-nightly.
|
186
|
-
"@ledgerhq/coin-near": "^0.13.1-nightly.
|
187
|
-
"@ledgerhq/coin-polkadot": "^6.10.0-nightly.
|
188
|
-
"@ledgerhq/coin-solana": "^0.32.1-nightly.
|
189
|
-
"@ledgerhq/coin-stacks": "^0.9.1-nightly.
|
190
|
-
"@ledgerhq/coin-stellar": "^6.4.0-nightly.
|
191
|
-
"@ledgerhq/coin-sui": "^0.13.0-nightly.
|
192
|
-
"@ledgerhq/coin-tezos": "^6.4.0-nightly.
|
193
|
-
"@ledgerhq/coin-ton": "^0.14.1-nightly.
|
194
|
-
"@ledgerhq/coin-tron": "^5.4.0-nightly.
|
195
|
-
"@ledgerhq/coin-vechain": "^2.10.0-nightly.
|
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/
|
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.
|
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.
|
226
|
-
"@ledgerhq/live-countervalues-react": "^0.5.2-nightly.
|
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.
|
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.
|
234
|
-
"@ledgerhq/live-signer-evm": "^0.7.5-nightly.
|
235
|
-
"@ledgerhq/live-signer-solana": "^0.5.5-nightly.
|
236
|
-
"@ledgerhq/live-wallet": "^0.13.1-nightly.
|
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-
|
240
|
-
"@ledgerhq/wallet-api-
|
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
|
-
|
11
|
-
|
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 {
|
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
|
-
|
25
|
-
|
26
|
-
|
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 {
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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:
|
81
|
+
isLoading: isInitialLoading,
|
71
82
|
error,
|
72
83
|
loadNext: hasMore ? fetchNextPage : undefined,
|
73
84
|
isSuccess,
|