@ledgerhq/live-common 34.51.0-nightly.7 → 34.51.0-nightly.8

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 (72) hide show
  1. package/lib/e2e/index.d.ts +5 -0
  2. package/lib/e2e/index.d.ts.map +1 -1
  3. package/lib/e2e/speculosCI.d.ts.map +1 -1
  4. package/lib/e2e/speculosCI.js +2 -1
  5. package/lib/e2e/speculosCI.js.map +1 -1
  6. package/lib/env.react.d.ts +1 -1
  7. package/lib/env.react.d.ts.map +1 -1
  8. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
  9. package/lib/featureFlags/defaultFeatures.js +10 -0
  10. package/lib/featureFlags/defaultFeatures.js.map +1 -1
  11. package/lib/featureFlags/useFeature.d.ts +1 -1
  12. package/lib/featureFlags/useFeature.d.ts.map +1 -1
  13. package/lib/modularDrawer/hooks/__test__/useAssetAccountCounts.test.d.ts +2 -0
  14. package/lib/modularDrawer/hooks/__test__/useAssetAccountCounts.test.d.ts.map +1 -0
  15. package/lib/modularDrawer/hooks/__test__/useAssetAccountCounts.test.js +38 -0
  16. package/lib/modularDrawer/hooks/__test__/useAssetAccountCounts.test.js.map +1 -0
  17. package/lib/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.d.ts +2 -0
  18. package/lib/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.d.ts.map +1 -0
  19. package/lib/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.js +50 -0
  20. package/lib/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.js.map +1 -0
  21. package/lib/modularDrawer/hooks/__test__/useDetailedAccountsCore.test.d.ts.map +1 -0
  22. package/lib/modularDrawer/hooks/__test__/useDetailedAccountsCore.test.js.map +1 -0
  23. package/lib/modularDrawer/modules/__test__/createAssetConfiguration.test.d.ts +19 -0
  24. package/lib/modularDrawer/modules/__test__/createAssetConfiguration.test.d.ts.map +1 -0
  25. package/lib/modularDrawer/modules/__test__/createAssetConfiguration.test.js +209 -0
  26. package/lib/modularDrawer/modules/__test__/createAssetConfiguration.test.js.map +1 -0
  27. package/lib/modularDrawer/modules/__test__/createNetworkConfiguration.test.js +9 -27
  28. package/lib/modularDrawer/modules/__test__/createNetworkConfiguration.test.js.map +1 -1
  29. package/lib-es/e2e/index.d.ts +5 -0
  30. package/lib-es/e2e/index.d.ts.map +1 -1
  31. package/lib-es/e2e/speculosCI.d.ts.map +1 -1
  32. package/lib-es/e2e/speculosCI.js +2 -1
  33. package/lib-es/e2e/speculosCI.js.map +1 -1
  34. package/lib-es/env.react.d.ts +1 -1
  35. package/lib-es/env.react.d.ts.map +1 -1
  36. package/lib-es/featureFlags/defaultFeatures.d.ts.map +1 -1
  37. package/lib-es/featureFlags/defaultFeatures.js +10 -0
  38. package/lib-es/featureFlags/defaultFeatures.js.map +1 -1
  39. package/lib-es/featureFlags/useFeature.d.ts +1 -1
  40. package/lib-es/featureFlags/useFeature.d.ts.map +1 -1
  41. package/lib-es/modularDrawer/hooks/__test__/useAssetAccountCounts.test.d.ts +2 -0
  42. package/lib-es/modularDrawer/hooks/__test__/useAssetAccountCounts.test.d.ts.map +1 -0
  43. package/lib-es/modularDrawer/hooks/__test__/useAssetAccountCounts.test.js +36 -0
  44. package/lib-es/modularDrawer/hooks/__test__/useAssetAccountCounts.test.js.map +1 -0
  45. package/lib-es/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.d.ts +2 -0
  46. package/lib-es/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.d.ts.map +1 -0
  47. package/lib-es/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.js +45 -0
  48. package/lib-es/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.js.map +1 -0
  49. package/lib-es/modularDrawer/hooks/__test__/useDetailedAccountsCore.test.d.ts.map +1 -0
  50. package/lib-es/modularDrawer/hooks/__test__/useDetailedAccountsCore.test.js.map +1 -0
  51. package/lib-es/modularDrawer/modules/__test__/createAssetConfiguration.test.d.ts +19 -0
  52. package/lib-es/modularDrawer/modules/__test__/createAssetConfiguration.test.d.ts.map +1 -0
  53. package/lib-es/modularDrawer/modules/__test__/createAssetConfiguration.test.js +202 -0
  54. package/lib-es/modularDrawer/modules/__test__/createAssetConfiguration.test.js.map +1 -0
  55. package/lib-es/modularDrawer/modules/__test__/createNetworkConfiguration.test.js +5 -23
  56. package/lib-es/modularDrawer/modules/__test__/createNetworkConfiguration.test.js.map +1 -1
  57. package/package.json +53 -53
  58. package/src/e2e/speculosCI.ts +2 -1
  59. package/src/featureFlags/defaultFeatures.ts +10 -0
  60. package/src/modularDrawer/hooks/__test__/useAssetAccountCounts.test.ts +40 -0
  61. package/src/modularDrawer/hooks/__test__/useCurrenciesUnderFeatureFlag.test.ts +59 -0
  62. package/src/modularDrawer/modules/__test__/createAssetConfiguration.test.tsx +250 -0
  63. package/src/modularDrawer/modules/__test__/createNetworkConfiguration.test.ts +2 -36
  64. package/lib/modularDrawer/hooks/__tests__/useDetailedAccountsCore.test.d.ts.map +0 -1
  65. package/lib/modularDrawer/hooks/__tests__/useDetailedAccountsCore.test.js.map +0 -1
  66. package/lib-es/modularDrawer/hooks/__tests__/useDetailedAccountsCore.test.d.ts.map +0 -1
  67. package/lib-es/modularDrawer/hooks/__tests__/useDetailedAccountsCore.test.js.map +0 -1
  68. /package/lib/modularDrawer/hooks/{__tests__ → __test__}/useDetailedAccountsCore.test.d.ts +0 -0
  69. /package/lib/modularDrawer/hooks/{__tests__ → __test__}/useDetailedAccountsCore.test.js +0 -0
  70. /package/lib-es/modularDrawer/hooks/{__tests__ → __test__}/useDetailedAccountsCore.test.d.ts +0 -0
  71. /package/lib-es/modularDrawer/hooks/{__tests__ → __test__}/useDetailedAccountsCore.test.js +0 -0
  72. /package/src/modularDrawer/hooks/{__tests__ → __test__}/useDetailedAccountsCore.test.ts +0 -0
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.51.0-nightly.7",
4
+ "version": "34.51.0-nightly.8",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/LedgerHQ/ledger-live.git"
@@ -108,17 +108,17 @@
108
108
  "@dfinity/principal": "^0.15.6",
