@exodus/balances 13.16.1 → 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 +6 -0
- 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 -497
- package/module/mockable-balances.d.ts +1 -0
- package/module/mockable-balances.js +1 -27
- package/package.json +23 -17
- 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 -8
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import lodash from 'lodash';
|
|
2
|
+
import { createSelector } from 'reselect';
|
|
3
|
+
import { MY_STATE } from '@exodus/redux-dependency-injection';
|
|
4
|
+
const { memoize } = lodash;
|
|
5
|
+
const EMPTY_BALANCES = Object.create(null);
|
|
6
|
+
const selectorFactory = (selfSelector) => memoize(({ assetName, walletAccount }) => createSelector(selfSelector, (balances) => balances[walletAccount]?.data[assetName] ??
|
|
7
|
+
EMPTY_BALANCES), ({ assetName, walletAccount }) => [assetName, walletAccount].join('-'));
|
|
8
|
+
const createBalancesSelectorDefinition = {
|
|
9
|
+
id: 'createBalances',
|
|
10
|
+
selectorFactory,
|
|
11
|
+
dependencies: [{ selector: MY_STATE }],
|
|
12
|
+
};
|
|
13
|
+
export default createBalancesSelectorDefinition;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Selector, CreateAssetSelector } from '../types.js';
|
|
2
|
+
import type NumberUnit from '@exodus/currency';
|
|
3
|
+
import lodash from 'lodash';
|
|
4
|
+
declare const createFuelThresholdSelectorDefinition: {
|
|
5
|
+
readonly id: "createFuelThreshold";
|
|
6
|
+
readonly selectorFactory: (getFeeDataSelector: Selector<(name: string) => {
|
|
7
|
+
fuelThreshold?: NumberUnit;
|
|
8
|
+
} | undefined>, createAssetSelector: CreateAssetSelector) => ((assetName: string) => import("reselect").OutputSelector<unknown, NumberUnit | null, (res1: (name: string) => {
|
|
9
|
+
fuelThreshold?: NumberUnit;
|
|
10
|
+
} | undefined, res2: import("../types.js").Asset | undefined) => NumberUnit | null>) & lodash.MemoizedFunction;
|
|
11
|
+
readonly dependencies: readonly [{
|
|
12
|
+
readonly module: "feeData";
|
|
13
|
+
readonly selector: "getData";
|
|
14
|
+
}, {
|
|
15
|
+
readonly module: "assets";
|
|
16
|
+
readonly selector: "createAssetSelector";
|
|
17
|
+
}];
|
|
18
|
+
};
|
|
19
|
+
export default createFuelThresholdSelectorDefinition;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import lodash from 'lodash';
|
|
2
|
+
import { createSelector } from 'reselect';
|
|
3
|
+
import { isNumberUnit } from '@exodus/currency';
|
|
4
|
+
const { memoize } = lodash;
|
|
5
|
+
const selectorFactory = (getFeeDataSelector, createAssetSelector) => memoize((assetName) => createSelector(getFeeDataSelector, createAssetSelector(assetName), (getFeeData, asset) => {
|
|
6
|
+
if (!asset) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const feeData = getFeeData(asset.baseAsset.name);
|
|
10
|
+
return isNumberUnit(feeData?.fuelThreshold)
|
|
11
|
+
? feeData.fuelThreshold
|
|
12
|
+
: asset.feeAsset.currency.ZERO;
|
|
13
|
+
}));
|
|
14
|
+
const createFuelThresholdSelectorDefinition = {
|
|
15
|
+
id: 'createFuelThreshold',
|
|
16
|
+
selectorFactory,
|
|
17
|
+
dependencies: [
|
|
18
|
+
{ module: 'feeData', selector: 'getData' },
|
|
19
|
+
{ module: 'assets', selector: 'createAssetSelector' },
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
export default createFuelThresholdSelectorDefinition;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Selector, Asset, GetBalance } from '../types.js';
|
|
2
|
+
declare const createRequiresFuelThresholdSelectorDefinition: {
|
|
3
|
+
readonly id: "createRequiresFuelThreshold";
|
|
4
|
+
readonly selectorFactory: (isTxLogLoadedSelector: Selector<(account: string) => boolean>, getAssetBalanceSelector: Selector<GetBalance>, assetsSelector: Selector<Record<string, Asset>>) => (source: {
|
|
5
|
+
assetName: string;
|
|
6
|
+
walletAccount: string;
|
|
7
|
+
}) => import("reselect").OutputSelector<unknown, boolean, (res1: (account: string) => boolean, res2: GetBalance, res3: Record<string, Asset>) => boolean>;
|
|
8
|
+
readonly dependencies: readonly [{
|
|
9
|
+
readonly module: "txLog";
|
|
10
|
+
readonly selector: "createIsWalletAccountLoadedSelectorOld";
|
|
11
|
+
}, {
|
|
12
|
+
readonly module: "balances";
|
|
13
|
+
readonly selector: "getAssetSourceBalanceSelector";
|
|
14
|
+
}, {
|
|
15
|
+
readonly module: "availableAssets";
|
|
16
|
+
readonly selector: "all";
|
|
17
|
+
}];
|
|
18
|
+
};
|
|
19
|
+
export default createRequiresFuelThresholdSelectorDefinition;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createSelector } from 'reselect';
|
|
2
|
+
import { memoizeByAssetSource } from '@exodus/core-selectors/utils/memoize.js';
|
|
3
|
+
const selectorFactory = (isTxLogLoadedSelector, getAssetBalanceSelector, assetsSelector) => memoizeByAssetSource(({ assetName, walletAccount }) => createSelector(isTxLogLoadedSelector, getAssetBalanceSelector, assetsSelector, (isTxLogLoaded, getAssetBalance, assets) => {
|
|
4
|
+
if (!isTxLogLoaded(walletAccount))
|
|
5
|
+
return false;
|
|
6
|
+
const asset = assets[assetName];
|
|
7
|
+
if (!asset) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const baseAssetName = asset.baseAsset.name;
|
|
11
|
+
const relatedAssets = Object.values(assets).filter((asset) => asset.baseAsset.name === baseAssetName && asset.name !== assetName);
|
|
12
|
+
return relatedAssets.some((token) => {
|
|
13
|
+
const balance = getAssetBalance({
|
|
14
|
+
assetName: token.name,
|
|
15
|
+
walletAccount,
|
|
16
|
+
});
|
|
17
|
+
return balance && !balance.isZero;
|
|
18
|
+
});
|
|
19
|
+
}));
|
|
20
|
+
const createRequiresFuelThresholdSelectorDefinition = {
|
|
21
|
+
id: 'createRequiresFuelThreshold',
|
|
22
|
+
selectorFactory,
|
|
23
|
+
dependencies: [
|
|
24
|
+
{ module: 'txLog', selector: 'createIsWalletAccountLoadedSelectorOld' },
|
|
25
|
+
{ module: 'balances', selector: 'getAssetSourceBalanceSelector' },
|
|
26
|
+
{ module: 'availableAssets', selector: 'all' },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
export default createRequiresFuelThresholdSelectorDefinition;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TxSet } from '@exodus/models';
|
|
2
|
+
import type { Source, Selector, CreateAssetSelector } from '../types.js';
|
|
3
|
+
import lodash from 'lodash';
|
|
4
|
+
declare const createUnconfirmedBalanceSelectorDefinition: {
|
|
5
|
+
readonly id: "createUnconfirmedBalance";
|
|
6
|
+
readonly selectorFactory: (createAssetSelector: CreateAssetSelector, createAssetSourceSelector: (source: Source) => Selector<TxSet>) => (({ assetName, walletAccount }: Source) => import("reselect").OutputSelector<unknown, import("@exodus/currency").default, (res1: import("../types.js").Asset | undefined, res2: TxSet) => import("@exodus/currency").default>) & lodash.MemoizedFunction;
|
|
7
|
+
readonly dependencies: readonly [{
|
|
8
|
+
readonly module: "assets";
|
|
9
|
+
readonly selector: "createAssetSelector";
|
|
10
|
+
}, {
|
|
11
|
+
readonly module: "txLog";
|
|
12
|
+
readonly selector: "createAssetSourceSelector";
|
|
13
|
+
}];
|
|
14
|
+
};
|
|
15
|
+
export default createUnconfirmedBalanceSelectorDefinition;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import lodash from 'lodash';
|
|
2
|
+
import { createSelector } from 'reselect';
|
|
3
|
+
import { getUnconfirmedBalance } from './get-unconfirmed-balance.js';
|
|
4
|
+
const { memoize } = lodash;
|
|
5
|
+
const selectorFactory = (createAssetSelector, createAssetSourceSelector) => memoize(({ assetName, walletAccount }) => createSelector(createAssetSelector(assetName), createAssetSourceSelector({ assetName, walletAccount }), (asset, txs) => getUnconfirmedBalance({ asset: asset, txs })), ({ assetName, walletAccount }) => [assetName, walletAccount].join('-'));
|
|
6
|
+
const createUnconfirmedBalanceSelectorDefinition = {
|
|
7
|
+
id: 'createUnconfirmedBalance',
|
|
8
|
+
selectorFactory,
|
|
9
|
+
dependencies: [
|
|
10
|
+
{ module: 'assets', selector: 'createAssetSelector' },
|
|
11
|
+
{ module: 'txLog', selector: 'createAssetSourceSelector' },
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
export default createUnconfirmedBalanceSelectorDefinition;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FieldSource, GetAsset, GetBalances } from '../types.js';
|
|
2
|
+
import lodash from 'lodash';
|
|
3
|
+
declare const getBalanceForFieldSelectorDefinition: {
|
|
4
|
+
readonly id: "getBalanceForField";
|
|
5
|
+
readonly resultFunction: (getAsset: GetAsset, getBalances: GetBalances) => (({ assetName, walletAccount, field }: FieldSource) => import("@exodus/currency").default | undefined) & lodash.MemoizedFunction;
|
|
6
|
+
readonly dependencies: readonly [{
|
|
7
|
+
readonly module: "assets";
|
|
8
|
+
readonly selector: "getAsset";
|
|
9
|
+
}, {
|
|
10
|
+
readonly module: "balances";
|
|
11
|
+
readonly selector: "getBalances";
|
|
12
|
+
}];
|
|
13
|
+
};
|
|
14
|
+
export default getBalanceForFieldSelectorDefinition;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import lodash from 'lodash';
|
|
2
|
+
import defaultConfig from '../../default-config.js';
|
|
3
|
+
const { memoize } = lodash;
|
|
4
|
+
const { balanceFields } = defaultConfig;
|
|
5
|
+
const resultFunction = (getAsset, getBalances) => memoize(({ assetName, walletAccount, field }) => {
|
|
6
|
+
if (!balanceFields.includes(field)) {
|
|
7
|
+
throw new Error(`Value '${field}' is not one of the valid fields '${balanceFields.join(', ')}'`);
|
|
8
|
+
}
|
|
9
|
+
return (getBalances({ assetName, walletAccount })?.[field] ?? getAsset(assetName)?.currency.ZERO);
|
|
10
|
+
}, ({ assetName, walletAccount, field }) => [assetName, walletAccount, field].join('-'));
|
|
11
|
+
const getBalanceForFieldSelectorDefinition = {
|
|
12
|
+
id: 'getBalanceForField',
|
|
13
|
+
resultFunction,
|
|
14
|
+
dependencies: [
|
|
15
|
+
{ module: 'assets', selector: 'getAsset' },
|
|
16
|
+
{ module: 'balances', selector: 'getBalances' },
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
export default getBalanceForFieldSelectorDefinition;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Source, GetBalanceForField } from '../types.js';
|
|
2
|
+
import lodash from 'lodash';
|
|
3
|
+
declare const getBalanceSelectorFactory: <const Id extends string>({ field, id, }: {
|
|
4
|
+
field: string;
|
|
5
|
+
id: Id;
|
|
6
|
+
}) => {
|
|
7
|
+
readonly id: Id;
|
|
8
|
+
readonly resultFunction: (getBalanceForField: GetBalanceForField) => (({ assetName, walletAccount }: Source) => import("@exodus/currency").default | undefined) & lodash.MemoizedFunction;
|
|
9
|
+
readonly dependencies: readonly [{
|
|
10
|
+
readonly module: "balances";
|
|
11
|
+
readonly selector: "getBalanceForField";
|
|
12
|
+
}];
|
|
13
|
+
};
|
|
14
|
+
declare const fieldDefinitions: readonly [{
|
|
15
|
+
readonly id: "getTotal";
|
|
16
|
+
readonly field: "total";
|
|
17
|
+
}, {
|
|
18
|
+
readonly id: "getBalance";
|
|
19
|
+
readonly field: "balance";
|
|
20
|
+
}, {
|
|
21
|
+
readonly id: "getSpendable";
|
|
22
|
+
readonly field: "spendable";
|
|
23
|
+
}, {
|
|
24
|
+
readonly id: "getSpendableBalance";
|
|
25
|
+
readonly field: "spendableBalance";
|
|
26
|
+
}, {
|
|
27
|
+
readonly id: "getUnconfirmedSent";
|
|
28
|
+
readonly field: "unconfirmedSent";
|
|
29
|
+
}, {
|
|
30
|
+
readonly id: "getUnconfirmedReceived";
|
|
31
|
+
readonly field: "unconfirmedReceived";
|
|
32
|
+
}, {
|
|
33
|
+
readonly id: "getUnspendable";
|
|
34
|
+
readonly field: "unspendable";
|
|
35
|
+
}, {
|
|
36
|
+
readonly id: "getWalletReserve";
|
|
37
|
+
readonly field: "walletReserve";
|
|
38
|
+
}, {
|
|
39
|
+
readonly id: "getNetworkReserve";
|
|
40
|
+
readonly field: "networkReserve";
|
|
41
|
+
}, {
|
|
42
|
+
readonly id: "getStaking";
|
|
43
|
+
readonly field: "staking";
|
|
44
|
+
}, {
|
|
45
|
+
readonly id: "getStaked";
|
|
46
|
+
readonly field: "staked";
|
|
47
|
+
}, {
|
|
48
|
+
readonly id: "getStakeable";
|
|
49
|
+
readonly field: "stakeable";
|
|
50
|
+
}, {
|
|
51
|
+
readonly id: "getUnstaking";
|
|
52
|
+
readonly field: "unstaking";
|
|
53
|
+
}, {
|
|
54
|
+
readonly id: "getUnstaked";
|
|
55
|
+
readonly field: "unstaked";
|
|
56
|
+
}, {
|
|
57
|
+
readonly id: "getRewards";
|
|
58
|
+
readonly field: "rewards";
|
|
59
|
+
}, {
|
|
60
|
+
readonly id: "getFrozen";
|
|
61
|
+
readonly field: "frozen";
|
|
62
|
+
}];
|
|
63
|
+
type FieldId = (typeof fieldDefinitions)[number]['id'];
|
|
64
|
+
type FieldDefinition = {
|
|
65
|
+
[Id in FieldId]: ReturnType<typeof getBalanceSelectorFactory<Id>>;
|
|
66
|
+
}[FieldId];
|
|
67
|
+
declare const getBalanceSelectors: FieldDefinition[];
|
|
68
|
+
export default getBalanceSelectors;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import lodash from 'lodash';
|
|
2
|
+
const { memoize } = lodash;
|
|
3
|
+
const createResultFunction = (field) => (getBalanceForField) => memoize(({ assetName, walletAccount }) => {
|
|
4
|
+
return getBalanceForField({ assetName, walletAccount, field });
|
|
5
|
+
}, ({ assetName, walletAccount }) => [assetName, walletAccount].join('-'));
|
|
6
|
+
const getBalanceSelectorFactory = ({ field, id, }) => {
|
|
7
|
+
return {
|
|
8
|
+
id,
|
|
9
|
+
resultFunction: createResultFunction(field),
|
|
10
|
+
dependencies: [{ module: 'balances', selector: 'getBalanceForField' }],
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
const fieldDefinitions = [
|
|
14
|
+
{ id: 'getTotal', field: 'total' },
|
|
15
|
+
{ id: 'getBalance', field: 'balance' },
|
|
16
|
+
{ id: 'getSpendable', field: 'spendable' },
|
|
17
|
+
{ id: 'getSpendableBalance', field: 'spendableBalance' },
|
|
18
|
+
{ id: 'getUnconfirmedSent', field: 'unconfirmedSent' },
|
|
19
|
+
{ id: 'getUnconfirmedReceived', field: 'unconfirmedReceived' },
|
|
20
|
+
{ id: 'getUnspendable', field: 'unspendable' },
|
|
21
|
+
{ id: 'getWalletReserve', field: 'walletReserve' },
|
|
22
|
+
{ id: 'getNetworkReserve', field: 'networkReserve' },
|
|
23
|
+
{ id: 'getStaking', field: 'staking' },
|
|
24
|
+
{ id: 'getStaked', field: 'staked' },
|
|
25
|
+
{ id: 'getStakeable', field: 'stakeable' },
|
|
26
|
+
{ id: 'getUnstaking', field: 'unstaking' },
|
|
27
|
+
{ id: 'getUnstaked', field: 'unstaked' },
|
|
28
|
+
{ id: 'getRewards', field: 'rewards' },
|
|
29
|
+
{ id: 'getFrozen', field: 'frozen' },
|
|
30
|
+
];
|
|
31
|
+
const getBalanceSelectors = fieldDefinitions.map(getBalanceSelectorFactory);
|
|
32
|
+
export default getBalanceSelectors;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Source, Selector, State } from '../types.js';
|
|
2
|
+
import lodash from 'lodash';
|
|
3
|
+
declare const getBalancesSelectorDefinition: {
|
|
4
|
+
readonly id: "getBalances";
|
|
5
|
+
readonly selectorFactory: (selfSelector: Selector<State>) => import("reselect").OutputSelector<unknown, (({ assetName, walletAccount }: Source) => import("../../module/types.js").FieldBalances | undefined) & lodash.MemoizedFunction, (res: State) => (({ assetName, walletAccount }: Source) => import("../../module/types.js").FieldBalances | undefined) & lodash.MemoizedFunction>;
|
|
6
|
+
readonly dependencies: readonly [{
|
|
7
|
+
readonly selector: "$state";
|
|
8
|
+
}];
|
|
9
|
+
};
|
|
10
|
+
export default getBalancesSelectorDefinition;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import lodash from 'lodash';
|
|
2
|
+
import { createSelector } from 'reselect';
|
|
3
|
+
import { MY_STATE } from '@exodus/redux-dependency-injection';
|
|
4
|
+
const { memoize } = lodash;
|
|
5
|
+
const selectorFactory = (selfSelector) => createSelector(selfSelector, (balances) => memoize(({ assetName, walletAccount }) => {
|
|
6
|
+
return (balances[walletAccount]?.data[assetName]);
|
|
7
|
+
}, ({ assetName, walletAccount }) => [assetName, walletAccount].join('-')));
|
|
8
|
+
const getBalancesSelectorDefinition = {
|
|
9
|
+
id: 'getBalances',
|
|
10
|
+
selectorFactory,
|
|
11
|
+
dependencies: [{ selector: MY_STATE }],
|
|
12
|
+
};
|
|
13
|
+
export default getBalancesSelectorDefinition;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TxSet } from '@exodus/models';
|
|
2
|
+
import type { Source, Selector, Asset, GetAsset, GetTxs } from '../types.js';
|
|
3
|
+
import lodash from 'lodash';
|
|
4
|
+
export declare const getUnconfirmedBalance: ({ asset, txs }: {
|
|
5
|
+
asset: Asset;
|
|
6
|
+
txs: TxSet;
|
|
7
|
+
}) => import("@exodus/currency").default;
|
|
8
|
+
declare const getUnconfirmedBalanceSelectorDefinition: {
|
|
9
|
+
readonly id: "getUnconfirmedBalance";
|
|
10
|
+
readonly selectorFactory: (getAssetSelector: Selector<GetAsset>, createAssetSourceSelector: Selector<GetTxs>) => import("reselect").OutputSelector<unknown, (({ assetName, walletAccount }: Source) => import("@exodus/currency").default) & lodash.MemoizedFunction, (res1: GetAsset, res2: GetTxs) => (({ assetName, walletAccount }: Source) => import("@exodus/currency").default) & lodash.MemoizedFunction>;
|
|
11
|
+
readonly dependencies: readonly [{
|
|
12
|
+
readonly module: "assets";
|
|
13
|
+
readonly selector: "getAsset";
|
|
14
|
+
}, {
|
|
15
|
+
readonly module: "txLog";
|
|
16
|
+
readonly selector: "createAssetSourceSelectorOld";
|
|
17
|
+
}];
|
|
18
|
+
};
|
|
19
|
+
export default getUnconfirmedBalanceSelectorDefinition;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import lodash from 'lodash';
|
|
2
|
+
import { createSelector } from 'reselect';
|
|
3
|
+
const { memoize } = lodash;
|
|
4
|
+
export const getUnconfirmedBalance = ({ asset, txs }) => {
|
|
5
|
+
let result = asset.currency.ZERO;
|
|
6
|
+
for (const tx of txs) {
|
|
7
|
+
const isIncommingTX = !tx.sent;
|
|
8
|
+
const isUnconfirmed = !tx.failed && tx.pending;
|
|
9
|
+
if (isUnconfirmed && isIncommingTX) {
|
|
10
|
+
result = result.add(tx.coinAmount);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
const selectorFactory = (getAssetSelector, createAssetSourceSelector) => createSelector(getAssetSelector, createAssetSourceSelector, (getAsset, getTxs) => memoize(({ assetName, walletAccount }) => getUnconfirmedBalance({
|
|
16
|
+
asset: getAsset(assetName),
|
|
17
|
+
txs: getTxs({ assetName, walletAccount }),
|
|
18
|
+
}), ({ assetName, walletAccount }) => [assetName, walletAccount].join('-')));
|
|
19
|
+
const getUnconfirmedBalanceSelectorDefinition = {
|
|
20
|
+
id: 'getUnconfirmedBalance',
|
|
21
|
+
selectorFactory,
|
|
22
|
+
dependencies: [
|
|
23
|
+
{ module: 'assets', selector: 'getAsset' },
|
|
24
|
+
{ module: 'txLog', selector: 'createAssetSourceSelectorOld' },
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
export default getUnconfirmedBalanceSelectorDefinition;
|