@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.
- package/CHANGELOG.md +10 -0
- package/README.md +1 -1
- package/atoms/asset-names-with-balance.d.ts +1 -0
- package/atoms/asset-names-with-balance.js +1 -40
- package/atoms/asset-total-wallet-amounts.d.ts +1 -0
- package/atoms/asset-total-wallet-amounts.js +1 -47
- package/atoms/assets-with-balance-count.d.ts +1 -0
- package/atoms/assets-with-balance-count.js +1 -8
- package/atoms/balances.d.ts +1 -0
- package/atoms/balances.js +1 -6
- package/atoms/funded-wallet-accounts.d.ts +1 -0
- package/atoms/funded-wallet-accounts.js +1 -25
- package/atoms/has-balance.d.ts +1 -0
- package/atoms/has-balance.js +1 -31
- package/atoms/index.d.ts +8 -0
- package/atoms/index.js +8 -54
- package/default-config.d.ts +1 -0
- package/default-config.js +1 -26
- package/index.d.ts +2 -35
- package/index.js +1 -65
- package/lib/atoms/asset-names-with-balance.d.ts +5 -0
- package/lib/atoms/asset-names-with-balance.js +31 -0
- package/lib/atoms/asset-total-wallet-amounts.d.ts +5 -0
- package/lib/atoms/asset-total-wallet-amounts.js +39 -0
- package/lib/atoms/assets-with-balance-count.d.ts +5 -0
- package/lib/atoms/assets-with-balance-count.js +6 -0
- package/lib/atoms/balances.d.ts +3 -0
- package/lib/atoms/balances.js +3 -0
- package/lib/atoms/funded-wallet-accounts.d.ts +8 -0
- package/lib/atoms/funded-wallet-accounts.js +19 -0
- package/lib/atoms/has-balance.d.ts +7 -0
- package/lib/atoms/has-balance.js +21 -0
- package/lib/atoms/index.d.ts +54 -0
- package/lib/atoms/index.js +48 -0
- package/lib/default-config.d.ts +3 -0
- package/lib/default-config.js +24 -0
- package/lib/index.d.ts +187 -0
- package/lib/index.js +49 -0
- package/lib/module/balances-utils.d.ts +13 -0
- package/lib/module/balances-utils.js +70 -0
- package/lib/module/index.d.ts +11 -0
- package/lib/module/index.js +367 -0
- package/lib/module/mockable-balances.d.ts +16 -0
- package/lib/module/mockable-balances.js +21 -0
- package/lib/module/types.d.ts +80 -0
- package/lib/module/types.js +1 -0
- package/lib/plugins/analytics.d.ts +18 -0
- package/lib/plugins/analytics.js +30 -0
- package/lib/plugins/index.d.ts +35 -0
- package/lib/plugins/index.js +22 -0
- package/lib/plugins/lifecycle.d.ts +14 -0
- package/lib/plugins/lifecycle.js +32 -0
- package/lib/redux/id.d.ts +2 -0
- package/lib/redux/id.js +1 -0
- package/lib/redux/index.d.ts +588 -0
- package/lib/redux/index.js +53 -0
- package/lib/redux/initial-state.d.ts +3 -0
- package/lib/redux/initial-state.js +6 -0
- package/lib/redux/multi-account-helper.d.ts +463 -0
- package/lib/redux/multi-account-helper.js +23 -0
- package/lib/redux/selectors/by-asset.d.ts +12 -0
- package/lib/redux/selectors/by-asset.js +19 -0
- package/lib/redux/selectors/create-balance-selectors.d.ts +70 -0
- package/lib/redux/selectors/create-balance-selectors.js +32 -0
- package/lib/redux/selectors/create-balances.d.ts +11 -0
- package/lib/redux/selectors/create-balances.js +13 -0
- package/lib/redux/selectors/create-fuel-threshold.d.ts +19 -0
- package/lib/redux/selectors/create-fuel-threshold.js +22 -0
- package/lib/redux/selectors/create-requires-fuel-threshold.d.ts +19 -0
- package/lib/redux/selectors/create-requires-fuel-threshold.js +29 -0
- package/lib/redux/selectors/create-unconfirmed-balance.d.ts +15 -0
- package/lib/redux/selectors/create-unconfirmed-balance.js +14 -0
- package/lib/redux/selectors/get-balance-for-field.d.ts +14 -0
- package/lib/redux/selectors/get-balance-for-field.js +19 -0
- package/lib/redux/selectors/get-balance-selectors.d.ts +68 -0
- package/lib/redux/selectors/get-balance-selectors.js +32 -0
- package/lib/redux/selectors/get-balances.d.ts +10 -0
- package/lib/redux/selectors/get-balances.js +13 -0
- package/lib/redux/selectors/get-unconfirmed-balance.d.ts +19 -0
- package/lib/redux/selectors/get-unconfirmed-balance.js +27 -0
- package/lib/redux/selectors/index.d.ts +339 -0
- package/lib/redux/selectors/index.js +22 -0
- package/lib/redux/types.d.ts +45 -0
- package/lib/redux/types.js +1 -0
- package/lib/report/index.d.ts +34 -0
- package/lib/report/index.js +51 -0
- package/lib/types.d.ts +24 -0
- package/lib/types.js +1 -0
- package/module/balances-utils.d.ts +1 -0
- package/module/balances-utils.js +1 -86
- package/module/index.d.ts +2 -0
- package/module/index.js +2 -490
- package/module/mockable-balances.d.ts +1 -0
- package/module/mockable-balances.js +1 -27
- package/package.json +36 -29
- package/plugins/analytics.d.ts +1 -0
- package/plugins/analytics.js +1 -48
- package/plugins/index.d.ts +4 -0
- package/plugins/index.js +4 -24
- package/plugins/lifecycle.d.ts +1 -0
- package/plugins/lifecycle.js +1 -40
- package/redux/id.d.ts +1 -0
- package/redux/id.js +1 -1
- package/redux/index.d.ts +2 -0
- package/redux/index.js +1 -61
- package/redux/initial-state.d.ts +1 -0
- package/redux/initial-state.js +1 -8
- package/redux/multi-account-helper.d.ts +1 -0
- package/redux/multi-account-helper.js +1 -14
- package/redux/selectors/by-asset.d.ts +1 -0
- package/redux/selectors/by-asset.js +1 -25
- package/redux/selectors/create-balance-selectors.d.ts +1 -0
- package/redux/selectors/create-balance-selectors.js +1 -48
- package/redux/selectors/create-balances.d.ts +1 -0
- package/redux/selectors/create-balances.js +1 -26
- package/redux/selectors/create-fuel-threshold.d.ts +1 -0
- package/redux/selectors/create-fuel-threshold.js +1 -32
- package/redux/selectors/create-requires-fuel-threshold.d.ts +1 -0
- package/redux/selectors/create-requires-fuel-threshold.js +1 -59
- package/redux/selectors/create-unconfirmed-balance.d.ts +1 -0
- package/redux/selectors/create-unconfirmed-balance.js +1 -28
- package/redux/selectors/get-balance-for-field.d.ts +1 -0
- package/redux/selectors/get-balance-for-field.js +1 -34
- package/redux/selectors/get-balance-selectors.d.ts +1 -0
- package/redux/selectors/get-balance-selectors.js +1 -42
- package/redux/selectors/get-balances.d.ts +1 -0
- package/redux/selectors/get-balances.js +1 -24
- package/redux/selectors/get-unconfirmed-balance.d.ts +2 -0
- package/redux/selectors/get-unconfirmed-balance.js +2 -43
- package/redux/selectors/index.d.ts +1 -0
- package/redux/selectors/index.js +1 -23
- package/report/index.d.ts +1 -0
- package/report/index.js +1 -61
- package/tsconfig.json +0 -4
package/plugins/index.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
id: 'balancesLifecyclePlugin',
|
|
6
|
-
type: 'plugin',
|
|
7
|
-
factory: createBalancesLifecyclePlugin,
|
|
8
|
-
dependencies: ['balancesAtom', 'port', 'balances', 'hasBalanceAtom'],
|
|
9
|
-
public: true,
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const balancesAnalyticsPluginDefinition = {
|
|
13
|
-
id: 'balancesAnalyticsPlugin',
|
|
14
|
-
type: 'plugin',
|
|
15
|
-
factory: createBalancesAnalyticsPlugin,
|
|
16
|
-
dependencies: [
|
|
17
|
-
'analytics',
|
|
18
|
-
'hasBalanceAtom',
|
|
19
|
-
'assetsWithBalanceCountAtom',
|
|
20
|
-
'assetsTotalWalletAmountsAtom',
|
|
21
|
-
'config?',
|
|
22
|
-
],
|
|
23
|
-
public: true,
|
|
24
|
-
}
|
|
1
|
+
export {
|
|
2
|
+
balancesLifecyclePluginDefinition,
|
|
3
|
+
balancesAnalyticsPluginDefinition,
|
|
4
|
+
} from '../lib/plugins/index.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../lib/plugins/lifecycle.js'
|
package/plugins/lifecycle.js
CHANGED
|
@@ -1,40 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const createBalancesLifecyclePlugin = ({ balancesAtom, port, balances, hasBalanceAtom }) => {
|
|
4
|
-
const balancesAtomObserver = createAtomObserver({
|
|
5
|
-
port,
|
|
6
|
-
atom: balancesAtom,
|
|
7
|
-
event: 'balances',
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
const hasBalanceAtomObserver = createAtomObserver({
|
|
11
|
-
port,
|
|
12
|
-
atom: hasBalanceAtom,
|
|
13
|
-
event: 'hasBalance',
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
const onLoad = () => {
|
|
17
|
-
hasBalanceAtomObserver.start()
|
|
18
|
-
balancesAtomObserver.start()
|
|
19
|
-
|
|
20
|
-
balances.load()
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const onStop = () => {
|
|
24
|
-
balancesAtomObserver.unregister()
|
|
25
|
-
hasBalanceAtomObserver.unregister()
|
|
26
|
-
balances.stop()
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const onClear = async () => {
|
|
30
|
-
await hasBalanceAtom.set(undefined)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return {
|
|
34
|
-
onLoad,
|
|
35
|
-
onStop,
|
|
36
|
-
onClear,
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export default createBalancesLifecyclePlugin
|
|
1
|
+
export { default } from '../lib/plugins/lifecycle.js'
|
package/redux/id.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../lib/redux/id.js'
|
package/redux/id.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default '
|
|
1
|
+
export { default } from '../lib/redux/id.js'
|
package/redux/index.d.ts
ADDED
package/redux/index.js
CHANGED
|
@@ -1,61 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import initialState from './initial-state.js'
|
|
3
|
-
import selectorDefinitions from './selectors/index.js'
|
|
4
|
-
import { mapValues } from '@exodus/basic-utils'
|
|
5
|
-
// eslint-disable-next-line no-restricted-imports -- TODO: Fix this the next time the file is edited.
|
|
6
|
-
import lodash from 'lodash'
|
|
7
|
-
import helper from './multi-account-helper.js'
|
|
8
|
-
import { setAccounts } from '@exodus/multi-account-redux'
|
|
9
|
-
|
|
10
|
-
const { merge } = lodash
|
|
11
|
-
|
|
12
|
-
const mergeChanges = (balancesState, changesByWalletAccount) => {
|
|
13
|
-
return {
|
|
14
|
-
...balancesState,
|
|
15
|
-
...mapValues(changesByWalletAccount, (changesByAsset, walletAccount) => {
|
|
16
|
-
if (!balancesState?.[walletAccount]) {
|
|
17
|
-
return {
|
|
18
|
-
loaded: true,
|
|
19
|
-
error: null,
|
|
20
|
-
data: mapValues(changesByAsset, (changesByField) =>
|
|
21
|
-
mapValues(changesByField, (balanceField) => balanceField.to)
|
|
22
|
-
),
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const updatedData = mapValues(changesByAsset, (changesByField) =>
|
|
27
|
-
mapValues(changesByField, (balanceField) => balanceField.to)
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
return {
|
|
31
|
-
...balancesState[walletAccount],
|
|
32
|
-
data: merge({}, balancesState[walletAccount].data, updatedData),
|
|
33
|
-
}
|
|
34
|
-
}),
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const balancesReduxDefinition = {
|
|
39
|
-
id,
|
|
40
|
-
type: 'redux-module',
|
|
41
|
-
initialState,
|
|
42
|
-
eventReducers: {
|
|
43
|
-
balances: (state, payload) => {
|
|
44
|
-
const { hasBalance, ...walletAccountBalances } = state
|
|
45
|
-
const balancesLoaded = Object.values(walletAccountBalances).every((value) => value.loaded)
|
|
46
|
-
|
|
47
|
-
if (balancesLoaded && payload.changes && Object.keys(payload.changes).length > 0) {
|
|
48
|
-
return mergeChanges(state, payload.changes)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return { hasBalance, ...setAccounts(state, payload.balances) }
|
|
52
|
-
},
|
|
53
|
-
hasBalance: (state, payload) => ({
|
|
54
|
-
...state,
|
|
55
|
-
hasBalance: payload,
|
|
56
|
-
}),
|
|
57
|
-
},
|
|
58
|
-
selectorDefinitions: [...helper.selectorDefinitions, ...selectorDefinitions],
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export default balancesReduxDefinition
|
|
1
|
+
export { default } from '../lib/redux/index.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../lib/redux/initial-state.js'
|
package/redux/initial-state.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../lib/redux/multi-account-helper.js'
|
|
@@ -1,14 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { createReduxModuleHelper } from '@exodus/multi-account-redux'
|
|
3
|
-
import id from './id.js'
|
|
4
|
-
|
|
5
|
-
const helper = createReduxModuleHelper({
|
|
6
|
-
slice: id,
|
|
7
|
-
createInitialPerAssetData: memoize(
|
|
8
|
-
({ asset }) => ({ balance: asset.currency.ZERO, total: asset.currency.ZERO }),
|
|
9
|
-
({ asset }) => asset.name
|
|
10
|
-
),
|
|
11
|
-
assetSourceDataSelectors: [{ name: 'balance', selector: (assetData) => assetData.total }],
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
export default helper
|
|
1
|
+
export { default } from '../lib/redux/multi-account-helper.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/by-asset.js'
|
|
@@ -1,25 +1 @@
|
|
|
1
|
-
|
|
2
|
-
walletAccounts.reduce((all, walletAccount) => {
|
|
3
|
-
for (const [assetName, balance] of Object.entries(getAssetBalances(walletAccount))) {
|
|
4
|
-
if (!all[assetName]) {
|
|
5
|
-
all[assetName] = balance
|
|
6
|
-
continue
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
all[assetName] = all[assetName].add(balance)
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
return all
|
|
13
|
-
}, {})
|
|
14
|
-
|
|
15
|
-
const byAssetSelector = {
|
|
16
|
-
id: 'byAsset',
|
|
17
|
-
resultFunction,
|
|
18
|
-
dependencies: [
|
|
19
|
-
//
|
|
20
|
-
{ module: 'walletAccounts', selector: 'enabled' },
|
|
21
|
-
{ selector: 'getAccountAssetsBalanceSelector' },
|
|
22
|
-
],
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export default byAssetSelector
|
|
1
|
+
export { default } from '../../lib/redux/selectors/by-asset.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-balance-selectors.js'
|
|
@@ -1,48 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import lodash from 'lodash'
|
|
3
|
-
import { MY_STATE } from '@exodus/redux-dependency-injection'
|
|
4
|
-
import { createSelector } from 'reselect'
|
|
5
|
-
|
|
6
|
-
const { memoize } = lodash // eslint-disable-line @exodus/basic-utils/prefer-basic-utils
|
|
7
|
-
|
|
8
|
-
const createBalanceSelectorFactory = ({ field, id }) => {
|
|
9
|
-
const selectorFactory = (createAssetSelector, selfSelector) =>
|
|
10
|
-
memoize(
|
|
11
|
-
({ assetName, walletAccount }) =>
|
|
12
|
-
createSelector(
|
|
13
|
-
createAssetSelector(assetName),
|
|
14
|
-
selfSelector,
|
|
15
|
-
(asset, balances) =>
|
|
16
|
-
balances[walletAccount]?.data[assetName]?.[field] ?? asset?.currency.ZERO
|
|
17
|
-
),
|
|
18
|
-
({ assetName, walletAccount, field }) => [assetName, walletAccount, field].join('-')
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
return {
|
|
22
|
-
id,
|
|
23
|
-
selectorFactory,
|
|
24
|
-
dependencies: [{ module: 'assets', selector: 'createAssetSelector' }, { selector: MY_STATE }],
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const createBalanceSelectors = [
|
|
29
|
-
// regenerate if there is a new balance field!!
|
|
30
|
-
{ id: 'createTotal', field: 'total' },
|
|
31
|
-
{ id: 'createBalance', field: 'balance' },
|
|
32
|
-
{ id: 'createSpendable', field: 'spendable' },
|
|
33
|
-
{ id: 'createSpendableBalance', field: 'spendableBalance' },
|
|
34
|
-
{ id: 'createUnconfirmedSent', field: 'unconfirmedSent' },
|
|
35
|
-
{ id: 'createUnconfirmedReceived', field: 'unconfirmedReceived' },
|
|
36
|
-
{ id: 'createUnspendable', field: 'unspendable' },
|
|
37
|
-
{ id: 'createWalletReserve', field: 'walletReserve' },
|
|
38
|
-
{ id: 'createNetworkReserve', field: 'networkReserve' },
|
|
39
|
-
{ id: 'createStaking', field: 'staking' },
|
|
40
|
-
{ id: 'createStaked', field: 'staked' },
|
|
41
|
-
{ id: 'createStakeable', field: 'stakeable' },
|
|
42
|
-
{ id: 'createUnstaking', field: 'unstaking' },
|
|
43
|
-
{ id: 'createUnstaked', field: 'unstaked' },
|
|
44
|
-
{ id: 'createRewards', field: 'rewards' },
|
|
45
|
-
{ id: 'createFrozen', field: 'frozen' },
|
|
46
|
-
].map(createBalanceSelectorFactory)
|
|
47
|
-
|
|
48
|
-
export default createBalanceSelectors
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-balance-selectors.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-balances.js'
|
|
@@ -1,26 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import lodash from 'lodash'
|
|
3
|
-
import { createSelector } from 'reselect'
|
|
4
|
-
import { MY_STATE } from '@exodus/redux-dependency-injection'
|
|
5
|
-
|
|
6
|
-
const { memoize } = lodash // eslint-disable-line @exodus/basic-utils/prefer-basic-utils
|
|
7
|
-
|
|
8
|
-
const EMPTY_BALANCES = Object.create(null)
|
|
9
|
-
|
|
10
|
-
const selectorFactory = (selfSelector) =>
|
|
11
|
-
memoize(
|
|
12
|
-
({ assetName, walletAccount }) =>
|
|
13
|
-
createSelector(
|
|
14
|
-
selfSelector,
|
|
15
|
-
(balances) => balances[walletAccount]?.data[assetName] ?? EMPTY_BALANCES
|
|
16
|
-
),
|
|
17
|
-
({ assetName, walletAccount }) => [assetName, walletAccount].join('-')
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
const createBalancesSelectorDefinition = {
|
|
21
|
-
id: 'createBalances',
|
|
22
|
-
selectorFactory,
|
|
23
|
-
dependencies: [{ selector: MY_STATE }],
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export default createBalancesSelectorDefinition
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-balances.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-fuel-threshold.js'
|
|
@@ -1,32 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import lodash from 'lodash'
|
|
3
|
-
import { createSelector } from 'reselect'
|
|
4
|
-
import { isNumberUnit } from '@exodus/currency'
|
|
5
|
-
|
|
6
|
-
const { memoize } = lodash // eslint-disable-line @exodus/basic-utils/prefer-basic-utils
|
|
7
|
-
|
|
8
|
-
const selectorFactory = (getFeeDataSelector, createAssetSelector) =>
|
|
9
|
-
memoize((assetName) =>
|
|
10
|
-
createSelector(getFeeDataSelector, createAssetSelector(assetName), (getFeeData, asset) => {
|
|
11
|
-
if (!asset) {
|
|
12
|
-
// not all assets are supported by Exodus.
|
|
13
|
-
return null
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const feeData = getFeeData(asset.baseAsset.name)
|
|
17
|
-
return isNumberUnit(feeData?.fuelThreshold)
|
|
18
|
-
? feeData.fuelThreshold
|
|
19
|
-
: asset.feeAsset.currency.ZERO
|
|
20
|
-
})
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
const createFuelThresholdSelectorDefinition = {
|
|
24
|
-
id: 'createFuelThreshold',
|
|
25
|
-
selectorFactory,
|
|
26
|
-
dependencies: [
|
|
27
|
-
{ module: 'feeData', selector: 'getData' },
|
|
28
|
-
{ module: 'assets', selector: 'createAssetSelector' },
|
|
29
|
-
],
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export default createFuelThresholdSelectorDefinition
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-fuel-threshold.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-requires-fuel-threshold.js'
|
|
@@ -1,59 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { memoizeByAssetSource } from '@exodus/core-selectors/utils/memoize.js'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Checks if a wallet account has "relative" tokens of the supplied asset (excluding itself):
|
|
6
|
-
*
|
|
7
|
-
* If providing a base asset, then it returns if the wallet has any child balance. Examples:
|
|
8
|
-
* - eth, returns true if there is usdt(eth)
|
|
9
|
-
* - tron, return true if there is usdt(tron)
|
|
10
|
-
*
|
|
11
|
-
* If providing child asset, then it returns if there is any base/parent or 'sister' assent with balance. Example:
|
|
12
|
-
* - tfuel, return true if there is theta.
|
|
13
|
-
*
|
|
14
|
-
* This selector is useful when testing that the wallet is not drying up all the fuel token (relativeTokenName)
|
|
15
|
-
* when holding other assets that require it to operate.
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
const selectorFactory = (isTxLogLoadedSelector, getAssetBalanceSelector, assetsSelector) =>
|
|
20
|
-
memoizeByAssetSource(({ assetName, walletAccount }) =>
|
|
21
|
-
createSelector(
|
|
22
|
-
isTxLogLoadedSelector,
|
|
23
|
-
getAssetBalanceSelector,
|
|
24
|
-
assetsSelector,
|
|
25
|
-
(isTxLogLoaded, getAssetBalance, assets) => {
|
|
26
|
-
if (!isTxLogLoaded(walletAccount)) return false
|
|
27
|
-
const asset = assets[assetName]
|
|
28
|
-
if (!asset) {
|
|
29
|
-
// not all assets are supported by Exodus.
|
|
30
|
-
return false
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const baseAssetName = asset.baseAsset.name
|
|
34
|
-
const relatedAssets = Object.values(assets).filter(
|
|
35
|
-
(asset) => asset.baseAsset.name === baseAssetName && asset.name !== assetName
|
|
36
|
-
)
|
|
37
|
-
// check that at least one token has non-zero balance
|
|
38
|
-
return relatedAssets.some((token) => {
|
|
39
|
-
const balance = getAssetBalance({
|
|
40
|
-
assetName: token.name,
|
|
41
|
-
walletAccount,
|
|
42
|
-
})
|
|
43
|
-
return balance && !balance.isZero
|
|
44
|
-
})
|
|
45
|
-
}
|
|
46
|
-
)
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
const createRequiresFuelThresholdSelectorDefinition = {
|
|
50
|
-
id: 'createRequiresFuelThreshold',
|
|
51
|
-
selectorFactory,
|
|
52
|
-
dependencies: [
|
|
53
|
-
{ module: 'txLog', selector: 'createIsWalletAccountLoadedSelectorOld' },
|
|
54
|
-
{ module: 'balances', selector: 'getAssetSourceBalanceSelector' },
|
|
55
|
-
{ module: 'availableAssets', selector: 'all' },
|
|
56
|
-
],
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export default createRequiresFuelThresholdSelectorDefinition
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-requires-fuel-threshold.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-unconfirmed-balance.js'
|
|
@@ -1,28 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import lodash from 'lodash'
|
|
3
|
-
import { createSelector } from 'reselect'
|
|
4
|
-
import { getUnconfirmedBalance } from './get-unconfirmed-balance.js'
|
|
5
|
-
|
|
6
|
-
const { memoize } = lodash // eslint-disable-line @exodus/basic-utils/prefer-basic-utils
|
|
7
|
-
|
|
8
|
-
const selectorFactory = (createAssetSelector, createAssetSourceSelector) =>
|
|
9
|
-
memoize(
|
|
10
|
-
({ assetName, walletAccount }) =>
|
|
11
|
-
createSelector(
|
|
12
|
-
createAssetSelector(assetName),
|
|
13
|
-
createAssetSourceSelector({ assetName, walletAccount }),
|
|
14
|
-
(asset, txs) => getUnconfirmedBalance({ asset, txs })
|
|
15
|
-
),
|
|
16
|
-
({ assetName, walletAccount }) => [assetName, walletAccount].join('-')
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
const createUnconfirmedBalanceSelectorDefinition = {
|
|
20
|
-
id: 'createUnconfirmedBalance',
|
|
21
|
-
selectorFactory,
|
|
22
|
-
dependencies: [
|
|
23
|
-
{ module: 'assets', selector: 'createAssetSelector' },
|
|
24
|
-
{ module: 'txLog', selector: 'createAssetSourceSelector' },
|
|
25
|
-
],
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export default createUnconfirmedBalanceSelectorDefinition
|
|
1
|
+
export { default } from '../../lib/redux/selectors/create-unconfirmed-balance.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/get-balance-for-field.js'
|
|
@@ -1,34 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import lodash from 'lodash'
|
|
3
|
-
import defaultConfig from '../../default-config.js'
|
|
4
|
-
|
|
5
|
-
const { memoize } = lodash // eslint-disable-line @exodus/basic-utils/prefer-basic-utils
|
|
6
|
-
|
|
7
|
-
const { balanceFields } = defaultConfig
|
|
8
|
-
|
|
9
|
-
const resultFunction = (getAsset, getBalances) =>
|
|
10
|
-
memoize(
|
|
11
|
-
({ assetName, walletAccount, field }) => {
|
|
12
|
-
if (!balanceFields.includes(field)) {
|
|
13
|
-
throw new Error(
|
|
14
|
-
`Value '${field}' is not one of the valid fields '${balanceFields.join(', ')}'`
|
|
15
|
-
)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return (
|
|
19
|
-
getBalances({ assetName, walletAccount })?.[field] ?? getAsset(assetName)?.currency.ZERO
|
|
20
|
-
)
|
|
21
|
-
},
|
|
22
|
-
({ assetName, walletAccount, field }) => [assetName, walletAccount, field].join('-')
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
const getBalanceForFieldSelectorDefinition = {
|
|
26
|
-
id: 'getBalanceForField',
|
|
27
|
-
resultFunction,
|
|
28
|
-
dependencies: [
|
|
29
|
-
{ module: 'assets', selector: 'getAsset' },
|
|
30
|
-
{ module: 'balances', selector: 'getBalances' },
|
|
31
|
-
],
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export default getBalanceForFieldSelectorDefinition
|
|
1
|
+
export { default } from '../../lib/redux/selectors/get-balance-for-field.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/get-balance-selectors.js'
|
|
@@ -1,42 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import lodash from 'lodash'
|
|
3
|
-
|
|
4
|
-
const { memoize } = lodash // eslint-disable-line @exodus/basic-utils/prefer-basic-utils
|
|
5
|
-
|
|
6
|
-
const createResultFunction = (field) => (getBalanceForField) =>
|
|
7
|
-
memoize(
|
|
8
|
-
({ assetName, walletAccount }) => {
|
|
9
|
-
return getBalanceForField({ assetName, walletAccount, field })
|
|
10
|
-
},
|
|
11
|
-
({ assetName, walletAccount }) => [assetName, walletAccount].join('-')
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
const getBalanceSelectorFactory = ({ field, id }) => {
|
|
15
|
-
return {
|
|
16
|
-
id,
|
|
17
|
-
resultFunction: createResultFunction(field),
|
|
18
|
-
dependencies: [{ module: 'balances', selector: 'getBalanceForField' }],
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const getBalanceSelectors = [
|
|
23
|
-
// regenerate if there is a new balance field!!
|
|
24
|
-
{ id: 'getTotal', field: 'total' },
|
|
25
|
-
{ id: 'getBalance', field: 'balance' },
|
|
26
|
-
{ id: 'getSpendable', field: 'spendable' },
|
|
27
|
-
{ id: 'getSpendableBalance', field: 'spendableBalance' },
|
|
28
|
-
{ id: 'getUnconfirmedSent', field: 'unconfirmedSent' },
|
|
29
|
-
{ id: 'getUnconfirmedReceived', field: 'unconfirmedReceived' },
|
|
30
|
-
{ id: 'getUnspendable', field: 'unspendable' },
|
|
31
|
-
{ id: 'getWalletReserve', field: 'walletReserve' },
|
|
32
|
-
{ id: 'getNetworkReserve', field: 'networkReserve' },
|
|
33
|
-
{ id: 'getStaking', field: 'staking' },
|
|
34
|
-
{ id: 'getStaked', field: 'staked' },
|
|
35
|
-
{ id: 'getStakeable', field: 'stakeable' },
|
|
36
|
-
{ id: 'getUnstaking', field: 'unstaking' },
|
|
37
|
-
{ id: 'getUnstaked', field: 'unstaked' },
|
|
38
|
-
{ id: 'getRewards', field: 'rewards' },
|
|
39
|
-
{ id: 'getFrozen', field: 'frozen' },
|
|
40
|
-
].map(getBalanceSelectorFactory)
|
|
41
|
-
|
|
42
|
-
export default getBalanceSelectors
|
|
1
|
+
export { default } from '../../lib/redux/selectors/get-balance-selectors.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/get-balances.js'
|
|
@@ -1,24 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import lodash from 'lodash'
|
|
3
|
-
import { createSelector } from 'reselect'
|
|
4
|
-
import { MY_STATE } from '@exodus/redux-dependency-injection'
|
|
5
|
-
|
|
6
|
-
const { memoize } = lodash // eslint-disable-line @exodus/basic-utils/prefer-basic-utils
|
|
7
|
-
|
|
8
|
-
const selectorFactory = (selfSelector) =>
|
|
9
|
-
createSelector(selfSelector, (balances) =>
|
|
10
|
-
memoize(
|
|
11
|
-
({ assetName, walletAccount }) => {
|
|
12
|
-
return balances[walletAccount]?.data[assetName]
|
|
13
|
-
},
|
|
14
|
-
({ assetName, walletAccount }) => [assetName, walletAccount].join('-')
|
|
15
|
-
)
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
const getBalancesSelectorDefinition = {
|
|
19
|
-
id: 'getBalances',
|
|
20
|
-
selectorFactory,
|
|
21
|
-
dependencies: [{ selector: MY_STATE }],
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export default getBalancesSelectorDefinition
|
|
1
|
+
export { default } from '../../lib/redux/selectors/get-balances.js'
|
|
@@ -1,43 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { createSelector } from 'reselect'
|
|
4
|
-
|
|
5
|
-
const { memoize } = lodash // eslint-disable-line @exodus/basic-utils/prefer-basic-utils
|
|
6
|
-
|
|
7
|
-
export const getUnconfirmedBalance = ({ asset, txs }) => {
|
|
8
|
-
let result = asset.currency.ZERO
|
|
9
|
-
|
|
10
|
-
for (const tx of txs) {
|
|
11
|
-
const isIncommingTX = !tx.sent
|
|
12
|
-
const isUnconfirmed = !tx.failed && tx.pending
|
|
13
|
-
|
|
14
|
-
if (isUnconfirmed && isIncommingTX) {
|
|
15
|
-
result = result.add(tx.coinAmount)
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return result
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const selectorFactory = (getAssetSelector, createAssetSourceSelector) =>
|
|
23
|
-
createSelector(getAssetSelector, createAssetSourceSelector, (getAsset, getTxs) =>
|
|
24
|
-
memoize(
|
|
25
|
-
({ assetName, walletAccount }) =>
|
|
26
|
-
getUnconfirmedBalance({
|
|
27
|
-
asset: getAsset(assetName),
|
|
28
|
-
txs: getTxs({ assetName, walletAccount }),
|
|
29
|
-
}),
|
|
30
|
-
({ assetName, walletAccount }) => [assetName, walletAccount].join('-')
|
|
31
|
-
)
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
const getUnconfirmedBalanceSelectorDefinition = {
|
|
35
|
-
id: 'getUnconfirmedBalance',
|
|
36
|
-
selectorFactory,
|
|
37
|
-
dependencies: [
|
|
38
|
-
{ module: 'assets', selector: 'getAsset' },
|
|
39
|
-
{ module: 'txLog', selector: 'createAssetSourceSelectorOld' },
|
|
40
|
-
],
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export default getUnconfirmedBalanceSelectorDefinition
|
|
1
|
+
export { default } from '../../lib/redux/selectors/get-unconfirmed-balance.js'
|
|
2
|
+
export { getUnconfirmedBalance } from '../../lib/redux/selectors/get-unconfirmed-balance.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../lib/redux/selectors/index.js'
|
package/redux/selectors/index.js
CHANGED
|
@@ -1,23 +1 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
12
|
-
export default [
|
|
13
|
-
byAssetSelectorDefinition,
|
|
14
|
-
createUnconfirmedBalanceSelectorDefinition,
|
|
15
|
-
getBalanceForFieldSelectorDefinition,
|
|
16
|
-
...getBalanceSelectors,
|
|
17
|
-
...createBalancesSelectors,
|
|
18
|
-
createBalancesSelectorDefinition,
|
|
19
|
-
getBalancesSelectorDefinition,
|
|
20
|
-
getUnconfirmedBalanceSelectorDefinition,
|
|
21
|
-
createFuelThresholdSelectorDefinition,
|
|
22
|
-
createRequiresFuelThresholdSelectorDefinition,
|
|
23
|
-
]
|
|
1
|
+
export { default } from '../../lib/redux/selectors/index.js'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../lib/report/index.js'
|