109
109
  "@ledgerhq/device-management-kit": "0.9.1",
110
110
  "@ledgerhq/live-app-sdk": "^0.8.1",
111
- "@ledgerhq/wallet-api-client": "^1.12.2",
112
- "@ledgerhq/wallet-api-core": "^1.24.2",
113
- "@ledgerhq/wallet-api-server": "^1.13.2",
111
+ "@ledgerhq/wallet-api-client": "^1.12.3",
112
+ "@ledgerhq/wallet-api-core": "^1.25.0",
113
+ "@ledgerhq/wallet-api-server": "^1.13.3",
114
114
  "@noble/curves": "^1.9.7",
115
115
  "@noble/hashes": "1.8.0",
116
116
  "@reduxjs/toolkit": "2.8.2",
117
117
  "@stellar/stellar-sdk": "^14.0.0",
118
118
  "@stricahq/typhonjs": "^3.0.0",
119
119
  "@taquito/ledger-signer": "^23.0.0-RC.0",
120
- "@ton-community/ton-ledger": "^7.2.0",
121
- "@ton/core": "^0.60.1",
120
+ "@ton-community/ton-ledger": "^7.3.0",
121
+ "@ton/core": "^0.62.0",
122
122
  "@ton/crypto": "^3.3.0",
123
123
  "@types/bchaddrjs": "^0.4.0",
124
124
  "@types/pako": "^2.0.0",
@@ -166,79 +166,79 @@
166
166
  "xstate": "^5.19.2",
167
167
  "yargs": "^17.0.0",
168
168
  "zod": "^3.22.4",
