@ledgerhq/live-common 34.50.0-nightly.6 → 34.51.0-nightly.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 (179) hide show
  1. package/lib/bridge/generic-alpaca/prepareTransaction.d.ts.map +1 -1
  2. package/lib/bridge/generic-alpaca/prepareTransaction.js +3 -6
  3. package/lib/bridge/generic-alpaca/prepareTransaction.js.map +1 -1
  4. package/lib/bridge/generic-alpaca/tests/prepareTransaction.test.js +60 -0
  5. package/lib/bridge/generic-alpaca/tests/prepareTransaction.test.js.map +1 -1
  6. package/lib/bridge/generic-alpaca/types.d.ts +0 -1
  7. package/lib/bridge/generic-alpaca/types.d.ts.map +1 -1
  8. package/lib/exchange/swap/postSwapState.d.ts.map +1 -1
  9. package/lib/exchange/swap/postSwapState.js +19 -23
  10. package/lib/exchange/swap/postSwapState.js.map +1 -1
  11. package/lib/exchange/swap/setBroadcastTransaction.d.ts +4 -4
  12. package/lib/exchange/swap/setBroadcastTransaction.js +7 -7
  13. package/lib/exchange/swap/setBroadcastTransaction.js.map +1 -1
  14. package/lib/exchange/swap/types.d.ts +3 -3
  15. package/lib/exchange/swap/types.d.ts.map +1 -1
  16. package/lib/families/tezos/config.js +2 -2
  17. package/lib/modularDrawer/hooks/modules/useRightMarketTrendModule.js +5 -2
  18. package/lib/modularDrawer/hooks/modules/useRightMarketTrendModule.js.map +1 -1
  19. package/lib/modularDrawer/hooks/useRightBalanceAsset.d.ts +5 -8
  20. package/lib/modularDrawer/hooks/useRightBalanceAsset.d.ts.map +1 -1
  21. package/lib/modularDrawer/hooks/useRightBalanceAsset.js +15 -24
  22. package/lib/modularDrawer/hooks/useRightBalanceAsset.js.map +1 -1
  23. package/lib/modularDrawer/hooks/useRightBalanceNetwork.d.ts +6 -25
  24. package/lib/modularDrawer/hooks/useRightBalanceNetwork.d.ts.map +1 -1
  25. package/lib/modularDrawer/hooks/useRightBalanceNetwork.js +4 -3
  26. package/lib/modularDrawer/hooks/useRightBalanceNetwork.js.map +1 -1
  27. package/lib/modularDrawer/modules/createNetworkConfiguration.d.ts.map +1 -1
  28. package/lib/modularDrawer/modules/createNetworkConfiguration.js +8 -4
  29. package/lib/modularDrawer/modules/createNetworkConfiguration.js.map +1 -1
  30. package/lib/modularDrawer/utils/__tests__/calculateProviderTotal.test.d.ts +2 -0
  31. package/lib/modularDrawer/utils/__tests__/calculateProviderTotal.test.d.ts.map +1 -0
  32. package/lib/modularDrawer/utils/__tests__/calculateProviderTotal.test.js +212 -0
  33. package/lib/modularDrawer/utils/__tests__/calculateProviderTotal.test.js.map +1 -0
  34. package/lib/modularDrawer/utils/__tests__/groupAccountsByAsset.test.d.ts +2 -0
  35. package/lib/modularDrawer/utils/__tests__/groupAccountsByAsset.test.d.ts.map +1 -0
  36. package/lib/modularDrawer/utils/__tests__/groupAccountsByAsset.test.js +202 -0
  37. package/lib/modularDrawer/utils/__tests__/groupAccountsByAsset.test.js.map +1 -0
  38. package/lib/modularDrawer/utils/calculateProviderTotal.d.ts +1 -0
  39. package/lib/modularDrawer/utils/calculateProviderTotal.d.ts.map +1 -1
  40. package/lib/modularDrawer/utils/calculateProviderTotal.js +10 -2
  41. package/lib/modularDrawer/utils/calculateProviderTotal.js.map +1 -1
  42. package/lib/modularDrawer/utils/getBalanceAndFiatValueByAssets.d.ts +6 -4
  43. package/lib/modularDrawer/utils/getBalanceAndFiatValueByAssets.d.ts.map +1 -1
  44. package/lib/modularDrawer/utils/getBalanceAndFiatValueByAssets.js +9 -22
  45. package/lib/modularDrawer/utils/getBalanceAndFiatValueByAssets.js.map +1 -1
  46. package/lib/modularDrawer/utils/groupAccountsByAsset.d.ts +4 -3
  47. package/lib/modularDrawer/utils/groupAccountsByAsset.d.ts.map +1 -1
  48. package/lib/modularDrawer/utils/groupAccountsByAsset.js +27 -11
  49. package/lib/modularDrawer/utils/groupAccountsByAsset.js.map +1 -1
  50. package/lib/modularDrawer/utils/index.d.ts +0 -1
  51. package/lib/modularDrawer/utils/index.d.ts.map +1 -1
  52. package/lib/modularDrawer/utils/index.js +1 -3
  53. package/lib/modularDrawer/utils/index.js.map +1 -1
  54. package/lib/modularDrawer/utils/sortByBalance.d.ts +1 -3
  55. package/lib/modularDrawer/utils/sortByBalance.d.ts.map +1 -1
  56. package/lib/modularDrawer/utils/sortByBalance.js +6 -18
  57. package/lib/modularDrawer/utils/sortByBalance.js.map +1 -1
  58. package/lib/modularDrawer/utils/type.d.ts +9 -8
  59. package/lib/modularDrawer/utils/type.d.ts.map +1 -1
  60. package/lib/wallet-api/Exchange/server.js +6 -6
  61. package/lib/wallet-api/Exchange/server.js.map +1 -1
  62. package/lib-es/bridge/generic-alpaca/prepareTransaction.d.ts.map +1 -1
  63. package/lib-es/bridge/generic-alpaca/prepareTransaction.js +3 -6
  64. package/lib-es/bridge/generic-alpaca/prepareTransaction.js.map +1 -1
  65. package/lib-es/bridge/generic-alpaca/tests/prepareTransaction.test.js +60 -0
  66. package/lib-es/bridge/generic-alpaca/tests/prepareTransaction.test.js.map +1 -1
  67. package/lib-es/bridge/generic-alpaca/types.d.ts +0 -1
  68. package/lib-es/bridge/generic-alpaca/types.d.ts.map +1 -1
  69. package/lib-es/exchange/swap/postSwapState.d.ts.map +1 -1
  70. package/lib-es/exchange/swap/postSwapState.js +19 -23
  71. package/lib-es/exchange/swap/postSwapState.js.map +1 -1
  72. package/lib-es/exchange/swap/setBroadcastTransaction.d.ts +4 -4
  73. package/lib-es/exchange/swap/setBroadcastTransaction.js +7 -7
  74. package/lib-es/exchange/swap/setBroadcastTransaction.js.map +1 -1
  75. package/lib-es/exchange/swap/types.d.ts +3 -3
  76. package/lib-es/exchange/swap/types.d.ts.map +1 -1
  77. package/lib-es/families/tezos/config.js +2 -2
  78. package/lib-es/modularDrawer/hooks/modules/useRightMarketTrendModule.js +1 -1
  79. package/lib-es/modularDrawer/hooks/modules/useRightMarketTrendModule.js.map +1 -1
  80. package/lib-es/modularDrawer/hooks/useRightBalanceAsset.d.ts +5 -8
  81. package/lib-es/modularDrawer/hooks/useRightBalanceAsset.d.ts.map +1 -1
  82. package/lib-es/modularDrawer/hooks/useRightBalanceAsset.js +15 -24
  83. package/lib-es/modularDrawer/hooks/useRightBalanceAsset.js.map +1 -1
  84. package/lib-es/modularDrawer/hooks/useRightBalanceNetwork.d.ts +6 -25
  85. package/lib-es/modularDrawer/hooks/useRightBalanceNetwork.d.ts.map +1 -1
  86. package/lib-es/modularDrawer/hooks/useRightBalanceNetwork.js +4 -3
  87. package/lib-es/modularDrawer/hooks/useRightBalanceNetwork.js.map +1 -1
  88. package/lib-es/modularDrawer/modules/createNetworkConfiguration.d.ts.map +1 -1
  89. package/lib-es/modularDrawer/modules/createNetworkConfiguration.js +8 -4
  90. package/lib-es/modularDrawer/modules/createNetworkConfiguration.js.map +1 -1
  91. package/lib-es/modularDrawer/utils/__tests__/calculateProviderTotal.test.d.ts +2 -0
  92. package/lib-es/modularDrawer/utils/__tests__/calculateProviderTotal.test.d.ts.map +1 -0
  93. package/lib-es/modularDrawer/utils/__tests__/calculateProviderTotal.test.js +207 -0
  94. package/lib-es/modularDrawer/utils/__tests__/calculateProviderTotal.test.js.map +1 -0
  95. package/lib-es/modularDrawer/utils/__tests__/groupAccountsByAsset.test.d.ts +2 -0
  96. package/lib-es/modularDrawer/utils/__tests__/groupAccountsByAsset.test.d.ts.map +1 -0
  97. package/lib-es/modularDrawer/utils/__tests__/groupAccountsByAsset.test.js +197 -0
  98. package/lib-es/modularDrawer/utils/__tests__/groupAccountsByAsset.test.js.map +1 -0
  99. package/lib-es/modularDrawer/utils/calculateProviderTotal.d.ts +1 -0
  100. package/lib-es/modularDrawer/utils/calculateProviderTotal.d.ts.map +1 -1
  101. package/lib-es/modularDrawer/utils/calculateProviderTotal.js +10 -2
  102. package/lib-es/modularDrawer/utils/calculateProviderTotal.js.map +1 -1
  103. package/lib-es/modularDrawer/utils/getBalanceAndFiatValueByAssets.d.ts +6 -4
  104. package/lib-es/modularDrawer/utils/getBalanceAndFiatValueByAssets.d.ts.map +1 -1
  105. package/lib-es/modularDrawer/utils/getBalanceAndFiatValueByAssets.js +9 -22
  106. package/lib-es/modularDrawer/utils/getBalanceAndFiatValueByAssets.js.map +1 -1
  107. package/lib-es/modularDrawer/utils/groupAccountsByAsset.d.ts +4 -3
  108. package/lib-es/modularDrawer/utils/groupAccountsByAsset.d.ts.map +1 -1
  109. package/lib-es/modularDrawer/utils/groupAccountsByAsset.js +27 -11
  110. package/lib-es/modularDrawer/utils/groupAccountsByAsset.js.map +1 -1
  111. package/lib-es/modularDrawer/utils/index.d.ts +0 -1
  112. package/lib-es/modularDrawer/utils/index.d.ts.map +1 -1
  113. package/lib-es/modularDrawer/utils/index.js +0 -1
  114. package/lib-es/modularDrawer/utils/index.js.map +1 -1
  115. package/lib-es/modularDrawer/utils/sortByBalance.d.ts +1 -3
  116. package/lib-es/modularDrawer/utils/sortByBalance.d.ts.map +1 -1
  117. package/lib-es/modularDrawer/utils/sortByBalance.js +5 -15
  118. package/lib-es/modularDrawer/utils/sortByBalance.js.map +1 -1
  119. package/lib-es/modularDrawer/utils/type.d.ts +9 -8
  120. package/lib-es/modularDrawer/utils/type.d.ts.map +1 -1
  121. package/lib-es/wallet-api/Exchange/server.js +6 -6
  122. package/lib-es/wallet-api/Exchange/server.js.map +1 -1
  123. package/package.json +70 -70
  124. package/src/bridge/generic-alpaca/prepareTransaction.ts +3 -7
  125. package/src/bridge/generic-alpaca/tests/prepareTransaction.test.ts +78 -0
  126. package/src/bridge/generic-alpaca/types.ts +1 -1
  127. package/src/exchange/swap/postSwapState.ts +28 -32
  128. package/src/exchange/swap/setBroadcastTransaction.ts +12 -12
  129. package/src/exchange/swap/types.ts +3 -3
  130. package/src/families/tezos/config.ts +2 -2
  131. package/src/modularDrawer/hooks/modules/useRightMarketTrendModule.tsx +1 -1
  132. package/src/modularDrawer/hooks/useRightBalanceAsset.tsx +22 -38
  133. package/src/modularDrawer/hooks/useRightBalanceNetwork.tsx +5 -7
  134. package/src/modularDrawer/modules/createNetworkConfiguration.ts +10 -5
  135. package/src/modularDrawer/utils/__tests__/calculateProviderTotal.test.ts +237 -0
  136. package/src/modularDrawer/utils/__tests__/groupAccountsByAsset.test.ts +228 -0
  137. package/src/modularDrawer/utils/calculateProviderTotal.ts +13 -2
  138. package/src/modularDrawer/utils/getBalanceAndFiatValueByAssets.ts +13 -37
  139. package/src/modularDrawer/utils/groupAccountsByAsset.ts +38 -19
  140. package/src/modularDrawer/utils/index.ts +0 -2
  141. package/src/modularDrawer/utils/sortByBalance.tsx +5 -18
  142. package/src/modularDrawer/utils/type.ts +13 -4
  143. package/src/wallet-api/Exchange/server.ts +6 -6
  144. package/lib/modularDrawer/utils/__tests__/counterValueFormatter.test.d.ts +0 -2
  145. package/lib/modularDrawer/utils/__tests__/counterValueFormatter.test.d.ts.map +0 -1
  146. package/lib/modularDrawer/utils/__tests__/counterValueFormatter.test.js +0 -496
  147. package/lib/modularDrawer/utils/__tests__/counterValueFormatter.test.js.map +0 -1
  148. package/lib/modularDrawer/utils/counterValueFormatter.d.ts +0 -14
  149. package/lib/modularDrawer/utils/counterValueFormatter.d.ts.map +0 -1
  150. package/lib/modularDrawer/utils/counterValueFormatter.js +0 -107
  151. package/lib/modularDrawer/utils/counterValueFormatter.js.map +0 -1
  152. package/lib/modularDrawer/utils/getBalanceAndFiatValue.d.ts +0 -20
  153. package/lib/modularDrawer/utils/getBalanceAndFiatValue.d.ts.map +0 -1
  154. package/lib/modularDrawer/utils/getBalanceAndFiatValue.js +0 -39
  155. package/lib/modularDrawer/utils/getBalanceAndFiatValue.js.map +0 -1
  156. package/lib/modularDrawer/utils/parseToBigNumber.d.ts +0 -9
  157. package/lib/modularDrawer/utils/parseToBigNumber.d.ts.map +0 -1
  158. package/lib/modularDrawer/utils/parseToBigNumber.js +0 -24
  159. package/lib/modularDrawer/utils/parseToBigNumber.js.map +0 -1
  160. package/lib-es/modularDrawer/utils/__tests__/counterValueFormatter.test.d.ts +0 -2
  161. package/lib-es/modularDrawer/utils/__tests__/counterValueFormatter.test.d.ts.map +0 -1
  162. package/lib-es/modularDrawer/utils/__tests__/counterValueFormatter.test.js +0 -494
  163. package/lib-es/modularDrawer/utils/__tests__/counterValueFormatter.test.js.map +0 -1
  164. package/lib-es/modularDrawer/utils/counterValueFormatter.d.ts +0 -14
  165. package/lib-es/modularDrawer/utils/counterValueFormatter.d.ts.map +0 -1
  166. package/lib-es/modularDrawer/utils/counterValueFormatter.js +0 -103
  167. package/lib-es/modularDrawer/utils/counterValueFormatter.js.map +0 -1
  168. package/lib-es/modularDrawer/utils/getBalanceAndFiatValue.d.ts +0 -20
  169. package/lib-es/modularDrawer/utils/getBalanceAndFiatValue.d.ts.map +0 -1
  170. package/lib-es/modularDrawer/utils/getBalanceAndFiatValue.js +0 -32
  171. package/lib-es/modularDrawer/utils/getBalanceAndFiatValue.js.map +0 -1
  172. package/lib-es/modularDrawer/utils/parseToBigNumber.d.ts +0 -9
  173. package/lib-es/modularDrawer/utils/parseToBigNumber.d.ts.map +0 -1
  174. package/lib-es/modularDrawer/utils/parseToBigNumber.js +0 -17
  175. package/lib-es/modularDrawer/utils/parseToBigNumber.js.map +0 -1
  176. package/src/modularDrawer/utils/__tests__/counterValueFormatter.test.ts +0 -549
  177. package/src/modularDrawer/utils/counterValueFormatter.ts +0 -165
  178. package/src/modularDrawer/utils/getBalanceAndFiatValue.ts +0 -53
  179. package/src/modularDrawer/utils/parseToBigNumber.ts +0 -17
