@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.
Files changed (42) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/components/ConnectButton.js +1 -1
  3. package/dist/cjs/components/ConnectButton.js.map +2 -2
  4. package/dist/cjs/components/WalletProvider.d.ts +4 -4
  5. package/dist/cjs/components/WalletProvider.js +31 -28
  6. package/dist/cjs/components/WalletProvider.js.map +4 -4
  7. package/dist/cjs/components/connect-modal/ConnectModal.js +1 -1
  8. package/dist/cjs/components/connect-modal/ConnectModal.js.map +2 -2
  9. package/dist/cjs/constants/walletDefaults.js +2 -2
  10. package/dist/cjs/constants/walletDefaults.js.map +2 -2
  11. package/dist/cjs/hooks/wallet/useSlushWallet.d.ts +5 -0
  12. package/dist/cjs/hooks/wallet/useSlushWallet.js +56 -0
  13. package/dist/cjs/hooks/wallet/useSlushWallet.js.map +7 -0
  14. package/dist/cjs/index.js +31 -28
  15. package/dist/cjs/index.js.map +4 -4
  16. package/dist/esm/components/ConnectButton.js +1 -1
  17. package/dist/esm/components/ConnectButton.js.map +2 -2
  18. package/dist/esm/components/WalletProvider.d.ts +4 -4
  19. package/dist/esm/components/WalletProvider.js +39 -36
  20. package/dist/esm/components/WalletProvider.js.map +4 -4
  21. package/dist/esm/components/connect-modal/ConnectModal.js +1 -1
  22. package/dist/esm/components/connect-modal/ConnectModal.js.map +2 -2
  23. package/dist/esm/constants/walletDefaults.js +2 -2
  24. package/dist/esm/constants/walletDefaults.js.map +2 -2
  25. package/dist/esm/hooks/wallet/useSlushWallet.d.ts +5 -0
  26. package/dist/esm/hooks/wallet/useSlushWallet.js +35 -0
  27. package/dist/esm/hooks/wallet/useSlushWallet.js.map +7 -0
  28. package/dist/esm/index.js +38 -35
  29. package/dist/esm/index.js.map +4 -4
  30. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +4 -4
  33. package/src/components/WalletProvider.tsx +9 -9
  34. package/src/constants/walletDefaults.ts +2 -2
  35. package/src/hooks/wallet/useSlushWallet.ts +44 -0
  36. package/dist/cjs/hooks/wallet/useStashedWallet.d.ts +0 -6
  37. package/dist/cjs/hooks/wallet/useStashedWallet.js +0 -261
  38. package/dist/cjs/hooks/wallet/useStashedWallet.js.map +0 -7
  39. package/dist/esm/hooks/wallet/useStashedWallet.d.ts +0 -6
  40. package/dist/esm/hooks/wallet/useStashedWallet.js +0 -240
  41. package/dist/esm/hooks/wallet/useStashedWallet.js.map +0 -7
  42. 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 { StashedWalletConfig } from '../hooks/wallet/useStashedWallet.js';
18
- import { useStashedWallet } from '../hooks/wallet/useStashedWallet.js';
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 Stashed wallet */
43
- stashedWallet?: StashedWalletConfig;
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
- stashedWallet,
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
- stashedWallet={stashedWallet}
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' | 'stashedWallet' | 'children'
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
- stashedWallet,
104
+ slushWallet,
105
105
  children,
106
106
  }: WalletConnectionManagerProps) {
107
107
  useWalletsChanged(preferredWallets, walletFilter);
108
108
  useWalletPropertiesChanged();
109
- useStashedWallet(stashedWallet);
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 { STASHED_WALLET_NAME } from '@mysten/zksend';
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, STASHED_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,6 +0,0 @@
1
- export interface StashedWalletConfig {
2
- name: string;
3
- network?: 'mainnet' | 'testnet';
4
- origin?: string;
5
- }
6
- export declare function useStashedWallet(config?: StashedWalletConfig): void;
@@ -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,6 +0,0 @@
1
- export interface StashedWalletConfig {
2
- name: string;
3
- network?: 'mainnet' | 'testnet';
4
- origin?: string;
5
- }
6
- export declare function useStashedWallet(config?: StashedWalletConfig): void;
@@ -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