169
- "@ledgerhq/coin-algorand": "^0.11.0-nightly.5",
170
- "@ledgerhq/coin-aptos": "^3.4.0-nightly.5",
171
- "@ledgerhq/coin-bitcoin": "^0.23.0-nightly.5",
172
- "@ledgerhq/coin-canton": "^0.8.0-nightly.5",
173
- "@ledgerhq/coin-cardano": "^0.13.0-nightly.5",
174
- "@ledgerhq/coin-casper": "^2.2.0-nightly.5",
175
- "@ledgerhq/coin-celo": "^1.6.0-nightly.5",
176
- "@ledgerhq/coin-cosmos": "^0.18.0-nightly.5",
177
- "@ledgerhq/coin-evm": "^2.33.0-nightly.5",
178
- "@ledgerhq/coin-filecoin": "^1.13.0-nightly.5",
179
- "@ledgerhq/coin-framework": "^6.7.0-nightly.5",
180
- "@ledgerhq/coin-hedera": "^1.12.0-nightly.5",
181
- "@ledgerhq/coin-icon": "^0.13.0-nightly.5",
182
- "@ledgerhq/coin-internet_computer": "^1.9.0-nightly.5",
183
- "@ledgerhq/coin-kaspa": "^1.3.0-nightly.5",
184
- "@ledgerhq/coin-mina": "^1.3.0-nightly.5",
185
- "@ledgerhq/coin-multiversx": "^0.6.0-nightly.5",
186
- "@ledgerhq/coin-near": "^0.14.0-nightly.5",
187
- "@ledgerhq/coin-polkadot": "^6.11.0-nightly.5",
188
- "@ledgerhq/coin-solana": "^0.35.0-nightly.5",
189
- "@ledgerhq/coin-stacks": "^0.10.0-nightly.5",
190
- "@ledgerhq/coin-stellar": "^6.5.0-nightly.5",
191
- "@ledgerhq/coin-tezos": "^6.7.0-nightly.5",
192
- "@ledgerhq/coin-ton": "^0.15.0-nightly.5",
193
- "@ledgerhq/coin-tron": "^5.5.0-nightly.5",
194
- "@ledgerhq/coin-vechain": "^2.11.0-nightly.5",
195
- "@ledgerhq/coin-sui": "^0.16.0-nightly.6",
196
- "@ledgerhq/coin-xrp": "^7.6.0-nightly.5",
197
- "@ledgerhq/crypto-icons-ui": "^1.21.0-nightly.1",
198
- "@ledgerhq/cryptoassets": "^13.31.0-nightly.5",
199
- "@ledgerhq/device-core": "^0.6.6-nightly.4",
169
+ "@ledgerhq/coin-algorand": "^0.11.0-nightly.6",
170
+ "@ledgerhq/coin-aptos": "^3.4.0-nightly.6",
171
+ "@ledgerhq/coin-bitcoin": "^0.23.0-nightly.6",
172
+ "@ledgerhq/coin-canton": "^0.8.0-nightly.6",
173
+ "@ledgerhq/coin-cardano": "^0.13.0-nightly.6",
174
+ "@ledgerhq/coin-casper": "^2.2.0-nightly.6",
175
+ "@ledgerhq/coin-celo": "^1.6.0-nightly.6",
176
+ "@ledgerhq/coin-cosmos": "^0.18.0-nightly.6",
177
+ "@ledgerhq/coin-evm": "^2.33.0-nightly.6",
178
+ "@ledgerhq/coin-filecoin": "^1.13.0-nightly.6",
179
+ "@ledgerhq/coin-framework": "^6.7.0-nightly.6",
180
+ "@ledgerhq/coin-hedera": "^1.12.0-nightly.6",
181
+ "@ledgerhq/coin-icon": "^0.13.0-nightly.6",
182
+ "@ledgerhq/coin-internet_computer": "^1.9.0-nightly.6",
183
+ "@ledgerhq/coin-kaspa": "^1.3.0-nightly.6",
184
+ "@ledgerhq/coin-mina": "^1.3.0-nightly.6",
185
+ "@ledgerhq/coin-multiversx": "^0.6.0-nightly.6",
186
+ "@ledgerhq/coin-near": "^0.14.0-nightly.6",
187
+ "@ledgerhq/coin-polkadot": "^6.11.0-nightly.6",
188
+ "@ledgerhq/coin-solana": "^0.35.0-nightly.6",
189
+ "@ledgerhq/coin-stacks": "^0.10.0-nightly.6",
190
+ "@ledgerhq/coin-stellar": "^6.5.0-nightly.6",
191
+ "@ledgerhq/coin-sui": "^0.16.0-nightly.7",
192
+ "@ledgerhq/coin-tezos": "^6.7.0-nightly.6",
193
+ "@ledgerhq/coin-ton": "^0.15.0-nightly.6",
194
+ "@ledgerhq/coin-tron": "^5.5.0-nightly.6",
195
+ "@ledgerhq/coin-vechain": "^2.11.0-nightly.6",
196
+ "@ledgerhq/coin-xrp": "^7.6.0-nightly.6",
197
+ "@ledgerhq/crypto-icons-ui": "^1.21.0-nightly.2",
198
+ "@ledgerhq/cryptoassets": "^13.31.0-nightly.6",
199
+ "@ledgerhq/device-core": "^0.6.6-nightly.5",
200
200
  "@ledgerhq/devices": "8.6.2-nightly.0",
201
201
  "@ledgerhq/errors": "^6.27.0-nightly.0",
202
202
  "@ledgerhq/hw-app-algorand": "^6.31.9-nightly.0",
203
203
  "@ledgerhq/hw-app-aptos": "^6.34.9-nightly.0",
204
204
  "@ledgerhq/hw-app-btc": "^10.11.3-nightly.0",
205
- "@ledgerhq/hw-app-celo": "^6.35.1-nightly.4",
205
+ "@ledgerhq/hw-app-celo": "^6.35.1-nightly.5",
206
206
  "@ledgerhq/hw-app-cosmos": "^6.32.9-nightly.0",
207
+ "@ledgerhq/hw-app-eth": "^6.46.1-nightly.5",
208
+ "@ledgerhq/hw-app-exchange": "^0.15.1-nightly.1",
207
209
  "@ledgerhq/hw-app-hedera": "^1.2.9-nightly.0",
