@mysten/dapp-kit 0.11.0 → 0.12.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 (36) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/cjs/components/WalletProvider.d.ts +4 -1
  3. package/dist/cjs/components/WalletProvider.js +43 -6
  4. package/dist/cjs/components/WalletProvider.js.map +4 -4
  5. package/dist/cjs/constants/walletDefaults.d.ts +1 -0
  6. package/dist/cjs/constants/walletDefaults.js +3 -0
  7. package/dist/cjs/constants/walletDefaults.js.map +2 -2
  8. package/dist/cjs/hooks/useSuiClientInfiniteQuery.d.ts +1 -0
  9. package/dist/cjs/hooks/useSuiClientInfiniteQuery.js +1 -1
  10. package/dist/cjs/hooks/useSuiClientInfiniteQuery.js.map +2 -2
  11. package/dist/cjs/hooks/wallet/useZkSendWallet.d.ts +5 -0
  12. package/dist/cjs/hooks/wallet/useZkSendWallet.js +251 -0
  13. package/dist/cjs/hooks/wallet/useZkSendWallet.js.map +7 -0
  14. package/dist/cjs/index.js +44 -7
  15. package/dist/cjs/index.js.map +4 -4
  16. package/dist/esm/components/WalletProvider.d.ts +4 -1
  17. package/dist/esm/components/WalletProvider.js +41 -4
  18. package/dist/esm/components/WalletProvider.js.map +4 -4
  19. package/dist/esm/constants/walletDefaults.d.ts +1 -0
  20. package/dist/esm/constants/walletDefaults.js +5 -0
  21. package/dist/esm/constants/walletDefaults.js.map +3 -3
  22. package/dist/esm/hooks/useSuiClientInfiniteQuery.d.ts +1 -0
  23. package/dist/esm/hooks/useSuiClientInfiniteQuery.js +1 -1
  24. package/dist/esm/hooks/useSuiClientInfiniteQuery.js.map +2 -2
  25. package/dist/esm/hooks/wallet/useZkSendWallet.d.ts +5 -0
  26. package/dist/esm/hooks/wallet/useZkSendWallet.js +230 -0
  27. package/dist/esm/hooks/wallet/useZkSendWallet.js.map +7 -0
  28. package/dist/esm/index.js +42 -5
  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 -3
  33. package/src/components/WalletProvider.tsx +17 -10
  34. package/src/constants/walletDefaults.ts +3 -0
  35. package/src/hooks/useSuiClientInfiniteQuery.ts +4 -2
  36. package/src/hooks/wallet/useZkSendWallet.ts +49 -0
