@interchain-kit/react 0.2.207 → 0.2.211

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.
@@ -1,214 +1,2 @@
1
- import { clientNotExistError, WalletState } from "@interchain-kit/core";
2
- import { createStore } from "zustand";
3
- import { immer } from "zustand/middleware/immer";
4
- import { persist, createJSONStorage } from 'zustand/middleware';
5
- const immerSyncUp = (newWalletManager) => {
6
- return (draft) => {
7
- draft.chains = newWalletManager.chains;
8
- draft.assetLists = newWalletManager.assetLists;
9
- draft.wallets = newWalletManager.wallets;
10
- draft.signerOptions = newWalletManager.signerOptions;
11
- draft.endpointOptions = newWalletManager.endpointOptions;
12
- draft.signerOptionMap = newWalletManager.signerOptionMap;
13
- draft.endpointOptionsMap = newWalletManager.endpointOptionsMap;
14
- draft.preferredSignTypeMap = newWalletManager.preferredSignTypeMap;
15
- };
16
- };
17
- export const createInterchainStore = (walletManager) => {
18
- const { chains, assetLists, wallets, signerOptions, endpointOptions } = walletManager;
19
- // const walletManager = new WalletManager(chains, assetLists, wallets, signerOptions, endpointOptions)
20
- return createStore(persist(immer((set, get) => ({
21
- chainWalletState: [],
22
- currentWalletName: '',
23
- currentChainName: '',
24
- chains: [...walletManager.chains],
25
- assetLists: [...walletManager.assetLists],
26
- wallets: walletManager.wallets,
27
- signerOptions: walletManager.signerOptions,
28
- endpointOptions: walletManager.endpointOptions,
29
- preferredSignTypeMap: { ...walletManager.preferredSignTypeMap },
30
- signerOptionMap: { ...walletManager.signerOptionMap },
31
- endpointOptionsMap: { ...walletManager.endpointOptionsMap },
32
- updateChainWalletState: (walletName, chainName, data) => {
33
- set(draft => {
34
- let targetIndex = draft.chainWalletState.findIndex(cws => cws.walletName === walletName && cws.chainName === chainName);
35
- draft.chainWalletState[targetIndex] = { ...draft.chainWalletState[targetIndex], ...data };
36
- });
37
- },
38
- init: async () => {
39
- const existedChainWalletStatesMap = new Map(get().chainWalletState.map(cws => [cws.walletName + cws.chainName, cws]));
40
- wallets.forEach(wallet => {
41
- chains.forEach(chain => {
42
- if (!existedChainWalletStatesMap.has(wallet.info.name + chain.chainName)) {
43
- set(draft => {
44
- draft.chainWalletState.push({
45
- chainName: chain.chainName,
46
- walletName: wallet.info.name,
47
- walletState: WalletState.Disconnected,
48
- rpcEndpoint: "",
49
- errorMessage: "",
50
- account: undefined
51
- });
52
- });
53
- }
54
- });
55
- });
56
- const NotExistWallets = [];
57
- await Promise.all(get().wallets.map(async (wallet) => {
58
- try {
59
- await wallet.init();
60
- }
61
- catch (error) {
62
- if (error === clientNotExistError.message) {
63
- NotExistWallets.push(wallet.info.name);
64
- }
65
- }
66
- }));
67
- set(draft => {
68
- draft.chainWalletState = draft.chainWalletState.map(cws => {
69
- if (NotExistWallets.includes(cws.walletName)) {
70
- return { ...cws, walletState: WalletState.NotExist };
71
- }
72
- return cws;
73
- });
74
- });
75
- // return walletManager.init()
76
- },
77
- setCurrentChainName: (chainName) => {
78
- set(draft => { draft.currentChainName = chainName; });
79
- },
80
- setCurrentWalletName: (walletName) => {
81
- set(draft => { draft.currentWalletName = walletName; });
82
- },
83
- getDraftChainWalletState: (state, walletName, chainName) => {
84
- const targetIndex = state.chainWalletState.findIndex(cws => cws.walletName === walletName && cws.chainName === chainName);
85
- return state.chainWalletState[targetIndex];
86
- },
87
- getChainWalletState: (walletName, chainName) => {
88
- return get().chainWalletState.find(cws => cws.walletName === walletName && cws.chainName === chainName);
89
- },
90
- addChains: (chains, assetLists, signerOptions, endpointOptions) => {
91
- walletManager.addChains(chains, assetLists, signerOptions, endpointOptions);
92
- // console.log(walletManager.chains, walletManager.assetLists)
93
- // set(immerSyncUp(walletManager))
94
- // set(draft => {
95
- // draft.chains = walletManager.chains
96
- // })
97
- set(draft => {
98
- chains.forEach(newChain => {
99
- const existChain = draft.chains.find(c => c.chainId === newChain.chainId);
100
- if (!existChain) {
101
- draft.chains.push(newChain);
102
- const assetList = assetLists.find(a => a.chainName === newChain.chainName);
103
- draft.assetLists.push(assetList);
104
- draft.wallets.forEach(w => {
105
- draft.chainWalletState.push({
106
- chainName: newChain.chainName,
107
- walletName: w.info.name,
108
- walletState: WalletState.Disconnected,
109
- rpcEndpoint: "",
110
- errorMessage: "",
111
- account: undefined
112
- });
113
- });
114
- }
115
- draft.signerOptionMap[newChain.chainName] = signerOptions?.signing?.(newChain.chainName);
116
- draft.endpointOptionsMap[newChain.chainName] = endpointOptions?.endpoints?.[newChain.chainName];
117
- });
118
- });
119
- },
120
- connect: async (walletName, chainName) => {
121
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connecting });
122
- try {
123
- await walletManager.connect(walletName, chainName);
124
- set(draft => {
125
- draft.currentChainName = chainName;
126
- draft.currentWalletName = walletName;
127
- });
128
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connected });
129
- }
130
- catch (error) {
131
- if (error.message === 'Request rejected') {
132
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Rejected, errorMessage: error.message });
133
- return;
134
- }
135
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Disconnected, errorMessage: error.message });
136
- }
137
- },
138
- disconnect: async (walletName, chainName) => {
139
- try {
140
- await walletManager.disconnect(walletName, chainName);
141
- get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Disconnected, account: null });
142
- }
143
- catch (error) {
144
- }
145
- },
146
- getAccount: async (walletName, chainName) => {
147
- const account = await walletManager.getAccount(walletName, chainName);
148
- get().updateChainWalletState(walletName, chainName, { account });
149
- return account;
150
- },
151
- getRpcEndpoint: async (walletName, chainName) => {
152
- const exist = get().getChainWalletState(walletName, chainName).rpcEndpoint;
153
- if (exist)
154
- return exist;
155
- const rpcEndpoint = await walletManager.getRpcEndpoint(walletName, chainName);
156
- get().updateChainWalletState(walletName, chainName, { rpcEndpoint });
157
- return rpcEndpoint;
158
- },
159
- getChainLogoUrl(chainName) {
160
- return walletManager.getChainLogoUrl(chainName);
161
- },
162
- getChainByName(chainName) {
163
- return walletManager.getChainByName(chainName);
164
- },
165
- getAssetListByName(chainName) {
166
- return walletManager.getAssetListByName(chainName);
167
- },
168
- getDownloadLink(walletName) {
169
- return walletManager.getDownloadLink(walletName);
170
- },
171
- getOfflineSigner(walletName, chainName) {
172
- return walletManager.getOfflineSigner(walletName, chainName);
173
- },
174
- getPreferSignType(chainName) {
175
- const result = walletManager.getPreferSignType(chainName);
176
- set(immerSyncUp(walletManager));
177
- return result;
178
- },
179
- getSignerOptions(chainName) {
180
- const result = walletManager.getSignerOptions(chainName);
181
- set(immerSyncUp(walletManager));
182
- return result;
183
- },
184
- getWalletByName(walletName) {
185
- return walletManager.getWalletByName(walletName);
186
- },
187
- getSigningClient(walletName, chainName) {
188
- return walletManager.getSigningClient(walletName, chainName);
189
- },
190
- getEnv() {
191
- return walletManager.getEnv();
192
- },
193
- })), {
194
- name: 'interchain-kit-store',
195
- storage: createJSONStorage(() => localStorage),
196
- partialize: state => ({
197
- chainWalletState: state.chainWalletState,
198
- currentWalletName: state.currentWalletName,
199
- currentChainName: state.currentChainName
200
- }),
201
- onRehydrateStorage: (state) => {
202
- console.log('interchain-kit store hydration starts');
203
- // optional
204
- return (state, error) => {
205
- if (error) {
206
- console.log('an error happened during hydration', error);
207
- }
208
- else {
209
- console.log('interchain-kit store hydration finished');
210
- }
211
- };
212
- },
213
- }));
214
- };
1
+ export * from './chain-wallet';
2
+ export * from './store';
@@ -0,0 +1,234 @@
1
+ import { clientNotExistError, WalletState } from "@interchain-kit/core";
2
+ import { createStore } from "zustand";
3
+ import { immer } from "zustand/middleware/immer";
4
+ import { persist, createJSONStorage } from 'zustand/middleware';
5
+ const immerSyncUp = (newWalletManager) => {
6
+ return (draft) => {
7
+ draft.chains = newWalletManager.chains;
8
+ draft.assetLists = newWalletManager.assetLists;
9
+ draft.wallets = newWalletManager.wallets;
10
+ draft.signerOptions = newWalletManager.signerOptions;
11
+ draft.endpointOptions = newWalletManager.endpointOptions;
12
+ draft.signerOptionMap = newWalletManager.signerOptionMap;
13
+ draft.endpointOptionsMap = newWalletManager.endpointOptionsMap;
14
+ draft.preferredSignTypeMap = newWalletManager.preferredSignTypeMap;
15
+ };
16
+ };
17
+ export const createInterchainStore = (walletManager) => {
18
+ const { chains, assetLists, wallets, signerOptions, endpointOptions } = walletManager;
19
+ // const walletManager = new WalletManager(chains, assetLists, wallets, signerOptions, endpointOptions)
20
+ return createStore(persist(immer((set, get) => ({
21
+ chainWalletState: [],
22
+ currentWalletName: '',
23
+ currentChainName: '',
24
+ chains: [...walletManager.chains],
25
+ assetLists: [...walletManager.assetLists],
26
+ wallets: walletManager.wallets,
27
+ signerOptions: walletManager.signerOptions,
28
+ endpointOptions: walletManager.endpointOptions,
29
+ preferredSignTypeMap: { ...walletManager.preferredSignTypeMap },
30
+ signerOptionMap: { ...walletManager.signerOptionMap },
31
+ endpointOptionsMap: { ...walletManager.endpointOptionsMap },
32
+ walletConnectQRCodeUri: '',
33
+ updateChainWalletState: (walletName, chainName, data) => {
34
+ set(draft => {
35
+ let targetIndex = draft.chainWalletState.findIndex(cws => cws.walletName === walletName && cws.chainName === chainName);
36
+ draft.chainWalletState[targetIndex] = { ...draft.chainWalletState[targetIndex], ...data };
37
+ });
38
+ },
39
+ init: async () => {
40
+ const existedChainWalletStatesMap = new Map(get().chainWalletState.map(cws => [cws.walletName + cws.chainName, cws]));
41
+ wallets.forEach(wallet => {
42
+ chains.forEach(chain => {
43
+ if (!existedChainWalletStatesMap.has(wallet.info.name + chain.chainName)) {
44
+ set(draft => {
45
+ draft.chainWalletState.push({
46
+ chainName: chain.chainName,
47
+ walletName: wallet.info.name,
48
+ walletState: WalletState.Disconnected,
49
+ rpcEndpoint: "",
50
+ errorMessage: "",
51
+ account: undefined
52
+ });
53
+ });
54
+ }
55
+ });
56
+ });
57
+ const NotExistWallets = [];
58
+ const ExistWallets = [];
59
+ await Promise.all(get().wallets.map(async (wallet) => {
60
+ try {
61
+ await wallet.init();
62
+ ExistWallets.push(wallet.info.name);
63
+ }
64
+ catch (error) {
65
+ if (error === clientNotExistError) {
66
+ NotExistWallets.push(wallet.info.name);
67
+ }
68
+ }
69
+ }));
70
+ set(draft => {
71
+ draft.chainWalletState = draft.chainWalletState.map(cws => {
72
+ if (NotExistWallets.includes(cws.walletName)) {
73
+ return { ...cws, walletState: WalletState.NotExist };
74
+ }
75
+ return cws;
76
+ });
77
+ draft.chainWalletState = draft.chainWalletState.map(cws => {
78
+ if (ExistWallets.includes(cws.walletName)) {
79
+ return { ...cws, walletState: cws.walletState === WalletState.NotExist ? WalletState.Disconnected : cws.walletState };
80
+ }
81
+ return cws;
82
+ });
83
+ });
84
+ },
85
+ setCurrentChainName: (chainName) => {
86
+ set(draft => { draft.currentChainName = chainName; });
87
+ },
88
+ setCurrentWalletName: (walletName) => {
89
+ set(draft => { draft.currentWalletName = walletName; });
90
+ },
91
+ getDraftChainWalletState: (state, walletName, chainName) => {
92
+ const targetIndex = state.chainWalletState.findIndex(cws => cws.walletName === walletName && cws.chainName === chainName);
93
+ return state.chainWalletState[targetIndex];
94
+ },
95
+ getChainWalletState: (walletName, chainName) => {
96
+ return get().chainWalletState.find(cws => cws.walletName === walletName && cws.chainName === chainName);
97
+ },
98
+ addChains: (chains, assetLists, signerOptions, endpointOptions) => {
99
+ walletManager.addChains(chains, assetLists, signerOptions, endpointOptions);
100
+ // console.log(walletManager.chains, walletManager.assetLists)
101
+ // set(immerSyncUp(walletManager))
102
+ // set(draft => {
103
+ // draft.chains = walletManager.chains
104
+ // })
105
+ set(draft => {
106
+ chains.forEach(newChain => {
107
+ const existChain = draft.chains.find(c => c.chainId === newChain.chainId);
108
+ if (!existChain) {
109
+ draft.chains.push(newChain);
110
+ const assetList = assetLists.find(a => a.chainName === newChain.chainName);
111
+ draft.assetLists.push(assetList);
112
+ draft.wallets.forEach(w => {
113
+ draft.chainWalletState.push({
114
+ chainName: newChain.chainName,
115
+ walletName: w.info.name,
116
+ walletState: WalletState.Disconnected,
117
+ rpcEndpoint: endpointOptions.endpoints[newChain.chainName]?.rpc?.[0] || '',
118
+ errorMessage: "",
119
+ account: undefined
120
+ });
121
+ });
122
+ }
123
+ draft.signerOptionMap[newChain.chainName] = signerOptions?.signing?.(newChain.chainName);
124
+ draft.endpointOptionsMap[newChain.chainName] = endpointOptions?.endpoints?.[newChain.chainName];
125
+ });
126
+ });
127
+ },
128
+ connect: async (walletName, chainName) => {
129
+ const state = get().getChainWalletState(walletName, chainName)?.walletState;
130
+ if (state === WalletState.NotExist) {
131
+ return;
132
+ }
133
+ if (walletName === 'WalletConnect' && state === WalletState.Connected) {
134
+ return;
135
+ }
136
+ set(draft => {
137
+ draft.currentChainName = chainName;
138
+ draft.currentWalletName = walletName;
139
+ draft.walletConnectQRCodeUri = '';
140
+ });
141
+ get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connecting, errorMessage: '' });
142
+ try {
143
+ await walletManager.connect(walletName, chainName, (uri) => {
144
+ set(draft => {
145
+ draft.walletConnectQRCodeUri = uri;
146
+ });
147
+ });
148
+ get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connected });
149
+ }
150
+ catch (error) {
151
+ if (error.message === 'Request rejected') {
152
+ get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Rejected, errorMessage: error.message });
153
+ return;
154
+ }
155
+ get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Disconnected, errorMessage: error.message });
156
+ }
157
+ },
158
+ disconnect: async (walletName, chainName) => {
159
+ try {
160
+ await walletManager.disconnect(walletName, chainName);
161
+ get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Disconnected, account: null });
162
+ }
163
+ catch (error) {
164
+ }
165
+ },
166
+ getAccount: async (walletName, chainName) => {
167
+ const account = await walletManager.getAccount(walletName, chainName);
168
+ get().updateChainWalletState(walletName, chainName, { account });
169
+ return account;
170
+ },
171
+ getRpcEndpoint: async (walletName, chainName) => {
172
+ const exist = get().getChainWalletState(walletName, chainName).rpcEndpoint;
173
+ if (exist)
174
+ return exist;
175
+ const rpcEndpoint = await walletManager.getRpcEndpoint(walletName, chainName);
176
+ get().updateChainWalletState(walletName, chainName, { rpcEndpoint });
177
+ return rpcEndpoint;
178
+ },
179
+ getChainLogoUrl(chainName) {
180
+ return walletManager.getChainLogoUrl(chainName);
181
+ },
182
+ getChainByName(chainName) {
183
+ return walletManager.getChainByName(chainName);
184
+ },
185
+ getAssetListByName(chainName) {
186
+ return walletManager.getAssetListByName(chainName);
187
+ },
188
+ getDownloadLink(walletName) {
189
+ return walletManager.getDownloadLink(walletName);
190
+ },
191
+ getOfflineSigner(walletName, chainName) {
192
+ return walletManager.getOfflineSigner(walletName, chainName);
193
+ },
194
+ getPreferSignType(chainName) {
195
+ const result = walletManager.getPreferSignType(chainName);
196
+ set(immerSyncUp(walletManager));
197
+ return result;
198
+ },
199
+ getSignerOptions(chainName) {
200
+ const result = walletManager.getSignerOptions(chainName);
201
+ set(immerSyncUp(walletManager));
202
+ return result;
203
+ },
204
+ getWalletByName(walletName) {
205
+ return walletManager.getWalletByName(walletName);
206
+ },
207
+ getSigningClient(walletName, chainName) {
208
+ return walletManager.getSigningClient(walletName, chainName);
209
+ },
210
+ getEnv() {
211
+ return walletManager.getEnv();
212
+ },
213
+ })), {
214
+ name: 'interchain-kit-store',
215
+ storage: createJSONStorage(() => localStorage),
216
+ partialize: state => ({
217
+ chainWalletState: state.chainWalletState,
218
+ currentWalletName: state.currentWalletName,
219
+ currentChainName: state.currentChainName
220
+ }),
221
+ onRehydrateStorage: (state) => {
222
+ // console.log('interchain-kit store hydration starts')
223
+ // optional
224
+ return (state, error) => {
225
+ if (error) {
226
+ console.log('an error happened during hydration', error);
227
+ }
228
+ else {
229
+ // console.log('interchain-kit store hydration finished')
230
+ }
231
+ };
232
+ },
233
+ }));
234
+ };
@@ -6,3 +6,27 @@ export const getWalletInfo = (wallet) => {
6
6
  mobileDisabled: true,
7
7
  };
