@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.
- package/CHANGELOG.md +48 -0
- package/dist/cjs/components/WalletProvider.d.ts +4 -1
- package/dist/cjs/components/WalletProvider.js +43 -6
- package/dist/cjs/components/WalletProvider.js.map +4 -4
- package/dist/cjs/constants/walletDefaults.d.ts +1 -0
- package/dist/cjs/constants/walletDefaults.js +3 -0
- package/dist/cjs/constants/walletDefaults.js.map +2 -2
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.d.ts +1 -0
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.js +1 -1
- package/dist/cjs/hooks/useSuiClientInfiniteQuery.js.map +2 -2
- package/dist/cjs/hooks/wallet/useZkSendWallet.d.ts +5 -0
- package/dist/cjs/hooks/wallet/useZkSendWallet.js +251 -0
- package/dist/cjs/hooks/wallet/useZkSendWallet.js.map +7 -0
- package/dist/cjs/index.js +44 -7
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/components/WalletProvider.d.ts +4 -1
- package/dist/esm/components/WalletProvider.js +41 -4
- package/dist/esm/components/WalletProvider.js.map +4 -4
- package/dist/esm/constants/walletDefaults.d.ts +1 -0
- package/dist/esm/constants/walletDefaults.js +5 -0
- package/dist/esm/constants/walletDefaults.js.map +3 -3
- package/dist/esm/hooks/useSuiClientInfiniteQuery.d.ts +1 -0
- package/dist/esm/hooks/useSuiClientInfiniteQuery.js +1 -1
- package/dist/esm/hooks/useSuiClientInfiniteQuery.js.map +2 -2
- package/dist/esm/hooks/wallet/useZkSendWallet.d.ts +5 -0
- package/dist/esm/hooks/wallet/useZkSendWallet.js +230 -0
- package/dist/esm/hooks/wallet/useZkSendWallet.js.map +7 -0
- package/dist/esm/index.js +42 -5
- 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 -3
- package/src/components/WalletProvider.tsx +17 -10
- package/src/constants/walletDefaults.ts +3 -0
- package/src/hooks/useSuiClientInfiniteQuery.ts +4 -2
- 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
|
|
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 =
|
|
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,
|
|
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: (
|
|
1564
|
+
getNextPageParam: (lastPage) => lastPage.hasNextPage ? lastPage.nextCursor ?? null : null
|
|
1528
1565
|
});
|
|
1529
1566
|
}
|
|
1530
1567
|
|