@otoplo/wallet-common 0.2.1 → 0.4.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/dist/index.js +1798 -1985
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/persistence/index.d.ts +1 -1
- package/dist/types/persistence/index.d.ts.map +1 -1
- package/dist/types/persistence/{datastore/db.d.ts → repository.d.ts} +8 -5
- package/dist/types/persistence/repository.d.ts.map +1 -0
- package/dist/types/persistence/wallet-db.d.ts +17 -25
- package/dist/types/persistence/wallet-db.d.ts.map +1 -1
- package/dist/types/services/asset.d.ts +6 -0
- package/dist/types/services/asset.d.ts.map +1 -1
- package/dist/types/services/cache.d.ts +0 -2
- package/dist/types/services/cache.d.ts.map +1 -1
- package/dist/types/services/discovery.d.ts +3 -3
- package/dist/types/services/discovery.d.ts.map +1 -1
- package/dist/types/services/index.d.ts +1 -0
- package/dist/types/services/index.d.ts.map +1 -1
- package/dist/types/services/key.d.ts +3 -0
- package/dist/types/services/key.d.ts.map +1 -1
- package/dist/types/services/market.d.ts +33 -0
- package/dist/types/services/market.d.ts.map +1 -0
- package/dist/types/services/rostrum.d.ts +5 -3
- package/dist/types/services/rostrum.d.ts.map +1 -1
- package/dist/types/services/transaction.d.ts.map +1 -1
- package/dist/types/services/wallet.d.ts +13 -6
- package/dist/types/services/wallet.d.ts.map +1 -1
- package/dist/types/types/db.types.d.ts +4 -0
- package/dist/types/types/db.types.d.ts.map +1 -1
- package/dist/types/utils/asset.d.ts +1 -2
- package/dist/types/utils/asset.d.ts.map +1 -1
- package/dist/types/utils/market.d.ts +0 -3
- package/dist/types/utils/market.d.ts.map +1 -1
- package/package.json +13 -17
- package/src/index.ts +0 -1
- package/src/persistence/index.ts +1 -1
- package/src/persistence/{datastore/db.ts → repository.ts} +9 -5
- package/src/persistence/wallet-db.ts +95 -91
- package/src/services/asset.ts +60 -26
- package/src/services/cache.ts +4 -14
- package/src/services/discovery.ts +54 -42
- package/src/services/index.ts +2 -1
- package/src/services/key.ts +8 -2
- package/src/services/market.ts +143 -0
- package/src/services/rostrum.ts +14 -6
- package/src/services/transaction.ts +3 -10
- package/src/services/wallet.ts +66 -42
- package/src/types/db.types.ts +6 -1
- package/src/utils/asset.ts +2 -21
- package/src/utils/market.ts +0 -54
- package/dist/types/persistence/datastore/db.d.ts.map +0 -1
- package/dist/types/persistence/datastore/index.d.ts +0 -3
- package/dist/types/persistence/datastore/index.d.ts.map +0 -1
- package/dist/types/persistence/datastore/kv.d.ts +0 -34
- package/dist/types/persistence/datastore/kv.d.ts.map +0 -1
- package/dist/types/state/hooks.d.ts +0 -17
- package/dist/types/state/hooks.d.ts.map +0 -1
- package/dist/types/state/index.d.ts +0 -4
- package/dist/types/state/index.d.ts.map +0 -1
- package/dist/types/state/slices/auth.d.ts +0 -17
- package/dist/types/state/slices/auth.d.ts.map +0 -1
- package/dist/types/state/slices/dapp.d.ts +0 -29
- package/dist/types/state/slices/dapp.d.ts.map +0 -1
- package/dist/types/state/slices/index.d.ts +0 -7
- package/dist/types/state/slices/index.d.ts.map +0 -1
- package/dist/types/state/slices/loader.d.ts +0 -15
- package/dist/types/state/slices/loader.d.ts.map +0 -1
- package/dist/types/state/slices/market.d.ts +0 -54
- package/dist/types/state/slices/market.d.ts.map +0 -1
- package/dist/types/state/slices/notifications.d.ts +0 -142
- package/dist/types/state/slices/notifications.d.ts.map +0 -1
- package/dist/types/state/slices/status.d.ts +0 -35
- package/dist/types/state/slices/status.d.ts.map +0 -1
- package/dist/types/state/slices/wallet.d.ts +0 -833
- package/dist/types/state/slices/wallet.d.ts.map +0 -1
- package/dist/types/state/store.d.ts +0 -26
- package/dist/types/state/store.d.ts.map +0 -1
- package/src/persistence/datastore/index.ts +0 -2
- package/src/persistence/datastore/kv.ts +0 -129
- package/src/state/hooks.ts +0 -47
- package/src/state/index.ts +0 -3
- package/src/state/slices/auth.ts +0 -28
- package/src/state/slices/dapp.ts +0 -32
- package/src/state/slices/index.ts +0 -6
- package/src/state/slices/loader.ts +0 -31
- package/src/state/slices/market.ts +0 -47
- package/src/state/slices/notifications.ts +0 -44
- package/src/state/slices/status.ts +0 -41
- package/src/state/slices/wallet.ts +0 -107
- package/src/state/store.ts +0 -27
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../src/state/slices/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { authReducer } from './slices/auth';
|
|
2
|
-
import { dappModalReducer } from './slices/dapp';
|
|
3
|
-
import { loaderReducer } from './slices/loader';
|
|
4
|
-
import { marketReducer } from './slices/market';
|
|
5
|
-
import { notificationsReducer } from './slices/notifications';
|
|
6
|
-
import { statusReducer } from './slices/status';
|
|
7
|
-
import { walletReducer } from './slices/wallet';
|
|
8
|
-
export declare const sharedReducers: {
|
|
9
|
-
loader: import('redux').Reducer<import('./slices').LoaderState>;
|
|
10
|
-
dapp: import('redux').Reducer<import('./slices').DappModalState>;
|
|
11
|
-
status: import('redux').Reducer<import('./slices').StatusState>;
|
|
12
|
-
wallet: import('redux').Reducer<import('./slices').WalletState>;
|
|
13
|
-
auth: import('redux').Reducer<import('./slices').AuthState>;
|
|
14
|
-
notifications: import('redux').Reducer<import('./slices').NotificationsState>;
|
|
15
|
-
market: import('redux').Reducer<import('./slices/market').MarketState>;
|
|
16
|
-
};
|
|
17
|
-
export type SharedState = {
|
|
18
|
-
loader: ReturnType<typeof loaderReducer>;
|
|
19
|
-
dapp: ReturnType<typeof dappModalReducer>;
|
|
20
|
-
status: ReturnType<typeof statusReducer>;
|
|
21
|
-
wallet: ReturnType<typeof walletReducer>;
|
|
22
|
-
auth: ReturnType<typeof authReducer>;
|
|
23
|
-
notifications: ReturnType<typeof notificationsReducer>;
|
|
24
|
-
market: ReturnType<typeof marketReducer>;
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/state/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,cAAc;;;;;;;;CAQ1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IACzC,IAAI,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC1C,MAAM,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IACzC,MAAM,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IACzC,IAAI,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACrC,aAAa,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IACvD,MAAM,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;CAC1C,CAAC"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import type { RostrumParams } from "../../types/rostrum.types";
|
|
2
|
-
import { isNullOrEmpty, isTestnet } from "../../utils/common";
|
|
3
|
-
|
|
4
|
-
export abstract class KVStore {
|
|
5
|
-
|
|
6
|
-
public abstract getValue(key: string): Promise<string | null>;
|
|
7
|
-
public abstract setValue(key: string, value: string): Promise<void>;
|
|
8
|
-
public abstract removeValue(key: string): Promise<void>;
|
|
9
|
-
public abstract clearData(): Promise<void>;
|
|
10
|
-
|
|
11
|
-
protected getPrefix(): string {
|
|
12
|
-
return isTestnet() ? 'testnet-' : '';
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
public async getEncryptedSeed(): Promise<string | null> {
|
|
16
|
-
return this.getValue("seed");
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public async saveEncryptedSeed(seed: string): Promise<void> {
|
|
20
|
-
return this.setValue('seed', seed);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public async getVersionCode(): Promise<string | null> {
|
|
24
|
-
return this.getValue("version-code");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public async setVersionCode(code: string): Promise<void> {
|
|
28
|
-
return this.setValue('version-code', code);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public async getReleaseNumber(): Promise<string | null> {
|
|
32
|
-
return this.getValue("release-number");
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public async setReleaseNumber(release: string): Promise<void> {
|
|
36
|
-
return this.setValue('release-number', release);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public async getRostrumParams(): Promise<RostrumParams | undefined> {
|
|
40
|
-
const params = await this.getValue(this.getPrefix() + "rostrum-params");
|
|
41
|
-
if (params) {
|
|
42
|
-
return JSON.parse(params);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
public async saveRostrumParams(params: RostrumParams): Promise<void> {
|
|
47
|
-
return this.setValue(this.getPrefix() + "rostrum-params", JSON.stringify(params));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public async removeRostrumParams(): Promise<void> {
|
|
51
|
-
return this.removeValue(this.getPrefix() + "rostrum-params");
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
public async setHideZeroTokenConfig(hide: boolean): Promise<void> {
|
|
55
|
-
return this.setValue("zero-tokens", JSON.stringify(hide));
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
public async getHideZeroTokenConfig(): Promise<boolean> {
|
|
59
|
-
const hide = await this.getValue("zero-tokens");
|
|
60
|
-
return hide === "true";
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public async setHideZeroVaultsConfig(hide: boolean): Promise<void> {
|
|
64
|
-
return this.setValue("zero-vaults", JSON.stringify(hide));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
public async getHideZeroVaultsConfig(): Promise<boolean> {
|
|
68
|
-
const hide = await this.getValue("zero-vaults");
|
|
69
|
-
return hide === "true";
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
public async getSelectedCurrency(): Promise<string> {
|
|
73
|
-
const value = await this.getValue('selectedCurrency');
|
|
74
|
-
return value || 'usd';
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
public async setSelectedCurrency(currency: string): Promise<void> {
|
|
78
|
-
return this.setValue('selectedCurrency', currency);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
public async getUseBiometric(): Promise<boolean> {
|
|
82
|
-
const value = await this.getValue('biometrics');
|
|
83
|
-
return value === "true";
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
public async setUseBiometric(useBiometric: boolean): Promise<void> {
|
|
87
|
-
return this.setValue('biometrics', JSON.stringify(useBiometric));
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
public async getRequireAuth(): Promise<boolean> {
|
|
91
|
-
const value = await this.getValue('auth');
|
|
92
|
-
return isNullOrEmpty(value) || value === "true";
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public async setRequireAuth(requireAuth: boolean): Promise<void> {
|
|
96
|
-
await this.setValue('auth', JSON.stringify(requireAuth));
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
public async getReleaseNotesTime(): Promise<number | undefined> {
|
|
100
|
-
const value = await this.getValue('show-notes');
|
|
101
|
-
return value ? Number(value) : undefined;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
public async setReleaseNotesTime(time: string): Promise<void> {
|
|
105
|
-
if (isNullOrEmpty(time)) {
|
|
106
|
-
await this.removeValue('show-notes');
|
|
107
|
-
} else {
|
|
108
|
-
await this.setValue('show-notes', time);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
public async getIsTestnet(): Promise<boolean> {
|
|
113
|
-
const value = await this.getValue('testnet');
|
|
114
|
-
return value === "1";
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
public async setIsTestnet(isTestnet: boolean): Promise<void> {
|
|
118
|
-
await this.setValue('testnet', isTestnet ? "1" : "0");
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
public async getAutoLockSeconds(): Promise<number> {
|
|
122
|
-
const value = await this.getValue('auto-lock');
|
|
123
|
-
return value ? parseInt(value) : 60;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
public async setAutoLockSeconds(autoLock: number): Promise<void> {
|
|
127
|
-
await this.setValue('auto-lock', `${autoLock}`);
|
|
128
|
-
}
|
|
129
|
-
}
|
package/src/state/hooks.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { useSelector } from "react-redux";
|
|
2
|
-
import type { SharedState } from "./store";
|
|
3
|
-
import { createSelector } from "@reduxjs/toolkit";
|
|
4
|
-
import type { AuthState } from "./slices";
|
|
5
|
-
import type { Account, AppNotification, Balance, MarketData, SessionInfo, VaultInfo } from "../types";
|
|
6
|
-
|
|
7
|
-
const useSharedSelector = useSelector.withTypes<SharedState>();
|
|
8
|
-
|
|
9
|
-
export const useAuth = (): AuthState => useSharedSelector(state => state.auth);
|
|
10
|
-
|
|
11
|
-
export const useMarketData = (tokenId: string): MarketData => useSharedSelector(state => state.market.data[tokenId]);
|
|
12
|
-
|
|
13
|
-
export const useBlockHeight = (): number => useSharedSelector(state => state.status.height);
|
|
14
|
-
|
|
15
|
-
export const useAccount = (id: number): Account => useSharedSelector(state => state.wallet.accounts[id]);
|
|
16
|
-
export const useSelectedAccount = (): number => useSharedSelector(state => state.wallet.selectedAccount);
|
|
17
|
-
export const useLastAccountId = (): number => useSharedSelector(state => Math.max(...Object.keys(state.wallet.accounts).map(Number)));
|
|
18
|
-
|
|
19
|
-
export const useMainReceiveAddress = (account: number): string => useSharedSelector(state => state.wallet.accounts[account].address);
|
|
20
|
-
|
|
21
|
-
export const useWalletBalance = (account: number): Balance => useSharedSelector(state => state.wallet.accounts[account].balance);
|
|
22
|
-
export const useTokenBalance = (account: number, tokenIdHex: string): Balance =>
|
|
23
|
-
useSharedSelector(state => state.wallet.accounts[account].tokensBalance[tokenIdHex]);
|
|
24
|
-
|
|
25
|
-
export const useDAppSession = (account: number, session: string): SessionInfo =>
|
|
26
|
-
useSharedSelector(state => state.wallet.accounts[account].sessions[session]);
|
|
27
|
-
|
|
28
|
-
export const useVaults = (): Record<string, VaultInfo> => useSharedSelector(state => state.wallet.vaults);
|
|
29
|
-
|
|
30
|
-
const selectWalletNotificationsArray = createSelector(
|
|
31
|
-
[(state: SharedState) => state.notifications.wallet],
|
|
32
|
-
(wallet) => Object.values(wallet).sort((a, b) => b.createdAt - a.createdAt)
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
const selectWeb3NotificationsArray = createSelector(
|
|
36
|
-
[(state: SharedState) => state.notifications.web3],
|
|
37
|
-
(web3) => Object.values(web3).sort((a, b) => b.createdAt - a.createdAt)
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
const selectAllNotificationsArray = createSelector(
|
|
41
|
-
[selectWalletNotificationsArray, selectWeb3NotificationsArray],
|
|
42
|
-
(wallet, web3) => [...wallet, ...web3].sort((a, b) => b.createdAt - a.createdAt)
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
export const useWalletNotifications = (): AppNotification[] => useSharedSelector(selectWalletNotificationsArray);
|
|
46
|
-
export const useWeb3Notifications = (): AppNotification[] => useSharedSelector(selectWeb3NotificationsArray);
|
|
47
|
-
export const useAllNotifications = (): AppNotification[] => useSharedSelector(selectAllNotificationsArray);
|
package/src/state/index.ts
DELETED
package/src/state/slices/auth.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
-
import { createSlice } from "@reduxjs/toolkit";
|
|
3
|
-
|
|
4
|
-
export interface AuthState {
|
|
5
|
-
isWalletExist: boolean;
|
|
6
|
-
isAuthorized: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const initialState: AuthState = {
|
|
10
|
-
isWalletExist: false,
|
|
11
|
-
isAuthorized: false,
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const authSlice = createSlice({
|
|
15
|
-
name: 'auth',
|
|
16
|
-
initialState,
|
|
17
|
-
reducers: {
|
|
18
|
-
setWalletExist: (state, action: PayloadAction<boolean>) => {
|
|
19
|
-
state.isWalletExist = action.payload;
|
|
20
|
-
},
|
|
21
|
-
setAuthorized: (state, action: PayloadAction<boolean>) => {
|
|
22
|
-
state.isAuthorized = action.payload;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
export const authActions = authSlice.actions;
|
|
28
|
-
export const authReducer = authSlice.reducer;
|
package/src/state/slices/dapp.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
-
import { createSlice } from "@reduxjs/toolkit";
|
|
3
|
-
import type { SessionRequestType } from "../../utils";
|
|
4
|
-
import type { DappRpcRequest } from "../../types";
|
|
5
|
-
|
|
6
|
-
export interface DappModalState {
|
|
7
|
-
modalType: SessionRequestType | null;
|
|
8
|
-
currentRequest: DappRpcRequest | null;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const initialState: DappModalState = {
|
|
12
|
-
modalType: null,
|
|
13
|
-
currentRequest: null,
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const dappModalSlice = createSlice({
|
|
17
|
-
name: 'dappModal',
|
|
18
|
-
initialState,
|
|
19
|
-
reducers: {
|
|
20
|
-
showRequest(state, action: PayloadAction<DappRpcRequest>) {
|
|
21
|
-
state.modalType = action.payload.type;
|
|
22
|
-
state.currentRequest = action.payload;
|
|
23
|
-
},
|
|
24
|
-
clear(state) {
|
|
25
|
-
state.modalType = null;
|
|
26
|
-
state.currentRequest = null;
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
export const dappModalActions = dappModalSlice.actions;
|
|
32
|
-
export const dappModalReducer = dappModalSlice.reducer;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
-
import { createSlice } from "@reduxjs/toolkit";
|
|
3
|
-
|
|
4
|
-
export interface LoaderState {
|
|
5
|
-
counter: number
|
|
6
|
-
loading: boolean;
|
|
7
|
-
text?: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const initState: LoaderState = {
|
|
11
|
-
counter: 0,
|
|
12
|
-
loading: false
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const loaderSlice = createSlice({
|
|
16
|
-
name: 'loader',
|
|
17
|
-
initialState: initState,
|
|
18
|
-
reducers: {
|
|
19
|
-
setLoader: (state, action: PayloadAction<Omit<LoaderState, 'counter'>>) => {
|
|
20
|
-
const counter = action.payload.loading
|
|
21
|
-
? state.counter + 1
|
|
22
|
-
: Math.max(0, state.counter - 1);
|
|
23
|
-
state.counter = counter;
|
|
24
|
-
state.loading = counter > 0;
|
|
25
|
-
state.text = action.payload.text;
|
|
26
|
-
},
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
export const loaderActions = loaderSlice.actions;
|
|
31
|
-
export const loaderReducer = loaderSlice.reducer;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
-
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
|
|
3
|
-
import type { MarketData } from "../../types";
|
|
4
|
-
import type { CurrencyCode} from "../../utils";
|
|
5
|
-
import { getMarketData } from "../../utils";
|
|
6
|
-
import type { SharedState } from "../store";
|
|
7
|
-
|
|
8
|
-
export interface MarketState {
|
|
9
|
-
currency: CurrencyCode;
|
|
10
|
-
data: Record<string, MarketData>;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const initialState: MarketState = {
|
|
14
|
-
currency: 'usd',
|
|
15
|
-
data: {}
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const updateMarketData = createAsyncThunk('market/updateMarketData', async (_, thunkAPI) => {
|
|
19
|
-
const state = thunkAPI.getState() as SharedState;
|
|
20
|
-
return await getMarketData(state.market.currency);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
const marketSlice = createSlice({
|
|
24
|
-
name: 'market',
|
|
25
|
-
initialState,
|
|
26
|
-
reducers: {
|
|
27
|
-
setCurrency: (state, action: PayloadAction<CurrencyCode>) => {
|
|
28
|
-
state.currency = action.payload;
|
|
29
|
-
},
|
|
30
|
-
setMarketData: (state, action: PayloadAction<Record<string, MarketData>>) => {
|
|
31
|
-
state.data = action.payload;
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
extraReducers: (builder) => {
|
|
35
|
-
builder
|
|
36
|
-
.addCase(updateMarketData.fulfilled, (state, action) => {
|
|
37
|
-
state.data = action.payload;
|
|
38
|
-
})
|
|
39
|
-
.addCase(updateMarketData.rejected, (_, action) => {
|
|
40
|
-
console.error(action.error.message);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
export const marketThunks = { updateMarketData };
|
|
46
|
-
export const marketActions = marketSlice.actions;
|
|
47
|
-
export const marketReducer = marketSlice.reducer;
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
-
import { createSlice } from "@reduxjs/toolkit";
|
|
3
|
-
import type { AppNotification } from "../../types";
|
|
4
|
-
|
|
5
|
-
export interface NotificationsState {
|
|
6
|
-
wallet: Record<string, AppNotification>;
|
|
7
|
-
web3: Record<string, AppNotification>;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const initialState: NotificationsState = {
|
|
11
|
-
wallet: {},
|
|
12
|
-
web3: {}
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const notificationsSlice = createSlice({
|
|
16
|
-
name: 'notifications',
|
|
17
|
-
initialState,
|
|
18
|
-
reducers: {
|
|
19
|
-
addNotification: (state, action: PayloadAction<AppNotification>) => {
|
|
20
|
-
if (action.payload.type == 'wallet') {
|
|
21
|
-
state.wallet[action.payload.id] = action.payload;
|
|
22
|
-
} else if (action.payload.type == 'web3') {
|
|
23
|
-
state.web3[action.payload.id] = action.payload;
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
removeNotification: (state, action: PayloadAction<string>) => {
|
|
27
|
-
delete state.wallet[action.payload];
|
|
28
|
-
delete state.web3[action.payload];
|
|
29
|
-
},
|
|
30
|
-
clearAll: (state, action: PayloadAction<'wallet' | 'web3' | 'all'>) => {
|
|
31
|
-
if (action.payload === 'wallet') {
|
|
32
|
-
state.wallet = {};
|
|
33
|
-
} else if (action.payload === 'web3') {
|
|
34
|
-
state.web3 = {};
|
|
35
|
-
} else if (action.payload === 'all') {
|
|
36
|
-
state.wallet = {};
|
|
37
|
-
state.web3 = {};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
export const notificationsActions = notificationsSlice.actions;
|
|
44
|
-
export const notificationsReducer = notificationsSlice.reducer;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
-
import { createSlice } from "@reduxjs/toolkit";
|
|
3
|
-
|
|
4
|
-
export interface StatusState {
|
|
5
|
-
status: "Online" | "Offline";
|
|
6
|
-
height: number;
|
|
7
|
-
hasNetwork: boolean;
|
|
8
|
-
isSuspended: boolean;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const initialState: StatusState = {
|
|
12
|
-
status: "Offline",
|
|
13
|
-
height: 0,
|
|
14
|
-
hasNetwork: true,
|
|
15
|
-
isSuspended: false,
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const statusSlice = createSlice({
|
|
19
|
-
name: 'status',
|
|
20
|
-
initialState,
|
|
21
|
-
reducers: {
|
|
22
|
-
setHeight: (state, action: PayloadAction<number>) => {
|
|
23
|
-
if (action.payload > 0) {
|
|
24
|
-
state.status = "Online";
|
|
25
|
-
}
|
|
26
|
-
state.height = action.payload;
|
|
27
|
-
},
|
|
28
|
-
setOffline: (state) => {
|
|
29
|
-
state.status = "Offline";
|
|
30
|
-
},
|
|
31
|
-
setHasNetwork: (state, action: PayloadAction<boolean>) => {
|
|
32
|
-
state.hasNetwork = action.payload;
|
|
33
|
-
},
|
|
34
|
-
setIsSuspended: (state, action: PayloadAction<boolean>) => {
|
|
35
|
-
state.isSuspended = action.payload;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
export const statusActions = statusSlice.actions;
|
|
41
|
-
export const statusReducer = statusSlice.reducer;
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import type { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
-
import { createSlice } from "@reduxjs/toolkit";
|
|
3
|
-
import type { Account, Balance, SessionInfo, VaultInfo } from "../../types";
|
|
4
|
-
import { MAIN_WALLET_ID } from "../../utils";
|
|
5
|
-
|
|
6
|
-
interface AddSessionPayload {
|
|
7
|
-
accountId: number;
|
|
8
|
-
sessionInfo: SessionInfo;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
interface RemoveSessionPayload {
|
|
12
|
-
accountId: number;
|
|
13
|
-
sessionId: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface WalletState {
|
|
17
|
-
isAuthorized: boolean;
|
|
18
|
-
selectedAccount: number;
|
|
19
|
-
accounts: Record<number, Account>;
|
|
20
|
-
vaults: Record<string, VaultInfo>;
|
|
21
|
-
sync: boolean;
|
|
22
|
-
initLoad: boolean;
|
|
23
|
-
txUpdateTrigger: number;
|
|
24
|
-
nftsUpdateTrigger: number;
|
|
25
|
-
tokensUpdateTrigger: number;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const initialState: WalletState = {
|
|
29
|
-
isAuthorized: false,
|
|
30
|
-
selectedAccount: MAIN_WALLET_ID,
|
|
31
|
-
accounts: {
|
|
32
|
-
"-1": {
|
|
33
|
-
id: MAIN_WALLET_ID,
|
|
34
|
-
name: 'Main Wallet',
|
|
35
|
-
address: '',
|
|
36
|
-
balance: {confirmed: "0", unconfirmed: "0"},
|
|
37
|
-
tokensBalance: {},
|
|
38
|
-
sessions: {}
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
vaults: {},
|
|
42
|
-
sync: false,
|
|
43
|
-
initLoad: true,
|
|
44
|
-
txUpdateTrigger: 0,
|
|
45
|
-
nftsUpdateTrigger: 0,
|
|
46
|
-
tokensUpdateTrigger: 0
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const walletSlice = createSlice({
|
|
50
|
-
name: 'wallet',
|
|
51
|
-
initialState,
|
|
52
|
-
reducers: {
|
|
53
|
-
setInitLoad: (state, action: PayloadAction<boolean>) => {
|
|
54
|
-
state.initLoad = action.payload;
|
|
55
|
-
},
|
|
56
|
-
setSelectedAccount: (state, action: PayloadAction<number>) => {
|
|
57
|
-
state.selectedAccount = action.payload;
|
|
58
|
-
},
|
|
59
|
-
setSync: (state, action: PayloadAction<boolean>) => {
|
|
60
|
-
state.sync = action.payload;
|
|
61
|
-
},
|
|
62
|
-
setVault: (state, action: PayloadAction<VaultInfo>) => {
|
|
63
|
-
state.vaults[action.payload.address] = action.payload;
|
|
64
|
-
},
|
|
65
|
-
setVaultBalance: (state, action: PayloadAction<{ address: string, balance: Balance }>) => {
|
|
66
|
-
state.vaults[action.payload.address].balance = action.payload.balance;
|
|
67
|
-
},
|
|
68
|
-
setAccount: (state, action: PayloadAction<Account>) => {
|
|
69
|
-
state.accounts[action.payload.id] = action.payload;
|
|
70
|
-
},
|
|
71
|
-
setMainAddress: (state, action: PayloadAction<string>) => {
|
|
72
|
-
state.accounts[MAIN_WALLET_ID].address = action.payload;
|
|
73
|
-
},
|
|
74
|
-
setAccountBalance: (state, action: PayloadAction<{ id: number, balance: Balance, tokensBalance: Record<string, Balance> }>) => {
|
|
75
|
-
state.accounts[action.payload.id].balance = action.payload.balance;
|
|
76
|
-
state.accounts[action.payload.id].tokensBalance = action.payload.tokensBalance;
|
|
77
|
-
},
|
|
78
|
-
setAccountName: (state, action: PayloadAction<{ id: number, name: string }>) => {
|
|
79
|
-
state.accounts[action.payload.id].name = action.payload.name;
|
|
80
|
-
},
|
|
81
|
-
refreshTxs: (state) => {
|
|
82
|
-
state.txUpdateTrigger++;
|
|
83
|
-
},
|
|
84
|
-
refreshNfts: (state) => {
|
|
85
|
-
state.nftsUpdateTrigger++;
|
|
86
|
-
},
|
|
87
|
-
refreshTokens: (state) => {
|
|
88
|
-
state.tokensUpdateTrigger++;
|
|
89
|
-
},
|
|
90
|
-
addSession(state, action: PayloadAction<AddSessionPayload>) {
|
|
91
|
-
const { accountId, sessionInfo } = action.payload;
|
|
92
|
-
state.accounts[accountId].sessions[sessionInfo.details.sessionId] = sessionInfo;
|
|
93
|
-
},
|
|
94
|
-
removeSession(state, action: PayloadAction<RemoveSessionPayload>) {
|
|
95
|
-
const { accountId, sessionId } = action.payload;
|
|
96
|
-
if (state.accounts[accountId].sessions[sessionId]) {
|
|
97
|
-
delete state.accounts[accountId].sessions[sessionId];
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
clearSessions(state, action: PayloadAction<{ accountId: number }>) {
|
|
101
|
-
state.accounts[action.payload.accountId].sessions = {};
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
export const walletActions = walletSlice.actions;
|
|
107
|
-
export const walletReducer = walletSlice.reducer;
|
package/src/state/store.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { authReducer } from "./slices/auth";
|
|
2
|
-
import { dappModalReducer } from "./slices/dapp";
|
|
3
|
-
import { loaderReducer } from "./slices/loader";
|
|
4
|
-
import { marketReducer } from "./slices/market";
|
|
5
|
-
import { notificationsReducer } from "./slices/notifications";
|
|
6
|
-
import { statusReducer } from "./slices/status";
|
|
7
|
-
import { walletReducer } from "./slices/wallet";
|
|
8
|
-
|
|
9
|
-
export const sharedReducers = {
|
|
10
|
-
loader: loaderReducer,
|
|
11
|
-
dapp: dappModalReducer,
|
|
12
|
-
status: statusReducer,
|
|
13
|
-
wallet: walletReducer,
|
|
14
|
-
auth: authReducer,
|
|
15
|
-
notifications: notificationsReducer,
|
|
16
|
-
market: marketReducer,
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export type SharedState = {
|
|
20
|
-
loader: ReturnType<typeof loaderReducer>;
|
|
21
|
-
dapp: ReturnType<typeof dappModalReducer>;
|
|
22
|
-
status: ReturnType<typeof statusReducer>;
|
|
23
|
-
wallet: ReturnType<typeof walletReducer>;
|
|
24
|
-
auth: ReturnType<typeof authReducer>;
|
|
25
|
-
notifications: ReturnType<typeof notificationsReducer>;
|
|
26
|
-
market: ReturnType<typeof marketReducer>;
|
|
27
|
-
};
|