@@ -0,0 +1,207 @@
1
+ import { calculateProviderTotals } from "../calculateProviderTotal";
2
+ import { createFixtureCryptoCurrency } from "../../../mock/fixtures/cryptoCurrencies";
3
+ import { genAccount } from "../../../mock/account";
4
+ import BigNumber from "bignumber.js";
5
+ describe("calculateProviderTotals", () => {
6
+ const mockBTCCurrency = createFixtureCryptoCurrency("bitcoin");
7
+ const mockETHCurrency = createFixtureCryptoCurrency("ethereum");
8
+ const mockBTCAccount = genAccount("btc-account", { currency: mockBTCCurrency });
9
+ const mockUSDCAccount = genAccount("usdc-account", { currency: mockETHCurrency });
10
+ const mockBscUSDCAccount = genAccount("bsc-usdc-account", { currency: mockETHCurrency });
11
+ const mockUSDCToken = {
12
+ type: "TokenCurrency",
13
+ id: "ethereum/erc20/usdc",
14
+ contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
15
+ parentCurrency: mockETHCurrency,
16
+ tokenType: "erc20",
17
+ name: "USD Coin",
18
+ ticker: "USDC",
19
+ units: [{ name: "USD Coin", code: "USDC", magnitude: 6 }],
20
+ };
21
+ const mockBscUSDCToken = {
22
+ type: "TokenCurrency",
23
+ id: "bsc/bep20/usdc",
24
+ contractAddress: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
25
+ parentCurrency: mockETHCurrency,
26
+ tokenType: "bep20",
27
+ name: "USD Coin (BSC)",
28
+ ticker: "USDC",
29
+ units: [{ name: "USD Coin", code: "USDC", magnitude: 18 }],
30
+ };
31
+ it("should return totals with hasAccounts false when no accounts exist", () => {
32
+ const currencies = [mockBTCCurrency, mockUSDCToken];
33
+ const groupedAccounts = {};
34
+ const result = calculateProviderTotals(currencies, groupedAccounts);
35
+ expect(result).toEqual({
36
+ totalBalance: new BigNumber(0),
37
+ totalFiatValue: new BigNumber(0),
38
+ hasAccounts: false,
39
+ referenceCurrency: null,
40
+ });
41
+ });
42
+ it("should sum totals across multiple currencies", () => {
43
+ const currencies = [mockBTCCurrency, mockUSDCToken];
44
+ const groupedAccounts = {
45
+ [mockBTCCurrency.id]: {
46
+ totalBalance: new BigNumber(100000000),
47
+ totalFiatValue: new BigNumber(50000),
48
+ accounts: [mockBTCAccount],
49
+ referenceCurrency: mockBTCCurrency,
50
+ },
51
+ [mockUSDCToken.id]: {
52
+ totalBalance: new BigNumber(1000000),
53
+ totalFiatValue: new BigNumber(1),
54
+ accounts: [mockUSDCAccount],
55
+ referenceCurrency: mockUSDCToken,
56
+ },
57
+ };
58
+ const result = calculateProviderTotals(currencies, groupedAccounts);
59
+ // BTC (magnitude 8) sets reference, USDC (magnitude 6) gets normalized
60
+ // USDC: 1000000 * 10^(8-6) = 1000000 * 100 = 100000000
61
+ // Total: 100000000 (BTC) + 100000000 (normalized USDC) = 200000000
62
+ expect(result).toEqual({
63
+ totalBalance: new BigNumber(200000000),
64
+ totalFiatValue: new BigNumber(50001),
65
+ hasAccounts: true,
66
+ referenceCurrency: mockBTCCurrency, // First currency with accounts
67
+ });
68
+ });
69
+ it("should return referenceCurrency from first asset group with accounts", () => {
70
+ const currencies = [mockUSDCToken, mockBscUSDCToken];
71
+ const groupedAccounts = {
72
+ [mockUSDCToken.id]: {
73
+ totalBalance: new BigNumber(1000000),
74
+ totalFiatValue: new BigNumber(1),
75
+ accounts: [mockUSDCAccount],
76
+ referenceCurrency: mockUSDCToken, // ETH USDC with 6 decimals
77
+ },
78
+ [mockBscUSDCToken.id]: {
79
+ totalBalance: new BigNumber("1000000000000000000"),
80
+ totalFiatValue: new BigNumber(1),
81
+ accounts: [mockBscUSDCAccount],
82
+ referenceCurrency: mockBscUSDCToken, // BSC USDC with 18 decimals
83
+ },
84
+ };
85
+ const result = calculateProviderTotals(currencies, groupedAccounts);
86
+ expect(result.referenceCurrency).toEqual(mockUSDCToken); // First currency
87
+ expect(result.hasAccounts).toBe(true);
88
+ });
89
+ it("should skip currencies with no accounts", () => {
90
+ const currencies = [mockBTCCurrency, mockUSDCToken];
91
+ const groupedAccounts = {
92
+ [mockUSDCToken.id]: {
93
+ totalBalance: new BigNumber(1000000),
94
+ totalFiatValue: new BigNumber(1),
95
+ accounts: [mockUSDCAccount],
96
+ referenceCurrency: mockUSDCToken,
97
+ },
98
+ // BTC has no entry in groupedAccounts
99
+ };
100
+ const result = calculateProviderTotals(currencies, groupedAccounts);
101
+ expect(result).toEqual({
102
+ totalBalance: new BigNumber(1000000),
103
+ totalFiatValue: new BigNumber(1),
104
+ hasAccounts: true,
105
+ referenceCurrency: mockUSDCToken,
106
+ });
107
+ });
108
+ it("should skip currencies with empty accounts array", () => {
109
+ const currencies = [mockBTCCurrency, mockUSDCToken];
110
+ const groupedAccounts = {
111
+ [mockBTCCurrency.id]: {
112
+ totalBalance: new BigNumber(100000000),
113
+ totalFiatValue: new BigNumber(50000),
114
+ accounts: [],
115
+ referenceCurrency: mockBTCCurrency,
116
+ },
117
+ [mockUSDCToken.id]: {
118
+ totalBalance: new BigNumber(1000000),
119
+ totalFiatValue: new BigNumber(1),
120
+ accounts: [mockUSDCAccount],
121
+ referenceCurrency: mockUSDCToken,
122
+ },
123
+ };
124
+ const result = calculateProviderTotals(currencies, groupedAccounts);
125
+ expect(result).toEqual({
126
+ totalBalance: new BigNumber(1000000),
127
+ totalFiatValue: new BigNumber(1),
128
+ hasAccounts: true,
129
+ referenceCurrency: mockUSDCToken,
130
+ });
131
+ });
132
+ it("should normalize balances based on magnitude differences", () => {
133
+ // Test the specific code: magnitude normalization between currencies
134
+ const currencies = [mockUSDCToken, mockBscUSDCToken];
135
+ const groupedAccounts = {
136
+ [mockUSDCToken.id]: {
137
+ totalBalance: new BigNumber(1000000),
138
+ totalFiatValue: new BigNumber(1),
139
+ accounts: [mockUSDCAccount],
140
+ referenceCurrency: mockUSDCToken, // 6 decimals
141
+ },
142
+ [mockBscUSDCToken.id]: {
143
+ totalBalance: new BigNumber("1000000000000000000"),
144
+ totalFiatValue: new BigNumber(1),
145
+ accounts: [mockBscUSDCAccount],
146
+ referenceCurrency: mockBscUSDCToken, // 18 decimals
147
+ },
148
+ };
149
+ const result = calculateProviderTotals(currencies, groupedAccounts);
150
+ // First currency (USDC) sets reference magnitude of 6
151
+ // Second currency (BSC USDC) has magnitude 18, so diff = 6 - 18 = -12
152
+ // BSC balance of 1000000000000000000 shifted by -12 = 1000000
153
+ // Total should be 1000000 + 1000000 = 2000000
154
+ expect(result.totalBalance).toEqual(new BigNumber(2000000));
155
+ expect(result.totalFiatValue).toEqual(new BigNumber(2));
156
+ expect(result.hasAccounts).toBe(true);
157
+ expect(result.referenceCurrency).toEqual(mockUSDCToken);
158
+ });
159
+ it("should handle magnitude normalization when referenceCurrency is set", () => {
160
+ const currencies = [mockBscUSDCToken];
161
+ const groupedAccounts = {
162
+ [mockBscUSDCToken.id]: {
163
+ totalBalance: new BigNumber("2000000000000000000"),
164
+ totalFiatValue: new BigNumber(2),
165
+ accounts: [mockBscUSDCAccount],
166
+ referenceCurrency: mockBscUSDCToken,
167
+ },
168
+ };
169
+ const result = calculateProviderTotals(currencies, groupedAccounts);
170
+ expect(result.totalBalance).toEqual(new BigNumber("2000000000000000000"));
171
+ expect(result.referenceCurrency).toEqual(mockBscUSDCToken);
172
+ });
173
+ it("should handle zero magnitude difference correctly", () => {
174
+ const sameMagnitudeCurrency = {
175
+ type: "TokenCurrency",
176
+ id: "ethereum/erc20/usdc2",
177
+ contractAddress: "0x1234567890123456789012345678901234567890",
178
+ parentCurrency: mockETHCurrency,
179
+ tokenType: "erc20",
180
+ name: "USD Coin 2",
181
+ ticker: "USDC2",
182
+ units: [{ name: "USD Coin 2", code: "USDC2", magnitude: 6 }],
183
+ };
184
+ const mockSameMagnitudeAccount = genAccount("usdc2-account", { currency: mockETHCurrency });
185
+ const currencies = [mockUSDCToken, sameMagnitudeCurrency];
186
+ const groupedAccounts = {
187
+ [mockUSDCToken.id]: {
188
+ totalBalance: new BigNumber(1000000),
189
+ totalFiatValue: new BigNumber(1),
190
+ accounts: [mockUSDCAccount],
191
+ referenceCurrency: mockUSDCToken, // 6 decimals
192
+ },
193
+ [sameMagnitudeCurrency.id]: {
194
+ totalBalance: new BigNumber(2000000),
195
+ totalFiatValue: new BigNumber(2),
196
+ accounts: [mockSameMagnitudeAccount],
197
+ referenceCurrency: sameMagnitudeCurrency, // 6 decimals
198
+ },
199
+ };
200
+ const result = calculateProviderTotals(currencies, groupedAccounts);
201
+ // Both have magnitude 6, so diff = 6 - 6 = 0
202
+ // No shifting needed, simple addition: 1000000 + 2000000 = 3000000
203
+ expect(result.totalBalance).toEqual(new BigNumber(3000000));
204
+ expect(result.totalFiatValue).toEqual(new BigNumber(3));
205
+ });
206
+ });
207
+ //# sourceMappingURL=calculateProviderTotal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculateProviderTotal.test.js","sourceRoot":"","sources":["../../../../src/modularDrawer/utils/__tests__/calculateProviderTotal.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,eAAe,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAEhE,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;IAChF,MAAM,eAAe,GAAG,UAAU,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;IAClF,MAAM,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;IAEzF,MAAM,aAAa,GAA0B;QAC3C,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,qBAAqB;QACzB,eAAe,EAAE,4CAA4C;QAC7D,cAAc,EAAE,eAAe;QAC/B,SAAS,EAAE,OAAO;QAClB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;KAC1D,CAAC;IAEF,MAAM,gBAAgB,GAA0B;QAC9C,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,gBAAgB;QACpB,eAAe,EAAE,4CAA4C;QAC7D,cAAc,EAAE,eAAe;QAC/B,SAAS,EAAE,OAAO;QAClB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;KAC3D,CAAC;IAEF,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,YAAY,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;YAC9B,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;YAChC,WAAW,EAAE,KAAK;YAClB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG;YACtB,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE;gBACpB,YAAY,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC;gBACtC,cAAc,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;gBACpC,QAAQ,EAAE,CAAC,cAAc,CAAC;gBAC1B,iBAAiB,EAAE,eAAe;aACnC;YACD,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;gBAClB,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;gBACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,eAAe,CAAC;gBAC3B,iBAAiB,EAAE,aAAa;aACjC;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEpE,uEAAuE;QACvE,uDAAuD;QACvD,mEAAmE;QACnE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,YAAY,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC;YACtC,cAAc,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;YACpC,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,eAAe,EAAE,+BAA+B;SACpE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACrD,MAAM,eAAe,GAAG;YACtB,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;gBAClB,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;gBACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,eAAe,CAAC;gBAC3B,iBAAiB,EAAE,aAAa,EAAE,2BAA2B;aAC9D;YACD,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE;gBACrB,YAAY,EAAE,IAAI,SAAS,CAAC,qBAAqB,CAAC;gBAClD,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,kBAAkB,CAAC;gBAC9B,iBAAiB,EAAE,gBAAgB,EAAE,4BAA4B;aAClE;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB;QAC1E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG;YACtB,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;gBAClB,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;gBACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,eAAe,CAAC;gBAC3B,iBAAiB,EAAE,aAAa;aACjC;YACD,sCAAsC;SACvC,CAAC;QAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;YACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;YAChC,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,aAAa;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG;YACtB,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE;gBACpB,YAAY,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC;gBACtC,cAAc,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;gBACpC,QAAQ,EAAE,EAAE;gBACZ,iBAAiB,EAAE,eAAe;aACnC;YACD,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;gBAClB,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;gBACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,eAAe,CAAC;gBAC3B,iBAAiB,EAAE,aAAa;aACjC;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;YACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;YAChC,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,aAAa;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,qEAAqE;QACrE,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACrD,MAAM,eAAe,GAAG;YACtB,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;gBAClB,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;gBACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,eAAe,CAAC;gBAC3B,iBAAiB,EAAE,aAAa,EAAE,aAAa;aAChD;YACD,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE;gBACrB,YAAY,EAAE,IAAI,SAAS,CAAC,qBAAqB,CAAC;gBAClD,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,kBAAkB,CAAC;gBAC9B,iBAAiB,EAAE,gBAAgB,EAAE,cAAc;aACpD;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEpE,sDAAsD;QACtD,sEAAsE;QACtE,8DAA8D;QAC9D,8CAA8C;QAC9C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,UAAU,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACtC,MAAM,eAAe,GAAG;YACtB,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE;gBACrB,YAAY,EAAE,IAAI,SAAS,CAAC,qBAAqB,CAAC;gBAClD,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,kBAAkB,CAAC;gBAC9B,iBAAiB,EAAE,gBAAgB;aACpC;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,qBAAqB,GAA0B;YACnD,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,sBAAsB;YAC1B,eAAe,EAAE,4CAA4C;YAC7D,cAAc,EAAE,eAAe;YAC/B,SAAS,EAAE,OAAO;YAClB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;SAC7D,CAAC;QAEF,MAAM,wBAAwB,GAAG,UAAU,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;QAE5F,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAC1D,MAAM,eAAe,GAAG;YACtB,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;gBAClB,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;gBACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,eAAe,CAAC;gBAC3B,iBAAiB,EAAE,aAAa,EAAE,aAAa;aAChD;YACD,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE;gBAC1B,YAAY,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;gBACpC,cAAc,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,wBAAwB,CAAC;gBACpC,iBAAiB,EAAE,qBAAqB,EAAE,aAAa;aACxD;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEpE,6CAA6C;QAC7C,mEAAmE;QACnE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=groupAccountsByAsset.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupAccountsByAsset.test.d.ts","sourceRoot":"","sources":["../../../../src/modularDrawer/utils/__tests__/groupAccountsByAsset.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,197 @@
1
+ import { groupAccountsByAsset } from "../groupAccountsByAsset";
2
+ import { createFixtureCryptoCurrency } from "../../../mock/fixtures/cryptoCurrencies";
3
+ import BigNumber from "bignumber.js";
4
+ // Mock calculate function
5
+ jest.mock("@ledgerhq/live-countervalues/logic", () => ({
6
+ calculate: jest.fn((state, { value }) => {
7
+ // Mock: return the balance directly as fiat value for simple testing
8
+ return value;
9
+ }),
10
+ }));
11
+ describe("groupAccountsByAsset", () => {
12
+ const mockCurrency = createFixtureCryptoCurrency("bitcoin");
13
+ const mockEthCurrency = createFixtureCryptoCurrency("ethereum");
14
+ const mockCounterValuesState = {};
15
+ const mockTargetCurrency = createFixtureCryptoCurrency("usd");
16
+ const mockUSDCToken = {
17
+ type: "TokenCurrency",
18
+ id: "ethereum/erc20/usdc",
19
+ contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
20
+ parentCurrency: mockEthCurrency,
21
+ tokenType: "erc20",
22
+ name: "USD Coin",
23
+ ticker: "USDC",
24
+ units: [{ name: "USD Coin", code: "USDC", magnitude: 6 }],
25
+ };
26
+ const mockBTCAccount = {
27
+ type: "Account",
28
+ id: "btc-account-1",
29
+ seedIdentifier: "seed-id",
30
+ derivationMode: "",
31
+ currency: mockCurrency,
32
+ balance: new BigNumber(100000000),
33
+ spendableBalance: new BigNumber(100000000),
34
+ blockHeight: 0,
35
+ operations: [],
36
+ operationsCount: 0,
37
+ pendingOperations: [],
38
+ index: 0,
39
+ freshAddress: "btc-address",
40
+ freshAddressPath: "44'/0'/0'/0/0",
41
+ used: true,
42
+ swapHistory: [],
43
+ nfts: [],
44
+ lastSyncDate: new Date(),
45
+ creationDate: new Date(),
46
+ balanceHistoryCache: {
47
+ HOUR: { balances: [], latestDate: null },
48
+ DAY: { balances: [], latestDate: null },
49
+ WEEK: { balances: [], latestDate: null },
50
+ },
51
+ };
52
+ const mockUSDCAccount = {
53
+ type: "TokenAccount",
54
+ id: "usdc-account-1",
55
+ token: mockUSDCToken,
56
+ parentId: "eth-account-1",
57
+ balance: new BigNumber(1000000),
58
+ spendableBalance: new BigNumber(1000000),
59
+ operations: [],
60
+ operationsCount: 0,
61
+ pendingOperations: [],
62
+ swapHistory: [],
63
+ creationDate: new Date(),
64
+ balanceHistoryCache: {
65
+ HOUR: { balances: [], latestDate: null },
66
+ DAY: { balances: [], latestDate: null },
67
+ WEEK: { balances: [], latestDate: null },
68
+ },
69
+ };
70
+ it("should group accounts by asset ID and aggregate balances", () => {
71
+ const accounts = [mockBTCAccount, mockUSDCAccount];
72
+ const result = groupAccountsByAsset(accounts, mockCounterValuesState, mockTargetCurrency);
73
+ expect(result).toEqual({
74
+ [mockCurrency.id]: {
75
+ totalBalance: new BigNumber(100000000),
76
+ totalFiatValue: new BigNumber(100000000),
77
+ accounts: [mockBTCAccount],
78
+ referenceCurrency: mockCurrency,
79
+ },
80
+ [mockUSDCToken.id]: {
81
+ totalBalance: new BigNumber(1000000),
82
+ totalFiatValue: new BigNumber(1000000),
83
+ accounts: [mockUSDCAccount],
84
+ referenceCurrency: mockUSDCToken,
85
+ },
86
+ });
87
+ });
88
+ it("should aggregate multiple accounts with the same asset", () => {
89
+ const secondBTCAccount = {
90
+ ...mockBTCAccount,
91
+ id: "btc-account-2",
92
+ balance: new BigNumber(50000000), // 0.5 BTC
93
+ };
94
+ const accounts = [mockBTCAccount, secondBTCAccount];
95
+ const result = groupAccountsByAsset(accounts, mockCounterValuesState, mockTargetCurrency);
96
+ expect(result[mockCurrency.id]).toEqual({
97
+ totalBalance: new BigNumber(150000000),
98
+ totalFiatValue: new BigNumber(150000000),
99
+ accounts: [mockBTCAccount, secondBTCAccount],
100
+ referenceCurrency: mockCurrency,
101
+ });
102
+ });
103
+ it("should handle empty accounts array", () => {
104
+ const result = groupAccountsByAsset([], mockCounterValuesState, mockTargetCurrency);
105
+ expect(result).toEqual({});
106
+ });
107
+ it("should handle accounts with zero balance", () => {
108
+ const zeroBalanceAccount = {
109
+ ...mockBTCAccount,
110
+ balance: new BigNumber(0),
111
+ };
112
+ const accounts = [zeroBalanceAccount];
113
+ const result = groupAccountsByAsset(accounts, mockCounterValuesState, mockTargetCurrency);
114
+ expect(result[mockCurrency.id]).toEqual({
115
+ totalBalance: new BigNumber(0),
116
+ totalFiatValue: new BigNumber(0),
117
+ accounts: [zeroBalanceAccount],
118
+ referenceCurrency: mockCurrency,
119
+ });
120
+ });
121
+ it("should set referenceCurrency to the first currency encountered for each asset group", () => {
122
+ const accounts = [mockBTCAccount, mockUSDCAccount];
123
+ const result = groupAccountsByAsset(accounts, mockCounterValuesState, mockTargetCurrency);
124
+ expect(result[mockCurrency.id].referenceCurrency).toEqual(mockCurrency);
125
+ expect(result[mockUSDCToken.id].referenceCurrency).toEqual(mockUSDCToken);
126
+ });
127
+ it("should normalize balances when tokens have different magnitudes", () => {
128
+ // Create BSC USDC with different magnitude (18 decimals instead of 6)
129
+ const mockBscUSDCToken = {
130
+ ...mockUSDCToken,
131
+ id: "bsc/bep20/usdc",
132
+ name: "USD Coin (BSC)",
133
+ ticker: "USDC",
134
+ units: [{ name: "USD Coin", code: "USDC", magnitude: 18 }], // 18 decimals
135
+ };
136
+ const mockEthUSDCAccount = {
137
+ ...mockUSDCAccount,
138
+ id: "eth-usdc-account",
139
+ token: mockUSDCToken,
140
+ balance: new BigNumber(1000000), // 1 USDC with 6 decimals
141
+ };
142
+ const mockBscUSDCAccount = {
143
+ ...mockUSDCAccount,
144
+ id: "bsc-usdc-account",
145
+ token: mockBscUSDCToken,
146
+ balance: new BigNumber("1000000000000000000"), // 1 USDC with 18 decimals
147
+ };
148
+ // Both should be grouped under the same token ID for this test
149
+ // First account (ETH USDC) becomes reference currency with 6 decimals
150
+ const accounts = [mockEthUSDCAccount, mockBscUSDCAccount];
151
+ const result = groupAccountsByAsset(accounts, mockCounterValuesState, mockTargetCurrency);
152
+ const ethGroup = result[mockUSDCToken.id];
153
+ expect(ethGroup.referenceCurrency).toEqual(mockUSDCToken); // First currency is reference
154
+ expect(ethGroup.accounts).toHaveLength(1);
155
+ expect(ethGroup.totalBalance).toEqual(new BigNumber(1000000)); // 1 USDC normalized to 6 decimals
156
+ const bscGroup = result[mockBscUSDCToken.id];
157
+ expect(bscGroup.referenceCurrency).toEqual(mockBscUSDCToken);
158
+ expect(bscGroup.accounts).toHaveLength(1);
159
+ expect(bscGroup.totalBalance).toEqual(new BigNumber("1000000000000000000")); // 1 USDC with 18 decimals
160
+ });
161
+ it("should normalize balances correctly when adding accounts with different magnitudes to same asset group", () => {
162
+ // Create two USDC tokens with same ID but different magnitudes
163
+ const ethUSDCToken = {
164
+ ...mockUSDCToken,
165
+ units: [{ name: "USD Coin", code: "USDC", magnitude: 6 }], // 6 decimals
166
+ };
167
+ const bscUSDCToken = {
168
+ ...mockUSDCToken,
169
+ units: [{ name: "USD Coin", code: "USDC", magnitude: 18 }], // 18 decimals
170
+ };
171
+ const ethAccount = {
172
+ ...mockUSDCAccount,
173
+ id: "eth-usdc",
174
+ token: ethUSDCToken,
175
+ balance: new BigNumber(1000000), // 1 USDC with 6 decimals
176
+ };
177
+ const bscAccount = {
178
+ ...mockUSDCAccount,
179
+ id: "bsc-usdc",
180
+ token: bscUSDCToken,
181
+ balance: new BigNumber("1000000000000000000"), // 1 USDC with 18 decimals
182
+ };
183
+ // Process ETH account first to make it the reference currency
184
+ const accounts = [ethAccount, bscAccount];
185
+ const result = groupAccountsByAsset(accounts, mockCounterValuesState, mockTargetCurrency);
186
+ const group = result[mockUSDCToken.id];
187
+ expect(group.referenceCurrency).toEqual(ethUSDCToken); // First currency is reference (6 decimals)
188
+ expect(group.accounts).toHaveLength(2);
189
+ // BSC balance should be normalized from 18 decimals to 6 decimals
190
+ // 1000000000000000000 (18 decimals) -> 1000000 (6 decimals)
191
+ // magnitudeDiff = 6 - 18 = -12
192
+ // normalized = 1000000000000000000 * 10^(-12) = 1000000
193
+ const expectedTotal = new BigNumber(1000000).plus(new BigNumber(1000000)); // 2 USDC total
194
+ expect(group.totalBalance).toEqual(expectedTotal);
195
+ });
196
+ });
197
+ //# sourceMappingURL=groupAccountsByAsset.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupAccountsByAsset.test.js","sourceRoot":"","sources":["../../../../src/modularDrawer/utils/__tests__/groupAccountsByAsset.test.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,6 @@ export declare const calculateProviderTotals: (currencies: CryptoOrTokenCurrency
5
5
  totalBalance: BigNumber;