@@ -0,0 +1,251 @@
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/useZkSendWallet.ts
21
+ var useZkSendWallet_exports = {};
22
+ __export(useZkSendWallet_exports, {
23
+ useZkSendWallet: () => useZkSendWallet
24
+ });
25
+ module.exports = __toCommonJS(useZkSendWallet_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
+ signTransactionBlock: formMutationKeyFn("sign-transaction-block"),
50
+ signAndExecuteTransactionBlock: formMutationKeyFn("sign-and-execute-transaction-block"),
51
+ switchAccount: formMutationKeyFn("switch-account")
52
+ };
53
+ function formMutationKeyFn(baseEntity) {
54
+ return function mutationKeyFn(additionalKeys = []) {
55
+ return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];
56
+ };
57
+ }
58
+
59
+ // src/hooks/wallet/useWalletStore.ts
60
+ var import_react2 = require("react");
61
+ var import_zustand = require("zustand");
62
+
63
+ // src/contexts/walletContext.ts
64
+ var import_react = require("react");
65
+ var WalletContext = (0, import_react.createContext)(null);
66
+
67
+ // src/hooks/wallet/useWalletStore.ts
68
+ function useWalletStore(selector) {
69
+ const store = (0, import_react2.useContext)(WalletContext);
70
+ if (!store) {
71
+ throw new Error(
72
+ "Could not find WalletContext. Ensure that you have set up the WalletProvider."
73
+ );
74
+ }
75
+ return (0, import_zustand.useStore)(store, selector);
76
+ }
77
+
78
+ // src/hooks/wallet/useConnectWallet.ts
79
+ function useConnectWallet({
80
+ mutationKey,
81
+ ...mutationOptions
82
+ } = {}) {
83
+ const setWalletConnected = useWalletStore((state) => state.setWalletConnected);
84
+ const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);
85
+ return (0, import_react_query.useMutation)({
86
+ mutationKey: walletMutationKeys.connectWallet(mutationKey),
87
+ mutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {
88
+ try {
89
+ setConnectionStatus("connecting");
90
+ const connectResult = await wallet.features["standard:connect"].connect(connectArgs);
91
+ const connectedSuiAccounts = connectResult.accounts.filter(
92
+ (account) => account.chains.some((chain) => chain.split(":")[0] === "sui")
93
+ );
94
+ const selectedAccount = getSelectedAccount(connectedSuiAccounts, accountAddress);
95
+ setWalletConnected(wallet, connectedSuiAccounts, selectedAccount);
96
+ return { accounts: connectedSuiAccounts };
97
+ } catch (error) {
98
+ setConnectionStatus("disconnected");
99
+ throw error;
100
+ }
101
+ },
102
+ ...mutationOptions
103
+ });
104
+ }
105
+ function getSelectedAccount(connectedAccounts, accountAddress) {
106
+ if (connectedAccounts.length === 0) {
107
+ return null;
108
+ }
109
+ if (accountAddress) {
110
+ const selectedAccount = connectedAccounts.find((account) => account.address === accountAddress);
111
+ return selectedAccount ?? connectedAccounts[0];
112
+ }
113
+ return connectedAccounts[0];
114
+ }
115
+
116
+ // src/hooks/wallet/useCurrentWallet.ts
117
+ function useCurrentWallet() {
118
+ const currentWallet = useWalletStore((state) => state.currentWallet);
119
+ const connectionStatus = useWalletStore((state) => state.connectionStatus);
120
+ switch (connectionStatus) {
121
+ case "connecting":
122
+ return {
123
+ connectionStatus,
124
+ currentWallet: null,
125
+ isDisconnected: false,
126
+ isConnecting: true,
127
+ isConnected: false
128
+ };
129
+ case "disconnected":
130
+ return {
131
+ connectionStatus,
132
+ currentWallet: null,
133
+ isDisconnected: true,
134
+ isConnecting: false,
135
+ isConnected: false
136
+ };
137
+ case "connected": {
138
+ return {
139
+ connectionStatus,
140
+ currentWallet,
141
+ isDisconnected: false,
142
+ isConnecting: false,
143
+ isConnected: true
144
+ };
145
+ }
146
+ }
147
+ }
148
+
149
+ // src/hooks/wallet/useWallets.ts
150
+ function useWallets() {
151
+ return useWalletStore((state) => state.wallets);
152
+ }
153
+
154
+ // src/hooks/wallet/useAutoConnectWallet.ts
155
+ function useAutoConnectWallet() {
156
+ const { mutateAsync: connectWallet } = useConnectWallet();
157
+ const autoConnectEnabled = useWalletStore((state) => state.autoConnectEnabled);
158
+ const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);
159
+ const lastConnectedAccountAddress = useWalletStore((state) => state.lastConnectedAccountAddress);
160
+ const wallets = useWallets();
161
+ const { isConnected } = useCurrentWallet();
162
+ const [clientOnly, setClientOnly] = (0, import_react3.useState)(false);
163
+ (0, import_react3.useLayoutEffect)(() => {
164
+ setClientOnly(true);
165
+ }, []);
166
+ const { data, isError } = (0, import_react_query2.useQuery)({
167
+ queryKey: [
168
+ "@mysten/dapp-kit",
169
+ "autoconnect",
170
+ {
171
+ isConnected,
172
+ autoConnectEnabled,
173
+ lastConnectedWalletName,
174
+ lastConnectedAccountAddress,
175
+ walletCount: wallets.length
176
+ }
177
+ ],
178
+ queryFn: async () => {
179
+ if (!autoConnectEnabled) {
180
+ return "disabled";
181
+ }
182
+ if (!lastConnectedWalletName || !lastConnectedAccountAddress || isConnected) {
183
+ return "attempted";
184
+ }
185
+ const wallet = wallets.find(
186
+ (wallet2) => getWalletUniqueIdentifier(wallet2) === lastConnectedWalletName
187
+ );
188
+ if (wallet) {
189
+ await connectWallet({
190
+ wallet,
191
+ accountAddress: lastConnectedAccountAddress,
192
+ silent: true
193
+ });
194
+ }
195
+ return "attempted";
196
+ },
197
+ enabled: autoConnectEnabled,
198
+ persister: void 0,
199
+ gcTime: 0,
200
+ staleTime: 0,
201
+ networkMode: "always",
202
+ retry: false,
203
+ retryOnMount: false,
204
+ refetchInterval: false,
205
+ refetchIntervalInBackground: false,
206
+ refetchOnMount: false,
207
+ refetchOnReconnect: false,
208
+ refetchOnWindowFocus: false
209
+ });
210
+ if (!autoConnectEnabled) {
211
+ return "disabled";
212
+ }
213
+ if (!clientOnly) {
214
+ return "idle";
215
+ }
216
+ if (isConnected) {
217
+ return "attempted";
218
+ }
219
+ if (!lastConnectedWalletName) {
220
+ return "attempted";
221
+ }
222
+ return isError ? "attempted" : data ?? "idle";
223
+ }
224
+
225
+ // src/hooks/wallet/useZkSendWallet.ts
226
+ function useZkSendWallet(config) {
227
+ const status = useAutoConnectWallet();
228
+ const [address, setAddress] = (0, import_react4.useState)(null);
229
+ const [wallet, setWallet] = (0, import_react4.useState)(null);
230
+ const { mutate: connect } = useConnectWallet();
231
+ (0, import_react4.useEffect)(() => {
232
+ if (!address || !wallet || status !== "attempted")
233
+ return;
234
+ connect({ wallet, silent: true });
235
+ setAddress(null);
236
+ }, [address, status, connect, wallet]);
237
+ (0, import_react4.useLayoutEffect)(() => {
238
+ if (!config?.name) {
239
+ return;
240
+ }
241
+ const { wallet: wallet2, unregister, addressFromRedirect } = (0, import_zksend.registerZkSendWallet)(config.name, {
242
+ origin: config.origin
243
+ });
244
+ if (addressFromRedirect) {
245
+ setWallet(wallet2);
246
+ setAddress(addressFromRedirect);
247
+ }
248
+ return unregister;
249
+ }, [config?.name, config?.origin]);
250
+ }
251
+ //# sourceMappingURL=useZkSendWallet.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/hooks/wallet/useZkSendWallet.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 { ZkSendWallet } from '@mysten/zksend';\nimport { registerZkSendWallet } from '@mysten/zksend';\nimport { useEffect, useLayoutEffect, useState } from 'react';\n\nimport { useAutoConnectWallet } from './useAutoConnectWallet.js';\nimport { useConnectWallet } from './useConnectWallet.js';\n\nexport interface ZkSendWalletConfig {\n\tname: string;\n\torigin?: string;\n}\n\nexport function useZkSendWallet(config?: ZkSendWalletConfig) {\n\tconst status = useAutoConnectWallet();\n\tconst [address, setAddress] = useState<string | null>(null);\n\tconst [wallet, setWallet] = useState<ZkSendWallet | 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 } = registerZkSendWallet(config.name, {\n\t\t\torigin: config.origin,\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]);\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} from '@mysten/wallet-standard';\nimport { getWallets, isWalletWithRequiredFeatureSet } from '@mysten/wallet-standard';\n\nexport function getRegisteredWallets<AdditionalFeatures extends Wallet['features']>(\n\tpreferredWallets: string[],\n\trequiredFeatures?: (keyof AdditionalFeatures)[],\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, requiredFeatures),\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(wallet, connectedSuiAccounts, selectedAccount);\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\tsignTransactionBlock: formMutationKeyFn('sign-transaction-block'),\n\tsignAndExecuteTransactionBlock: formMutationKeyFn('sign-and-execute-transaction-block'),\n\tswitchAccount: formMutationKeyFn('switch-account'),\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\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} 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} 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} 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
+ }
package/dist/cjs/index.js CHANGED
@@ -937,7 +937,10 @@ function ConnectButton({
937
937
  }
938
938
 
939
939
  // src/components/WalletProvider.tsx
940
- var import_react15 = require("react");
940
+ var import_react16 = require("react");
941
+
942
+ // src/constants/walletDefaults.ts
943
+ var import_zksend = require("@mysten/zksend");
941
944
 
942
945
  // src/utils/stateStorage.ts
943
946
  function createInMemoryStore() {
@@ -962,6 +965,7 @@ var DEFAULT_STORAGE_KEY = "sui-dapp-kit:wallet-connection-info";
962
965
  var DEFAULT_REQUIRED_FEATURES = [
963
966
  "sui:signTransactionBlock"
964
967
  ];
968
+ var DEFAULT_PREFERRED_WALLETS = [SUI_WALLET_NAME, import_zksend.ZKSEND_WALLET_NAME];
965
969
 
966
970
  // src/hooks/wallet/useAutoConnectWallet.ts
967
971
  var import_react_query5 = require("@tanstack/react-query");
@@ -1194,6 +1198,35 @@ function useWalletsChanged(preferredWallets, requiredFeatures) {
1194
1198
  }, [preferredWallets, requiredFeatures, setWalletRegistered, setWalletUnregistered]);
1195
1199
  }
