@ledgerhq/coin-solana 0.36.0 → 0.37.0-nightly.20251108023448

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 (60) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/lib/cli-transaction.d.ts +1 -1
  3. package/lib/cli-transaction.d.ts.map +1 -1
  4. package/lib/cli-transaction.js +3 -3
  5. package/lib/cli-transaction.js.map +1 -1
  6. package/lib/helpers/token.d.ts +1 -1
  7. package/lib/helpers/token.d.ts.map +1 -1
  8. package/lib/helpers/token.js +3 -2
  9. package/lib/helpers/token.js.map +1 -1
  10. package/lib/preload.js +5 -5
  11. package/lib/preload.js.map +1 -1
  12. package/lib/prepareTransaction.js +3 -3
  13. package/lib/prepareTransaction.js.map +1 -1
  14. package/lib/signOperation.js +2 -2
  15. package/lib/signOperation.js.map +1 -1
  16. package/lib/synchronization.d.ts.map +1 -1
  17. package/lib/synchronization.js +13 -10
  18. package/lib/synchronization.js.map +1 -1
  19. package/lib/test/bridge.dataset.d.ts.map +1 -1
  20. package/lib/test/bridge.dataset.js +11 -2
  21. package/lib/test/bridge.dataset.js.map +1 -1
  22. package/lib/transaction.d.ts +2 -2
  23. package/lib/transaction.d.ts.map +1 -1
  24. package/lib/transaction.js +6 -6
  25. package/lib/transaction.js.map +1 -1
  26. package/lib-es/cli-transaction.d.ts +1 -1
  27. package/lib-es/cli-transaction.d.ts.map +1 -1
  28. package/lib-es/cli-transaction.js +3 -3
  29. package/lib-es/cli-transaction.js.map +1 -1
  30. package/lib-es/helpers/token.d.ts +1 -1
  31. package/lib-es/helpers/token.d.ts.map +1 -1
  32. package/lib-es/helpers/token.js +3 -2
  33. package/lib-es/helpers/token.js.map +1 -1
  34. package/lib-es/preload.js +1 -1
  35. package/lib-es/preload.js.map +1 -1
  36. package/lib-es/prepareTransaction.js +3 -3
  37. package/lib-es/prepareTransaction.js.map +1 -1
  38. package/lib-es/signOperation.js +2 -2
  39. package/lib-es/signOperation.js.map +1 -1
  40. package/lib-es/synchronization.d.ts.map +1 -1
  41. package/lib-es/synchronization.js +13 -10
  42. package/lib-es/synchronization.js.map +1 -1
  43. package/lib-es/test/bridge.dataset.d.ts.map +1 -1
  44. package/lib-es/test/bridge.dataset.js +11 -2
  45. package/lib-es/test/bridge.dataset.js.map +1 -1
  46. package/lib-es/transaction.d.ts +2 -2
  47. package/lib-es/transaction.d.ts.map +1 -1
  48. package/lib-es/transaction.js +6 -6
  49. package/lib-es/transaction.js.map +1 -1
  50. package/package.json +4 -4
  51. package/src/cli-transaction.ts +106 -104
  52. package/src/helpers/token.ts +3 -4
  53. package/src/preload.ts +1 -1
  54. package/src/prepareTransaction.ts +3 -3
  55. package/src/signOperation.ts +2 -2
  56. package/src/synchronization.ts +16 -13
  57. package/src/test/bridge.dataset.ts +11 -5
  58. package/src/tests/preload.unit.test.ts +27 -29
  59. package/src/tests/tokens-bridge.unit.test.ts +14 -6
  60. package/src/transaction.ts +13 -6
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-solana",
3
- "version": "0.36.0",
3
+ "version": "0.37.0-nightly.20251108023448",
4
4
  "description": "Ledger Solana Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -56,15 +56,15 @@
56
56
  "rxjs": "^7.8.1",
57
57
  "semver": "7.7.1",