6
6
  totalFiatValue: BigNumber;
7
7
  hasAccounts: boolean;
8
+ referenceCurrency: CryptoOrTokenCurrency | null;
8
9
  };
9
10
  //# sourceMappingURL=calculateProviderTotal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calculateProviderTotal.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/utils/calculateProviderTotal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,eAAO,MAAM,uBAAuB,eACtB,qBAAqB,EAAE,0BACX,OAAO,MAAM,EAAE,cAAc,CAAC;;;;CAgBvD,CAAC"}
1
+ {"version":3,"file":"calculateProviderTotal.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/utils/calculateProviderTotal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,eAAO,MAAM,uBAAuB,eACtB,qBAAqB,EAAE,0BACX,OAAO,MAAM,EAAE,cAAc,CAAC;;;;;CA2BvD,CAAC"}
@@ -3,14 +3,22 @@ export const calculateProviderTotals = (currencies, groupedAccountsByAsset) => {
3
3
  let totalBalance = new BigNumber(0);
4
4
  let totalFiatValue = new BigNumber(0);
5
5
  let hasAccounts = false;
6
+ let referenceCurrency = null;
6
7
  for (const currency of currencies) {
7
8
  const assetGroup = groupedAccountsByAsset[currency.id];
8
9
  if (assetGroup?.accounts.length > 0) {
9
- totalBalance = totalBalance.plus(assetGroup.totalBalance);
10
+ const refCurrency = referenceCurrency ?? assetGroup.referenceCurrency;
11
+ const magnitudeDiff = refCurrency.units[0].magnitude - assetGroup.referenceCurrency.units[0].magnitude;
12
+ const normalizedBalance = assetGroup.totalBalance.shiftedBy(magnitudeDiff);
13
+ totalBalance = totalBalance.plus(normalizedBalance);
10
14
  totalFiatValue = totalFiatValue.plus(assetGroup.totalFiatValue);
11
15
  hasAccounts = true;
16
+ // Use the referenceCurrency from the first asset group with accounts
17
+ if (!referenceCurrency) {
18
+ referenceCurrency = assetGroup.referenceCurrency;
19
+ }
12
20
  }
13
21
  }
14
- return { totalBalance, totalFiatValue, hasAccounts };
22
+ return { totalBalance, totalFiatValue, hasAccounts, referenceCurrency };
15
23
  };