1196
1200
 
1201
+ // src/hooks/wallet/useZkSendWallet.ts
1202
+ var import_zksend2 = require("@mysten/zksend");
1203
+ var import_react15 = require("react");
1204
+ function useZkSendWallet(config) {
1205
+ const status = useAutoConnectWallet();
1206
+ const [address, setAddress] = (0, import_react15.useState)(null);
1207
+ const [wallet, setWallet] = (0, import_react15.useState)(null);
1208
+ const { mutate: connect } = useConnectWallet();
1209
+ (0, import_react15.useEffect)(() => {
1210
+ if (!address || !wallet || status !== "attempted")
1211
+ return;
1212
+ connect({ wallet, silent: true });
1213
+ setAddress(null);
1214
+ }, [address, status, connect, wallet]);
1215
+ (0, import_react15.useLayoutEffect)(() => {
1216
+ if (!config?.name) {
1217
+ return;
1218
+ }
1219
+ const { wallet: wallet2, unregister, addressFromRedirect } = (0, import_zksend2.registerZkSendWallet)(config.name, {
1220
+ origin: config.origin
1221
+ });
1222
+ if (addressFromRedirect) {
1223
+ setWallet(wallet2);
1224
+ setAddress(addressFromRedirect);
1225
+ }
1226
+ return unregister;
1227
+ }, [config?.name, config?.origin]);
1228
+ }
1229
+
1197
1230
  // src/themes/lightTheme.ts
