@exodus/balances 13.16.0 → 13.17.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 (134) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +1 -1
  3. package/atoms/asset-names-with-balance.d.ts +1 -0
  4. package/atoms/asset-names-with-balance.js +1 -40
  5. package/atoms/asset-total-wallet-amounts.d.ts +1 -0
  6. package/atoms/asset-total-wallet-amounts.js +1 -47
  7. package/atoms/assets-with-balance-count.d.ts +1 -0
  8. package/atoms/assets-with-balance-count.js +1 -8
  9. package/atoms/balances.d.ts +1 -0
  10. package/atoms/balances.js +1 -6
  11. package/atoms/funded-wallet-accounts.d.ts +1 -0
  12. package/atoms/funded-wallet-accounts.js +1 -25
  13. package/atoms/has-balance.d.ts +1 -0
  14. package/atoms/has-balance.js +1 -31
  15. package/atoms/index.d.ts +8 -0
  16. package/atoms/index.js +8 -54
  17. package/default-config.d.ts +1 -0
  18. package/default-config.js +1 -26
  19. package/index.d.ts +2 -35
  20. package/index.js +1 -65
  21. package/lib/atoms/asset-names-with-balance.d.ts +5 -0
  22. package/lib/atoms/asset-names-with-balance.js +31 -0
  23. package/lib/atoms/asset-total-wallet-amounts.d.ts +5 -0
  24. package/lib/atoms/asset-total-wallet-amounts.js +39 -0
  25. package/lib/atoms/assets-with-balance-count.d.ts +5 -0
  26. package/lib/atoms/assets-with-balance-count.js +6 -0
  27. package/lib/atoms/balances.d.ts +3 -0
  28. package/lib/atoms/balances.js +3 -0
  29. package/lib/atoms/funded-wallet-accounts.d.ts +8 -0
  30. package/lib/atoms/funded-wallet-accounts.js +19 -0
  31. package/lib/atoms/has-balance.d.ts +7 -0
  32. package/lib/atoms/has-balance.js +21 -0
  33. package/lib/atoms/index.d.ts +54 -0
  34. package/lib/atoms/index.js +48 -0
  35. package/lib/default-config.d.ts +3 -0
  36. package/lib/default-config.js +24 -0
  37. package/lib/index.d.ts +187 -0
  38. package/lib/index.js +49 -0
  39. package/lib/module/balances-utils.d.ts +13 -0
  40. package/lib/module/balances-utils.js +70 -0
  41. package/lib/module/index.d.ts +11 -0
  42. package/lib/module/index.js +367 -0
  43. package/lib/module/mockable-balances.d.ts +16 -0
  44. package/lib/module/mockable-balances.js +21 -0
  45. package/lib/module/types.d.ts +80 -0
  46. package/lib/module/types.js +1 -0
  47. package/lib/plugins/analytics.d.ts +18 -0
  48. package/lib/plugins/analytics.js +30 -0
  49. package/lib/plugins/index.d.ts +35 -0
  50. package/lib/plugins/index.js +22 -0
  51. package/lib/plugins/lifecycle.d.ts +14 -0
  52. package/lib/plugins/lifecycle.js +32 -0
  53. package/lib/redux/id.d.ts +2 -0
  54. package/lib/redux/id.js +1 -0
  55. package/lib/redux/index.d.ts +588 -0
  56. package/lib/redux/index.js +53 -0
  57. package/lib/redux/initial-state.d.ts +3 -0
  58. package/lib/redux/initial-state.js +6 -0
  59. package/lib/redux/multi-account-helper.d.ts +463 -0
  60. package/lib/redux/multi-account-helper.js +23 -0
  61. package/lib/redux/selectors/by-asset.d.ts +12 -0
  62. package/lib/redux/selectors/by-asset.js +19 -0
  63. package/lib/redux/selectors/create-balance-selectors.d.ts +70 -0
  64. package/lib/redux/selectors/create-balance-selectors.js +32 -0
  65. package/lib/redux/selectors/create-balances.d.ts +11 -0
  66. package/lib/redux/selectors/create-balances.js +13 -0
  67. package/lib/redux/selectors/create-fuel-threshold.d.ts +19 -0
  68. package/lib/redux/selectors/create-fuel-threshold.js +22 -0
  69. package/lib/redux/selectors/create-requires-fuel-threshold.d.ts +19 -0
  70. package/lib/redux/selectors/create-requires-fuel-threshold.js +29 -0
  71. package/lib/redux/selectors/create-unconfirmed-balance.d.ts +15 -0
  72. package/lib/redux/selectors/create-unconfirmed-balance.js +14 -0
  73. package/lib/redux/selectors/get-balance-for-field.d.ts +14 -0
  74. package/lib/redux/selectors/get-balance-for-field.js +19 -0
  75. package/lib/redux/selectors/get-balance-selectors.d.ts +68 -0
  76. package/lib/redux/selectors/get-balance-selectors.js +32 -0
  77. package/lib/redux/selectors/get-balances.d.ts +10 -0
  78. package/lib/redux/selectors/get-balances.js +13 -0
  79. package/lib/redux/selectors/get-unconfirmed-balance.d.ts +19 -0
  80. package/lib/redux/selectors/get-unconfirmed-balance.js +27 -0
  81. package/lib/redux/selectors/index.d.ts +339 -0
  82. package/lib/redux/selectors/index.js +22 -0
  83. package/lib/redux/types.d.ts +45 -0
  84. package/lib/redux/types.js +1 -0
  85. package/lib/report/index.d.ts +34 -0
  86. package/lib/report/index.js +51 -0
  87. package/lib/types.d.ts +24 -0
  88. package/lib/types.js +1 -0
  89. package/module/balances-utils.d.ts +1 -0
  90. package/module/balances-utils.js +1 -86
  91. package/module/index.d.ts +2 -0
  92. package/module/index.js +2 -490
  93. package/module/mockable-balances.d.ts +1 -0
  94. package/module/mockable-balances.js +1 -27
  95. package/package.json +36 -29
  96. package/plugins/analytics.d.ts +1 -0
  97. package/plugins/analytics.js +1 -48
  98. package/plugins/index.d.ts +4 -0
  99. package/plugins/index.js +4 -24
  100. package/plugins/lifecycle.d.ts +1 -0
  101. package/plugins/lifecycle.js +1 -40
  102. package/redux/id.d.ts +1 -0
  103. package/redux/id.js +1 -1
  104. package/redux/index.d.ts +2 -0
  105. package/redux/index.js +1 -61
  106. package/redux/initial-state.d.ts +1 -0
  107. package/redux/initial-state.js +1 -8
  108. package/redux/multi-account-helper.d.ts +1 -0
  109. package/redux/multi-account-helper.js +1 -14
  110. package/redux/selectors/by-asset.d.ts +1 -0
  111. package/redux/selectors/by-asset.js +1 -25
  112. package/redux/selectors/create-balance-selectors.d.ts +1 -0
  113. package/redux/selectors/create-balance-selectors.js +1 -48
  114. package/redux/selectors/create-balances.d.ts +1 -0
  115. package/redux/selectors/create-balances.js +1 -26
  116. package/redux/selectors/create-fuel-threshold.d.ts +1 -0
  117. package/redux/selectors/create-fuel-threshold.js +1 -32
  118. package/redux/selectors/create-requires-fuel-threshold.d.ts +1 -0
  119. package/redux/selectors/create-requires-fuel-threshold.js +1 -59
  120. package/redux/selectors/create-unconfirmed-balance.d.ts +1 -0
  121. package/redux/selectors/create-unconfirmed-balance.js +1 -28
  122. package/redux/selectors/get-balance-for-field.d.ts +1 -0
  123. package/redux/selectors/get-balance-for-field.js +1 -34
  124. package/redux/selectors/get-balance-selectors.d.ts +1 -0
  125. package/redux/selectors/get-balance-selectors.js +1 -42
  126. package/redux/selectors/get-balances.d.ts +1 -0
  127. package/redux/selectors/get-balances.js +1 -24
  128. package/redux/selectors/get-unconfirmed-balance.d.ts +2 -0
  129. package/redux/selectors/get-unconfirmed-balance.js +2 -43
  130. package/redux/selectors/index.d.ts +1 -0
  131. package/redux/selectors/index.js +1 -23
  132. package/report/index.d.ts +1 -0
  133. package/report/index.js +1 -61
  134. package/tsconfig.json +0 -4
