@ledgerhq/coin-aptos 2.2.0 → 2.3.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/lib/__tests__/api/getBalance.unit.test.js +68 -28
  3. package/lib/__tests__/api/getBalance.unit.test.js.map +1 -1
  4. package/lib/__tests__/api/index.integ.test.js +16 -4
  5. package/lib/__tests__/api/index.integ.test.js.map +1 -1
  6. package/lib/__tests__/bridge/synchronisation.test.js +15 -6
  7. package/lib/__tests__/bridge/synchronisation.test.js.map +1 -1
  8. package/lib/__tests__/logic/getBalances.test.d.ts +2 -0
  9. package/lib/__tests__/logic/getBalances.test.d.ts.map +1 -0
  10. package/lib/__tests__/logic/getBalances.test.js +63 -0
  11. package/lib/__tests__/logic/getBalances.test.js.map +1 -0
  12. package/lib/__tests__/network/client.test.js +63 -63
  13. package/lib/__tests__/network/client.test.js.map +1 -1
  14. package/lib/api/index.js +2 -2
  15. package/lib/api/index.js.map +1 -1
  16. package/lib/bridge/synchronisation.d.ts.map +1 -1
  17. package/lib/bridge/synchronisation.js +7 -2
  18. package/lib/bridge/synchronisation.js.map +1 -1
  19. package/lib/logic/getBalances.d.ts +5 -0
  20. package/lib/logic/getBalances.d.ts.map +1 -0
  21. package/lib/logic/getBalances.js +21 -0
  22. package/lib/logic/getBalances.js.map +1 -0
  23. package/lib/network/client.d.ts +1 -5
  24. package/lib/network/client.d.ts.map +1 -1
  25. package/lib/network/client.js +25 -60
  26. package/lib/network/client.js.map +1 -1
  27. package/lib-es/__tests__/api/getBalance.unit.test.js +69 -26
  28. package/lib-es/__tests__/api/getBalance.unit.test.js.map +1 -1
  29. package/lib-es/__tests__/api/index.integ.test.js +16 -4
  30. package/lib-es/__tests__/api/index.integ.test.js.map +1 -1
  31. package/lib-es/__tests__/bridge/synchronisation.test.js +15 -6
  32. package/lib-es/__tests__/bridge/synchronisation.test.js.map +1 -1
  33. package/lib-es/__tests__/logic/getBalances.test.d.ts +2 -0
  34. package/lib-es/__tests__/logic/getBalances.test.d.ts.map +1 -0
  35. package/lib-es/__tests__/logic/getBalances.test.js +61 -0
  36. package/lib-es/__tests__/logic/getBalances.test.js.map +1 -0
  37. package/lib-es/__tests__/network/client.test.js +63 -63
  38. package/lib-es/__tests__/network/client.test.js.map +1 -1
  39. package/lib-es/api/index.js +2 -2
  40. package/lib-es/api/index.js.map +1 -1
  41. package/lib-es/bridge/synchronisation.d.ts.map +1 -1
  42. package/lib-es/bridge/synchronisation.js +4 -2
  43. package/lib-es/bridge/synchronisation.js.map +1 -1
  44. package/lib-es/logic/getBalances.d.ts +5 -0
  45. package/lib-es/logic/getBalances.d.ts.map +1 -0
  46. package/lib-es/logic/getBalances.js +17 -0
  47. package/lib-es/logic/getBalances.js.map +1 -0
  48. package/lib-es/network/client.d.ts +1 -5
  49. package/lib-es/network/client.d.ts.map +1 -1
  50. package/lib-es/network/client.js +25 -60
  51. package/lib-es/network/client.js.map +1 -1
  52. package/package.json +7 -7
  53. package/src/__tests__/api/craftTransaction.unit.test.ts +1 -1
  54. package/src/__tests__/api/getBalance.unit.test.ts +82 -28
  55. package/src/__tests__/api/index.integ.test.ts +19 -4
  56. package/src/__tests__/bridge/synchronisation.test.ts +21 -6
  57. package/src/__tests__/logic/getBalances.test.ts +80 -0
  58. package/src/__tests__/network/client.test.ts +70 -79
  59. package/src/api/index.ts +2 -2
  60. package/src/bridge/synchronisation.ts +4 -2
  61. package/src/logic/getBalances.ts +27 -0
  62. package/src/network/client.ts +26 -64
  63. package/lib/logic/getBalance.d.ts +0 -5
  64. package/lib/logic/getBalance.d.ts.map +0 -1
  65. package/lib/logic/getBalance.js +0 -12
  66. package/lib/logic/getBalance.js.map +0 -1
  67. package/lib-es/logic/getBalance.d.ts +0 -5
  68. package/lib-es/logic/getBalance.d.ts.map +0 -1
  69. package/lib-es/logic/getBalance.js +0 -8
  70. package/lib-es/logic/getBalance.js.map +0 -1
  71. package/src/logic/getBalance.ts +0 -15
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/network/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/network/client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-aptos",
3
- "version": "2.2.0",
3
+ "version": "2.3.0-next.0",
4
4
  "description": "Ledger Aptos Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -90,14 +90,14 @@