16
24
  //# sourceMappingURL=calculateProviderTotal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calculateProviderTotal.js","sourceRoot":"","sources":["../../../src/modularDrawer/utils/calculateProviderTotal.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAmC,EACnC,sBAAsD,EACtD,EAAE;IACF,IAAI,YAAY,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,cAAc,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;QACjC,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,UAAU,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC1D,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAChE,WAAW,GAAG,IAAI,CAAC;SACpB;KACF;IAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AACvD,CAAC,CAAC"}
1
+ {"version":3,"file":"calculateProviderTotal.js","sourceRoot":"","sources":["../../../src/modularDrawer/utils/calculateProviderTotal.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAmC,EACnC,sBAAsD,EACtD,EAAE;IACF,IAAI,YAAY,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,cAAc,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,iBAAiB,GAAiC,IAAI,CAAC;IAE3D,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;QACjC,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,UAAU,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,MAAM,WAAW,GAAG,iBAAiB,IAAI,UAAU,CAAC,iBAAiB,CAAC;YACtE,MAAM,aAAa,GACjB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,MAAM,iBAAiB,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAE3E,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACpD,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAChE,WAAW,GAAG,IAAI,CAAC;YAEnB,qEAAqE;YACrE,IAAI,CAAC,iBAAiB,EAAE;gBACtB,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;aAClD;SACF;KACF;IAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAC1E,CAAC,CAAC"}
@@ -1,11 +1,13 @@
1
- import type { CounterValuesState } from "@ledgerhq/live-countervalues/types";
2
1
  import type { CryptoOrTokenCurrency, Currency } from "@ledgerhq/types-cryptoassets";
3
2
  import { AssetType } from "./type";
4
3
  import { AccountLike } from "@ledgerhq/types-live";
4
+ import BigNumber from "bignumber.js";
5
+ import type { CounterValuesState } from "@ledgerhq/live-countervalues/types";
5
6
  interface ExtendedAssetType extends AssetType {
6
- balance?: string;
7
- fiatValue?: string;
7
+ currency?: CryptoOrTokenCurrency;
8
+ balance?: BigNumber;
9
+ fiatValue?: number;
8
10
  }
9
- export declare const getBalanceAndFiatValueByAssets: (accounts: AccountLike[], assets: CryptoOrTokenCurrency[], counterValuesState: CounterValuesState, targetCurrency: Currency, isDiscreetMode: boolean | undefined, userLocale: string) => ExtendedAssetType[];
11
+ export declare const getBalanceAndFiatValueByAssets: (accounts: AccountLike[], assets: CryptoOrTokenCurrency[], counterValuesState: CounterValuesState, targetCurrency: Currency) => ExtendedAssetType[];
10
12
  export {};
11
13
  //# sourceMappingURL=getBalanceAndFiatValueByAssets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getBalanceAndFiatValueByAssets.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/utils/getBalanceAndFiatValueByAssets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,UAAU,iBAAkB,SAAQ,SAAS;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,8BAA8B,aAC/B,WAAW,EAAE,UACf,qBAAqB,EAAE,sBACX,kBAAkB,kBACtB,QAAQ,mDAEZ,MAAM,KACjB,iBAAiB,EAqBnB,CAAC"}
1
+ {"version":3,"file":"getBalanceAndFiatValueByAssets.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/utils/getBalanceAndFiatValueByAssets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,UAAU,iBAAkB,SAAQ,SAAS;IAC3C,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,8BAA8B,aAC/B,WAAW,EAAE,UACf,qBAAqB,EAAE,sBACX,kBAAkB,kBACtB,QAAQ,KACvB,iBAAiB,EAgBnB,CAAC"}
@@ -1,12 +1,10 @@
1
- import { formatCurrencyUnit } from "@ledgerhq/coin-framework/lib-es/currencies/formatCurrencyUnit";
2
1
  import { groupAccountsByAsset } from "./groupAccountsByAsset";
3
- import { counterValueFormatter } from "./counterValueFormatter";
4
- export const getBalanceAndFiatValueByAssets = (accounts, assets, counterValuesState, targetCurrency, isDiscreetMode = false, userLocale) => {
5
- const groupedAccountsByAsset = groupAccountsByAsset(accounts, counterValuesState, targetCurrency, isDiscreetMode);
2
+ export const getBalanceAndFiatValueByAssets = (accounts, assets, counterValuesState, targetCurrency) => {
3
+ const groupedAccountsByAsset = groupAccountsByAsset(accounts, counterValuesState, targetCurrency);
6
4
  return assets.map(asset => {
7
5
  const assetGroup = groupedAccountsByAsset[asset.id];
8
6
  if (assetGroup) {
9
- return formatAssetDetails(assetGroup, asset, targetCurrency, isDiscreetMode, userLocale);
7
+ return yieldAssetDetails(assetGroup, asset);
10
8
  }
11
9
  return {
12
10
  id: asset.id,
@@ -15,27 +13,16 @@ export const getBalanceAndFiatValueByAssets = (accounts, assets, counterValuesSt
15
13
  };
16
14
  });
17
15
  };
18
- const formatAssetDetails = (assetGroup, asset, targetCurrency, isDiscreetMode, userLocale) => {
19
- const assetDetails = assetGroup.accounts[0].type === "Account"
20
- ? assetGroup.accounts[0].currency
21
- : assetGroup.accounts[0].token;
22
- const formattedBalance = formatCurrencyUnit(assetDetails.units[0], assetGroup.totalBalance, {
23
- showCode: true,
24
- discreet: isDiscreetMode,
25
- });
26
- const formattedFiatValue = counterValueFormatter({
27
- currency: targetCurrency.ticker,
28
- value: assetGroup.totalFiatValue.toNumber(),
29
- locale: userLocale,
30
- allowZeroValue: true,
31
- discreetMode: isDiscreetMode,
32
- });
16
+ const yieldAssetDetails = (assetGroup, asset) => {
17
+ // Use the reference currency for consistent magnitude
18
+ const assetDetails = assetGroup.referenceCurrency;
33
19
  return {
34
20
  id: asset.id,
35
21
  name: asset.name,
36
22
  ticker: asset.ticker,
37
- balance: formattedBalance,
38
- fiatValue: formattedFiatValue,
23
+ currency: assetDetails,
24
+ balance: assetGroup.totalBalance,
25
+ fiatValue: assetGroup.totalFiatValue.toNumber(),
39
26
  };
40
27
  };
41
28
  //# sourceMappingURL=getBalanceAndFiatValueByAssets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getBalanceAndFiatValueByAssets.js","sourceRoot":"","sources":["../../../src/modularDrawer/utils/getBalanceAndFiatValueByAssets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+DAA+D,CAAC;AAGnG,OAAO,EAAE,oBAAoB,EAAuB,MAAM,wBAAwB,CAAC;AAGnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,QAAuB,EACvB,MAA+B,EAC/B,kBAAsC,EACtC,cAAwB,EACxB,iBAA0B,KAAK,EAC/B,UAAkB,EACG,EAAE;IACvB,MAAM,sBAAsB,GAAG,oBAAoB,CACjD,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,cAAc,CACf,CAAC;IAEF,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAI,UAAU,EAAE;YACd,OAAO,kBAAkB,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;SAC1F;QAED,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,UAA0B,EAC1B,KAA4B,EAC5B,cAAwB,EACxB,cAAuB,EACvB,UAAkB,EACC,EAAE;IACrB,MAAM,YAAY,GAChB,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS;QACvC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;QACjC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEnC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,EAAE;QAC1F,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,cAAc;KACzB,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;QAC/C,QAAQ,EAAE,cAAc,CAAC,MAAM;QAC/B,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE;QAC3C,MAAM,EAAE,UAAU;QAClB,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,cAAc;KAC7B,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,gBAAgB;QACzB,SAAS,EAAE,kBAAkB;KAC9B,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"getBalanceAndFiatValueByAssets.js","sourceRoot":"","sources":["../../../src/modularDrawer/utils/getBalanceAndFiatValueByAssets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,wBAAwB,CAAC;AAYnF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,QAAuB,EACvB,MAA+B,EAC/B,kBAAsC,EACtC,cAAwB,EACH,EAAE;IACvB,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAElG,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAI,UAAU,EAAE;YACd,OAAO,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SAC7C;QAED,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,UAA0B,EAC1B,KAA4B,EACT,EAAE;IACrB,sDAAsD;IACtD,MAAM,YAAY,GAAG,UAAU,CAAC,iBAAiB,CAAC;IAElD,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,UAAU,CAAC,YAAY;QAChC,SAAS,EAAE,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE;KAChD,CAAC;AACJ,CAAC,CAAC"}
@@ -1,11 +1,12 @@
1
- import type { CounterValuesState } from "@ledgerhq/live-countervalues/types";
2
- import { Currency } from "@ledgerhq/types-cryptoassets";
3
1
  import { AccountLike } from "@ledgerhq/types-live";
4
2
  import BigNumber from "bignumber.js";
3
+ import type { CounterValuesState } from "@ledgerhq/live-countervalues/types";
4
+ import { CryptoOrTokenCurrency, Currency } from "@ledgerhq/types-cryptoassets";
5
5
  export type GroupedAccount = {
6
6
  totalBalance: BigNumber;
7
7
  totalFiatValue: BigNumber;
8
8
  accounts: AccountLike[];
9
+ referenceCurrency: CryptoOrTokenCurrency;
9
10
  };
10
- export declare const groupAccountsByAsset: (accounts: AccountLike[], counterValuesState: CounterValuesState, targetCurrency: Currency, isDiscreetMode: boolean) => Record<string, GroupedAccount>;
11
+ export declare const groupAccountsByAsset: (accounts: AccountLike[], counterValuesState: CounterValuesState, targetCurrency: Currency) => Record<string, GroupedAccount>;
11
12
  //# sourceMappingURL=groupAccountsByAsset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"groupAccountsByAsset.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/utils/groupAccountsByAsset.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,SAAS,CAAC;IACxB,cAAc,EAAE,SAAS,CAAC;IAC1B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,aACrB,WAAW,EAAE,sBACH,kBAAkB,kBACtB,QAAQ,kBACR,OAAO,KACtB,OAAO,MAAM,EAAE,cAAc,CAgC/B,CAAC"}
1
+ {"version":3,"file":"groupAccountsByAsset.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/utils/groupAccountsByAsset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAG/E,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,SAAS,CAAC;IACxB,cAAc,EAAE,SAAS,CAAC;IAC1B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,iBAAiB,EAAE,qBAAqB,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,oBAAoB,aACrB,WAAW,EAAE,sBACH,kBAAkB,kBACtB,QAAQ,KACvB,OAAO,MAAM,EAAE,cAAc,CAkC/B,CAAC"}