@@ -0,0 +1,339 @@
1
+ declare const _default: readonly [{
2
+ readonly id: "byAsset";
3
+ readonly resultFunction: (walletAccounts: string[], getAssetBalances: (account: string) => Record<string, import("@exodus/currency").default>) => Record<string, import("@exodus/currency").default>;
4
+ readonly dependencies: readonly [{
5
+ readonly module: "walletAccounts";
6
+ readonly selector: "enabled";
7
+ }, {
8
+ readonly selector: "getAccountAssetsBalanceSelector";
9
+ }];
10
+ }, {
11
+ readonly id: "createUnconfirmedBalance";
12
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, createAssetSourceSelector: (source: import("../types.js").Source) => import("../types.js").Selector<import("@exodus/models").TxSet>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default, (res1: import("../types.js").Asset | undefined, res2: import("@exodus/models").TxSet) => import("@exodus/currency").default>) & import("lodash").MemoizedFunction;
13
+ readonly dependencies: readonly [{
14
+ readonly module: "assets";
15
+ readonly selector: "createAssetSelector";
16
+ }, {
17
+ readonly module: "txLog";
18
+ readonly selector: "createAssetSourceSelector";
19
+ }];
20
+ }, {
21
+ readonly id: "getBalanceForField";
22
+ readonly resultFunction: (getAsset: import("../types.js").GetAsset, getBalances: import("../types.js").GetBalances) => (({ assetName, walletAccount, field }: import("../types.js").FieldSource) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
23
+ readonly dependencies: readonly [{
24
+ readonly module: "assets";
25
+ readonly selector: "getAsset";
26
+ }, {
27
+ readonly module: "balances";
28
+ readonly selector: "getBalances";
29
+ }];
30
+ }, ...(({
31
+ readonly id: "getTotal";
32
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
33
+ readonly dependencies: readonly [{
34
+ readonly module: "balances";
35
+ readonly selector: "getBalanceForField";
36
+ }];
37
+ } | {
38
+ readonly id: "getBalance";
39
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
40
+ readonly dependencies: readonly [{
41
+ readonly module: "balances";
42
+ readonly selector: "getBalanceForField";
43
+ }];
44
+ } | {
45
+ readonly id: "getSpendable";
46
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
47
+ readonly dependencies: readonly [{
48
+ readonly module: "balances";
49
+ readonly selector: "getBalanceForField";
50
+ }];
51
+ } | {
52
+ readonly id: "getSpendableBalance";
53
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
54
+ readonly dependencies: readonly [{
55
+ readonly module: "balances";
56
+ readonly selector: "getBalanceForField";
57
+ }];
58
+ } | {
59
+ readonly id: "getUnconfirmedSent";
60
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
61
+ readonly dependencies: readonly [{
62
+ readonly module: "balances";
63
+ readonly selector: "getBalanceForField";
64
+ }];
65
+ } | {
66
+ readonly id: "getUnconfirmedReceived";
67
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
68
+ readonly dependencies: readonly [{
69
+ readonly module: "balances";
70
+ readonly selector: "getBalanceForField";
71
+ }];
72
+ } | {
73
+ readonly id: "getUnspendable";
74
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
75
+ readonly dependencies: readonly [{
76
+ readonly module: "balances";
77
+ readonly selector: "getBalanceForField";
78
+ }];
79
+ } | {
80
+ readonly id: "getWalletReserve";
81
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
82
+ readonly dependencies: readonly [{
83
+ readonly module: "balances";
84
+ readonly selector: "getBalanceForField";
85
+ }];
86
+ } | {
87
+ readonly id: "getNetworkReserve";
88
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
89
+ readonly dependencies: readonly [{
90
+ readonly module: "balances";
91
+ readonly selector: "getBalanceForField";
92
+ }];
93
+ } | {
94
+ readonly id: "getStaking";
95
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
96
+ readonly dependencies: readonly [{
97
+ readonly module: "balances";
98
+ readonly selector: "getBalanceForField";
99
+ }];
100
+ } | {
101
+ readonly id: "getStaked";
102
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
103
+ readonly dependencies: readonly [{
104
+ readonly module: "balances";
105
+ readonly selector: "getBalanceForField";
106
+ }];
107
+ } | {
108
+ readonly id: "getStakeable";
109
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
110
+ readonly dependencies: readonly [{
111
+ readonly module: "balances";
112
+ readonly selector: "getBalanceForField";
113
+ }];
114
+ } | {
115
+ readonly id: "getUnstaking";
116
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
117
+ readonly dependencies: readonly [{
118
+ readonly module: "balances";
119
+ readonly selector: "getBalanceForField";
120
+ }];
121
+ } | {
122
+ readonly id: "getUnstaked";
123
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
124
+ readonly dependencies: readonly [{
125
+ readonly module: "balances";
126
+ readonly selector: "getBalanceForField";
127
+ }];
128
+ } | {
129
+ readonly id: "getRewards";
130
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
131
+ readonly dependencies: readonly [{
132
+ readonly module: "balances";
133
+ readonly selector: "getBalanceForField";
134
+ }];
135
+ } | {
136
+ readonly id: "getFrozen";
137
+ readonly resultFunction: (getBalanceForField: import("../types.js").GetBalanceForField) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default | undefined) & import("lodash").MemoizedFunction;
138
+ readonly dependencies: readonly [{
139
+ readonly module: "balances";
140
+ readonly selector: "getBalanceForField";
141
+ }];
142
+ }) | ({
143
+ readonly id: "createTotal";
144
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
145
+ readonly dependencies: readonly [{
146
+ readonly module: "assets";
147
+ readonly selector: "createAssetSelector";
148
+ }, {
149
+ readonly selector: "$state";
150
+ }];
151
+ } | {
152
+ readonly id: "createBalance";
153
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
154
+ readonly dependencies: readonly [{
155
+ readonly module: "assets";
156
+ readonly selector: "createAssetSelector";
157
+ }, {
158
+ readonly selector: "$state";
159
+ }];
160
+ } | {
161
+ readonly id: "createSpendable";
162
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
163
+ readonly dependencies: readonly [{
164
+ readonly module: "assets";
165
+ readonly selector: "createAssetSelector";
166
+ }, {
167
+ readonly selector: "$state";
168
+ }];
169
+ } | {
170
+ readonly id: "createSpendableBalance";
171
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
172
+ readonly dependencies: readonly [{
173
+ readonly module: "assets";
174
+ readonly selector: "createAssetSelector";
175
+ }, {
176
+ readonly selector: "$state";
177
+ }];
178
+ } | {
179
+ readonly id: "createUnconfirmedSent";
180
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
181
+ readonly dependencies: readonly [{
182
+ readonly module: "assets";
183
+ readonly selector: "createAssetSelector";
184
+ }, {
185
+ readonly selector: "$state";
186
+ }];
187
+ } | {
188
+ readonly id: "createUnconfirmedReceived";
189
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
190
+ readonly dependencies: readonly [{
191
+ readonly module: "assets";
192
+ readonly selector: "createAssetSelector";
193
+ }, {
194
+ readonly selector: "$state";
195
+ }];
196
+ } | {
197
+ readonly id: "createUnspendable";
198
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
199
+ readonly dependencies: readonly [{
200
+ readonly module: "assets";
201
+ readonly selector: "createAssetSelector";
202
+ }, {
203
+ readonly selector: "$state";
204
+ }];
205
+ } | {
206
+ readonly id: "createWalletReserve";
207
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
208
+ readonly dependencies: readonly [{
209
+ readonly module: "assets";
210
+ readonly selector: "createAssetSelector";
211
+ }, {
212
+ readonly selector: "$state";
213
+ }];
214
+ } | {
215
+ readonly id: "createNetworkReserve";
216
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
217
+ readonly dependencies: readonly [{
218
+ readonly module: "assets";
219
+ readonly selector: "createAssetSelector";
220
+ }, {
221
+ readonly selector: "$state";
222
+ }];
223
+ } | {
224
+ readonly id: "createStaking";
225
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
226
+ readonly dependencies: readonly [{
227
+ readonly module: "assets";
228
+ readonly selector: "createAssetSelector";
229
+ }, {
230
+ readonly selector: "$state";
231
+ }];
232
+ } | {
233
+ readonly id: "createStaked";
234
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
235
+ readonly dependencies: readonly [{
236
+ readonly module: "assets";
237
+ readonly selector: "createAssetSelector";
238
+ }, {
239
+ readonly selector: "$state";
240
+ }];
241
+ } | {
242
+ readonly id: "createStakeable";
243
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
244
+ readonly dependencies: readonly [{
245
+ readonly module: "assets";
246
+ readonly selector: "createAssetSelector";
247
+ }, {
248
+ readonly selector: "$state";
249
+ }];
250
+ } | {
251
+ readonly id: "createUnstaking";
252
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
253
+ readonly dependencies: readonly [{
254
+ readonly module: "assets";
255
+ readonly selector: "createAssetSelector";
256
+ }, {
257
+ readonly selector: "$state";
258
+ }];
259
+ } | {
260
+ readonly id: "createUnstaked";
261
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
262
+ readonly dependencies: readonly [{
263
+ readonly module: "assets";
264
+ readonly selector: "createAssetSelector";
265
+ }, {
266
+ readonly selector: "$state";
267
+ }];
268
+ } | {
269
+ readonly id: "createRewards";
270
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
271
+ readonly dependencies: readonly [{
272
+ readonly module: "assets";
273
+ readonly selector: "createAssetSelector";
274
+ }, {
275
+ readonly selector: "$state";
276
+ }];
277
+ } | {
278
+ readonly id: "createFrozen";
279
+ readonly selectorFactory: (createAssetSelector: import("../types.js").CreateAssetSelector, selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | undefined, (res1: import("../types.js").Asset | undefined, res2: import("../types.js").State) => import("@exodus/currency").default | undefined>) & import("lodash").MemoizedFunction;
280
+ readonly dependencies: readonly [{
281
+ readonly module: "assets";
282
+ readonly selector: "createAssetSelector";
283
+ }, {
284
+ readonly selector: "$state";
285
+ }];
286
+ }))[], {
287
+ readonly id: "createBalances";
288
+ readonly selectorFactory: (selfSelector: import("../types.js").Selector<import("../types.js").State>) => (({ assetName, walletAccount }: import("../types.js").Source) => import("reselect").OutputSelector<unknown, import("../../module/types.js").FieldBalances, (res: import("../types.js").State) => import("../../module/types.js").FieldBalances>) & import("lodash").MemoizedFunction;
289
+ readonly dependencies: readonly [{
290
+ readonly selector: "$state";
291
+ }];
292
+ }, {
293
+ readonly id: "getBalances";
294
+ readonly selectorFactory: (selfSelector: import("../types.js").Selector<import("../types.js").State>) => import("reselect").OutputSelector<unknown, (({ assetName, walletAccount }: import("../types.js").Source) => import("../../module/types.js").FieldBalances | undefined) & import("lodash").MemoizedFunction, (res: import("../types.js").State) => (({ assetName, walletAccount }: import("../types.js").Source) => import("../../module/types.js").FieldBalances | undefined) & import("lodash").MemoizedFunction>;
295
+ readonly dependencies: readonly [{
296
+ readonly selector: "$state";
297
+ }];
298
+ }, {
299
+ readonly id: "getUnconfirmedBalance";
300
+ readonly selectorFactory: (getAssetSelector: import("../types.js").Selector<import("../types.js").GetAsset>, createAssetSourceSelector: import("../types.js").Selector<import("../types.js").GetTxs>) => import("reselect").OutputSelector<unknown, (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default) & import("lodash").MemoizedFunction, (res1: import("../types.js").GetAsset, res2: import("../types.js").GetTxs) => (({ assetName, walletAccount }: import("../types.js").Source) => import("@exodus/currency").default) & import("lodash").MemoizedFunction>;
301
+ readonly dependencies: readonly [{
302
+ readonly module: "assets";
303
+ readonly selector: "getAsset";
304
+ }, {
305
+ readonly module: "txLog";
306
+ readonly selector: "createAssetSourceSelectorOld";
307
+ }];
308
+ }, {
309
+ readonly id: "createFuelThreshold";
310
+ readonly selectorFactory: (getFeeDataSelector: import("../types.js").Selector<(name: string) => {
311
+ fuelThreshold?: import("@exodus/currency").default;
312
+ } | undefined>, createAssetSelector: import("../types.js").CreateAssetSelector) => ((assetName: string) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default | null, (res1: (name: string) => {
313
+ fuelThreshold?: import("@exodus/currency").default;
314
+ } | undefined, res2: import("../types.js").Asset | undefined) => import("@exodus/currency").default | null>) & import("lodash").MemoizedFunction;
315
+ readonly dependencies: readonly [{
316
+ readonly module: "feeData";
317
+ readonly selector: "getData";
318
+ }, {
319
+ readonly module: "assets";
320
+ readonly selector: "createAssetSelector";
321
+ }];
322
+ }, {
323
+ readonly id: "createRequiresFuelThreshold";
324
+ readonly selectorFactory: (isTxLogLoadedSelector: import("../types.js").Selector<(account: string) => boolean>, getAssetBalanceSelector: import("../types.js").Selector<import("../types.js").GetBalance>, assetsSelector: import("../types.js").Selector<Record<string, import("../types.js").Asset>>) => (source: {
325
+ assetName: string;
326
+ walletAccount: string;
327
+ }) => import("reselect").OutputSelector<unknown, boolean, (res1: (account: string) => boolean, res2: import("../types.js").GetBalance, res3: Record<string, import("../types.js").Asset>) => boolean>;
328
+ readonly dependencies: readonly [{
329
+ readonly module: "txLog";
330
+ readonly selector: "createIsWalletAccountLoadedSelectorOld";
331
+ }, {
332
+ readonly module: "balances";
333
+ readonly selector: "getAssetSourceBalanceSelector";
334
+ }, {
335
+ readonly module: "availableAssets";
336
+ readonly selector: "all";
337
+ }];
338
+ }];
339
+ export default _default;
@@ -0,0 +1,22 @@
1
+ import byAssetSelectorDefinition from './by-asset.js';
2
+ import createUnconfirmedBalanceSelectorDefinition from './create-unconfirmed-balance.js';
3
+ import getBalanceForFieldSelectorDefinition from './get-balance-for-field.js';
4
+ import getBalanceSelectors from './get-balance-selectors.js';
5
+ import createBalancesSelectorDefinition from './create-balances.js';
6
+ import getBalancesSelectorDefinition from './get-balances.js';
7
+ import createBalancesSelectors from './create-balance-selectors.js';
8
+ import getUnconfirmedBalanceSelectorDefinition from './get-unconfirmed-balance.js';
9
+ import createFuelThresholdSelectorDefinition from './create-fuel-threshold.js';
10
+ import createRequiresFuelThresholdSelectorDefinition from './create-requires-fuel-threshold.js';
11
+ export default [
12
+ byAssetSelectorDefinition,
13
+ createUnconfirmedBalanceSelectorDefinition,
14
+ getBalanceForFieldSelectorDefinition,
15
+ ...getBalanceSelectors,
16
+ ...createBalancesSelectors,
17
+ createBalancesSelectorDefinition,
18
+ getBalancesSelectorDefinition,
19
+ getUnconfirmedBalanceSelectorDefinition,
20
+ createFuelThresholdSelectorDefinition,
21
+ createRequiresFuelThresholdSelectorDefinition,
22
+ ];
@@ -0,0 +1,45 @@
1
+ import type { Selectors } from '@exodus/redux-dependency-injection';
2
+ import type { AccountState, SliceState } from '@exodus/multi-account-redux';
3
+ import type { TxSet } from '@exodus/models';
4
+ import type { BalanceAsset, FieldBalances } from '../module/types.js';
5
+ import type selectorDefinitions from './selectors/index.js';
6
+ import type { helperSelectorDefinitions } from './multi-account-helper.js';
7
+ import type NumberUnit from '@exodus/currency';
8
+ export type Source = {
9
+ assetName: string;
10
+ walletAccount: string;
11
+ };
12
+ export type FieldSource = Source & {
13
+ field: string;
14
+ };
15
+ export type Selector<T> = (state: unknown) => T;
16
+ export type Asset = BalanceAsset & {
17
+ feeAsset: {
18
+ currency: BalanceAsset['currency'];
19
+ };
20
+ };
21
+ export type GetAsset = (name: string) => Asset | undefined;
22
+ export type CreateAssetSelector = (name: string) => Selector<Asset | undefined>;
23
+ export type GetBalances = (source: Source) => FieldBalances | undefined;
24
+ export type GetBalance = (source: Source) => NumberUnit | undefined;
25
+ export type GetBalanceForField = (source: FieldSource) => NumberUnit | undefined;
26
+ export type GetTxs = (source: Source) => TxSet;
27
+ export type AccountBalancesState = AccountState<FieldBalances>;
28
+ export type AccountSlices = SliceState<FieldBalances>;
29
+ export type State = {
30
+ hasBalance: boolean;
31
+ [key: string]: AccountBalancesState | boolean;
32
+ };
33
+ export type InitialState = {
34
+ hasBalance: boolean;
35
+ exodus_0: AccountBalancesState;
36
+ };
37
+ export type BalancesSelectors<RootState = {
38
+ balances: InitialState;
39
+ }> = Selectors<{
40
+ id: 'balances';
41
+ type: 'redux-module';
42
+ initialState: InitialState;
43
+ eventReducers: Record<string, never>;
44
+ selectorDefinitions: readonly ((typeof helperSelectorDefinitions)[number] | (typeof selectorDefinitions)[number])[];
45
+ }, RootState>['balances'];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { BalancesAtom } from '../types.js';
2
+ import type { ReadonlyAtom } from '@exodus/atoms';
3
+ import type { WalletAccount } from '@exodus/models';
4
+ import { SafeError } from '@exodus/errors';
5
+ import { z } from '@exodus/zod';
6
+ declare const balancesReportDefinition: {
7
+ readonly id: "balancesReport";
8
+ readonly type: "report";
9
+ readonly factory: ({ enabledWalletAccountsAtom, balancesAtom, }: {
10
+ enabledWalletAccountsAtom: ReadonlyAtom<Record<string, WalletAccount>>;
11
+ balancesAtom: BalancesAtom;
12
+ }) => {
13
+ namespace: string;
14
+ export: ({ walletExists, isLocked }?: ExportParams) => Promise<Record<string, {
15
+ balances: Record<string, string>;
16
+ }> | {
17
+ error: SafeError;
18
+ } | null>;
19
+ getSchema: import("@exodus/basic-utils/lib/memoize.js").MemoizedFunction<() => z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
20
+ balances: z.ZodRecord<z.ZodString, z.ZodString>;
21
+ }, "strict", z.ZodTypeAny, {
22
+ balances: Record<string, string>;
23
+ }, {
24
+ balances: Record<string, string>;
25
+ }>, z.ZodType<SafeError, z.ZodTypeDef, SafeError>]>>>>;
26
+ };
27
+ readonly dependencies: readonly ["enabledWalletAccountsAtom", "balancesAtom"];
28
+ readonly public: true;
29
+ };
30
+ type ExportParams = {
31
+ walletExists?: boolean;
32
+ isLocked?: boolean;
33
+ };
34
+ export default balancesReportDefinition;
@@ -0,0 +1,51 @@
1
+ import { SafeError } from '@exodus/errors';
2
+ import { memoize } from '@exodus/basic-utils';
3
+ import { z } from '@exodus/zod';
4
+ const createBalancesReport = ({ enabledWalletAccountsAtom, balancesAtom, }) => ({
5
+ namespace: 'balances',
6
+ export: async ({ walletExists, isLocked } = Object.create(null)) => {
7
+ if (!walletExists || isLocked)
8
+ return null;
9
+ let walletAccounts;
10
+ let balances;
11
+ try {
12
+ ;
13
+ [walletAccounts, { balances }] = await Promise.all([
14
+ enabledWalletAccountsAtom.get(),
15
+ balancesAtom.get(),
16
+ ]);
17
+ }
18
+ catch (error) {
19
+ return { error: SafeError.from(error) };
20
+ }
21
+ return Object.keys(walletAccounts)
22
+ .filter((key) => balances[key] && walletAccounts[key].source !== 'ftx')
23
+ .reduce((data, key) => {
24
+ const reportBalances = Object.fromEntries(Object.entries(balances[key])
25
+ .filter(([_, value]) => !value.balance.isZero)
26
+ .map(([key, value]) => {
27
+ return [key, value.balance.toDefaultString({ unit: true })];
28
+ }));
29
+ data[key] = { balances: reportBalances };
30
+ return data;
31
+ }, {});
32
+ },
33
+ getSchema: memoize(() => z
34
+ .record(z.union([
35
+ z
36
+ .object({
37
+ balances: z.record(z.string(), z.string()),
38
+ })
39
+ .strict(),
40
+ z.instanceof(SafeError),
41
+ ]))
42
+ .nullable()),
43
+ });
44
+ const balancesReportDefinition = {
45
+ id: 'balancesReport',
46
+ type: 'report',
47
+ factory: createBalancesReport,
48
+ dependencies: ['enabledWalletAccountsAtom', 'balancesAtom'],
49
+ public: true,
50
+ };
51
+ export default balancesReportDefinition;
package/lib/types.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import type { BalanceFieldName, Balances as AssetBalances } from '@exodus/asset-types';
2
+ import type { Atom, ReadonlyAtom } from '@exodus/atoms';
3
+ import type NumberUnit from '@exodus/currency';
4
+ export type Balances = Partial<AssetBalances>;
5
+ type WalletAccountName = string;
6
+ type AssetName = string;
7
+ export type BalancesByAssetSource = Record<WalletAccountName, Record<AssetName, Balances>>;
8
+ export type BalanceChange = {
9
+ from: NumberUnit;
10
+ to: NumberUnit;
11
+ };
12
+ export type BalanceChanges = Record<WalletAccountName, Record<AssetName, Partial<Record<BalanceFieldName, BalanceChange>>>>;
13
+ export type BalancesAtomValue = {
14
+ balances: BalancesByAssetSource;
15
+ changes?: BalanceChanges;
16
+ };
17
+ export type BalancesAtom = Atom<BalancesAtomValue>;
18
+ export type HasBalanceAtom = Omit<Atom<boolean>, 'set'> & {
19
+ set(value: boolean | undefined): Promise<void>;
20
+ set(setter: (previous: boolean) => boolean | Promise<boolean>): Promise<void>;
21
+ };
22
+ export type AssetTotalWalletAmountsAtom = ReadonlyAtom<Map<string, NumberUnit>>;
23
+ export type FundedWalletAccountsAtom = ReadonlyAtom<Record<string, boolean>>;
24
+ export {};
package/lib/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { processAssetBalances, validateBalances } from '../lib/module/balances-utils.js'
@@ -1,86 +1 @@
1
- import { mapValues } from '@exodus/basic-utils'
2
-
3
- function resolveFieldBalance({ balances, fieldConfig, zero, processedBalances }) {
4
- if (balances[fieldConfig.name]) {
5
- return balances[fieldConfig.name]
6
- }
7
-
8
- if (fieldConfig.legacyName && balances[fieldConfig.legacyName]) {
9
- return balances[fieldConfig.legacyName]
10
- }
11
-
12
- if (fieldConfig.default && fieldConfig.default === 'zero') {
13
- return zero
14
- }
15
-
16
- if (fieldConfig.default && processedBalances[fieldConfig.default] !== null) {
17
- if (processedBalances[fieldConfig.default] === undefined) {
18
- throw new Error(
19
- `Field config "${fieldConfig.default}" must be defined before "${fieldConfig.name}"`
20
- )
21
- }
22
-
23
- return processedBalances[fieldConfig.default]
24
- }
25
-
26
- return null
27
- }
28
-
29
- export const processAssetBalances = ({ balances, zero, balanceFieldsConfig }) => {
30
- return balanceFieldsConfig.reduce((processedBalances, fieldConfig) => {
31
- const balance = resolveFieldBalance({
32
- balances,
33
- fieldConfig,
34
- zero,
35
- processedBalances,
36
- })
37
- if (balance !== null) {
38
- processedBalances[fieldConfig.name] = balance
39
- if (fieldConfig.legacyName) {
40
- processedBalances[fieldConfig.legacyName] = balance
41
- }
42
- }
43
-
44
- return processedBalances
45
- }, {})
46
- }
47
-
48
- export const validateBalances = ({ balances, asset, logger }) => {
49
- const assetName = asset.name
50
- const zero = asset.currency.ZERO
51
-
52
- const log = (error) => {
53
- logger.warn(error.fn, error.error, error.args)
54
- }
55
-
56
- return mapValues(balances, (balance, field) => {
57
- if (!balance) {
58
- return balance
59
- }
60
-
61
- if (!balance.unitType.equals(asset.currency)) {
62
- log({
63
- fn: 'getAssetBalances',
64
- error: `asset.api.getBalances ${assetName} returns different ${field} currency`,
65
- args: {
66
- balanceUnit: balance.unitType.defaultUnit.unitName,
67
- assetUnit: asset.currency.defaultUnit.unitName,
68
- },
69
- })
70
- return zero
71
- }
72
-
73
- if (balance.isNegative) {
74
- log({
75
- fn: 'getAssetBalances',
76
- error: `asset.api.getBalances ${assetName} returns negative ${field}`,
77
- args: {
78
- amount: balance.toDefaultString({ unit: true }),
79
- },
80
- })
81
- return zero
82
- }
83
-
84
- return balance
85
- })
86
- }
1
+ export { processAssetBalances, validateBalances } from '../lib/module/balances-utils.js'
@@ -0,0 +1,2 @@
1
+ export { default } from '../lib/module/index.js'
2
+ export { cloneBalances } from '../lib/module/index.js'