58
58
  "superstruct": "0.16.7",
59
- "@ledgerhq/cryptoassets": "^13.32.0",
59
+ "@ledgerhq/coin-framework": "^6.9.0-nightly.20251108023448",
60
+ "@ledgerhq/cryptoassets": "^13.33.0-nightly.20251108023448",
60
61
  "@ledgerhq/devices": "8.7.0",
61
- "@ledgerhq/coin-framework": "^6.8.0",
62
62
  "@ledgerhq/errors": "^6.27.0",
63
63
  "@ledgerhq/live-env": "^2.20.0",
64
64
  "@ledgerhq/live-network": "^2.1.0",
65
65
  "@ledgerhq/logs": "^6.13.0",
66
66
  "@ledgerhq/types-cryptoassets": "^7.30.0",
67
- "@ledgerhq/types-live": "^6.88.0"
67
+ "@ledgerhq/types-live": "^6.89.0-nightly.20251108023448"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@faker-js/faker": "^8.4.1",
@@ -38,7 +38,7 @@ function inferTransactions(
38
38
  transaction: Transaction;
39
39
  }>,
40
40
  opts: Partial<Record<string, string>>,
41
- ): Transaction[] {
41
+ ): Promise<Transaction[]> {
42
42
  const mode = inferMode(opts.mode);
43
43
 
44
44
  // reusing ethereum token option, comes as array
@@ -50,130 +50,132 @@ function inferTransactions(
50
50
 
51
51
  const token = tokens?.[0];
52
52
 
53
- return transactions.map(({ account, transaction }) => {
54
- if (transaction.family !== "solana") {
55
- throw new Error(`Solana family transaction expected, got <${transaction.family}>`);
56
- }
57
- switch (mode) {
58
- case "send":
59
- if (account.type === "Account") {
53
+ return Promise.all(
54
+ transactions.map(async ({ account, transaction }) => {
55
+ if (transaction.family !== "solana") {
56
+ throw new Error(`Solana family transaction expected, got <${transaction.family}>`);
57
+ }
58
+ switch (mode) {
59
+ case "send":
60
+ if (account.type === "Account") {
61
+ const solanaTx: Transaction = {
62
+ ...transaction,
63
+ model: {
64
+ kind: "transfer",
65
+ uiState: {
66
+ memo: opts.memo,
67
+ },
68
+ },
69
+ };
70
+ return solanaTx;
71
+ } else {
72
+ if (account.type !== "TokenAccount") {
73
+ throw new Error("expected token account");
74
+ }
75
+ const subAccountId = account.id;
76
+ const solanaTx: Transaction = {
77
+ ...transaction,
78
+ subAccountId,
79
+ model: {
80
+ kind: "token.transfer",
81
+ uiState: {
82
+ memo: opts.memo,
83
+ subAccountId,
84
+ },
85
+ },
86
+ };
87
+ return solanaTx;
88
+ }
89
+ case "optIn": {
90
+ if (token === undefined) {
91
+ throw new Error("token required");
92
+ }
93
+
94
+ if (account.type !== "Account") {
95
+ throw new Error("expected main account");
96
+ }
97
+
98
+ const tokenCurrency = await getCryptoAssetsStore().findTokenById(token);
99
+
100
+ if (!tokenCurrency) {
101
+ throw new Error(`token <${token}> not found`);
102
+ }
103
+
60
104
  const solanaTx: Transaction = {
61
105
  ...transaction,
62
106
  model: {
63
- kind: "transfer",
107
+ kind: "token.createATA",
64
108
  uiState: {
65
- memo: opts.memo,
109
+ tokenId: tokenCurrency.id,
66
110
  },
67
111
  },
68
112
  };
69
113
  return solanaTx;
70
- } else {
71
- if (account.type !== "TokenAccount") {
72
- throw new Error("expected token account");
73
- }
74
- const subAccountId = account.id;
75
- const solanaTx: Transaction = {
114
+ }
115
+ case "stake.createAccount": {
116
+ const validator = opts.solanaValidator;
117
+ return {
76
118
  ...transaction,
77
- subAccountId,
78
119
  model: {
79
- kind: "token.transfer",
120
+ kind: "stake.createAccount",
80
121
  uiState: {
81
- memo: opts.memo,
82
- subAccountId,
122
+ delegate: {
123
+ voteAccAddress: validator ?? "",
124
+ },
83
125
  },
84
126
  },
85
127
  };
86
- return solanaTx;
87
- }
88
- case "optIn": {
89
- if (token === undefined) {
90
- throw new Error("token required");
91
- }
92
-
93
- if (account.type !== "Account") {
94
- throw new Error("expected main account");
95
128
  }
96
-
97
- const tokenCurrency = getCryptoAssetsStore().findTokenById(token);
98
-
99
- if (!tokenCurrency) {
100
- throw new Error(`token <${token}> not found`);
101
- }
102
-
103
- const solanaTx: Transaction = {
104
- ...transaction,
105
- model: {
106
- kind: "token.createATA",
107
- uiState: {
108
- tokenId: tokenCurrency.id,
109
- },
110
- },
111
- };
112
- return solanaTx;
113
- }
114
- case "stake.createAccount": {
115
- const validator = opts.solanaValidator;
116
- return {
117
- ...transaction,
118
- model: {
119
- kind: "stake.createAccount",
120
- uiState: {
121
- delegate: {
122
- voteAccAddress: validator ?? "",
129
+ case "stake.delegate":
130
+ return {
131
+ ...transaction,
132
+ model: {
133
+ kind: "stake.delegate",
134
+ uiState: {
135
+ stakeAccAddr: opts.solanaStakeAccount ?? "",
136
+ voteAccAddr: opts.solanaValidator ?? "",
123
137
  },
124
138
  },
125
- },
126
- };
127
- }
128
- case "stake.delegate":
129
- return {
130
- ...transaction,
131
- model: {
132
- kind: "stake.delegate",
133
- uiState: {
134
- stakeAccAddr: opts.solanaStakeAccount ?? "",
135
- voteAccAddr: opts.solanaValidator ?? "",
136
- },
137
- },
138
- };
139
- case "stake.undelegate":
140
- return {
141
- ...transaction,
142
- model: {
143
- kind: "stake.undelegate",
144
- uiState: {
145
- stakeAccAddr: opts.solanaStakeAccount ?? "",
139
+ };
140
+ case "stake.undelegate":
141
+ return {
142
+ ...transaction,
143
+ model: {
144
+ kind: "stake.undelegate",
145
+ uiState: {
146
+ stakeAccAddr: opts.solanaStakeAccount ?? "",
147
+ },
146
148
  },
147
- },
148
- };
149
- case "stake.withdraw":
150
- return {
151
- ...transaction,
152
- model: {
153
- kind: "stake.withdraw",
154
- uiState: {
155
- stakeAccAddr: opts.solanaStakeAccount ?? "",
149
+ };
150
+ case "stake.withdraw":
151
+ return {
152
+ ...transaction,
153
+ model: {
154
+ kind: "stake.withdraw",
155
+ uiState: {
156
+ stakeAccAddr: opts.solanaStakeAccount ?? "",
157
+ },
156
158
  },
157
- },
158
- };
159
- case "stake.split":
160
- if (opts.solanaStakeAccount === undefined) {
161
- throw new Error("stake account is required");
162
- }
159
+ };
160
+ case "stake.split":
161
+ if (opts.solanaStakeAccount === undefined) {
162
+ throw new Error("stake account is required");
163
+ }
163
164
 
164
- return {
165
- ...transaction,
166
- model: {
167
- kind: "stake.split",
168
- uiState: {
169
- stakeAccAddr: opts.solanaStakeAccount,
165
+ return {
166
+ ...transaction,
167
+ model: {
168
+ kind: "stake.split",
169
+ uiState: {
170
+ stakeAccAddr: opts.solanaStakeAccount,
171
+ },
170
172
  },
171
- },
172
- };
173
- default:
174
- return assertUnreachable(mode);
175
- }
176
- });
173
+ };
174
+ default:
175
+ return assertUnreachable(mode);
176
+ }
177
+ }),
178
+ );
177
179
  }
178
180
 
179
181
  function inferAccounts(mainAccount: Account, opts: Record<string, string>): AccountLikeArray {
@@ -12,10 +12,9 @@ import { TransferFeeConfigExt } from "../network/chain/account/tokenExtensions";
12
12
  import { PARSED_PROGRAMS } from "../network/chain/program/constants";
13
13
  import { getCryptoAssetsStore } from "../cryptoAssetsStore";
14
14
 
15
- export function tokenIsListedOnLedger(currencyId: string, mint: string): boolean {
16
- return (
17
- getCryptoAssetsStore().findTokenByAddressInCurrency(mint, currencyId)?.type === "TokenCurrency"
18
- );
15
+ export async function tokenIsListedOnLedger(currencyId: string, mint: string): Promise<boolean> {
16
+ const token = await getCryptoAssetsStore().findTokenByAddressInCurrency(mint, currencyId);
17
+ return token?.type === "TokenCurrency";
19
18
  }
20
19
 
21
20
  export function isTokenAccountFrozen(account: AccountLike): boolean {
package/src/preload.ts CHANGED
@@ -14,7 +14,7 @@ import { getValidators, ValidatorsAppValidator } from "./network/validator-app";
14
14
  import spltokensList, { hash as embeddedHash, SPLToken } from "@ledgerhq/cryptoassets/data/spl";
15
15
  import { fetchTokensFromCALService } from "@ledgerhq/cryptoassets/crypto-assets-importer/fetch/index";
16
16
  import { getCALHash, setCALHash } from "./logic";
17
- import { addTokens, convertSplTokens } from "@ledgerhq/cryptoassets/tokens";
17
+ import { addTokens, convertSplTokens } from "@ledgerhq/cryptoassets/legacy/legacy-utils";
18
18
  import { AxiosError } from "axios";
19
19
 
20
20
  let shouldSkipTokenLoading = false;
@@ -377,9 +377,9 @@ async function deriveCreateAssociatedTokenAccountCommandDescriptor(
377
377
  ): Promise<CommandDescriptor> {
378
378
  const errors: Record<string, Error> = {};
379
379
 
380
- const token = getCryptoAssetsStore().findTokenById(model.uiState.tokenId);
380
+ const token = await getCryptoAssetsStore().findTokenById(model.uiState.tokenId);
381
381
  if (!token) {
382
- throw new Error(`token with id "${model.uiState.tokenId}" not found`);
382
+ throw new Error("Token " + model.uiState.tokenId + " not found");
383
383
  }
384
384
  const mint = token.contractAddress;
385
385
  const tokenProgram = await getMaybeTokenMintProgram(mint, api);
@@ -1012,7 +1012,7 @@ function validateAssociatedTokenAccountState(
1012
1012
  return new SolanaTokenAccountFrozen();
1013
1013
  }
1014
1014
  // do not check initialized state on ledger accounts
1015
- if (!(tokenAcc as SolanaTokenAccount).id && tokenAcc.state !== "initialized") {
1015
+ if (!("id" in tokenAcc) && tokenAcc.state !== "initialized") {
1016
1016
  return new SolanaTokenAccounNotInitialized();
1017
1017
  }
1018
1018
  }
@@ -42,9 +42,9 @@ const buildOptimisticOperation = (account: Account, transaction: Transaction): S
42
42
  const lastOpSeqNumber =
43
43
  account.pendingOperations[0]?.transactionSequenceNumber ??
44
44
  account.operations[0]?.transactionSequenceNumber ??
45
- 0;
45
+ new BigNumber(0);
46
46
 
47
- optimisticOp.transactionSequenceNumber = lastOpSeqNumber + 1;
47
+ optimisticOp.transactionSequenceNumber = lastOpSeqNumber.plus(1);
48
48
 
49
49
  return optimisticOp;
50
50
  };
@@ -215,8 +215,13 @@ export const getAccountShapeWithAPI = async (
215
215
  )();
216
216
 
217
217
  // all token accounts
218
- const supportedOnChainTokenAccounts = onChainTokenAccounts.filter(({ info: { mint } }) =>
219
- tokenIsListedOnLedger(currency.id, mint.toBase58()),
218
+ const supportedOnChainTokenAccounts = await Promise.all(
219
+ onChainTokenAccounts.map(async account => {
220
+ const isListed = await tokenIsListedOnLedger(currency.id, account.info.mint.toBase58());
221
+ return isListed ? account : null;
222
+ }),
223
+ ).then(results =>
224
+ results.filter((account): account is NonNullable<typeof account> => account !== null),
220
225
  );
221
226
  const supportedOnChainTokenAccountsByMint = groupBy(
222
227
  supportedOnChainTokenAccounts,
@@ -334,7 +339,7 @@ export const getAccountShapeWithAPI = async (
334
339
 
335
340
  const newMainAccTxs = await getTransactions(mainAccAddress, mainAccountLastTxSignature, api);
336
341
 
337
- const lastOpSeqNumber = mainInitialAcc?.operations?.[0]?.transactionSequenceNumber ?? 0;
342
+ const lastOpSeqNumber = Number(mainInitialAcc?.operations?.[0]?.transactionSequenceNumber ?? 0);
338
343
  const newOpsCount = newMainAccTxs.length;
339
344
 
340
345
  const newMainAccOps = newMainAccTxs
@@ -372,18 +377,17 @@ export const getAccountShapeWithAPI = async (
372
377
  unstakeReserve = stakes.length * withdrawFee + activeStakes.length * undelegateFee;
373
378
  }
374
379
 
375
- const nextNfts = onChainTokenAccounts.reduce((nfts, tokenAccount) => {
376
- if (
377
- !tokenIsListedOnLedger(currency.id, tokenAccount.info.mint.toBase58()) &&
378
- tokenAccountIsNFT(tokenAccount)
379
- ) {
380
+ const nextNfts: ProtoNFT[] = [];
381
+ for (const tokenAccount of onChainTokenAccounts) {
382
+ const isListed = await tokenIsListedOnLedger(currency.id, tokenAccount.info.mint.toBase58());
383
+ if (!isListed && tokenAccountIsNFT(tokenAccount)) {
380
384
  const mint = tokenAccount.info.mint.toBase58();
381
385
  // A fake tokenId is used as the mint address for the contract field with NMS
382
386
  // because we don't have the collection with the node data
383
387
  // We would need to fetch the metaplex metdata associated to this account
384
388
  const tokenId = "0";
385
389
  const id = encodeNftId(mainAccountId, tokenId, mint, currency.id);
386
- nfts.push({
390
+ nextNfts.push({
387
391
  id,
388
392
  contract: mint,
389
393
  tokenId: tokenId,
@@ -392,8 +396,7 @@ export const getAccountShapeWithAPI = async (
392
396
  currencyId: currency.id,
393
397
  });
394
398
  }
395
- return nfts;
396
- }, [] as ProtoNFT[]);
399
+ }
397
400
 
398
401
  const shape: Partial<SolanaAccount> = {
399
402
  nfts: nextNfts,
@@ -438,7 +441,7 @@ async function newSubAcc({
438
441
  const creationDate = new Date((lastTx?.info.blockTime ?? Date.now() / 1000) * 1000);
439
442
 
440
443
  const mint = assocTokenAcc.info.mint.toBase58();
441
- const tokenCurrency = getCryptoAssetsStore().findTokenByAddressInCurrency(mint, currencyId);
444
+ const tokenCurrency = await getCryptoAssetsStore().findTokenByAddressInCurrency(mint, currencyId);
442
445
 
443
446
  if (!tokenCurrency) {
444
447
  throw new Error(`token for mint "${mint}" not found`);
@@ -627,7 +630,7 @@ function txToMainAccOperation(
627
630
  date: txDate,
628
631
  value: opValue,
629
632
  fee: opFee,
630
- transactionSequenceNumber: txSeqNumber,
633
+ transactionSequenceNumber: new BigNumber(txSeqNumber),
631
634
  };
632
635
  }
633
636
 
@@ -10,6 +10,7 @@ import {
10
10
  } from "@ledgerhq/errors";
11
11
  import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
12
12
  import type { AccountRaw, CurrenciesData, DatasetTest } from "@ledgerhq/types-live";
13
+ import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets";
13
14
  import {
14
15
  SolanaAccountNotFunded,
15
16
  SolanaAddressOffEd25519,
@@ -28,7 +29,6 @@ import { assertUnreachable } from "../utils";
28
29
  import { getEnv } from "@ledgerhq/live-env";
29
30
  import { encodeAccountId } from "@ledgerhq/coin-framework/lib/account/accountId";
30
31
  import { testOnChainData } from "../tests/test-onchain-data.fixture";
31
- import { getCryptoAssetsStore } from "../cryptoAssetsStore";
32
32
 
33
33
  const mainAccId = encodeAccountId({
34
34
  type: "js",
@@ -43,10 +43,16 @@ const wSolSubAccId = encodeAccountIdWithTokenAccountAddress(
43
43
  testOnChainData.wSolSenderAssocTokenAccAddress,
44
44
  );
45
45
 
46
- const wSolToken = getCryptoAssetsStore().findTokenByAddressInCurrency(
47
- "So11111111111111111111111111111111111111112",
48
- "solana",
49
- ) as TokenCurrency;
46
+ // Create a mock token for testing
47
+ const wSolToken: TokenCurrency = {
48
+ type: "TokenCurrency",
49
+ id: "So11111111111111111111111111111111111111112",
50
+ contractAddress: "So11111111111111111111111111111111111111112",
51
+ name: "Wrapped SOL",
52
+ ticker: "WSOL",
53
+ units: [{ name: "WSOL", code: "WSOL", magnitude: 9 }],
54
+ parentCurrency: getCryptoCurrencyById("solana"),
55
+ } as TokenCurrency;
50
56
 
51
57
  const fees = (signatureCount: number) =>
52
58
  new BigNumber(signatureCount * testOnChainData.fees.lamportsPerSignature);
@@ -2,7 +2,11 @@ jest.useFakeTimers();
2
2
 
3
3
  import { jlpDefinition, soEthDefinition, graphitDefinition } from "./preload.fixtures";
4
4
  import axios, { AxiosResponse } from "axios";
5
- import * as CALTokensAPI from "@ledgerhq/cryptoassets/tokens";
5
+ import {
6
+ convertSplTokens,
7
+ __clearAllLists,
8
+ addTokens,
9
+ } from "@ledgerhq/cryptoassets/legacy/legacy-utils";
6
10
  import { fetchSPLTokens, hydrate, preloadWithAPI } from "../preload";
7
11
  import { __resetCALHash, getCALHash, setCALHash } from "../logic";
8
12
  import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
@@ -13,6 +17,14 @@ jest.mock("axios");
13
17
  const mockedAxios = jest.mocked(axios);
14
18
  mockedAxios.AxiosError = jest.requireActual("axios").AxiosError;
15
19
 
20
+ jest.mock("@ledgerhq/cryptoassets/legacy/legacy-utils", () => {
21
+ const actual = jest.requireActual("@ledgerhq/cryptoassets/legacy/legacy-utils");
22
+ return {
23
+ ...actual,
24
+ addTokens: jest.fn(),
25
+ };
26
+ });
27
+
16
28
  jest.mock("@ledgerhq/cryptoassets/data/spl", () => ({
17
29
  __esModule: true, // Ensures the mock is treated as an ES module
18
30
  default: [jlpDefinition, soEthDefinition], // Mocked as an array
@@ -34,7 +46,7 @@ jest.mock("../network/validator-app", () => ({
34
46
 
35
47
  describe("Solana Family", () => {
36
48
  beforeEach(() => {
37
- CALTokensAPI.__clearAllLists();
49
+ __clearAllLists();
38
50
  mockedAxios.get.mockImplementation(async (url, { params, headers } = {}) => {
39
51
  if (url !== "https://crypto-assets-service.api.ledger.com/v1/tokens")
40
52
  throw new Error("UNEXPECTED URL");
@@ -67,11 +79,7 @@ describe("Solana Family", () => {
67
79
 
68
80
  describe("fetchSPLTokens", () => {
69
81
  beforeEach(() => {
70
- jest.spyOn(CALTokensAPI, "addTokens").mockImplementation(() => null);
71
- });
72
-
73
- afterEach(() => {
74
- jest.restoreAllMocks();
82
+ jest.mocked(addTokens).mockClear();
75
83
  });
76
84
  it("should return the embedded tokens if there is no update on remote and tokens are not loaded", async () => {
77
85
  mockedAxios.get.mockImplementationOnce((url, { headers } = {}) => {
@@ -118,44 +126,36 @@ describe("Solana Family", () => {
118
126
 
119
127
  describe("preloadWithAPI", () => {
120
128
  beforeEach(() => {
121
- jest.spyOn(CALTokensAPI, "addTokens").mockImplementation(() => null);
122
- });
123
-
124
- afterEach(() => {
125
- jest.restoreAllMocks();
129
+ jest.mocked(addTokens).mockClear();
126
130
  });
127
131
 
128
132
  it("should return void when fetch is hitting cache", async () => {
129
133
  setCALHash(mockCurrency, "newStateSolana");
130
134
  const data = await preloadWithAPI(mockCurrency, mockGetAPI);
131
135
  expect(data.splTokens).toEqual(null);
132
- expect(CALTokensAPI.addTokens).not.toHaveBeenCalled();
136
+ expect(addTokens).not.toHaveBeenCalled();
133
137
  });
134
138
 
135
139
  it("should return and register the new SPL tokens", async () => {
136
140
  setCALHash(mockCurrency, "initialStateSolana");
137
141
  const data = await preloadWithAPI(mockCurrency, mockGetAPI);
138
142
  expect(data.splTokens).toEqual([jlpDefinition, soEthDefinition]);
139
- expect(CALTokensAPI.addTokens).toHaveBeenCalledTimes(1);
140
- expect(CALTokensAPI.addTokens).toHaveBeenCalledWith([
141
- CALTokensAPI.convertSplTokens(jlpDefinition),
142
- CALTokensAPI.convertSplTokens(soEthDefinition),
143
+ expect(addTokens).toHaveBeenCalledTimes(1);
144
+ expect(addTokens).toHaveBeenCalledWith([
145
+ convertSplTokens(jlpDefinition),
146
+ convertSplTokens(soEthDefinition),
143
147
  ]);
144
148
  });
145
149
  });
146
150
 
147
151
  describe("hydrate", () => {
148
152
  beforeEach(() => {
149
- jest.spyOn(CALTokensAPI, "addTokens").mockImplementation(() => null);
150
- });
151
-
152
- afterEach(() => {
153
- jest.restoreAllMocks();
153
+ jest.mocked(addTokens).mockClear();
154
154
  });
155
155
 
156
156
  it("should not do anything", async () => {
157
157
  hydrate(undefined, mockCurrency);
158
- expect(CALTokensAPI.addTokens).toHaveBeenCalledTimes(0);
158
+ expect(addTokens).toHaveBeenCalledTimes(0);
159
159
  });
160
160
 
161
161
  it("should register SPL tokens from embedded with null", async () => {
@@ -164,9 +164,9 @@ describe("Solana Family", () => {
164
164
  mockCurrency,
165
165
  );
166
166
 
167
- expect(CALTokensAPI.addTokens).toHaveBeenCalledWith([
168
- CALTokensAPI.convertSplTokens(jlpDefinition),
169
- CALTokensAPI.convertSplTokens(soEthDefinition),
167
+ expect(addTokens).toHaveBeenCalledWith([
168
+ convertSplTokens(jlpDefinition),
169
+ convertSplTokens(soEthDefinition),
170
170
  ]);
171
171
  });
172
172
 
@@ -176,9 +176,7 @@ describe("Solana Family", () => {
176
176
  mockCurrency,
177
177
  );
178
178
 
179
- expect(CALTokensAPI.addTokens).toHaveBeenCalledWith([
180
- CALTokensAPI.convertSplTokens(graphitDefinition),
181
- ]);
179
+ expect(addTokens).toHaveBeenCalledWith([convertSplTokens(graphitDefinition)]);
182
180
  });
183
181
  });
184
182
  });
@@ -12,6 +12,7 @@ import {
12
12
 
13
13
  import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
14
14
  import type { Account, CryptoAssetsStore } from "@ledgerhq/types-live";
15
+ import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets";
15
16
  import {
16
17
  SolanaRecipientMemoIsRequired,
17
18
  SolanaTokenAccountFrozen,
@@ -31,7 +32,7 @@ import {
31
32
  } from "@solana/spl-token";
32
33
  import { calculateToken2022TransferFees } from "../helpers/token";
33
34
  import { PARSED_PROGRAMS } from "../network/chain/program/constants";
34
- import { getCryptoAssetsStore, setCryptoAssetsStoreGetter } from "../cryptoAssetsStore";
35
+ import { setCryptoAssetsStoreGetter } from "../cryptoAssetsStore";
35
36
  import usdcTokenData from "../__fixtures__/solana-spl-epjfwdd5aufqssqem2qn1xzybapc8g4weggkzwytdt1v.json";
36
37
 
37
38
  const USDC_TOKEN = usdcTokenData as unknown as TokenCurrency;
@@ -67,20 +68,27 @@ setCryptoAssetsStoreGetter(
67
68
  () =>
68
69
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
69
70
  ({
70
- findTokenByAddressInCurrency: (address: string, _currencyId: string) => {
71
+ findTokenByAddressInCurrency: async (address: string, _currencyId: string) => {
71
72
  if (address === "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v") {
72
73
  return USDC_TOKEN;
73
74
  }
74
75
  return undefined;
75
76
  },
77
+ findTokenById: async () => undefined,
76
78
  getTokensSyncHash: (_: string) => Promise.resolve("0"),
77
79
  }) as CryptoAssetsStore,
78
80
  );
79
81
 
80
- const wSolToken = getCryptoAssetsStore().findTokenByAddressInCurrency(
81
- testData.mintAddress,
82
- "solana",
83
- ) as TokenCurrency;
82
+ // Create a mock token for testing
83
+ const wSolToken: TokenCurrency = {
84
+ type: "TokenCurrency",
85
+ id: testData.mintAddress,
86
+ contractAddress: testData.mintAddress,
87
+ name: "Wrapped SOL",
88
+ ticker: "WSOL",
89
+ units: [{ name: "WSOL", code: "WSOL", magnitude: 9 }],
90
+ parentCurrency: getCryptoCurrencyById("solana"),
91
+ } as TokenCurrency;
84
92
 
85
93
  const baseAccount = {
86
94
  balance: new BigNumber(10000),