90
90
  "invariant": "^2.2.4",
91
91
  "lodash": "^4.17.21",
92
92
  "rxjs": "^7.8.1",
93
- "@ledgerhq/coin-framework": "^5.3.0",
94
- "@ledgerhq/cryptoassets": "^13.18.1",
95
- "@ledgerhq/devices": "8.4.6",
96
- "@ledgerhq/errors": "^6.21.0",
93
+ "@ledgerhq/coin-framework": "^5.4.0-next.0",
94
+ "@ledgerhq/cryptoassets": "^13.19.0-next.0",
95
+ "@ledgerhq/devices": "8.4.7-next.0",
96
+ "@ledgerhq/errors": "^6.22.0-next.0",
97
97
  "@ledgerhq/live-env": "^2.10.0",
98
- "@ledgerhq/live-network": "^2.0.10",
98
+ "@ledgerhq/live-network": "^2.0.11-next.0",
99
99
  "@ledgerhq/logs": "^6.13.0",
100
- "@ledgerhq/types-live": "^6.73.0"
100
+ "@ledgerhq/types-live": "^6.74.0-next.0"
101
101
  },
102
102
  "devDependencies": {
103
103
  "@faker-js/faker": "^9.4.0",
@@ -1,5 +1,5 @@
1
1
  import { Hex, RawTransaction, Deserializer } from "@aptos-labs/ts-sdk";
2
- import type { TransactionIntent } from "@ledgerhq/coin-framework/lib/api/types";
2
+ import type { TransactionIntent } from "@ledgerhq/coin-framework/api/types";
3
3
  import { createApi } from "../../api";
4
4
  import type { AptosAsset, AptosExtra, AptosSender } from "../../types/assets";
5
5
  import { AptosAPI } from "../../network";
@@ -1,44 +1,98 @@
1
1
  import { AptosAPI } from "../../network";
2
- import { getBalance } from "../../logic/getBalance";
3
- import { APTOS_ASSET_ID } from "../../constants";
4
- import BigNumber from "bignumber.js";
5
-
6
- jest.mock("../../network", () => {
7
- return {
8
- AptosAPI: jest.fn().mockImplementation(() => ({
9
- getBalances: jest.fn(),
10
- })),
11
- };
12
- });
2
+ import { APTOS_ASSET_ID, TOKEN_TYPE } from "../../constants";
3
+ import type { AptosConfig } from "../../config";
4
+ import { createApi } from "../../api";
13
5
 
14
- describe("getBalance", () => {
15
- let mockGetBalances: jest.Mock;
6
+ jest.mock("@aptos-labs/ts-sdk");
7
+ let mockedAptosApi: jest.Mocked<any>;
8
+ jest.mock("../../network");
9
+ jest.mock("../../config", () => ({
10
+ setCoinConfig: jest.fn(),
11
+ }));
16
12
 
13
+ const mockAptosConfig: AptosConfig = {} as AptosConfig;
14
+
15
+ describe("getBalance", () => {
17
16
  beforeEach(() => {
18
- jest.clearAllMocks();
17
+ mockedAptosApi = jest.mocked(AptosAPI);
18
+ });
19
19
 
20
- mockGetBalances = jest
21
- .fn()
22
- .mockResolvedValue([{ asset_type: APTOS_ASSET_ID, amount: BigNumber(10) }]);
20
+ afterEach(() => {
21
+ jest.resetAllMocks();
22
+ });
23
23
 
24
- (AptosAPI as jest.Mock).mockImplementation(() => ({
25
- getBalances: mockGetBalances,
24
+ it("should return balance with value 10", async () => {
25
+ mockedAptosApi.mockImplementation(() => ({
26
+ getBalances: jest.fn().mockResolvedValue([{ contractAddress: APTOS_ASSET_ID, amount: 10n }]),
26
27
  }));
28
+
29
+ const api = createApi(mockAptosConfig);
30
+ const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
31
+
32
+ expect(await api.getBalance(accountAddress)).toStrictEqual([
33
+ { value: 10n, asset: { type: "native" } },
34
+ ]);
27
35
  });
28
36
 
29
- afterEach(() => {
30
- jest.clearAllMocks();
37
+ it("should return empty array when no contract_address and no data", async () => {
38
+ mockedAptosApi.mockImplementation(() => ({
39
+ getBalances: jest.fn().mockResolvedValue([]),
40
+ }));
41
+
42
+ const accountAddress = "0xno_contract_and_no_data";
43
+
44
+ const api = createApi(mockAptosConfig);
45
+ expect(await api.getBalance(accountAddress)).toStrictEqual([]);
31
46
  });
32
47
 
33
- it("should returns balance with value 10", async () => {
34
- mockGetBalances.mockResolvedValue([{ asset_type: APTOS_ASSET_ID, amount: new BigNumber(10) }]);
48
+ it("should return balance with 'native' contract_address (APTOS_ASSET_ID)", async () => {
49
+ mockedAptosApi.mockImplementation(() => ({
50
+ getBalances: jest.fn().mockResolvedValue([{ contractAddress: APTOS_ASSET_ID, amount: 15n }]),
51
+ }));
52
+
53
+ const api = createApi(mockAptosConfig);
54
+ const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
55
+
56
+ expect(await api.getBalance(accountAddress)).toStrictEqual([
57
+ { value: 15n, asset: { type: "native" } },
58
+ ]);
59
+ });
60
+
61
+ it("should return token balance when contract_address is a coin token", async () => {
62
+ const TOKEN_ASSET_ID = "0x1::my_token::Token";
63
+ mockedAptosApi.mockImplementation(() => ({
64
+ getBalances: jest.fn().mockResolvedValue([{ contractAddress: TOKEN_ASSET_ID, amount: 25n }]),
65
+ }));
66
+
67
+ const api = createApi(mockAptosConfig);
68
+ const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
69
+
70
+ expect(await api.getBalance(accountAddress)).toStrictEqual([
71
+ {
72
+ value: 25n,
73
+ asset: { type: "token", contractAddress: TOKEN_ASSET_ID, standard: TOKEN_TYPE.COIN },
74
+ },
75
+ ]);
76
+ });
77
+
78
+ it("should return token balance when contract_address is a fungible_asset token", async () => {
79
+ const TOKEN_ASSET_ID = "0x1";
80
+ mockedAptosApi.mockImplementation(() => ({
81
+ getBalances: jest.fn().mockResolvedValue([{ contractAddress: TOKEN_ASSET_ID, amount: 25n }]),
82
+ }));
35
83
 
84
+ const api = createApi(mockAptosConfig);
36
85
  const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
37
- const client = new AptosAPI("aptos");
38
- const balance = await getBalance(client, accountAddress);
39
86
 
40
- expect(balance).toBeDefined();
41
- expect(balance).toMatchObject([{ value: BigInt(10), asset: { type: "native" } }]);
42
- expect(mockGetBalances).toHaveBeenCalledWith(accountAddress);
87
+ expect(await api.getBalance(accountAddress)).toStrictEqual([
88
+ {
89
+ value: 25n,
90
+ asset: {
91
+ type: "token",
92
+ contractAddress: TOKEN_ASSET_ID,
93
+ standard: TOKEN_TYPE.FUNGIBLE_ASSET,
94
+ },
95
+ },
96
+ ]);
43
97
  });
44
98
  });
@@ -12,6 +12,8 @@ describe("createApi", () => {
12
12
  indexer: getEnv("APTOS_INDEXER_ENDPOINT"),
13
13
  },
14
14
  });
15
+ const assetTypeNative = "native";
16
+ const assetTypeToken = "token";
15
17
 
16
18
  const sender: AptosSender = {
17
19
  xpub: "0x934887885b27a0407bf8a5e0bbc6b6371254bea94de5510e948bcc92dc0a519b",
@@ -204,12 +206,25 @@ describe("createApi", () => {
204
206
  });
205
207
  });
206
208
 
207
- describe("getBalance", () => {
208
- it("return balances from account", async () => {
209
+ describe("getBalances", () => {
210
+ it("returned balances should have one native asset", async () => {
209
211
  const balances = await api.getBalance(sender.freshAddress);
212
+ const nativeBalance = balances.filter(b => b.asset.type === assetTypeNative);
213
+ expect(nativeBalance.length).toBe(1);
214
+ expect(nativeBalance[0].value).toBeGreaterThan(0);
215
+ });
210
216
 
211
- expect(balances.length).toBeGreaterThan(0);
212
- expect(balances[0].value).toBeGreaterThanOrEqual(0);
217
+ it("returned balances should have a token asset", async () => {
218
+ const balances = await api.getBalance(tokenAccount.freshAddress);
219
+ const tokenBalances = balances.filter(
220
+ b =>
221
+ b.asset.type === assetTypeToken &&
222
+ b.asset.contractAddress ===
223
+ "0x2ebb2ccac5e027a87fa0e2e5f656a3a4238d6a48d93ec9b610d570fc0aa0df12",
224
+ );
225
+ expect(tokenBalances.length).toBeGreaterThan(0);
226
+ expect(balances.length).toBeGreaterThan(1);
227
+ expect(balances[0].value).toBeGreaterThan(0);
213
228
  });
214
229
  });
215
230
 
@@ -798,10 +798,15 @@ describe("getAccountShape", () => {
798
798
  blockHeight: 316278241,
799
799
  }));
800
800
 
801
- const mockGetBalance = jest.fn().mockImplementation(() => BigNumber(5000000));
801
+ const TOKEN_CONTRACT_ADDRESS = "0xd111::staked_coin::StakedAptos";
802
+
803
+ const mockGetBalances = jest
804
+ .fn()
805
+ .mockResolvedValue([{ contractAddress: TOKEN_CONTRACT_ADDRESS, amount: BigNumber(1234567) }]);
806
+
802
807
  mockedAptosAPI.mockImplementation(() => ({
808
+ getBalances: mockGetBalances,
803
809
  getAccountInfo: mockGetAccountInfo,
804
- getBalance: mockGetBalance,
805
810
  }));
806
811
 
807
812
  const mockGetAccountSpy = jest.spyOn({ getAccount: mockGetAccountInfo }, "getAccount");
@@ -1312,9 +1317,14 @@ describe("getSubAccountShape", () => {
1312
1317
  ] as Operation[];
1313
1318
 
1314
1319
  it("returns the correct information", async () => {
1315
- const mockGetBalance = jest.fn().mockImplementation(() => BigNumber(1234567));
1320
+ const TOKEN_CONTRACT_ADDRESS = "0xd111::staked_coin::StakedAptos";
1321
+
1322
+ const mockGetBalances = jest
1323
+ .fn()
1324
+ .mockResolvedValue([{ contractAddress: TOKEN_CONTRACT_ADDRESS, amount: BigNumber(1234567) }]);
1325
+
1316
1326
  mockedAptosAPI.mockImplementation(() => ({
1317
- getBalance: mockGetBalance,
1327
+ getBalances: mockGetBalances,
1318
1328
  }));
1319
1329
 
1320
1330
  const subAccount = await getSubAccountShape(currency, address, parentId, token, operations);
@@ -1421,9 +1431,14 @@ describe("getSubAccounts", () => {
1421
1431
  ] as Operation[];
1422
1432
 
1423
1433
  it("returns the correct information", async () => {
1424
- const mockGetBalance = jest.fn().mockImplementation(() => BigNumber(1234567));
1434
+ const TOKEN_CONTRACT_ADDRESS = "0xd111::staked_coin::StakedAptos";
1435
+
1436
+ const mockGetBalances = jest
1437
+ .fn()
1438
+ .mockResolvedValue([{ contractAddress: TOKEN_CONTRACT_ADDRESS, amount: BigNumber(1234567) }]);
1439
+
1425
1440
  mockedAptosAPI.mockImplementation(() => ({
1426
- getBalance: mockGetBalance,
1441
+ getBalances: mockGetBalances,
1427
1442
  }));
1428
1443
 
1429
1444
  mockedDecodeTokenAccountId.mockReturnValue({
@@ -0,0 +1,80 @@
1
+ import { getBalances } from "../../logic/getBalances";
2
+ import { APTOS_ASSET_ID, TOKEN_TYPE } from "../../constants";
3
+ import type { AptosAPI } from "../../network";
4
+
5
+ describe("getBalance", () => {
6
+ it("should return balance with value 10", async () => {
7
+ const mockAptosClient = {
8
+ getBalances: jest.fn().mockResolvedValue([{ contractAddress: APTOS_ASSET_ID, amount: 10n }]),
9
+ } as Partial<AptosAPI> as AptosAPI;
10
+
11
+ const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
12
+
13
+ const balances = await getBalances(mockAptosClient, accountAddress);
14
+
15
+ expect(balances).toStrictEqual([{ value: 10n, asset: { type: "native" } }]);
16
+ });
17
+
18
+ it("should return empty array when no contract_address and no data", async () => {
19
+ const mockAptosClient = {
20
+ getBalances: jest.fn().mockResolvedValue([]),
21
+ } as Partial<AptosAPI> as AptosAPI;
22
+
23
+ const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
24
+
25
+ const balances = await getBalances(mockAptosClient, accountAddress);
26
+ expect(balances).toStrictEqual([]);
27
+ });
28
+
29
+ it("should return balance with 'native' contract_address (APTOS_ASSET_ID)", async () => {
30
+ const mockAptosClient = {
31
+ getBalances: jest.fn().mockResolvedValue([{ contractAddress: APTOS_ASSET_ID, amount: 10n }]),
32
+ } as Partial<AptosAPI> as AptosAPI;
33
+
34
+ const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
35
+
36
+ const balances = await getBalances(mockAptosClient, accountAddress);
37
+
38
+ expect(balances).toStrictEqual([{ value: 10n, asset: { type: "native" } }]);
39
+ });
40
+
41
+ it("should return token balance when contract_address is a coin token", async () => {
42
+ const TOKEN_ASSET_ID = "0x1::my_token::Token";
43
+ const mockAptosClient = {
44
+ getBalances: jest.fn().mockResolvedValue([{ contractAddress: TOKEN_ASSET_ID, amount: 25n }]),
45
+ } as Partial<AptosAPI> as AptosAPI;
46
+
47
+ const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
48
+
49
+ const balances = await getBalances(mockAptosClient, accountAddress);
50
+
51
+ expect(balances).toStrictEqual([
52
+ {
53
+ value: 25n,
54
+ asset: { type: "token", contractAddress: TOKEN_ASSET_ID, standard: TOKEN_TYPE.COIN },
55
+ },
56
+ ]);
57
+ });
58
+
59
+ it("should return token balance when contract_address is a fungible_asset token", async () => {
60
+ const TOKEN_ASSET_ID = "0x1";
61
+ const mockAptosClient = {
62
+ getBalances: jest.fn().mockResolvedValue([{ contractAddress: TOKEN_ASSET_ID, amount: 25n }]),
63
+ } as Partial<AptosAPI> as AptosAPI;
64
+
65
+ const accountAddress = "0x4be47904b31063d60ac0dfde06e5dc203e647edbe853bae0e666ae5a763c3906";
66
+
67
+ const balances = await getBalances(mockAptosClient, accountAddress);
68
+
69
+ expect(balances).toStrictEqual([
70
+ {
71
+ value: 25n,
72
+ asset: {
73
+ type: "token",
74
+ contractAddress: TOKEN_ASSET_ID,
75
+ standard: TOKEN_TYPE.FUNGIBLE_ASSET,
76
+ },
77
+ },
78
+ ]);
79
+ });
80
+ });
@@ -16,9 +16,8 @@ import BigNumber from "bignumber.js";
16
16
  import { AptosAPI } from "../../network";
17
17
  import { AptosAsset, AptosExtra, AptosSender } from "../../types/assets";
18
18
  import { Pagination, TransactionIntent } from "@ledgerhq/coin-framework/api/types";
19
- import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
20
19
  import { APTOS_ASSET_ID } from "../../constants";
21
- import { AptosTransaction } from "../../types";
20
+ import { AptosBalance, AptosTransaction } from "../../types";
22
21
 
23
22
  jest.mock("@aptos-labs/ts-sdk");
24
23
  jest.mock("@apollo/client");
@@ -96,75 +95,6 @@ describe("Aptos API", () => {
96
95
  });
97
96
  });
98
97
 
99
- describe("getBalance", () => {
100
- let token: TokenCurrency;
101
-
102
- beforeEach(() => {
103
- token = {
104
- type: "TokenCurrency",
105
- id: "aptos_token",
106
- name: "Aptos Token",
107
- ticker: "APT",
108
- units: [{ name: "APT", code: "APT", magnitude: 6 }],
109
- contractAddress: "APTOS_1_ADDRESS",
110
- tokenType: "fungible_asset",
111
- parentCurrency: {
112
- type: "CryptoCurrency",
113
- id: "aptos",
114
- name: "Aptos",
115
- ticker: "APT",
116
- units: [{ name: "APT", code: "APT", magnitude: 6 }],
117
- color: "#000000",
118
- family: "aptos",
119
- scheme: "aptos",
120
- explorerViews: [],
121
- managerAppName: "Aptos",
122
- coinType: 637,
123
- },
124
- };
125
- });
126
-
127
- it("get coin balance", async () => {
128
- mockedAptos.mockImplementation(() => ({
129
- view: jest.fn().mockReturnValue(["1234"]),
130
- }));
131
-
132
- token.tokenType = "coin";
133
- const api = new AptosAPI("aptos");
134
- const balance = await api.getBalance("address", token);
135
-
136
- expect(balance).toEqual(new BigNumber(1234));
137
- });
138
-
139
- it("get fungible assets balance", async () => {
140
- mockedAptos.mockImplementation(() => ({
141
- view: jest.fn().mockReturnValue(["12345"]),
142
- }));
143
-
144
- token.tokenType = "fungible_asset";
145
-
146
- const api = new AptosAPI("aptos");
147
- const balance = await api.getBalance("address", token);
148
-
149
- expect(balance).toEqual(new BigNumber(12345));
150
- });
151
-
152
- it("return 0 balace if could not retrieve proper balance of fungible assets", async () => {
153
- mockedAptos.mockImplementation(() => ({
154
- view: jest.fn().mockImplementation(() => {
155
- throw new Error("error");
156
- }),
157
- }));
158
-
159
- token.tokenType = "fungible_asset";
160
-
161
- const api = new AptosAPI("aptos");
162
- const balance = await api.getBalance("address", token);
163
-
164
- expect(balance).toEqual(new BigNumber(0));
165
- });
166
- });
167
-
168
98
  describe("getAccountInfo", () => {
169
99
  it("calls getCoinBalance, fetchTransactions and getHeight", async () => {
170
100
  mockedAptos.mockImplementation(() => ({
@@ -177,6 +107,12 @@ describe("Aptos API", () => {
177
107
  block_height: "1",
178
108
  block_hash: "83ca6d",
179
109
  }),
110
+ getCurrentFungibleAssetBalances: jest.fn().mockResolvedValue([
111
+ {
112
+ asset_type: APTOS_ASSET_ID,
113
+ amount: new BigNumber(123),
114
+ },
115
+ ]),
180
116
  }));
181
117
 
182
118
  mockedNetwork.mockResolvedValue(
@@ -307,6 +243,12 @@ describe("Aptos API", () => {
307
243
  block_height: "1",
308
244
  block_hash: "83ca6d",
309
245
  }),
246
+ getCurrentFungibleAssetBalances: jest.fn().mockResolvedValue([
247
+ {
248
+ asset_type: APTOS_ASSET_ID,
249
+ amount: new BigNumber(123),
250
+ },
251
+ ]),
310
252
  }));
311
253
 
312
254
  mockedNetwork.mockResolvedValue(
@@ -361,6 +303,12 @@ describe("Aptos API", () => {
361
303
  block_height: "1",
362
304
  block_hash: "83ca6d",
363
305
  }),
306
+ getCurrentFungibleAssetBalances: jest.fn().mockResolvedValue([
307
+ {
308
+ asset_type: APTOS_ASSET_ID,
309
+ amount: new BigNumber(123),
310
+ },
311
+ ]),
364
312
  }));
365
313
 
366
314
  mockedNetwork.mockResolvedValue(
@@ -398,8 +346,7 @@ describe("Aptos API", () => {
398
346
  }));
399
347
 
400
348
  const api = new AptosAPI("aptos");
401
- const accountInfo = await api.getAccountInfo("APTOS_1_ADDRESS", "1");
402
-
349
+ const accountInfo = await api.getAccountInfo(APTOS_ASSET_ID, "1");
403
350
  expect(accountInfo.balance).toEqual(new BigNumber(123));
404
351
  expect(accountInfo.transactions).toEqual([null]);
405
352
  expect(accountInfo.blockHeight).toEqual(999);
@@ -782,6 +729,10 @@ describe("Aptos API", () => {
782
729
 
783
730
  describe("getBalances", () => {
784
731
  it("returns an array of AptosBalances objects", async () => {
732
+ const expectedAptosBalace: AptosBalance = {
733
+ contractAddress: APTOS_ASSET_ID,
734
+ amount: BigNumber(200),
735
+ };
785
736
  const assets = [{ asset_type: APTOS_ASSET_ID, amount: 200 }];
786
737
  const mockGetCurrentFungibleAssetBalances = jest.fn().mockResolvedValue(assets);
787
738
  mockedAptos.mockImplementation(() => ({
@@ -791,21 +742,61 @@ describe("Aptos API", () => {
791
742
  const address = "0x42";
792
743
 
793
744
  const api = new AptosAPI("aptos");
794
- const balances = await api.getBalances(address);
745
+ const balances = await api.getBalances(address, APTOS_ASSET_ID);
795
746
 
796
747
  expect(mockGetCurrentFungibleAssetBalances).toHaveBeenCalledWith({
797
748
  options: {
798
- offset: 0,
799
- limit: 1000,
800
749
  where: {
801
750
  asset_type: { _eq: APTOS_ASSET_ID },
802
751
  owner_address: { _eq: address },
803
752
  },
804
753
  },
805
754
  });
806
- expect(balances).toHaveLength(1);
807
- expect(balances[0].contractAddress).toBe(assets[0].asset_type);
808
- expect(balances[0].amount).toStrictEqual(BigNumber(assets[0].amount));
755
+ expect(balances).toEqual([expectedAptosBalace]);
756
+ });
757
+
758
+ it("returns an array of AptosBalances when just address ispassed", async () => {
759
+ const expectedAptosBalace: AptosBalance = {
760
+ contractAddress: APTOS_ASSET_ID,
761
+ amount: BigNumber(200),
762
+ };
763
+ const assets = [{ asset_type: APTOS_ASSET_ID, amount: 200n }];
764
+ const mockGetCurrentFungibleAssetBalances = jest.fn().mockResolvedValue(assets);
765
+ mockedAptos.mockImplementation(() => ({
766
+ getCurrentFungibleAssetBalances: mockGetCurrentFungibleAssetBalances,
767
+ }));
768
+ const address = "0x42";
769
+ const api = new AptosAPI("aptos");
770
+
771
+ const balance = await api.getBalances(address);
772
+
773
+ expect(mockGetCurrentFungibleAssetBalances).toHaveBeenCalledWith({
774
+ options: {
775
+ where: {
776
+ owner_address: { _eq: address },
777
+ },
778
+ },
779
+ });
780
+ expect(balance).toEqual([expectedAptosBalace]);
781
+ });
782
+
783
+ it("return 0 balace if could not retrieve proper balance of fungible assets", async () => {
784
+ const expectedBalance = new BigNumber(0);
785
+ mockedAptos.mockImplementation(() => ({
786
+ getCurrentFungibleAssetBalances: jest.fn().mockImplementation(() => {
787
+ throw new Error("error");
788
+ }),
789
+ }));
790
+
791
+ const api = new AptosAPI("aptos");
792
+ const balance = await api.getBalances("address", "0x42");
793
+
794
+ expect(balance).toEqual([
795
+ {
796
+ contractAddress: "",
797
+ amount: expectedBalance,
798
+ },
799
+ ]);
809
800
  });
810
801
  });
811
802
 
package/src/api/index.ts CHANGED
@@ -6,7 +6,7 @@ import type { AptosAsset, AptosExtra, AptosFeeParameters, AptosSender } from "..
6
6
  import { AptosAPI } from "../network";
7
7
  import { combine } from "../logic/combine";
8
8
  import { craftTransaction } from "../logic/craftTransaction";
9
- import { getBalance } from "../logic/getBalance";
9
+ import { getBalances } from "../logic/getBalances";
10
10
 
11
11
  export function createApi(
12
12
  config: AptosConfigApi,
@@ -22,7 +22,7 @@ export function createApi(
22
22
  craftTransaction(client, transactionIntent),
23
23
  estimateFees: (transactionIntent: TransactionIntent<AptosAsset, AptosExtra, AptosSender>) =>
24
24
  client.estimateFees(transactionIntent),
25
- getBalance: (address): Promise<Balance<AptosAsset>[]> => getBalance(client, address),
25
+ getBalance: (address): Promise<Balance<AptosAsset>[]> => getBalances(client, address),
26
26
  lastBlock: () => client.getLastBlock(),
27
27
  listOperations: (address: string, pagination: Pagination) =>
28
28
  client.listOperations(address, pagination),
@@ -13,6 +13,7 @@ import {
13
13
  encodeTokenAccountId,
14
14
  } from "@ledgerhq/coin-framework/account/index";
15
15
  import { AccountShapeInfo } from "@ledgerhq/coin-framework/bridge/jsHelpers";
16
+ import BigNumber from "bignumber.js";
16
17
 
17
18
  /**
18
19
  * List of properties of a sub account that can be updated when 2 "identical" accounts are found
@@ -70,7 +71,7 @@ export const mergeSubAccounts = (
70
71
  mergeOps(
71
72
  duplicatedAccount[name as keyof TokenAccount] as Operation[],
72
73
  newSubAccount[name as keyof TokenAccount] as Operation[],
73
- ) || [];
74
+ ) ?? [];
74
75
  }
75
76
  }
76
77
 
@@ -100,7 +101,8 @@ export const getSubAccountShape = async (
100
101
  ): Promise<TokenAccount> => {
101
102
  const aptosClient = new AptosAPI(currency.id);
102
103
  const tokenAccountId = encodeTokenAccountId(parentId, token);
103
- const balance = await aptosClient.getBalance(address, token);
104
+ const balances = await aptosClient.getBalances(address, token.contractAddress);
105
+ const balance = balances.length > 0 ? balances[0].amount : BigNumber(0);
104
106
  const firstOperation = operations
105
107
  .sort((a, b) => b.date.getTime() - a.date.getTime())
106
108
  .at(operations.length - 1);
@@ -0,0 +1,27 @@
1
+ import type { Balance } from "@ledgerhq/coin-framework/lib/api/types";
2
+ import type { AptosAsset } from "../types/assets";
3
+ import type { AptosAPI } from "../network";
4
+ import { APTOS_ASSET_ID, TOKEN_TYPE } from "../constants";
5
+
6
+ export async function getBalances(
7
+ aptosClient: AptosAPI,
8
+ address: string,
9
+ contract_address?: string,
10
+ ): Promise<Balance<AptosAsset>[]> {
11
+ const balances = await aptosClient.getBalances(address, contract_address);
12
+
13
+ return balances.map(balance => {
14
+ const isNative = balance.contractAddress === APTOS_ASSET_ID;
15
+ const standard =
16
+ balance.contractAddress.split("::").length === 3
17
+ ? TOKEN_TYPE.COIN
18
+ : TOKEN_TYPE.FUNGIBLE_ASSET;
19
+
20
+ return {
21
+ value: BigInt(balance.amount.toString()),
22
+ asset: isNative
23
+ ? { type: "native" }
24
+ : { type: "token", contractAddress: balance.contractAddress, standard: standard },
25
+ };
26
+ });
27
+ }