8
8
  };
9
+ export const transferToWalletUISchema = (w) => {
10
+ if (w.info.mode === "wallet-connect") {
11
+ const wc = w;
12
+ if (wc.session) {
13
+ return {
14
+ name: wc.session?.peer.metadata?.name,
15
+ prettyName: `${wc.session?.peer.metadata?.name} - Mobile`,
16
+ logo: wc.session?.peer.metadata?.icons?.[0],
17
+ mobileDisabled: true,
18
+ shape: "list",
19
+ originalWallet: { ...w, session: wc.session },
20
+ subLogo: w.info.logo,
21
+ };
22
+ }
23
+ }
24
+ return {
25
+ name: w.info.name,
26
+ prettyName: w.info.prettyName,
27
+ logo: w.info.logo,
28
+ mobileDisabled: true,
29
+ shape: "list",
30
+ originalWallet: w,
31
+ };
32
+ };
@@ -12,9 +12,9 @@ const useChainWallet = (chainName, walletName) => {
12
12
  return {
13
13
  //for migration cosmos kit
14
14
  connect: async () => {
15
- await connect(walletName, chainName);
16
15
  setCurrentWalletName(walletName);
17
16
  setCurrentChainName(chainName);
17
+ await connect(walletName, chainName);
18
18
  await getAccount(walletName, chainName);
19
19
  },
20
20
  disconnect: () => disconnect(walletName, chainName),
@@ -27,7 +27,7 @@ const useChainWallet = (chainName, walletName) => {
27
27
  chain,
28
28
  assetList,
29
29
  address: chainWalletStateToShow?.account?.address,
30
- wallet: new chain_wallet_1.ChainWallet(wallet, () => connect(walletName, chainName), () => disconnect(walletName, chainName), () => getAccount(walletName, chainName)),
30
+ wallet: wallet ? new chain_wallet_1.ChainWallet(wallet, () => connect(walletName, chainName), () => disconnect(walletName, chainName), () => getAccount(walletName, chainName)) : null,
31
31
  rpcEndpoint: chainWalletStateToShow?.rpcEndpoint,
32
32
  getSigningClient: () => getSigningClient(walletName, chainName),
33
33
  };
package/modal/modal.d.ts CHANGED
@@ -1 +1,30 @@
1
- export declare const WalletModal: () => import("react/jsx-runtime").JSX.Element;
1
+ import { BaseWallet, DownloadInfo } from "@interchain-kit/core";
2
+ import { Wallet as InterchainUIWalletType } from "@interchain-ui/react";
3
+ export type WalletModalProps = {
4
+ shouldShowList: boolean;
5
+ isOpen: boolean;
6
+ walletConnectQRCodeUri: string | null;
7
+ wallets: InterchainUIWalletType[];
8
+ username: string;
9
+ address: string;
10
+ currentWallet?: BaseWallet;
11
+ isConnecting: boolean;
12
+ isConnected: boolean;
13
+ isRejected: boolean;
14
+ isDisconnected: boolean;
15
+ isNotExist: boolean;
16
+ errorMessage: string;
17
+ open: () => void;
18
+ close: () => void;
19
+ disconnect: () => void;
20
+ onSelectWallet: (wallet: BaseWallet) => void;
21
+ onBack: () => void;
22
+ onReconnect: () => void;
23
+ getDownloadLink: (walletName: string) => DownloadInfo;
24
+ getEnv: () => {
25
+ browser?: string;
26
+ device?: string;
27
+ os?: string;
28
+ };
29
+ };
30
+ export declare const WalletModal: ({ shouldShowList, isOpen, walletConnectQRCodeUri, wallets, username, address, currentWallet, isConnecting, isConnected, isRejected, isDisconnected, isNotExist, errorMessage, open, close, disconnect, onSelectWallet, onBack, onReconnect, getDownloadLink, getEnv, }: WalletModalProps) => import("react/jsx-runtime").JSX.Element;