1198
1231
  var lightTheme = {
1199
1232
  blurs: {
@@ -1439,16 +1472,17 @@ function cssStringFromTheme(theme) {
1439
1472
  // src/components/WalletProvider.tsx
1440
1473
  var import_jsx_runtime22 = require("react/jsx-runtime");
1441
1474
  function WalletProvider({
1442
- preferredWallets = [SUI_WALLET_NAME],
1475
+ preferredWallets = DEFAULT_PREFERRED_WALLETS,
1443
1476
  requiredFeatures = DEFAULT_REQUIRED_FEATURES,
1444
1477
  storage = DEFAULT_STORAGE,
1445
1478
  storageKey = DEFAULT_STORAGE_KEY,
1446
1479
  enableUnsafeBurner = false,
1447
1480
  autoConnect = false,
1481
+ zkSend,
1448
1482
  theme = lightTheme,
1449
1483
  children
1450
1484
  }) {
1451
- const storeRef = (0, import_react15.useRef)(
1485
+ const storeRef = (0, import_react16.useRef)(
1452
1486
  createWalletStore({
1453
1487
  autoConnectEnabled: autoConnect,
1454
1488
  wallets: getRegisteredWallets(preferredWallets, requiredFeatures),
@@ -1462,6 +1496,7 @@ function WalletProvider({
1462
1496
  preferredWallets,
1463
1497
  requiredFeatures,
1464
1498
  enableUnsafeBurner,
1499
+ zkSend,
1465
1500
  children: [
1466
1501
  theme ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(InjectedThemeStyles, { theme }) : null,
1467
1502
  children
@@ -1470,13 +1505,15 @@ function WalletProvider({
1470
1505
  ) });
1471
1506
  }
1472
1507
  function WalletConnectionManager({
1473
- preferredWallets,
1474
- requiredFeatures,
1475
- enableUnsafeBurner,
1508
+ preferredWallets = DEFAULT_PREFERRED_WALLETS,
1509
+ requiredFeatures = DEFAULT_REQUIRED_FEATURES,
1510
+ enableUnsafeBurner = false,
1511
+ zkSend,
1476
1512
  children
1477
1513
  }) {
1478
1514
  useWalletsChanged(preferredWallets, requiredFeatures);
1479
1515
  useWalletPropertiesChanged();
1516
+ useZkSendWallet(zkSend);
1480
1517
  useUnsafeBurnerWallet(enableUnsafeBurner);
1481
1518
  useAutoConnectWallet();
1482
1519
  return children;
@@ -1524,7 +1561,7 @@ function useSuiClientInfiniteQuery(method, params, {
1524
1561
  ...params ?? {},
1525
1562
  cursor: pageParam
1526
1563
  }),
1527
- getNextPageParam: ({ nextCursor }) => nextCursor ?? null
1564
+ getNextPageParam: (lastPage) => lastPage.hasNextPage ? lastPage.nextCursor ?? null : null
1528
1565
  });
1529
1566
  }
1530
1567