@mysten/dapp-kit 0.15.7 → 0.16.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 +15 -0
- package/dist/cjs/components/ConnectButton.js +1 -1
- package/dist/cjs/components/ConnectButton.js.map +2 -2
- package/dist/cjs/components/WalletProvider.d.ts +4 -4
- package/dist/cjs/components/WalletProvider.js +31 -28
- package/dist/cjs/components/WalletProvider.js.map +4 -4
- package/dist/cjs/components/connect-modal/ConnectModal.js +1 -1
- package/dist/cjs/components/connect-modal/ConnectModal.js.map +2 -2
- package/dist/cjs/constants/walletDefaults.js +2 -2
- package/dist/cjs/constants/walletDefaults.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSlushWallet.d.ts +5 -0
- package/dist/cjs/hooks/wallet/useSlushWallet.js +56 -0
- package/dist/cjs/hooks/wallet/useSlushWallet.js.map +7 -0
- package/dist/cjs/index.js +31 -28
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/components/ConnectButton.js +1 -1
- package/dist/esm/components/ConnectButton.js.map +2 -2
- package/dist/esm/components/WalletProvider.d.ts +4 -4
- package/dist/esm/components/WalletProvider.js +39 -36
- package/dist/esm/components/WalletProvider.js.map +4 -4
- package/dist/esm/components/connect-modal/ConnectModal.js +1 -1
- package/dist/esm/components/connect-modal/ConnectModal.js.map +2 -2
- package/dist/esm/constants/walletDefaults.js +2 -2
- package/dist/esm/constants/walletDefaults.js.map +2 -2
- package/dist/esm/hooks/wallet/useSlushWallet.d.ts +5 -0
- package/dist/esm/hooks/wallet/useSlushWallet.js +35 -0
- package/dist/esm/hooks/wallet/useSlushWallet.js.map +7 -0
- package/dist/esm/index.js +38 -35
- package/dist/esm/index.js.map +4 -4
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/components/WalletProvider.tsx +9 -9
- package/src/constants/walletDefaults.ts +2 -2
- package/src/hooks/wallet/useSlushWallet.ts +44 -0
- package/dist/cjs/hooks/wallet/useStashedWallet.d.ts +0 -6
- package/dist/cjs/hooks/wallet/useStashedWallet.js +0 -261
- package/dist/cjs/hooks/wallet/useStashedWallet.js.map +0 -7
- package/dist/esm/hooks/wallet/useStashedWallet.d.ts +0 -6
- package/dist/esm/hooks/wallet/useStashedWallet.js +0 -240
- package/dist/esm/hooks/wallet/useStashedWallet.js.map +0 -7
- package/src/hooks/wallet/useStashedWallet.ts +0 -51
|
@@ -14,8 +14,8 @@ import {
|
|
|
14
14
|
} from '../constants/walletDefaults.js';
|
|
15
15
|
import { WalletContext } from '../contexts/walletContext.js';
|
|
16
16
|
import { useAutoConnectWallet } from '../hooks/wallet/useAutoConnectWallet.js';
|
|
17
|
-
import type {
|
|
18
|
-
import {
|
|
17
|
+
import type { SlushWalletConfig } from '../hooks/wallet/useSlushWallet.js';
|
|
18
|
+
import { useSlushWallet } from '../hooks/wallet/useSlushWallet.js';
|
|
19
19
|
import { useUnsafeBurnerWallet } from '../hooks/wallet/useUnsafeBurnerWallet.js';
|
|
20
20
|
import { useWalletPropertiesChanged } from '../hooks/wallet/useWalletPropertiesChanged.js';
|
|
21
21
|
import { useWalletsChanged } from '../hooks/wallet/useWalletsChanged.js';
|
|
@@ -39,8 +39,8 @@ export type WalletProviderProps = {
|
|
|
39
39
|
/** Enables automatically reconnecting to the most recently used wallet account upon mounting. */
|
|
40
40
|
autoConnect?: boolean;
|
|
41
41
|
|
|
42
|
-
/** Enables the
|
|
43
|
-
|
|
42
|
+
/** Enables the Slush wallet */
|
|
43
|
+
slushWallet?: SlushWalletConfig;
|
|
44
44
|
|
|
45
45
|
/** Configures how the most recently connected to wallet account is stored. Set to `null` to disable persisting state entirely. Defaults to using localStorage if it is available. */
|
|
46
46
|
storage?: StateStorage | null;
|
|
@@ -63,7 +63,7 @@ export function WalletProvider({
|
|
|
63
63
|
storageKey = DEFAULT_STORAGE_KEY,
|
|
64
64
|
enableUnsafeBurner = false,
|
|
65
65
|
autoConnect = false,
|
|
66
|
-
|
|
66
|
+
slushWallet,
|
|
67
67
|
theme = lightTheme,
|
|
68
68
|
children,
|
|
69
69
|
}: WalletProviderProps) {
|
|
@@ -82,7 +82,7 @@ export function WalletProvider({
|
|
|
82
82
|
preferredWallets={preferredWallets}
|
|
83
83
|
walletFilter={walletFilter}
|
|
84
84
|
enableUnsafeBurner={enableUnsafeBurner}
|
|
85
|
-
|
|
85
|
+
slushWallet={slushWallet}
|
|
86
86
|
>
|
|
87
87
|
{/* TODO: We ideally don't want to inject styles if people aren't using the UI components */}
|
|
88
88
|
{theme ? <InjectedThemeStyles theme={theme} /> : null}
|
|
@@ -94,19 +94,19 @@ export function WalletProvider({
|
|
|
94
94
|
|
|
95
95
|
type WalletConnectionManagerProps = Pick<
|
|
96
96
|
WalletProviderProps,
|
|
97
|
-
'preferredWallets' | 'walletFilter' | 'enableUnsafeBurner' | '
|
|
97
|
+
'preferredWallets' | 'walletFilter' | 'enableUnsafeBurner' | 'slushWallet' | 'children'
|
|
98
98
|
>;
|
|
99
99
|
|
|
100
100
|
function WalletConnectionManager({
|
|
101
101
|
preferredWallets = DEFAULT_PREFERRED_WALLETS,
|
|
102
102
|
walletFilter = DEFAULT_WALLET_FILTER,
|
|
103
103
|
enableUnsafeBurner = false,
|
|
104
|
-
|
|
104
|
+
slushWallet,
|
|
105
105
|
children,
|
|
106
106
|
}: WalletConnectionManagerProps) {
|
|
107
107
|
useWalletsChanged(preferredWallets, walletFilter);
|
|
108
108
|
useWalletPropertiesChanged();
|
|
109
|
-
|
|
109
|
+
useSlushWallet(slushWallet);
|
|
110
110
|
useUnsafeBurnerWallet(enableUnsafeBurner);
|
|
111
111
|
useAutoConnectWallet();
|
|
112
112
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import type { SuiWalletFeatures, WalletWithRequiredFeatures } from '@mysten/wallet-standard';
|
|
5
|
-
import {
|
|
5
|
+
import { SLUSH_WALLET_NAME } from '@mysten/slush-wallet';
|
|
6
6
|
|
|
7
7
|
import { createInMemoryStore } from '../utils/stateStorage.js';
|
|
8
8
|
|
|
@@ -21,4 +21,4 @@ const SIGN_FEATURES = [
|
|
|
21
21
|
export const DEFAULT_WALLET_FILTER = (wallet: WalletWithRequiredFeatures) =>
|
|
22
22
|
SIGN_FEATURES.some((feature) => wallet.features[feature]);
|
|
23
23
|
|
|
24
|
-
export const DEFAULT_PREFERRED_WALLETS = [SUI_WALLET_NAME,
|
|
24
|
+
export const DEFAULT_PREFERRED_WALLETS = [SUI_WALLET_NAME, SLUSH_WALLET_NAME];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Copyright (c) Mysten Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { registerSlushWallet } from '@mysten/slush-wallet';
|
|
5
|
+
import { useLayoutEffect } from 'react';
|
|
6
|
+
|
|
7
|
+
export interface SlushWalletConfig {
|
|
8
|
+
name: string;
|
|
9
|
+
origin?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function useSlushWallet(config?: SlushWalletConfig) {
|
|
13
|
+
useLayoutEffect(() => {
|
|
14
|
+
if (!config?.name) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let cleanup: (() => void) | undefined;
|
|
19
|
+
let isMounted = true;
|
|
20
|
+
|
|
21
|
+
const setupWallet = async () => {
|
|
22
|
+
try {
|
|
23
|
+
const result = await registerSlushWallet(config.name, {
|
|
24
|
+
origin: config.origin,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
if (isMounted && result) {
|
|
28
|
+
cleanup = result.unregister;
|
|
29
|
+
} else if (result) {
|
|
30
|
+
result.unregister();
|
|
31
|
+
}
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error('Failed to register Slush wallet:', error);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
setupWallet();
|
|
38
|
+
|
|
39
|
+
return () => {
|
|
40
|
+
isMounted = false;
|
|
41
|
+
if (cleanup) cleanup();
|
|
42
|
+
};
|
|
43
|
+
}, [config?.name, config?.origin]);
|
|
44
|
+
}
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/hooks/wallet/useStashedWallet.ts
|
|
21
|
-
var useStashedWallet_exports = {};
|
|
22
|
-
__export(useStashedWallet_exports, {
|
|
23
|
-
useStashedWallet: () => useStashedWallet
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(useStashedWallet_exports);
|
|
26
|
-
var import_zksend = require("@mysten/zksend");
|
|
27
|
-
var import_react4 = require("react");
|
|
28
|
-
|
|
29
|
-
// src/hooks/wallet/useAutoConnectWallet.ts
|
|
30
|
-
var import_react_query2 = require("@tanstack/react-query");
|
|
31
|
-
var import_react3 = require("react");
|
|
32
|
-
|
|
33
|
-
// src/utils/walletUtils.ts
|
|
34
|
-
var import_wallet_standard = require("@mysten/wallet-standard");
|
|
35
|
-
function getWalletUniqueIdentifier(wallet) {
|
|
36
|
-
return wallet?.id ?? wallet?.name;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// src/hooks/wallet/useConnectWallet.ts
|
|
40
|
-
var import_react_query = require("@tanstack/react-query");
|
|
41
|
-
|
|
42
|
-
// src/constants/walletMutationKeys.ts
|
|
43
|
-
var walletMutationKeys = {
|
|
44
|
-
all: { baseScope: "wallet" },
|
|
45
|
-
connectWallet: formMutationKeyFn("connect-wallet"),
|
|
46
|
-
autoconnectWallet: formMutationKeyFn("autoconnect-wallet"),
|
|
47
|
-
disconnectWallet: formMutationKeyFn("disconnect-wallet"),
|
|
48
|
-
signPersonalMessage: formMutationKeyFn("sign-personal-message"),
|
|
49
|
-
signTransaction: formMutationKeyFn("sign-transaction"),
|
|
50
|
-
signAndExecuteTransaction: formMutationKeyFn("sign-and-execute-transaction"),
|
|
51
|
-
switchAccount: formMutationKeyFn("switch-account"),
|
|
52
|
-
reportTransactionEffects: formMutationKeyFn("report-transaction-effects")
|
|
53
|
-
};
|
|
54
|
-
function formMutationKeyFn(baseEntity) {
|
|
55
|
-
return function mutationKeyFn(additionalKeys = []) {
|
|
56
|
-
return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// src/hooks/wallet/useWalletStore.ts
|
|
61
|
-
var import_react2 = require("react");
|
|
62
|
-
var import_zustand = require("zustand");
|
|
63
|
-
|
|
64
|
-
// src/contexts/walletContext.ts
|
|
65
|
-
var import_react = require("react");
|
|
66
|
-
var WalletContext = (0, import_react.createContext)(null);
|
|
67
|
-
|
|
68
|
-
// src/hooks/wallet/useWalletStore.ts
|
|
69
|
-
function useWalletStore(selector) {
|
|
70
|
-
const store = (0, import_react2.useContext)(WalletContext);
|
|
71
|
-
if (!store) {
|
|
72
|
-
throw new Error(
|
|
73
|
-
"Could not find WalletContext. Ensure that you have set up the WalletProvider."
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
return (0, import_zustand.useStore)(store, selector);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// src/hooks/wallet/useConnectWallet.ts
|
|
80
|
-
function useConnectWallet({
|
|
81
|
-
mutationKey,
|
|
82
|
-
...mutationOptions
|
|
83
|
-
} = {}) {
|
|
84
|
-
const setWalletConnected = useWalletStore((state) => state.setWalletConnected);
|
|
85
|
-
const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);
|
|
86
|
-
return (0, import_react_query.useMutation)({
|
|
87
|
-
mutationKey: walletMutationKeys.connectWallet(mutationKey),
|
|
88
|
-
mutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {
|
|
89
|
-
try {
|
|
90
|
-
setConnectionStatus("connecting");
|
|
91
|
-
const connectResult = await wallet.features["standard:connect"].connect(connectArgs);
|
|
92
|
-
const connectedSuiAccounts = connectResult.accounts.filter(
|
|
93
|
-
(account) => account.chains.some((chain) => chain.split(":")[0] === "sui")
|
|
94
|
-
);
|
|
95
|
-
const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
|
|
96
|
-
setWalletConnected(
|
|
97
|
-
wallet,
|
|
98
|
-
connectedSuiAccounts,
|
|
99
|
-
selectedAccount,
|
|
100
|
-
connectResult.supportedIntents
|
|
101
|
-
);
|
|
102
|
-
return { accounts: connectedSuiAccounts };
|
|
103
|
-
} catch (error) {
|
|
104
|
-
setConnectionStatus("disconnected");
|
|
105
|
-
throw error;
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
...mutationOptions
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
function getSelectedAccount(connectedAccounts, accountAddress) {
|
|
112
|
-
if (connectedAccounts.length === 0) {
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
if (accountAddress) {
|
|
116
|
-
const selectedAccount = connectedAccounts.find((account) => account.address === accountAddress);
|
|
117
|
-
return selectedAccount ?? connectedAccounts[0];
|
|
118
|
-
}
|
|
119
|
-
return connectedAccounts[0];
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// src/hooks/wallet/useCurrentWallet.ts
|
|
123
|
-
function useCurrentWallet() {
|
|
124
|
-
const currentWallet = useWalletStore((state) => state.currentWallet);
|
|
125
|
-
const connectionStatus = useWalletStore((state) => state.connectionStatus);
|
|
126
|
-
const supportedIntents = useWalletStore((state) => state.supportedIntents);
|
|
127
|
-
switch (connectionStatus) {
|
|
128
|
-
case "connecting":
|
|
129
|
-
return {
|
|
130
|
-
connectionStatus,
|
|
131
|
-
currentWallet: null,
|
|
132
|
-
isDisconnected: false,
|
|
133
|
-
isConnecting: true,
|
|
134
|
-
isConnected: false,
|
|
135
|
-
supportedIntents: []
|
|
136
|
-
};
|
|
137
|
-
case "disconnected":
|
|
138
|
-
return {
|
|
139
|
-
connectionStatus,
|
|
140
|
-
currentWallet: null,
|
|
141
|
-
isDisconnected: true,
|
|
142
|
-
isConnecting: false,
|
|
143
|
-
isConnected: false,
|
|
144
|
-
supportedIntents: []
|
|
145
|
-
};
|
|
146
|
-
case "connected": {
|
|
147
|
-
return {
|
|
148
|
-
connectionStatus,
|
|
149
|
-
currentWallet,
|
|
150
|
-
isDisconnected: false,
|
|
151
|
-
isConnecting: false,
|
|
152
|
-
isConnected: true,
|
|
153
|
-
supportedIntents
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// src/hooks/wallet/useWallets.ts
|
|
160
|
-
function useWallets() {
|
|
161
|
-
return useWalletStore((state) => state.wallets);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// src/hooks/wallet/useAutoConnectWallet.ts
|
|
165
|
-
function useAutoConnectWallet() {
|
|
166
|
-
const { mutateAsync: connectWallet } = useConnectWallet();
|
|
167
|
-
const autoConnectEnabled = useWalletStore((state) => state.autoConnectEnabled);
|
|
168
|
-
const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);
|
|
169
|
-
const lastConnectedAccountAddress = useWalletStore((state) => state.lastConnectedAccountAddress);
|
|
170
|
-
const wallets = useWallets();
|
|
171
|
-
const { isConnected } = useCurrentWallet();
|
|
172
|
-
const [clientOnly, setClientOnly] = (0, import_react3.useState)(false);
|
|
173
|
-
(0, import_react3.useLayoutEffect)(() => {
|
|
174
|
-
setClientOnly(true);
|
|
175
|
-
}, []);
|
|
176
|
-
const { data, isError } = (0, import_react_query2.useQuery)({
|
|
177
|
-
queryKey: [
|
|
178
|
-
"@mysten/dapp-kit",
|
|
179
|
-
"autoconnect",
|
|
180
|
-
{
|
|
181
|
-
isConnected,
|
|
182
|
-
autoConnectEnabled,
|
|
183
|
-
lastConnectedWalletName,
|
|
184
|
-
lastConnectedAccountAddress,
|
|
185
|
-
walletCount: wallets.length
|
|
186
|
-
}
|
|
187
|
-
],
|
|
188
|
-
queryFn: async () => {
|
|
189
|
-
if (!autoConnectEnabled) {
|
|
190
|
-
return "disabled";
|
|
191
|
-
}
|
|
192
|
-
if (!lastConnectedWalletName || !lastConnectedAccountAddress || isConnected) {
|
|
193
|
-
return "attempted";
|
|
194
|
-
}
|
|
195
|
-
const wallet = wallets.find(
|
|
196
|
-
(wallet2) => getWalletUniqueIdentifier(wallet2) === lastConnectedWalletName
|
|
197
|
-
);
|
|
198
|
-
if (wallet) {
|
|
199
|
-
await connectWallet({
|
|
200
|
-
wallet,
|
|
201
|
-
accountAddress: lastConnectedAccountAddress,
|
|
202
|
-
silent: true
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
return "attempted";
|
|
206
|
-
},
|
|
207
|
-
enabled: autoConnectEnabled,
|
|
208
|
-
persister: void 0,
|
|
209
|
-
gcTime: 0,
|
|
210
|
-
staleTime: 0,
|
|
211
|
-
networkMode: "always",
|
|
212
|
-
retry: false,
|
|
213
|
-
retryOnMount: false,
|
|
214
|
-
refetchInterval: false,
|
|
215
|
-
refetchIntervalInBackground: false,
|
|
216
|
-
refetchOnMount: false,
|
|
217
|
-
refetchOnReconnect: false,
|
|
218
|
-
refetchOnWindowFocus: false
|
|
219
|
-
});
|
|
220
|
-
if (!autoConnectEnabled) {
|
|
221
|
-
return "disabled";
|
|
222
|
-
}
|
|
223
|
-
if (!clientOnly) {
|
|
224
|
-
return "idle";
|
|
225
|
-
}
|
|
226
|
-
if (isConnected) {
|
|
227
|
-
return "attempted";
|
|
228
|
-
}
|
|
229
|
-
if (!lastConnectedWalletName) {
|
|
230
|
-
return "attempted";
|
|
231
|
-
}
|
|
232
|
-
return isError ? "attempted" : data ?? "idle";
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// src/hooks/wallet/useStashedWallet.ts
|
|
236
|
-
function useStashedWallet(config) {
|
|
237
|
-
const status = useAutoConnectWallet();
|
|
238
|
-
const [address, setAddress] = (0, import_react4.useState)(null);
|
|
239
|
-
const [wallet, setWallet] = (0, import_react4.useState)(null);
|
|
240
|
-
const { mutate: connect } = useConnectWallet();
|
|
241
|
-
(0, import_react4.useEffect)(() => {
|
|
242
|
-
if (!address || !wallet || status !== "attempted") return;
|
|
243
|
-
connect({ wallet, silent: true });
|
|
244
|
-
setAddress(null);
|
|
245
|
-
}, [address, status, connect, wallet]);
|
|
246
|
-
(0, import_react4.useLayoutEffect)(() => {
|
|
247
|
-
if (!config?.name) {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
const { wallet: wallet2, unregister, addressFromRedirect } = (0, import_zksend.registerStashedWallet)(config.name, {
|
|
251
|
-
origin: config.origin,
|
|
252
|
-
network: config.network
|
|
253
|
-
});
|
|
254
|
-
if (addressFromRedirect) {
|
|
255
|
-
setWallet(wallet2);
|
|
256
|
-
setAddress(addressFromRedirect);
|
|
257
|
-
}
|
|
258
|
-
return unregister;
|
|
259
|
-
}, [config?.name, config?.origin, config?.network]);
|
|
260
|
-
}
|
|
261
|
-
//# sourceMappingURL=useStashedWallet.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/hooks/wallet/useStashedWallet.ts", "../../../../src/hooks/wallet/useAutoConnectWallet.ts", "../../../../src/utils/walletUtils.ts", "../../../../src/hooks/wallet/useConnectWallet.ts", "../../../../src/constants/walletMutationKeys.ts", "../../../../src/hooks/wallet/useWalletStore.ts", "../../../../src/contexts/walletContext.ts", "../../../../src/hooks/wallet/useCurrentWallet.ts", "../../../../src/hooks/wallet/useWallets.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { StashedWallet } from '@mysten/zksend';\nimport { registerStashedWallet } from '@mysten/zksend';\nimport { useEffect, useLayoutEffect, useState } from 'react';\n\nimport { useAutoConnectWallet } from './useAutoConnectWallet.js';\nimport { useConnectWallet } from './useConnectWallet.js';\n\nexport interface StashedWalletConfig {\n\tname: string;\n\tnetwork?: 'mainnet' | 'testnet';\n\torigin?: string;\n}\n\nexport function useStashedWallet(config?: StashedWalletConfig) {\n\tconst status = useAutoConnectWallet();\n\tconst [address, setAddress] = useState<string | null>(null);\n\tconst [wallet, setWallet] = useState<StashedWallet | null>(null);\n\tconst { mutate: connect } = useConnectWallet();\n\n\tuseEffect(() => {\n\t\t// This handles an edge case where the user has already connected a wallet, but is coming from\n\t\t// a zkSend redirect, and we want to force the zkSend wallet to connect. We need to wait for the\n\t\t// autoconnection to attempt to connect, then force the zkSend wallet to connect.\n\t\tif (!address || !wallet || status !== 'attempted') return;\n\n\t\tconnect({ wallet, silent: true });\n\t\t// Reset the address since we only want to do this once:\n\t\tsetAddress(null);\n\t}, [address, status, connect, wallet]);\n\n\tuseLayoutEffect(() => {\n\t\tif (!config?.name) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { wallet, unregister, addressFromRedirect } = registerStashedWallet(config.name, {\n\t\t\torigin: config.origin,\n\t\t\tnetwork: config.network,\n\t\t});\n\n\t\tif (addressFromRedirect) {\n\t\t\tsetWallet(wallet);\n\t\t\tsetAddress(addressFromRedirect);\n\t\t}\n\n\t\treturn unregister;\n\t}, [config?.name, config?.origin, config?.network]);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useLayoutEffect, useState } from 'react';\n\nimport { getWalletUniqueIdentifier } from '../../utils/walletUtils.js';\nimport { useConnectWallet } from './useConnectWallet.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWallets } from './useWallets.js';\nimport { useWalletStore } from './useWalletStore.js';\n\nexport function useAutoConnectWallet(): 'disabled' | 'idle' | 'attempted' {\n\tconst { mutateAsync: connectWallet } = useConnectWallet();\n\tconst autoConnectEnabled = useWalletStore((state) => state.autoConnectEnabled);\n\tconst lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);\n\tconst lastConnectedAccountAddress = useWalletStore((state) => state.lastConnectedAccountAddress);\n\tconst wallets = useWallets();\n\tconst { isConnected } = useCurrentWallet();\n\n\tconst [clientOnly, setClientOnly] = useState(false);\n\tuseLayoutEffect(() => {\n\t\tsetClientOnly(true);\n\t}, []);\n\n\tconst { data, isError } = useQuery({\n\t\tqueryKey: [\n\t\t\t'@mysten/dapp-kit',\n\t\t\t'autoconnect',\n\t\t\t{\n\t\t\t\tisConnected,\n\t\t\t\tautoConnectEnabled,\n\t\t\t\tlastConnectedWalletName,\n\t\t\t\tlastConnectedAccountAddress,\n\t\t\t\twalletCount: wallets.length,\n\t\t\t},\n\t\t],\n\t\tqueryFn: async () => {\n\t\t\tif (!autoConnectEnabled) {\n\t\t\t\treturn 'disabled';\n\t\t\t}\n\n\t\t\tif (!lastConnectedWalletName || !lastConnectedAccountAddress || isConnected) {\n\t\t\t\treturn 'attempted';\n\t\t\t}\n\n\t\t\tconst wallet = wallets.find(\n\t\t\t\t(wallet) => getWalletUniqueIdentifier(wallet) === lastConnectedWalletName,\n\t\t\t);\n\t\t\tif (wallet) {\n\t\t\t\tawait connectWallet({\n\t\t\t\t\twallet,\n\t\t\t\t\taccountAddress: lastConnectedAccountAddress,\n\t\t\t\t\tsilent: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn 'attempted';\n\t\t},\n\t\tenabled: autoConnectEnabled,\n\t\tpersister: undefined,\n\t\tgcTime: 0,\n\t\tstaleTime: 0,\n\t\tnetworkMode: 'always',\n\t\tretry: false,\n\t\tretryOnMount: false,\n\t\trefetchInterval: false,\n\t\trefetchIntervalInBackground: false,\n\t\trefetchOnMount: false,\n\t\trefetchOnReconnect: false,\n\t\trefetchOnWindowFocus: false,\n\t});\n\n\tif (!autoConnectEnabled) {\n\t\treturn 'disabled';\n\t}\n\n\t// We always initialize with \"idle\" so that in SSR environments, we guarantee that the initial render states always agree:\n\tif (!clientOnly) {\n\t\treturn 'idle';\n\t}\n\n\tif (isConnected) {\n\t\treturn 'attempted';\n\t}\n\n\tif (!lastConnectedWalletName) {\n\t\treturn 'attempted';\n\t}\n\n\treturn isError ? 'attempted' : (data ?? 'idle');\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n\tMinimallyRequiredFeatures,\n\tWallet,\n\tWalletWithFeatures,\n\tWalletWithRequiredFeatures,\n} from '@mysten/wallet-standard';\nimport { getWallets, isWalletWithRequiredFeatureSet } from '@mysten/wallet-standard';\n\nexport function getRegisteredWallets<AdditionalFeatures extends Wallet['features']>(\n\tpreferredWallets: string[],\n\twalletFilter?: (wallet: WalletWithRequiredFeatures) => boolean,\n) {\n\tconst walletsApi = getWallets();\n\tconst wallets = walletsApi.get();\n\n\tconst suiWallets = wallets.filter(\n\t\t(wallet): wallet is WalletWithFeatures<MinimallyRequiredFeatures & AdditionalFeatures> =>\n\t\t\tisWalletWithRequiredFeatureSet(wallet) && (!walletFilter || walletFilter(wallet)),\n\t);\n\n\treturn [\n\t\t// Preferred wallets, in order:\n\t\t...(preferredWallets\n\t\t\t.map((name) => suiWallets.find((wallet) => wallet.name === name))\n\t\t\t.filter(Boolean) as WalletWithFeatures<MinimallyRequiredFeatures & AdditionalFeatures>[]),\n\n\t\t// Wallets in default order:\n\t\t...suiWallets.filter((wallet) => !preferredWallets.includes(wallet.name)),\n\t];\n}\n\nexport function getWalletUniqueIdentifier(wallet?: Wallet) {\n\treturn wallet?.id ?? wallet?.name;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n\tStandardConnectInput,\n\tStandardConnectOutput,\n\tWalletAccount,\n\tWalletWithRequiredFeatures,\n} from '@mysten/wallet-standard';\nimport type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { walletMutationKeys } from '../../constants/walletMutationKeys.js';\nimport { useWalletStore } from './useWalletStore.js';\n\ntype ConnectWalletArgs = {\n\t/** The wallet to connect to. */\n\twallet: WalletWithRequiredFeatures;\n\n\t/** An optional account address to connect to. Defaults to the first authorized account. */\n\taccountAddress?: string;\n} & StandardConnectInput;\n\ntype ConnectWalletResult = StandardConnectOutput;\n\ntype UseConnectWalletMutationOptions = Omit<\n\tUseMutationOptions<ConnectWalletResult, Error, ConnectWalletArgs, unknown>,\n\t'mutationFn'\n>;\n\n/**\n * Mutation hook for establishing a connection to a specific wallet.\n */\nexport function useConnectWallet({\n\tmutationKey,\n\t...mutationOptions\n}: UseConnectWalletMutationOptions = {}): UseMutationResult<\n\tConnectWalletResult,\n\tError,\n\tConnectWalletArgs,\n\tunknown\n> {\n\tconst setWalletConnected = useWalletStore((state) => state.setWalletConnected);\n\tconst setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);\n\n\treturn useMutation({\n\t\tmutationKey: walletMutationKeys.connectWallet(mutationKey),\n\t\tmutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {\n\t\t\ttry {\n\t\t\t\tsetConnectionStatus('connecting');\n\n\t\t\t\tconst connectResult = await wallet.features['standard:connect'].connect(connectArgs);\n\t\t\t\tconst connectedSuiAccounts = connectResult.accounts.filter((account) =>\n\t\t\t\t\taccount.chains.some((chain) => chain.split(':')[0] === 'sui'),\n\t\t\t\t);\n\t\t\t\tconst selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);\n\n\t\t\t\tsetWalletConnected(\n\t\t\t\t\twallet,\n\t\t\t\t\tconnectedSuiAccounts,\n\t\t\t\t\tselectedAccount,\n\t\t\t\t\tconnectResult.supportedIntents,\n\t\t\t\t);\n\n\t\t\t\treturn { accounts: connectedSuiAccounts };\n\t\t\t} catch (error) {\n\t\t\t\tsetConnectionStatus('disconnected');\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\t...mutationOptions,\n\t});\n}\n\nfunction getSelectedAccount(connectedAccounts: readonly WalletAccount[], accountAddress?: string) {\n\tif (connectedAccounts.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (accountAddress) {\n\t\tconst selectedAccount = connectedAccounts.find((account) => account.address === accountAddress);\n\t\treturn selectedAccount ?? connectedAccounts[0];\n\t}\n\n\treturn connectedAccounts[0];\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { MutationKey } from '@tanstack/react-query';\n\nexport const walletMutationKeys = {\n\tall: { baseScope: 'wallet' },\n\tconnectWallet: formMutationKeyFn('connect-wallet'),\n\tautoconnectWallet: formMutationKeyFn('autoconnect-wallet'),\n\tdisconnectWallet: formMutationKeyFn('disconnect-wallet'),\n\tsignPersonalMessage: formMutationKeyFn('sign-personal-message'),\n\tsignTransaction: formMutationKeyFn('sign-transaction'),\n\tsignAndExecuteTransaction: formMutationKeyFn('sign-and-execute-transaction'),\n\tswitchAccount: formMutationKeyFn('switch-account'),\n\treportTransactionEffects: formMutationKeyFn('report-transaction-effects'),\n};\n\nfunction formMutationKeyFn(baseEntity: string) {\n\treturn function mutationKeyFn(additionalKeys: MutationKey = []) {\n\t\treturn [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];\n\t};\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useContext } from 'react';\nimport { useStore } from 'zustand';\n\nimport { WalletContext } from '../../contexts/walletContext.js';\nimport type { StoreState } from '../../walletStore.js';\n\nexport function useWalletStore<T>(selector: (state: StoreState) => T): T {\n\tconst store = useContext(WalletContext);\n\tif (!store) {\n\t\tthrow new Error(\n\t\t\t'Could not find WalletContext. Ensure that you have set up the WalletProvider.',\n\t\t);\n\t}\n\treturn useStore(store, selector);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createContext } from 'react';\n\nimport type { WalletStore } from '../walletStore.js';\n\nexport const WalletContext = createContext<WalletStore | null>(null);\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet that is currently connected to the dApp, if one exists.\n */\nexport function useCurrentWallet() {\n\tconst currentWallet = useWalletStore((state) => state.currentWallet);\n\tconst connectionStatus = useWalletStore((state) => state.connectionStatus);\n\tconst supportedIntents = useWalletStore((state) => state.supportedIntents);\n\n\tswitch (connectionStatus) {\n\t\tcase 'connecting':\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: null,\n\t\t\t\tisDisconnected: false,\n\t\t\t\tisConnecting: true,\n\t\t\t\tisConnected: false,\n\t\t\t\tsupportedIntents: [],\n\t\t\t} as const;\n\t\tcase 'disconnected':\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: null,\n\t\t\t\tisDisconnected: true,\n\t\t\t\tisConnecting: false,\n\t\t\t\tisConnected: false,\n\t\t\t\tsupportedIntents: [],\n\t\t\t} as const;\n\t\tcase 'connected': {\n\t\t\treturn {\n\t\t\t\tconnectionStatus,\n\t\t\t\tcurrentWallet: currentWallet!,\n\t\t\t\tisDisconnected: false,\n\t\t\t\tisConnecting: false,\n\t\t\t\tisConnected: true,\n\t\t\t\tsupportedIntents,\n\t\t\t} as const;\n\t\t}\n\t}\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves a list of registered wallets available to the dApp sorted by preference.\n */\nexport function useWallets() {\n\treturn useWalletStore((state) => state.wallets);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react", "import_react_query", "import_react", "import_react", "wallet", "wallet"]
|
|
7
|
-
}
|
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
// src/hooks/wallet/useStashedWallet.ts
|
|
2
|
-
import { registerStashedWallet } from "@mysten/zksend";
|
|
3
|
-
import { useEffect, useLayoutEffect as useLayoutEffect2, useState as useState2 } from "react";
|
|
4
|
-
|
|
5
|
-
// src/hooks/wallet/useAutoConnectWallet.ts
|
|
6
|
-
import { useQuery } from "@tanstack/react-query";
|
|
7
|
-
import { useLayoutEffect, useState } from "react";
|
|
8
|
-
|
|
9
|
-
// src/utils/walletUtils.ts
|
|
10
|
-
import { getWallets, isWalletWithRequiredFeatureSet } from "@mysten/wallet-standard";
|
|
11
|
-
function getWalletUniqueIdentifier(wallet) {
|
|
12
|
-
return wallet?.id ?? wallet?.name;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// src/hooks/wallet/useConnectWallet.ts
|
|
16
|
-
import { useMutation } from "@tanstack/react-query";
|
|
17
|
-
|
|
18
|
-
// src/constants/walletMutationKeys.ts
|
|
19
|
-
var walletMutationKeys = {
|
|
20
|
-
all: { baseScope: "wallet" },
|
|
21
|
-
connectWallet: formMutationKeyFn("connect-wallet"),
|
|
22
|
-
autoconnectWallet: formMutationKeyFn("autoconnect-wallet"),
|
|
23
|
-
disconnectWallet: formMutationKeyFn("disconnect-wallet"),
|
|
24
|
-
signPersonalMessage: formMutationKeyFn("sign-personal-message"),
|
|
25
|
-
signTransaction: formMutationKeyFn("sign-transaction"),
|
|
26
|
-
signAndExecuteTransaction: formMutationKeyFn("sign-and-execute-transaction"),
|
|
27
|
-
switchAccount: formMutationKeyFn("switch-account"),
|
|
28
|
-
reportTransactionEffects: formMutationKeyFn("report-transaction-effects")
|
|
29
|
-
};
|
|
30
|
-
function formMutationKeyFn(baseEntity) {
|
|
31
|
-
return function mutationKeyFn(additionalKeys = []) {
|
|
32
|
-
return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// src/hooks/wallet/useWalletStore.ts
|
|
37
|
-
import { useContext } from "react";
|
|
38
|
-
import { useStore } from "zustand";
|
|
39
|
-
|
|
40
|
-
// src/contexts/walletContext.ts
|
|
41
|
-
import { createContext } from "react";
|
|
42
|
-
var WalletContext = createContext(null);
|
|
43
|
-
|
|
44
|
-
// src/hooks/wallet/useWalletStore.ts
|
|
45
|
-
function useWalletStore(selector) {
|
|
46
|
-
const store = useContext(WalletContext);
|
|
47
|
-
if (!store) {
|
|
48
|
-
throw new Error(
|
|
49
|
-
"Could not find WalletContext. Ensure that you have set up the WalletProvider."
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
return useStore(store, selector);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// src/hooks/wallet/useConnectWallet.ts
|
|
56
|
-
function useConnectWallet({
|
|
57
|
-
mutationKey,
|
|
58
|
-
...mutationOptions
|
|
59
|
-
} = {}) {
|
|
60
|
-
const setWalletConnected = useWalletStore((state) => state.setWalletConnected);
|
|
61
|
-
const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);
|
|
62
|
-
return useMutation({
|
|
63
|
-
mutationKey: walletMutationKeys.connectWallet(mutationKey),
|
|
64
|
-
mutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {
|
|
65
|
-
try {
|
|
66
|
-
setConnectionStatus("connecting");
|
|
67
|
-
const connectResult = await wallet.features["standard:connect"].connect(connectArgs);
|
|
68
|
-
const connectedSuiAccounts = connectResult.accounts.filter(
|
|
69
|
-
(account) => account.chains.some((chain) => chain.split(":")[0] === "sui")
|
|
70
|
-
);
|
|
71
|
-
const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
|
|
72
|
-
setWalletConnected(
|
|
73
|
-
wallet,
|
|
74
|
-
connectedSuiAccounts,
|
|
75
|
-
selectedAccount,
|
|
76
|
-
connectResult.supportedIntents
|
|
77
|
-
);
|
|
78
|
-
return { accounts: connectedSuiAccounts };
|
|
79
|
-
} catch (error) {
|
|
80
|
-
setConnectionStatus("disconnected");
|
|
81
|
-
throw error;
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
...mutationOptions
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
function getSelectedAccount(connectedAccounts, accountAddress) {
|
|
88
|
-
if (connectedAccounts.length === 0) {
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
if (accountAddress) {
|
|
92
|
-
const selectedAccount = connectedAccounts.find((account) => account.address === accountAddress);
|
|
93
|
-
return selectedAccount ?? connectedAccounts[0];
|
|
94
|
-
}
|
|
95
|
-
return connectedAccounts[0];
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// src/hooks/wallet/useCurrentWallet.ts
|
|
99
|
-
function useCurrentWallet() {
|
|
100
|
-
const currentWallet = useWalletStore((state) => state.currentWallet);
|
|
101
|
-
const connectionStatus = useWalletStore((state) => state.connectionStatus);
|
|
102
|
-
const supportedIntents = useWalletStore((state) => state.supportedIntents);
|
|
103
|
-
switch (connectionStatus) {
|
|
104
|
-
case "connecting":
|
|
105
|
-
return {
|
|
106
|
-
connectionStatus,
|
|
107
|
-
currentWallet: null,
|
|
108
|
-
isDisconnected: false,
|
|
109
|
-
isConnecting: true,
|
|
110
|
-
isConnected: false,
|
|
111
|
-
supportedIntents: []
|
|
112
|
-
};
|
|
113
|
-
case "disconnected":
|
|
114
|
-
return {
|
|
115
|
-
connectionStatus,
|
|
116
|
-
currentWallet: null,
|
|
117
|
-
isDisconnected: true,
|
|
118
|
-
isConnecting: false,
|
|
119
|
-
isConnected: false,
|
|
120
|
-
supportedIntents: []
|
|
121
|
-
};
|
|
122
|
-
case "connected": {
|
|
123
|
-
return {
|
|
124
|
-
connectionStatus,
|
|
125
|
-
currentWallet,
|
|
126
|
-
isDisconnected: false,
|
|
127
|
-
isConnecting: false,
|
|
128
|
-
isConnected: true,
|
|
129
|
-
supportedIntents
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// src/hooks/wallet/useWallets.ts
|
|
136
|
-
function useWallets() {
|
|
137
|
-
return useWalletStore((state) => state.wallets);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// src/hooks/wallet/useAutoConnectWallet.ts
|
|
141
|
-
function useAutoConnectWallet() {
|
|
142
|
-
const { mutateAsync: connectWallet } = useConnectWallet();
|
|
143
|
-
const autoConnectEnabled = useWalletStore((state) => state.autoConnectEnabled);
|
|
144
|
-
const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);
|
|
145
|
-
const lastConnectedAccountAddress = useWalletStore((state) => state.lastConnectedAccountAddress);
|
|
146
|
-
const wallets = useWallets();
|
|
147
|
-
const { isConnected } = useCurrentWallet();
|
|
148
|
-
const [clientOnly, setClientOnly] = useState(false);
|
|
149
|
-
useLayoutEffect(() => {
|
|
150
|
-
setClientOnly(true);
|
|
151
|
-
}, []);
|
|
152
|
-
const { data, isError } = useQuery({
|
|
153
|
-
queryKey: [
|
|
154
|
-
"@mysten/dapp-kit",
|
|
155
|
-
"autoconnect",
|
|
156
|
-
{
|
|
157
|
-
isConnected,
|
|
158
|
-
autoConnectEnabled,
|
|
159
|
-
lastConnectedWalletName,
|
|
160
|
-
lastConnectedAccountAddress,
|
|
161
|
-
walletCount: wallets.length
|
|
162
|
-
}
|
|
163
|
-
],
|
|
164
|
-
queryFn: async () => {
|
|
165
|
-
if (!autoConnectEnabled) {
|
|
166
|
-
return "disabled";
|
|
167
|
-
}
|
|
168
|
-
if (!lastConnectedWalletName || !lastConnectedAccountAddress || isConnected) {
|
|
169
|
-
return "attempted";
|
|
170
|
-
}
|
|
171
|
-
const wallet = wallets.find(
|
|
172
|
-
(wallet2) => getWalletUniqueIdentifier(wallet2) === lastConnectedWalletName
|
|
173
|
-
);
|
|
174
|
-
if (wallet) {
|
|
175
|
-
await connectWallet({
|
|
176
|
-
wallet,
|
|
177
|
-
accountAddress: lastConnectedAccountAddress,
|
|
178
|
-
silent: true
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
return "attempted";
|
|
182
|
-
},
|
|
183
|
-
enabled: autoConnectEnabled,
|
|
184
|
-
persister: void 0,
|
|
185
|
-
gcTime: 0,
|
|
186
|
-
staleTime: 0,
|
|
187
|
-
networkMode: "always",
|
|
188
|
-
retry: false,
|
|
189
|
-
retryOnMount: false,
|
|
190
|
-
refetchInterval: false,
|
|
191
|
-
refetchIntervalInBackground: false,
|
|
192
|
-
refetchOnMount: false,
|
|
193
|
-
refetchOnReconnect: false,
|
|
194
|
-
refetchOnWindowFocus: false
|
|
195
|
-
});
|
|
196
|
-
if (!autoConnectEnabled) {
|
|
197
|
-
return "disabled";
|
|
198
|
-
}
|
|
199
|
-
if (!clientOnly) {
|
|
200
|
-
return "idle";
|
|
201
|
-
}
|
|
202
|
-
if (isConnected) {
|
|
203
|
-
return "attempted";
|
|
204
|
-
}
|
|
205
|
-
if (!lastConnectedWalletName) {
|
|
206
|
-
return "attempted";
|
|
207
|
-
}
|
|
208
|
-
return isError ? "attempted" : data ?? "idle";
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// src/hooks/wallet/useStashedWallet.ts
|
|
212
|
-
function useStashedWallet(config) {
|
|
213
|
-
const status = useAutoConnectWallet();
|
|
214
|
-
const [address, setAddress] = useState2(null);
|
|
215
|
-
const [wallet, setWallet] = useState2(null);
|
|
216
|
-
const { mutate: connect } = useConnectWallet();
|
|
217
|
-
useEffect(() => {
|
|
218
|
-
if (!address || !wallet || status !== "attempted") return;
|
|
219
|
-
connect({ wallet, silent: true });
|
|
220
|
-
setAddress(null);
|
|
221
|
-
}, [address, status, connect, wallet]);
|
|
222
|
-
useLayoutEffect2(() => {
|
|
223
|
-
if (!config?.name) {
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
const { wallet: wallet2, unregister, addressFromRedirect } = registerStashedWallet(config.name, {
|
|
227
|
-
origin: config.origin,
|
|
228
|
-
network: config.network
|
|
229
|
-
});
|
|
230
|
-
if (addressFromRedirect) {
|
|
231
|
-
setWallet(wallet2);
|
|
232
|
-
setAddress(addressFromRedirect);
|
|
233
|
-
}
|
|
234
|
-
return unregister;
|
|
235
|
-
}, [config?.name, config?.origin, config?.network]);
|
|
236
|
-
}
|
|
237
|
-
export {
|
|
238
|
-
useStashedWallet
|
|
239
|
-
};
|
|
240
|
-
//# sourceMappingURL=useStashedWallet.js.map
|