208
- "@ledgerhq/hw-app-eth": "^6.46.1-nightly.4",
209
210
  "@ledgerhq/hw-app-icon": "^1.3.9-nightly.0",
210
- "@ledgerhq/hw-app-exchange": "^0.15.1-nightly.1",
211
211
  "@ledgerhq/hw-app-kaspa": "^1.3.2-nightly.0",
212
212
  "@ledgerhq/hw-app-multiversx": "^6.25.4-nightly.0",
213
- "@ledgerhq/hw-app-polkadot": "^6.34.9-nightly.0",
214
213
  "@ledgerhq/hw-app-near": "^6.31.9-nightly.0",
214
+ "@ledgerhq/hw-app-polkadot": "^6.34.9-nightly.0",
215
215
  "@ledgerhq/hw-app-str": "^7.2.9-nightly.0",
216
- "@ledgerhq/hw-app-tezos": "^6.31.9-nightly.0",
217
216
  "@ledgerhq/hw-app-sui": "^1.4.0",
217
+ "@ledgerhq/hw-app-tezos": "^6.31.9-nightly.0",
218
218
  "@ledgerhq/hw-app-trx": "^6.31.9-nightly.0",
219
219
  "@ledgerhq/hw-app-vet": "^0.7.0-nightly.4",
220
220
  "@ledgerhq/hw-app-xrp": "^6.32.7-nightly.0",
221
221
  "@ledgerhq/hw-bolos": "^6.32.9-nightly.0",
222
+ "@ledgerhq/hw-transport": "6.31.13-nightly.0",
222
223
  "@ledgerhq/hw-transport-mocker": "^6.29.13-nightly.0",
223
224
  "@ledgerhq/ledger-cal-service": "^1.7.0-nightly.2",
224
225
  "@ledgerhq/ledger-trust-service": "^0.3.15-nightly.2",
225
226
  "@ledgerhq/live-config": "^3.2.0",
226
- "@ledgerhq/live-countervalues": "^0.8.0-nightly.5",
227
- "@ledgerhq/live-countervalues-react": "^0.7.0-nightly.5",
227
+ "@ledgerhq/live-countervalues": "^0.8.0-nightly.6",
228
+ "@ledgerhq/live-countervalues-react": "^0.7.0-nightly.6",
228
229
  "@ledgerhq/live-dmk-shared": "^0.14.0-nightly.2",
229
230
  "@ledgerhq/live-env": "^2.19.0-nightly.1",
230
231
  "@ledgerhq/live-hooks": "0.2.0-nightly.0",
231
232
  "@ledgerhq/live-network": "^2.0.20-nightly.2",
232
233
  "@ledgerhq/live-promise": "^0.1.1",
233
- "@ledgerhq/live-signer-canton": "^0.4.2-nightly.5",
234
- "@ledgerhq/live-signer-evm": "^0.8.2-nightly.5",
235
- "@ledgerhq/live-signer-solana": "^0.6.0-nightly.5",
236
- "@ledgerhq/live-wallet": "^0.14.3-nightly.5",
234
+ "@ledgerhq/live-signer-canton": "^0.4.2-nightly.6",
235
+ "@ledgerhq/live-signer-evm": "^0.8.2-nightly.6",
236
+ "@ledgerhq/live-signer-solana": "^0.6.0-nightly.6",
237
+ "@ledgerhq/live-wallet": "^0.14.3-nightly.6",
237
238
  "@ledgerhq/logs": "^6.13.0",
238
239
  "@ledgerhq/speculos-transport": "^0.2.13-nightly.2",
239
- "@ledgerhq/wallet-api-acre-module": "^0.8.0-nightly.2",
240
- "@ledgerhq/wallet-api-exchange-module": "^0.17.0-nightly.2",
241
- "@ledgerhq/hw-transport": "6.31.13-nightly.0"
240
+ "@ledgerhq/wallet-api-acre-module": "^0.8.0-nightly.3",
241
+ "@ledgerhq/wallet-api-exchange-module": "^0.17.0-nightly.3"
242
242
  },
243
243
  "devDependencies": {
244
244
  "@solana/web3.js": "1.95.4",
@@ -286,10 +286,10 @@
286
286
  "undici": "6.19.2",
287
287
  "uuid": "^8.3.2",
288
288
  "ws": "7",
289
- "@ledgerhq/device-react": "^0.3.0-nightly.4",
289
+ "@ledgerhq/device-react": "^0.3.0-nightly.5",
290
290
  "@ledgerhq/types-cryptoassets": "^7.29.0-nightly.0",
291
291
  "@ledgerhq/types-devices": "^6.27.0",
292
- "@ledgerhq/types-live": "^6.87.0-nightly.3"
292
+ "@ledgerhq/types-live": "^6.87.0-nightly.4"
293
293
  },
294
294
  "scripts": {
295
295
  "build": "zx ./scripts/build-ts.mjs",
@@ -7,7 +7,7 @@ import {
7
7
  import { SpeculosDevice } from "./speculos";
8
8
  import https from "https";
9
9
 
10
- const { SEED, GITHUB_TOKEN, AWS_ROLE, CLUSTER } = process.env;
10
+ const { SEED, GITHUB_TOKEN, AWS_ROLE, CLUSTER, SPECULOS_IMAGE_TAG } = process.env;
11
11
  const GIT_API_URL = "https://api.github.com/repos/LedgerHQ/actions/actions/";
12
12
  const START_WORKFLOW_ID = "workflows/161487603/dispatches";
13
13
  const STOP_WORKFLOW_ID = "workflows/161487604/dispatches";
@@ -147,6 +147,7 @@ function createStartPayload(deviceParams: DeviceParams, runId: string) {
147
147
  return {
148
148
  ref: GITHUB_REF,
149
149
  inputs: {
150
+ speculos_version: SPECULOS_IMAGE_TAG?.split(":")[1] || "master",
150
151
  coin_app: appName,
151
152
  coin_app_version: appVersion,
152
153
  device: reverseModelMap[model],
@@ -129,6 +129,10 @@ export const DEFAULT_FEATURES: Features = {
129
129
  receiveStakingFlowConfigDesktop: initFeature(),
130
130
  brazePushNotifications: initFeature(),
131
131
  stakeAccountBanner: initFeature(),
132
+ mixpanelAnalytics: initFeature({
133
+ enabled: false,
134
+ params: { record_sessions_percent: 100 },
135
+ }),
132
136
 
133
137
  ptxSwapDetailedView: initFeature({
134
138
  enabled: false,
@@ -688,6 +692,12 @@ export const DEFAULT_FEATURES: Features = {
688
692
  supportDeviceApex: DEFAULT_FEATURE,
689
693
  llmSyncOnboardingIncr1: DEFAULT_FEATURE,
690
694
  noah: DEFAULT_FEATURE,
695
+ lldSessionReplay: {
696
+ ...DEFAULT_FEATURE,
697
+ params: {
698
+ sampling: 100,
699
+ },
700
+ },
691
701
  };
692
702
 
693
703
  // Firebase SDK treat JSON values as strings
@@ -0,0 +1,40 @@
1
+ import { genAccount } from "@ledgerhq/coin-framework/lib/mocks/account";
2
+ import { useAssetAccountCounts } from "../useAssetAccountCounts";
3
+ import { createFixtureCryptoCurrency } from "../../../mock/fixtures/cryptoCurrencies";
4
+
5
+ const ethereumCurrency = createFixtureCryptoCurrency("ethereum");
6
+ const ethereumAccountHigh = genAccount("ethereum-account-high", {
7
+ currency: ethereumCurrency,
8
+ });
9
+
10
+ describe("useAssetAccountCounts", () => {
11
+ it("should return the count for one account", () => {
12
+ const assetAccountCounts = useAssetAccountCounts({
13
+ assets: [ethereumCurrency],
14
+ nestedAccounts: [ethereumAccountHigh],
15
+ accountIds: new Map([[ethereumAccountHigh.id, true]]),
16
+ formatLabel: (count: number) => `${count}`,
17
+ });
18
+
19
+ expect(assetAccountCounts[0].count).toBe(1);
20
+ expect(assetAccountCounts[0].label).toBe("1");
21
+ });
22
+
23
+ it("should return the count for two accounts on ethereum", () => {
24
+ const ethereumAccountLow = genAccount("ethereum-account-low", {
25
+ currency: ethereumCurrency,
26
+ });
27
+ const assetAccountCounts = useAssetAccountCounts({
28
+ assets: [ethereumCurrency],
29
+ nestedAccounts: [ethereumAccountHigh, ethereumAccountLow],
30
+ accountIds: new Map([
31
+ [ethereumAccountHigh.id, true],
32
+ [ethereumAccountLow.id, true],
33
+ ]),
34
+ formatLabel: (count: number) => `${count}`,
35
+ });
36
+
37
+ expect(assetAccountCounts[0].count).toBe(2);
38
+ expect(assetAccountCounts[0].label).toBe("2");
39
+ });
40
+ });
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+ import { renderHook } from "@testing-library/react";
5
+ import { useCurrenciesUnderFeatureFlag } from "../useCurrenciesUnderFeatureFlag";
6
+ import { useFeature } from "../../../featureFlags";
7
+ import useEnv from "../../../hooks/useEnv";
8
+
9
+ jest.mock("../../../featureFlags", () => ({ useFeature: jest.fn() }));
10
+ jest.mock("../../../hooks/useEnv", () => jest.fn());
11
+
12
+ const mockUseFeature = jest.mocked(useFeature);
13
+ const mockedEnvironment = jest.mocked(useEnv);
14
+
15
+ describe("useCurrenciesUnderFeatureFlag", () => {
16
+ beforeEach(() => {
17
+ jest.clearAllMocks();
18
+ });
19
+
20
+ it("should return empty deactivatedCurrencyIds when all features are enabled", () => {
21
+ mockedEnvironment.mockReturnValue(false);
22
+ mockUseFeature.mockReturnValue({ enabled: true });
23
+
24
+ const { result } = renderHook(() => useCurrenciesUnderFeatureFlag());
25
+
26
+ expect(result.current.deactivatedCurrencyIds.size).toEqual(0);
27
+ expect(result.current.featureFlaggedCurrencies).toBeDefined();
28
+ });
29
+
30
+ it("should include disabled currencies in deactivatedCurrencyIds", () => {
31
+ mockedEnvironment.mockReturnValue(false);
32
+ mockUseFeature.mockReturnValue({ enabled: false });
33
+
34
+ const { result } = renderHook(() => useCurrenciesUnderFeatureFlag());
35
+
36
+ expect(result.current.deactivatedCurrencyIds.size).toBeGreaterThan(0);
37
+ });
38
+
39
+ it("should return empty deactivatedCurrencyIds when MOCK is true", () => {
40
+ mockedEnvironment.mockReturnValue(true);
41
+ mockUseFeature.mockReturnValue({ enabled: false });
42
+
43
+ const { result } = renderHook(() => useCurrenciesUnderFeatureFlag());
44
+
45
+ expect(result.current.deactivatedCurrencyIds.size).toBe(0);
46
+ });
47
+
48
+ it("should contain currency mappings", () => {
49
+ mockedEnvironment.mockReturnValue(false);
50
+ mockUseFeature.mockReturnValue({ enabled: true });
51
+
52
+ const { result } = renderHook(() => useCurrenciesUnderFeatureFlag());
53
+
54
+ const currencies = result.current.featureFlaggedCurrencies;
55
+ expect(currencies).toHaveProperty("aptos");
56
+ expect(currencies).toHaveProperty("stacks");
57
+ expect(currencies).toHaveProperty("optimism");
58
+ });
59
+ });
@@ -0,0 +1,250 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+
5
+ import React from "react";
6
+ import { renderHook } from "@testing-library/react";
7
+ import { mockEthCryptoCurrency } from "../../__mocks__/currencies.mock";
8
+ import { groupCurrenciesByProvider } from "../../utils";
9
+ import createAssetConfigurationHook from "../createAssetConfiguration";
10
+ import { BigNumber } from "bignumber.js";
11
+ import { genAccount, genTokenAccount } from "@ledgerhq/coin-framework/lib/mocks/account";
12
+ import { createFixtureCryptoCurrency } from "../../../mock/fixtures/cryptoCurrencies";
13
+ import { CounterValuesState } from "@ledgerhq/live-countervalues/lib/types";
14
+ import { CryptoCurrency, FiatCurrency, TokenCurrency } from "@ledgerhq/types-cryptoassets";
15
+ import { Provider } from "react-redux";
16
+ import { configureStore } from "@reduxjs/toolkit";
17
+
18
+ export const makeUsdcToken = (
19
+ parentCurrency: CryptoCurrency,
20
+ contractAddress: string,
21
+ tokenType: string = "erc20",
22
+ name: string = "USD Coin",
23
+ explicitId?: string,
24
+ ) => {
25
+ const id = explicitId ?? `${parentCurrency.id}/${tokenType}/usdc`;
26
+ return {
27
+ type: "TokenCurrency" as const,
28
+ parentCurrency,
29
+ tokenType,
30
+ id,
31
+ contractAddress,
32
+ ticker: "USDC",
33
+ name,
34
+ units: [
35
+ {
36
+ name: "USD Coin",
37
+ code: "USDC",
38
+ magnitude: 6,
39
+ },
40
+ ],
41
+ };
42
+ };
43
+
44
+ const ApyIndicator = () => null;
45
+ const MarketPercentIndicator = () => null;
46
+ const MarketPriceIndicator = jest.fn(() => null);
47
+
48
+ const ethereumCurrencyMagnitude = 18;
49
+ const fiatCurrencyMagnitude = 2;
50
+ const fiatConversion = 4589;
51
+
52
+ const ethereumCurrency = createFixtureCryptoCurrency("ethereum");
53
+ ethereumCurrency.id = "ethereum";
54
+ ethereumCurrency.units[0].magnitude = ethereumCurrencyMagnitude;
55
+ const ethereumAccountHigh = genAccount("ethereum-account-high", {
56
+ currency: ethereumCurrency,
57
+ });
58
+
59
+ ethereumAccountHigh.balance = new BigNumber("1000000000000000000000");
60
+ ethereumAccountHigh.spendableBalance = ethereumAccountHigh.balance;
61
+
62
+ const ethereumUsdcToken: TokenCurrency = makeUsdcToken(ethereumCurrency, "erc20", "USD Coin");
63
+ const ethereumUsdcTokenAccount = genTokenAccount(0, ethereumAccountHigh, ethereumUsdcToken);
64
+ ethereumUsdcTokenAccount.balance = new BigNumber("1000000000");
65
+ ethereumAccountHigh.subAccounts = [ethereumUsdcTokenAccount];
66
+
67
+ const mockFiatCurrency: FiatCurrency = {
68
+ type: "FiatCurrency",
69
+ ticker: "USD",
70
+ name: "US Dollar",
71
+ symbol: "$",
72
+ units: [
73
+ {
74
+ code: "$",
75
+ name: "US Dollar",
76
+ magnitude: fiatCurrencyMagnitude,
77
+ showAllDigits: true,
78
+ prefixCode: true,
79
+ },
80
+ ],
81
+ };
82
+
83
+ const useBalanceDeps = () => {
84
+ const mockCounterValuesState: CounterValuesState = {
85
+ cache: {
86
+ "USD ethereum": {
87
+ map: new Map([["latest", fiatConversion]]),
88
+ stats: {
89
+ oldest: "2024-09-12",
90
+ earliest: "2025-10-02T13",
91
+ oldestDate: new Date(),
92
+ earliestDate: new Date(),
93
+ earliestStableDate: new Date(),
94
+ },
95
+ },
96
+ },
97
+ data: {},
98
+ status: {},
99
+ };
100
+
101
+ return {
102
+ counterValueCurrency: mockFiatCurrency,
103
+ flattenedAccounts: [ethereumAccountHigh],
104
+ state: mockCounterValuesState,
105
+ locale: "en-US",
106
+ };
107
+ };
108
+
109
+ const balanceItem = jest.fn(() => null);
110
+
111
+ const assetConfigurationDeps = {
112
+ useBalanceDeps,
113
+ balanceItem,
114
+ ApyIndicator,
115
+ MarketPercentIndicator,
116
+ MarketPriceIndicator,
117
+ assetsMap: groupCurrenciesByProvider([
118
+ {
119
+ asset: {
120
+ id: "ethereum",
121
+ ticker: "ETH",
122
+ name: "Ethereum",
123
+ assetsIds: {
124
+ ethereum: "ethereum",
125
+ arbitrum: "arbitrum",
126
+ },
127
+ metaCurrencyId: "ethereum",
128
+ },
129
+ networks: [mockEthCryptoCurrency],
130
+ },
131
+ ]),
132
+ };
133
+
134
+ describe("createAssetConfiguration", () => {
135
+ it("should call balanceItem with correct BalanceUI objects for each asset", () => {
136
+ renderHook(() =>
137
+ createAssetConfigurationHook(assetConfigurationDeps)({
138
+ assetsConfiguration: { rightElement: "balance" },
139
+ })([ethereumCurrency]),
140
+ );
141
+
142
+ expect(balanceItem).toHaveBeenCalledTimes(1);
143
+ expect(balanceItem).toHaveBeenNthCalledWith(1, {
144
+ currency: ethereumCurrency,
145
+ balance: ethereumAccountHigh.balance,
146
+ fiatValue: ethereumAccountHigh.balance
147
+ .shiftedBy(fiatCurrencyMagnitude - ethereumCurrencyMagnitude)
148
+ .multipliedBy(fiatConversion)
149
+ .toNumber(),
150
+ });
151
+ });
152
+
153
+ const store = configureStore({
154
+ reducer: {
155
+ assetsDataApi: (state = {}, _action) => state,
156
+ },
157
+ preloadedState: {
158
+ assetsDataApi: {
159
+ queries: {
160
+ mockMarketsQuery: {
161
+ data: {
162
+ pages: [
163
+ {
164
+ markets: {
165
+ ethereum: {
166
+ price: 2500.5,
167
+ priceChangePercentage24h: 5.25,
168
+ marketCap: 300000000000,
169
+ ticker: "ETH",
170
+ name: "Ethereum",
171
+ },
172
+ },
173
+ interestRates: {
174
+ ethereum: {
175
+ currencyId: "ethereum",
176
+ rate: 0.045,
177
+ type: "APY",
178
+ fetchAt: "2024-10-13T10:00:00Z",
179
+ },
180
+ },
181
+ },
182
+ ],
183
+ },
184
+ },
185
+ },
186
+ },
187
+ },
188
+ });
189
+
190
+ it("should generate market trend right element with correct market trend data", () => {
191
+ const {
192
+ result: { current },
193
+ } = renderHook(
194
+ () =>
195
+ createAssetConfigurationHook(assetConfigurationDeps)({
196
+ assetsConfiguration: { rightElement: "marketTrend" },
197
+ })([ethereumCurrency]),
198
+ {
199
+ wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
200
+ },
201
+ );
202
+
203
+ const rightElement = current[0]?.rightElement;
204
+ expect(rightElement).toBeDefined();
205
+ expect(React.isValidElement(rightElement)).toBe(true);
206
+ if (React.isValidElement(rightElement)) {
207
+ expect(rightElement.props).toEqual({
208
+ percent: 5.25,
209
+ price: "$2,500.50",
210
+ });
211
+ }
212
+ });
213
+
214
+ it("should generate apy left element when leftElement is 'apy'", () => {
215
+ const {
216
+ result: { current },
217
+ } = renderHook(
218
+ () =>
219
+ createAssetConfigurationHook(assetConfigurationDeps)({
220
+ assetsConfiguration: { leftElement: "apy" },
221
+ })([ethereumCurrency]),
222
+ {
223
+ wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
224
+ },
225
+ );
226
+
227
+ expect((current[0]?.leftElement as React.ReactElement).props).toEqual({
228
+ value: 4.5,
229
+ type: "APY",
230
+ });
231
+ });
232
+
233
+ it("should generate market trend left element when leftElement is 'marketTrend'", () => {
234
+ const {
235
+ result: { current },
236
+ } = renderHook(
237
+ () =>
238
+ createAssetConfigurationHook(assetConfigurationDeps)({
239
+ assetsConfiguration: { leftElement: "marketTrend" },
240
+ })([ethereumCurrency]),
241
+ {
242
+ wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
243
+ },
244
+ );
245
+
246
+ expect((current[0]?.leftElement as React.ReactElement).props).toEqual({
247
+ percent: 5.25,
248
+ });
249
+ });
250
+ });
@@ -9,34 +9,7 @@ import { createNetworkConfigurationHook } from "../createNetworkConfiguration";
9
9
  import { renderHook } from "@testing-library/react";
10
10
  import { CounterValuesState } from "@ledgerhq/live-countervalues/lib/types";
11
11
  import { FiatCurrency, TokenCurrency, CryptoCurrency } from "@ledgerhq/types-cryptoassets";
12
-
13
- const makeUsdcToken = (
14
- parentCurrency: CryptoCurrency,
15
- contractAddress: string,
16
- tokenType: string = "erc20",
17
- magnitude: number = 6,
18
- name: string = "USD Coin",
19
- unitName: string = "USD Coin",
20
- explicitId?: string,
21
- ) => {
22
- const id = explicitId ?? `${parentCurrency.id}/${tokenType}/usdc`;
23
- return {
24
- type: "TokenCurrency" as const,
25
- parentCurrency,
26
- tokenType,
27
- id,
28
- contractAddress,
29
- ticker: "USDC",
30
- name,
31
- units: [
32
- {
33
- name: unitName,
34
- code: "USDC",
35
- magnitude,
36
- },
37
- ],
38
- };
39
- };
12
+ import { makeUsdcToken } from "./createAssetConfiguration.test";
40
13
 
41
14
  const bscCurrency = createFixtureCryptoCurrency("bsc");
42
15
  const bscAccount = genAccount("bsc-account", { currency: bscCurrency });
@@ -44,9 +17,7 @@ const bscUsdcToken: TokenCurrency = makeUsdcToken(
44
17
  bscCurrency,
45
18
  "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
46
19
  "bep20",
47
- 18,
48
20
  "USD Coin",
49
- "Binance-Peg USD Coin",
50
21
  "bsc/erc20/usdc",
51
22
  );
52
23
  const bscUsdcTokenAccount = genTokenAccount(0, bscAccount, bscUsdcToken);
@@ -58,8 +29,6 @@ const baseUsdcToken: TokenCurrency = makeUsdcToken(
58
29
  baseCurrency,
59
30
  "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
60
31
  "erc20",
61
- 6,
62
- "USD Coin",
63
32
  "USD Coin",
64
33
  "base/erc20/usd_coin",
65
34
  );
@@ -78,8 +47,7 @@ const ethereumUsdcToken: TokenCurrency = makeUsdcToken(
78
47
  ethereumCurrency,
79
48
  "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
80
49
  "erc20",
81
- 6,
82
- "USD Coin",
50
+
83
51
  "USD Coin",
84
52
  );
85
53
  const ethereumUsdcTokenAccount = genTokenAccount(0, ethereumAccountHigh, ethereumUsdcToken);
@@ -108,8 +76,6 @@ const polygonUsdcToken: TokenCurrency = makeUsdcToken(
108
76
  polygonCurrency,
109
77
  "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
110
78
  "erc20",
111
- 6,
112
- "USD Coin",
113
79
  "USD Coin",
114
80
  );
115
81
  const polygonUsdcTokenAccount = genTokenAccount(0, polygonAccountMedium, polygonUsdcToken);
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDetailedAccountsCore.test.d.ts","sourceRoot":"","sources":["../../../../src/modularDrawer/hooks/__tests__/useDetailedAccountsCore.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDetailedAccountsCore.test.js","sourceRoot":"","sources":["../../../../src/modularDrawer/hooks/__tests__/useDetailedAccountsCore.test.ts"],"names":[],"mappings":"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"}